﻿/* 去掉移动端点击时的蓝色高亮块 */
*,*::before,*::after{box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
html{-webkit-tap-highlight-color:transparent;}
a,button,input,select,textarea,label,summary{-webkit-tap-highlight-color:transparent;}
a:focus,button:focus,input:focus{outline:0;}
a:focus-visible,button:focus-visible{outline:2px solid #c1502e;outline-offset:2px;}
/* ===========================================================
   自测工具站 —— 样式
   =========================================================== */

:root{
  --ink:#2b2622;
  --ink2:#4c453e;
  --muted:#8b837a;
  --line:#ece5dc;
  --bg:#fbf8f4;
  --card:#ffffff;
  --radius:14px;
  --shadow:0 1px 2px rgba(20,20,35,.04),0 6px 18px -8px rgba(20,20,35,.12);
  --font:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
}

*,*::before,*::after{box-sizing:border-box;}
body{
  margin:0;background:var(--bg);color:var(--ink);
  font-family:var(--font);font-size:15px;line-height:1.65;
  -webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;
}
a{color:inherit;text-decoration:none;}
img,svg{display:block;max-width:100%;}
.wrap{width:100%;max-width:760px;margin:0 auto;padding:0 16px;}

/* ---------- 顶部 ---------- */
.head{
  position:sticky;top:0;z-index:60;background:rgba(255,255,255,.94);
  backdrop-filter:saturate(180%) blur(12px);-webkit-backdrop-filter:saturate(180%) blur(12px);
  border-bottom:1px solid var(--line);
}
.head .wrap{height:52px;display:flex;align-items:center;justify-content:space-between;gap:12px;}
.brand{display:flex;align-items:center;gap:8px;font-weight:700;font-size:15px;}
.brand i{
  width:26px;height:26px;border-radius:8px;flex:0 0 auto;display:grid;place-items:center;
  background:#c1502e;color:#fff;font-style:normal;
  font-size:13px;font-weight:800;
}
.head nav{display:flex;gap:16px;font-size:13px;color:var(--muted);}
.head nav a:hover{color:var(--ink);}

/* ---------- 首页头图 ---------- */
.hero{
  background:linear-gradient(135deg,#f7e6d6 0%,#fbeade 45%,#fdf6ef 100%);
  color:#2b2622;padding:32px 0 28px;position:relative;overflow:hidden;border-bottom:1px solid var(--line);
}
.hero::after{
  content:"";position:absolute;width:260px;height:260px;border-radius:50%;
  background:rgba(193,80,46,.07);top:-120px;right:-70px;
}
.hero .wrap{position:relative;z-index:1;}
.hero h1{font-size:clamp(26px,5.4vw,36px);line-height:1.25;margin:0 0 8px;font-weight:800;letter-spacing:-.5px;}
.hero p{margin:0;font-size:13.5px;line-height:1.7;color:#7a6f64;max-width:520px;}
.hero-sub{font-size:13px !important;color:#8b8075 !important;margin-top:-2px !important;}
.hero .tags{display:flex;gap:14px;margin-top:16px;font-size:12px;color:#7a6f64;}
.hero .tags b{font-size:17px;font-weight:800;display:block;line-height:1.2;}

/* ---------- 分类 ---------- */
.cats{
  display:flex;flex-wrap:wrap;gap:8px;padding:14px 0 4px;
}
.cats button{
  flex:0 0 auto;font-family:inherit;font-size:13px;font-weight:600;color:var(--ink2);
  background:#fff;border:1px solid var(--line);border-radius:999px;
  padding:7px 15px;cursor:pointer;transition:.15s;
}
.cats button:hover{border-color:#d8d8e6;}
.cats button.on{background:#16161d;border-color:#16161d;color:#fff;}

/* ---------- 卡片网格 ---------- */
.grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:14px 0 8px;}
@media(min-width:640px){.grid{grid-template-columns:repeat(3,1fr);gap:14px;}}

.tc{
  background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:14px 13px 12px;box-shadow:var(--shadow);position:relative;
  transition:transform .16s ease,box-shadow .16s ease;
  display:flex;flex-direction:column;
}
.tc:hover{transform:translateY(-2px);box-shadow:0 2px 4px rgba(20,20,35,.05),0 14px 26px -12px rgba(20,20,35,.22);}
.tc .ico{
  width:38px;height:38px;border-radius:11px;display:grid;place-items:center;
  font-size:19px;margin-bottom:10px;
}
.tc h3{margin:0 0 5px;font-size:14.5px;font-weight:700;letter-spacing:-.2px;}
.tc p{margin:0 0 10px;font-size:12px;line-height:1.6;color:var(--muted);flex:1;}
.tc .m{display:flex;gap:6px;flex-wrap:wrap;}
.tc .m span{
  font-size:11px;color:var(--ink2);background:#f3f3f8;border-radius:5px;padding:2px 7px;
}

/* 分类配色 */
.c1 .ico{background:#eef0ff;color:#5b5bd6;}
.c2 .ico{background:#e8f1ec;color:#2f6b53;}
.c3 .ico{background:#f2ebe7;color:#8a5a44;}
.c4 .ico{background:#f3eee1;color:#8a6a22;}
.c5 .ico{background:#ece8e2;color:#5a5470;}
.c6 .ico{background:#f4e7e3;color:#8a4a3c;}

/* ---------- 通用 ---------- */
.sec-title{
  display:flex;align-items:baseline;justify-content:space-between;
  margin:22px 0 2px;
}
.sec-title h2{font-size:16px;margin:0;font-weight:750;letter-spacing:-.2px;}
.sec-title span{font-size:12px;color:var(--muted);}

.tip{
  display:flex;gap:9px;align-items:flex-start;
  font-size:12.5px;line-height:1.65;color:var(--ink2);
  background:#fff;border:1px solid var(--line);border-radius:12px;
  padding:12px 13px;margin-top:14px;
}
.tip b{color:var(--ink);flex:0 0 auto;white-space:nowrap;}
.tip span{flex:1;min-width:0;}

/* ---------- 测试页 ---------- */
.panel{
  background:#fff;border:1px solid var(--line);border-radius:16px;
  padding:22px 18px;box-shadow:var(--shadow);margin:16px 0;
}
.panel h1{font-size:21px;line-height:1.4;margin:0 0 8px;font-weight:800;letter-spacing:-.3px;}
.panel .sub{color:var(--muted);font-size:13px;margin:0 0 14px;}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 16px;padding:0;list-style:none;}
.chips li{font-size:11.5px;color:var(--ink2);background:#f3f3f8;border-radius:5px;padding:3px 8px;}
.panel .desc{font-size:14px;color:var(--ink2);line-height:1.8;margin:0 0 18px;}
.panel .desc p{margin:0 0 10px;}
.panel .desc p:last-child{margin:0;}

.btn{
  display:flex;width:100%;align-items:center;justify-content:center;
  font-family:inherit;font-size:15px;font-weight:700;color:#fff;
  border:0;border-radius:12px;padding:13px;cursor:pointer;
  background:#2b2622;
  box-shadow:0 8px 18px -8px rgba(193,80,46,.8);
  transition:transform .14s ease,box-shadow .14s ease;
  -webkit-tap-highlight-color:transparent;
}
.btn:active{transform:scale(.99);}
.btn-ghost{
  display:flex;width:100%;align-items:center;justify-content:center;
  font-family:inherit;font-size:14px;font-weight:600;color:var(--ink2);
  background:#fff;border:1px solid var(--line);border-radius:12px;
  padding:12px;cursor:pointer;transition:.15s;
  -webkit-tap-highlight-color:transparent;
}
.btn-ghost:hover{border-color:#d8d8e6;color:var(--ink);}
.btn-ghost:active{background:#f7f7fb;}

/* ---------- 答题 ---------- */
.qhead{position:sticky;top:52px;z-index:50;background:rgba(245,246,250,.95);backdrop-filter:blur(10px);padding:10px 0 8px;}
.bar{height:6px;border-radius:99px;background:#e6e6ee;overflow:hidden;}
.bar i{display:block;height:100%;border-radius:99px;background:#c1502e;transition:width .3s ease;}
.qmeta{display:flex;justify-content:space-between;font-size:12px;color:var(--muted);margin-top:7px;}
.qmeta b{color:#c1502e;font-weight:800;}

.qcard{
  background:#fff;border:1px solid var(--line);border-radius:16px;
  padding:26px 18px 22px;box-shadow:var(--shadow);margin:14px 0 12px;
  animation:up .3s cubic-bezier(.22,1,.36,1) both;
}
@keyframes up{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:none;}}
.qno{font-size:11.5px;color:var(--muted);letter-spacing:.5px;margin-bottom:10px;}
.qtext{font-size:19px;line-height:1.65;font-weight:650;margin:0 0 22px;letter-spacing:-.2px;}

.opts{display:grid;gap:8px;}
.opt{
  display:flex;align-items:center;gap:11px;width:100%;text-align:left;
  font-family:inherit;font-size:14.5px;color:var(--ink);
  background:#fff;border:1.5px solid var(--line);border-radius:11px;
  padding:13px 14px;cursor:pointer;transition:.13s;
  -webkit-tap-highlight-color:transparent;
}
.opt:hover{border-color:#d8d8e6;background:#fcfcff;}
.opt .dot{width:18px;height:18px;border-radius:50%;border:2px solid #d5d5e2;flex:0 0 auto;position:relative;transition:.13s;}
.opt.on{border-color:#c1502e;background:#fdf0ea;}
.opt.on .dot{border-color:#c1502e;}
.opt.on .dot::after{content:"";position:absolute;inset:3px;border-radius:50%;background:#c1502e;}

.bin-opts{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.bin{
  display:flex;flex-direction:column;align-items:center;gap:8px;
  font-family:inherit;font-size:15px;font-weight:700;color:var(--ink);
  background:#fff;border:1.5px solid var(--line);border-radius:14px;
  padding:20px 8px;cursor:pointer;transition:.13s;
  -webkit-tap-highlight-color:transparent;
}
.bin span.i{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;font-size:16px;background:#f3f3f8;color:#a0a0b4;transition:.13s;}
.bin.on{border-color:#c1502e;background:#fdf0ea;}
.bin.on span.i{background:#c1502e;color:#fff;}
.bin.no.on{border-color:#b4b4c6;background:#f4f4f8;}
.bin.no.on span.i{background:#7c7c92;}

.rowopts{display:flex;gap:5px;}
.rnum{
  flex:1;min-width:0;height:48px;font-family:inherit;font-size:14px;font-weight:700;
  color:var(--ink2);background:#fff;border:1.5px solid var(--line);border-radius:11px;
  cursor:pointer;transition:.13s;-webkit-tap-highlight-color:transparent;
}
.rnum:hover{border-color:#d8d8e6;}
.rnum.on{background:#2b2622;border-color:transparent;color:#fff;}
.ends{display:flex;justify-content:space-between;gap:14px;font-size:11.5px;color:var(--muted);margin-top:9px;}
.ends span:last-child{text-align:right;}

.qnav{display:flex;justify-content:space-between;align-items:center;gap:12px;padding-bottom:10px;}
.qnav .btn-ghost{width:auto;padding:9px 16px;font-size:13px;}
.qnav em{font-style:normal;font-size:11.5px;color:var(--muted);}

/* ---------- 结果 ---------- */
.rhero{
  text-align:center;padding:26px 0 6px;
  animation:up .4s cubic-bezier(.22,1,.36,1) both;
}
.rk{font-size:11.5px;letter-spacing:1.2px;color:var(--muted);margin-bottom:10px;}
.rt{
  font-size:30px;font-weight:800;letter-spacing:-1px;line-height:1.35;margin:0 0 10px;color:#2b2622;
}
.rs{font-size:13.5px;color:var(--ink2);line-height:1.75;max-width:540px;margin:0 auto;}
.rs strong{color:var(--ink);}

.card2{background:#fff;border:1px solid var(--line);border-radius:14px;padding:18px 16px;box-shadow:var(--shadow);margin:12px 0;}
.card2 > h3{
  font-size:14px;margin:0 0 14px;font-weight:750;
  display:flex;align-items:center;gap:7px;
}
.card2 > h3::before{content:"";width:3px;height:14px;border-radius:2px;background:linear-gradient(180deg,#c1502e,#c1502e);}

.chart{padding:4px 0;display:grid;place-items:center;}
.chart svg{width:100%;max-width:400px;height:auto;}

.dims{display:grid;gap:14px;}
.drow .dt{display:flex;justify-content:space-between;font-size:13.5px;margin-bottom:6px;}
.drow .dn{font-weight:650;}
.drow .dv{color:var(--muted);font-size:12px;font-weight:700;font-variant-numeric:tabular-nums;}
.dbar{height:7px;border-radius:99px;background:#f0f0f5;overflow:hidden;}
.dbar i{display:block;height:100%;border-radius:99px;transform-origin:left;animation:grow .7s cubic-bezier(.22,1,.36,1) both;}
@keyframes grow{from{transform:scaleX(0);}to{transform:scaleX(1);}}
.dnote{font-size:12.5px;color:var(--muted);margin-top:6px;line-height:1.7;}

.prose p{font-size:13.5px;line-height:1.85;color:var(--ink2);margin:0 0 10px;}
.prose p:last-child{margin:0;}
.prose strong{color:var(--ink);font-weight:650;}

.ul{list-style:none;margin:0;padding:0;display:grid;gap:9px;}
.ul li{position:relative;padding-left:17px;font-size:13.5px;line-height:1.75;color:var(--ink2);}
.ul li::before{content:"";position:absolute;left:2px;top:.6em;width:5px;height:5px;border-radius:50%;background:#c9c9dd;}

.acts{display:flex;gap:8px;flex-wrap:wrap;margin:16px 0 8px;}
.acts .btn{flex:2 1 140px;font-size:14px;padding:12px;}
.acts .btn-ghost{flex:1 1 100px;padding:12px;font-size:13.5px;}

.fnote{font-size:12px;color:var(--muted);line-height:1.8;padding-top:12px;border-top:1px dashed var(--line);}

/* ---------- 页脚 ---------- */
.foot{
  margin-top:40px;padding:24px 0 34px;border-top:1px solid var(--line);
  font-size:12px;color:var(--muted);line-height:1.8;
}
.foot .lk{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:7px 10px;margin-bottom:12px;}
.foot .lk a{white-space:nowrap;}
.foot .lk a:hover{color:var(--ink);}
.foot .fine{font-size:11px;color:#b3aca2;margin-top:6px;}
.foot .foot-site{font-size:12px;color:#a49b90;margin-bottom:6px;}

/* ---------- 文档页 ---------- */
.doc{font-size:13.5px;color:var(--ink2);line-height:1.9;}
.doc h2{font-size:15.5px;color:var(--ink);margin:24px 0 8px;letter-spacing:-.2px;}
.doc h2:first-child{margin-top:0;}
.doc p{margin:0 0 10px;}
.doc ul{padding-left:18px;margin:0 0 12px;}
.doc li{margin-bottom:5px;}
.doc code{background:#f3f3f8;padding:1px 5px;border-radius:4px;font-size:12px;color:#4b4b6a;}
.doc table{width:100%;border-collapse:collapse;margin:6px 0 16px;font-size:12px;line-height:1.6;}
.doc th,.doc td{border:1px solid var(--line);padding:7px 8px;text-align:left;vertical-align:top;}
.doc th{background:#f8f8fc;font-weight:700;font-size:11.5px;white-space:nowrap;color:var(--ink);}
@media(max-width:600px){
  .doc table,.doc thead,.doc tbody,.doc tr,.doc td{display:block;}
  .doc table{border:0;}
  .doc thead{display:none;}
  .doc tr{padding:10px 0;border-bottom:1px dashed var(--line);}
  .doc tr:last-child{border-bottom:0;}
  .doc td{border:0;padding:2px 0;}
  .doc td::before{content:attr(data-label) "：";color:var(--muted);font-size:11px;}
  .doc td:first-child{font-weight:700;color:var(--ink);font-size:13px;}
  .doc td:first-child::before{content:"";}
}

.toast{
  position:fixed;left:50%;bottom:28px;transform:translate(-50%,16px);
  background:#16161d;color:#fff;font-size:13px;padding:10px 18px;border-radius:10px;
  opacity:0;pointer-events:none;transition:.22s;z-index:200;max-width:80vw;text-align:center;
}
.toast.on{opacity:1;transform:translate(-50%,0);}

.hide{display:none !important;}

@media(max-width:360px){
  .grid{grid-template-columns:1fr;}
}

@media(prefers-reduced-motion:reduce){
  *{animation-duration:.001ms !important;transition-duration:.001ms !important;}
}

/* 结果表格（Klein 方格） */
.mtable{width:100%;border-collapse:collapse;font-size:12.5px;margin:4px 0 10px;}
.mtable th,.mtable td{border-bottom:1px solid var(--line);padding:8px 6px;text-align:center;}
.mtable th:first-child,.mtable td:first-child{text-align:left;color:var(--ink2);}
.mtable th{font-size:11.5px;font-weight:700;color:var(--muted);}
.mtable td b{color:#c1502e;font-size:13.5px;}
/* ==================== 交互测试 ==================== */
.stage{margin:16px 0;animation:up .3s cubic-bezier(.22,1,.36,1) both;}
.bigres{text-align:center;padding:18px 0 10px;}
.bigres b{display:block;font-size:56px;font-weight:800;line-height:1.1;letter-spacing:-2px;color:#2b2622;}
.bigres span{display:block;font-size:12.5px;color:var(--muted);margin-top:6px;}

.hit{
  border-radius:18px;min-height:320px;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:8px;cursor:pointer;
  user-select:none;-webkit-user-select:none;touch-action:manipulation;
  transition:background .08s linear;
}
.hit.wait{background:#bf3a2b;}
.hit.go{background:#2f7d5e;}
.hit.ok{background:#4a3f35;}
.hit .hit-t{font-size:26px;font-weight:800;color:#fff;letter-spacing:-.5px;}
.hit .hit-s{font-size:13px;color:rgba(255,255,255,.8);}
.hit.go .hit-t{font-size:40px;}
.prog-line{text-align:center;font-size:12.5px;color:var(--muted);margin-top:10px;}

.sch-top{display:flex;justify-content:space-between;font-size:12.5px;color:var(--muted);margin-bottom:8px;}
.sch-top b{color:#c1502e;}

.schulte{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;}
.cell{
  aspect-ratio:1/1;font-family:inherit;font-size:17px;font-weight:700;color:var(--ink);
  background:#fff;border:1px solid var(--line);border-radius:10px;cursor:pointer;
  transition:.1s;touch-action:manipulation;
}
.cell:hover{border-color:#d8d8e6;}
.cell.done{background:#fdf0ea;color:#c1502e;border-color:#f6dcd0;}
.cell.bad{background:#ffe8e8;border-color:#ffc9c9;}

.stroop-word{text-align:center;font-size:76px;font-weight:800;line-height:1.3;margin:6px 0 2px;letter-spacing:4px;}
.stroop-hint{text-align:center;font-size:13px;color:var(--muted);margin-bottom:16px;}
.stroop-opts{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;}
.cbtn{height:66px;border:0;border-radius:12px;cursor:pointer;outline:0;outline-offset:2px;transition:.1s;}
.cbtn:active{transform:scale(.97);}

.colorgrid{display:grid;gap:8px;padding:10px;background:#fff;border-radius:16px;border:1px solid var(--line);}
.cube{aspect-ratio:1/1;border:0;border-radius:8px;cursor:pointer;transition:.1s;}
.cube:active{transform:scale(.96);}

.calib{background:#fff;border:1px solid var(--line);border-radius:16px;padding:20px 16px;text-align:center;}
.calib-t{font-size:13.5px;color:var(--ink2);line-height:1.75;margin:0 0 18px;}
.calib-s{font-size:12px;color:var(--muted);margin:12px 0 0;}
.calib-bar{height:44px;background:#c1502e;border-radius:6px;margin:0 auto 16px;}
.rng{width:100%;accent-color:#c1502e;}
.dists{display:grid;gap:8px;}
.dbtn{font-family:inherit;font-size:14px;font-weight:600;color:var(--ink);background:#f7f7fb;
  border:1px solid var(--line);border-radius:11px;padding:12px;cursor:pointer;
  display:flex;align-items:center;justify-content:space-between;gap:10px;}
.dbtn:hover{border-color:#d8d8e6;}
.dsub{font-size:11.5px;font-weight:500;color:var(--muted);}

.eye-box{display:grid;place-items:center;background:#fff;border:1px solid var(--line);border-radius:14px;padding:20px;min-height:300px;}
.eye-ans{display:grid;place-items:center;gap:6px;margin-top:12px;}
.eye-ans div{display:flex;gap:6px;}
.eye-ans button{
  font-family:inherit;font-size:15px;font-weight:700;color:var(--ink);background:#fff;
  border:1px solid var(--line);border-radius:10px;width:88px;height:46px;cursor:pointer;
}
.eye-ans button:active{background:#fdf0ea;}

.hear-wave{display:flex;align-items:center;justify-content:center;gap:6px;height:110px;margin:10px 0 18px;}
.hear-wave span{width:6px;border-radius:99px;background:linear-gradient(180deg,#c1502e,#c1502e);animation:wv 1s ease-in-out infinite;}
.hear-wave span:nth-child(1){height:28px;animation-delay:0s;}
.hear-wave span:nth-child(2){height:56px;animation-delay:.1s;}
.hear-wave span:nth-child(3){height:82px;animation-delay:.2s;}
.hear-wave span:nth-child(4){height:64px;animation-delay:.3s;}
.hear-wave span:nth-child(5){height:90px;animation-delay:.15s;}
.hear-wave span:nth-child(6){height:48px;animation-delay:.25s;}
.hear-wave span:nth-child(7){height:24px;animation-delay:.05s;}
@keyframes wv{0%,100%{transform:scaleY(.6);}50%{transform:scaleY(1);}}

.mem-num{
  background:#fff;border:1px solid var(--line);border-radius:18px;min-height:220px;
  display:grid;place-items:center;font-size:78px;font-weight:800;color:#c1502e;letter-spacing:2px;
}
.mem-input{
  width:100%;font-family:inherit;font-size:26px;font-weight:700;letter-spacing:6px;text-align:center;
  padding:16px;border:1.5px solid var(--line);border-radius:12px;outline:0;
}
.mem-input:focus{border-color:#c1502e;}

.aimbox{position:relative;height:340px;background:#fff;border:1px solid var(--line);border-radius:16px;overflow:hidden;touch-action:manipulation;}
.aimdot{
  position:absolute;width:52px;height:52px;margin:-26px 0 0 -26px;border-radius:50%;border:0;
  background:#2b2622;cursor:crosshair;
  box-shadow:0 6px 16px -6px rgba(193,80,46,.7);
}
.aimdot:active{transform:scale(.92);}
/* ==================== 图标与在线人数 ==================== */
.ico svg,.ic{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:1.8;
  stroke-linecap:round;stroke-linejoin:round;display:block;}
.tc .ico{color:inherit;}

.online-pill{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);
  background:#f3f3f8;border-radius:999px;padding:4px 10px;}
.online-pill i{width:6px;height:6px;border-radius:50%;background:#22c55e;display:block;
  box-shadow:0 0 0 3px rgba(34,197,94,.15);}
.online-wrap[hidden]{display:none;}
@media(max-width:560px){.head .online-pill{display:none;}}


/* ==================== 交互反馈 ==================== */
.fx{position:fixed;inset:0;pointer-events:none;z-index:400;}
.fx-good{box-shadow:inset 0 0 0 5px rgba(47,125,94,.5);animation:fxOut .5s ease-out forwards;}
.fx-bad{box-shadow:inset 0 0 0 5px rgba(191,58,43,.5);animation:fxOut .5s ease-out forwards;}
.fx-mid{box-shadow:inset 0 0 0 5px rgba(168,118,47,.4);animation:fxOut .5s ease-out forwards;}
@keyframes fxOut{from{opacity:1}to{opacity:0}}

.ftxt{
  position:fixed;transform:translate(-50%,-50%);pointer-events:none;z-index:401;
  font-size:18px;font-weight:800;line-height:1;
  animation:floatUp .8s cubic-bezier(.2,.7,.3,1) forwards;
}
.ftxt-good{color:#2f7d5e;}
.ftxt-bad{color:#bf3a2b;}
@keyframes floatUp{
  from{opacity:1;transform:translate(-50%,-50%) scale(.8);}
  40%{opacity:1;transform:translate(-50%,-90%) scale(1.15);}
  to{opacity:0;transform:translate(-50%,-150%) scale(1);}
}

.pop{animation:popIn .28s cubic-bezier(.2,.9,.3,1);}
@keyframes popIn{0%{transform:scale(1)}45%{transform:scale(1.12)}100%{transform:scale(1)}}
.pop-hard{animation:popHard .32s cubic-bezier(.2,.9,.3,1);}
@keyframes popHard{0%{transform:scale(.86)}55%{transform:scale(1.16)}100%{transform:scale(1)}}

.shake{animation:shakeX .34s cubic-bezier(.36,.07,.19,.97);}
@keyframes shakeX{
  10%,90%{transform:translateX(-2px);}
  20%,80%{transform:translateX(4px);}
  30%,50%,70%{transform:translateX(-6px);}
  40%,60%{transform:translateX(6px);}
}

.hud{display:flex;justify-content:space-between;align-items:center;gap:10px;
  font-size:13px;color:var(--ink2);margin-bottom:10px;min-height:22px;}
.hud b{font-weight:800;color:#2b2622;font-variant-numeric:tabular-nums;}
.hud .muted{color:var(--muted);}
.lives{display:inline-flex;gap:6px;}
.life{width:9px;height:9px;border-radius:50%;background:#c1502e;transition:.3s;}
.life.gone{background:#e3dad0;transform:scale(.7);}

.tries{display:flex;gap:6px;flex-wrap:wrap;justify-content:center;margin-top:10px;}
.try{font-size:12px;font-weight:700;color:#2b2622;background:#fff;border:1px solid var(--line);
  border-radius:6px;padding:3px 8px;font-variant-numeric:tabular-nums;}

.sch-foot{display:flex;justify-content:space-between;font-size:12.5px;color:var(--muted);margin-top:10px;}
.sch-foot b{color:#2b2622;}

.cube.c-ok,.cell.c-ok{outline:3px solid #2f7d5e;outline-offset:2px;}
.cube.c-bad,.cell.c-bad{outline:3px solid #bf3a2b;outline-offset:2px;}
.cube.c-true,.cell.c-true{outline:3px dashed #2f7d5e;outline-offset:2px;}
.cbtn.c-ok{box-shadow:0 0 0 4px rgba(47,125,94,.6);}
.cbtn.c-bad{box-shadow:0 0 0 4px rgba(191,58,43,.6);}
.cbtn.c-true{box-shadow:0 0 0 4px rgba(47,125,94,.35);}

.cell.done{background:#fdf0ea;color:#c1502e;border-color:#f6dcd0;}
.cell.bad{background:#fbebe8;border-color:#f0cdc6;}

.aimbox.aim-ok{border-color:#2f7d5e;box-shadow:0 0 0 3px rgba(47,125,94,.12) inset;}
.aimbox.aim-bad{border-color:#bf3a2b;box-shadow:0 0 0 3px rgba(191,58,43,.1) inset;}

.mem-dots{display:flex;gap:6px;justify-content:center;margin-top:12px;}
.mem-dots span{width:7px;height:7px;border-radius:50%;background:#e3dad0;transition:.15s;}
.mem-dots span.on{background:#c1502e;transform:scale(1.3);}
.mem-fb{text-align:center;margin-top:12px;font-size:14px;font-weight:700;min-height:22px;}
.fb-ok{color:#2f7d5e;}
.fb-bad{color:#bf3a2b;}

.hear-bar{display:flex;gap:4px;justify-content:center;margin-top:14px;}
.hb{width:16px;height:6px;border-radius:3px;background:#e3dad0;}
.hb.on{background:#2f7d5e;}
.hb.off{background:#ece5dc;}
/* ==================== 参数设置 ==================== */
.params{margin:0 0 18px;padding:14px 0 4px;border-top:1px solid var(--line);}
.prow{margin-bottom:14px;}
.plabel{font-size:12.5px;color:var(--muted);margin-bottom:7px;}
.pchips{display:flex;flex-wrap:wrap;gap:6px;}
.pchip{
  font-family:inherit;font-size:13px;font-weight:600;color:var(--ink2);
  background:#fff;border:1px solid var(--line);border-radius:8px;
  padding:7px 12px;cursor:pointer;transition:.14s;-webkit-tap-highlight-color:transparent;
}
.pchip:hover{border-color:#d9d0c5;}
.pchip.on{background:#c1502e;border-color:#c1502e;color:#fff;}
.pcustom{display:flex;align-items:center;gap:6px;margin-top:8px;}
.pcustom input{
  width:96px;font-family:inherit;font-size:14px;color:var(--ink);
  border:1px solid var(--line);border-radius:8px;padding:7px 10px;outline:0;background:#fff;
}
.pcustom input:focus{border-color:#c1502e;}
.punit{font-size:12.5px;color:var(--muted);}
.phint{font-size:11.5px;color:#b3aca2;margin-top:5px;}

/* ==================== 结果页引导 ==================== */
.more-link{
  display:block;text-align:center;font-size:13px;color:#8b837a;
  margin:14px 0 4px;padding:10px;
}
.more-link:hover{color:#c1502e;}

/* ==================== 分享二维码 ==================== */
.qr-badge{
  position:absolute;top:56px;right:10px;z-index:45;
  width:auto;text-align:right;text-decoration:none;
  opacity:0;pointer-events:none;transition:opacity .35s ease;
  -webkit-tap-highlight-color:transparent;
}
body.has-result .qr-badge{opacity:1;pointer-events:auto;}
body.has-result .rhero{box-sizing:border-box;padding-right:104px;}
@media(min-width:1100px){body.has-result .rhero{padding-right:0;}}
.qr-badge img{display:block;width:88px;height:88px;margin-left:auto;}
.qr-badge .cap{
  display:block;margin-top:3px;font-size:9.5px;line-height:1.45;
  color:#b4a99c;letter-spacing:.2px;
}
@media(min-width:1100px){
  .qr-badge{top:64px;right:14px;}
  .qr-badge img{width:96px;height:96px;}
  .qr-badge .cap{font-size:10.5px;}
}

/* 回首页按钮 */
.home-btn{
  position:absolute;top:56px;left:10px;z-index:45;
  display:inline-flex;align-items:center;gap:4px;
  font-size:12px;line-height:1;color:#8b837a;text-decoration:none;
  background:rgba(255,255,255,.82);border:1px solid var(--line);
  border-radius:999px;padding:7px 11px;
  opacity:0;pointer-events:none;transition:opacity .3s ease,color .15s ease,border-color .15s ease;
  -webkit-tap-highlight-color:transparent;
}
body.has-result .home-btn{opacity:1;pointer-events:auto;}
.home-btn:hover{color:#c1502e;border-color:#e2d6c8;}
.home-btn svg{width:11px;height:11px;stroke:currentColor;fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;}

/* ==================== 速算 ==================== */
.math-q{
  font-size:34px;font-weight:800;text-align:center;letter-spacing:1px;
  margin:26px 0 24px;color:#2b2622;
}
.math-opts{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.mopt{
  font-family:inherit;font-size:22px;font-weight:700;color:#2b2622;
  background:#fff;border:1.5px solid var(--line);border-radius:12px;
  padding:18px 6px;cursor:pointer;transition:.13s;
  -webkit-tap-highlight-color:transparent;
}
.mopt:hover{border-color:#d9d0c5;}
.mopt.c-ok{border-color:#2f7d5e;background:#eef6f2;color:#2f7d5e;}
.mopt.c-bad{border-color:#bf3a2b;background:#fbebe8;color:#bf3a2b;}
.mopt.c-true{border-color:#2f7d5e;background:#eef6f2;}

/* ==================== 瞬间记忆 ==================== */
.patgrid{display:grid;gap:8px;background:#fff;border:1px solid var(--line);border-radius:16px;padding:12px;}
.pcell{
  aspect-ratio:1/1;border:0;border-radius:9px;background:#f1ece5;cursor:pointer;
  transition:background .18s ease,transform .12s ease;-webkit-tap-highlight-color:transparent;
}
.pcell.lit{background:#c1502e;}
.pcell.ok{background:#2f7d5e;}
.pcell.bad{background:#e8b4ab;}
.pat-tip{text-align:center;font-size:13px;color:var(--muted);margin-top:12px;min-height:20px;}

/* ==================== 反应抑制 ==================== */
.ggbox{
  height:300px;background:#fff;border:1px solid var(--line);border-radius:16px;
  display:grid;place-items:center;cursor:pointer;touch-action:manipulation;
  transition:background .12s ease;
}
.ggdot{width:96px;height:96px;border-radius:50%;transition:transform .1s ease;}
.ggdot.go{background:#2f7d5e;}
.ggdot.no{background:#bf3a2b;}
.ggdot.hit{transform:scale(1.12);opacity:.55;}
.ggdot.wrong{transform:scale(.86);}
/* ==================== 首页简介 ==================== */
.intro-note{
  margin:34px 0 0;padding:18px 0 0;
  border-top:1px solid var(--line);
}
.intro-note p{
  margin:0 0 10px;font-size:13px;line-height:1.95;color:#9c9387;
}
.intro-note p:last-child{margin-bottom:0;}
@media(min-width:640px){ .intro-note p{font-size:13.5px;} }
/* ==================== 序列记忆 ==================== */
.simon{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;max-width:330px;margin:10px auto 16px;}
.spad{
  aspect-ratio:1/1;background:#fff;border:1px solid var(--line);border-radius:16px;
  padding:9px;cursor:pointer;transition:border-color .2s ease,transform .12s ease;
  -webkit-tap-highlight-color:transparent;
}
.spad span{display:block;width:100%;height:100%;border-radius:11px;opacity:.3;
  transition:opacity .1s ease,transform .1s ease;}
.spad.on{border-color:#d9cfc2;}
.spad.on span{opacity:1;transform:scale(1.03);}
.spad.tap span{opacity:.85;}

/* ==================== 一眼估数 ==================== */
.dotbox{
  position:relative;height:250px;background:#fff;border:1px solid var(--line);
  border-radius:16px;margin:8px 0 16px;transition:opacity .16s ease;
}
.dotbox.gone{opacity:0;}
.dotbox i{
  position:absolute;width:12px;height:12px;border-radius:50%;background:#c1502e;
  transform:translate(-50%,-50%);
}

/* ==================== 空间旋转 ==================== */
.rot-main{display:flex;justify-content:center;margin:6px 0 2px;}
.rot-main svg{width:112px;height:112px;fill:#c1502e;}
.rot-tip{text-align:center;font-size:12.5px;color:var(--muted);margin-bottom:14px;}
.rotgrid{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.rotile{
  background:#fff;border:1.5px solid var(--line);border-radius:14px;padding:8px;
  cursor:pointer;transition:border-color .13s ease,background .13s ease;
  -webkit-tap-highlight-color:transparent;
}
.rotile svg{width:100%;height:auto;display:block;fill:#5a544d;}
.rotile.c-ok{border-color:#2f7d5e;background:#eef6f2;}
.rotile.c-ok svg{fill:#2f7d5e;}
.rotile.c-bad{border-color:#bf3a2b;background:#fbebe8;}
.rotile.c-true{border-color:#2f7d5e;}

/* ==================== 记忆配对 ==================== */
.pairgrid{display:grid;gap:8px;margin:8px 0 6px;}
.pcard{
  position:relative;aspect-ratio:1/1;background:#ded4c6;border:0;border-radius:10px;
  padding:0;cursor:pointer;transition:background .15s ease;
  -webkit-tap-highlight-color:transparent;
}
.pcard .pfront{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  opacity:0;transition:opacity .16s ease;
}
.pcard svg{width:58%;height:58%;fill:#5a6459;}
.pcard.open{background:#fff;box-shadow:inset 0 0 0 1px var(--line);}
.pcard.open .pfront{opacity:1;}
.pcard.done{background:#eef6f2;box-shadow:inset 0 0 0 1px #cfe3da;}
.pcard.done .pfront{opacity:1;}
.pcard.done svg{fill:#2f7d5e;}
/* ==================== 打字速度 ==================== */
.type-word{
  font-size:36px;font-weight:800;letter-spacing:2px;text-align:center;
  color:#2b2622;margin:28px 0 22px;font-family:ui-monospace,Menlo,Consolas,monospace;
}
.type-input{
  width:100%;box-sizing:border-box;font-family:ui-monospace,Menlo,Consolas,monospace;
  font-size:20px;text-align:center;padding:14px 12px;border:1.5px solid var(--line);
  border-radius:12px;outline:0;background:#fff;color:#2b2622;
}
.type-input:focus{border-color:#c1502e;}

/* ==================== 视觉搜索 ==================== */
.vs-target{display:flex;justify-content:center;margin:6px 0 12px;}
.vs-target svg{width:44px;height:44px;fill:none;stroke:#c1502e;stroke-width:2;stroke-linejoin:round;}
.vs-grid{display:grid;gap:5px;}
.vs-cell{
  aspect-ratio:1/1;background:#fff;border:1px solid var(--line);border-radius:7px;
  padding:3px;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:.12s;
}
.vs-cell svg{width:100%;height:100%;fill:none;stroke:#8b837a;stroke-width:2;stroke-linejoin:round;}
.vs-cell.c-ok{border-color:#2f7d5e;background:#eef6f2;}
.vs-cell.c-ok svg{stroke:#2f7d5e;}
.vs-cell.c-bad{border-color:#bf3a2b;background:#fbebe8;}
.vs-cell.c-true{border-color:#2f7d5e;}

/* ==================== N-back ==================== */
.nb-letter{
  font-size:96px;font-weight:800;text-align:center;color:#c1502e;
  line-height:1.2;margin:24px 0 20px;font-family:ui-monospace,Menlo,Consolas,monospace;
}

/* ==================== 数列推理 ==================== */
.seq-line{
  font-size:24px;font-weight:700;text-align:center;color:#2b2622;
  margin:26px 0 24px;letter-spacing:1px;line-height:1.7;
}
.seq-line b{color:#c1502e;font-size:28px;}

/* ==================== 找不同 ==================== */
.spot-wrap{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:10px 0 8px;}
.spot-grid{display:grid;gap:4px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:8px;}
.sp-cell{
  aspect-ratio:1/1;border:0;border-radius:5px;background:transparent;padding:0;cursor:pointer;
  -webkit-tap-highlight-color:transparent;
}
.sp-cell i{display:block;width:100%;height:100%;border-radius:5px;}
.sp-cell.c-ok i{box-shadow:0 0 0 2.5px #2f7d5e;}
.sp-cell.c-bad i{box-shadow:0 0 0 2.5px #bf3a2b;}
.sp-cell.c-true i{box-shadow:0 0 0 2.5px #2f7d5e;}

/* ==================== 镜像判断 ==================== */
.mir-char{
  font-size:104px;font-weight:700;text-align:center;color:#2b2622;
  line-height:1.25;margin:34px 0 30px;
}

/* ==================== 目标缩小 ==================== */
.sh-box{
  position:relative;height:340px;background:#fff;border:1px solid var(--line);
  border-radius:16px;margin:8px 0 12px;touch-action:manipulation;overflow:hidden;
}
.sh-dot{
  position:absolute;transform:translate(-50%,-50%);border:0;border-radius:50%;
  background:#c1502e;cursor:pointer;-webkit-tap-highlight-color:transparent;
  transition:width .12s ease,height .12s ease;
}

/* ==================== 声音左右 ==================== */
.ear-row{display:flex;gap:10px;margin:14px 0 4px;}
.ear-row .btn,.ear-row .btn-ghost{flex:1;margin:0;}
/* ==================== 算式判断 ==================== */
.cj-eq{
  font-size:38px;font-weight:800;text-align:center;color:#2b2622;
  margin:40px 0 34px;letter-spacing:1px;font-variant-numeric:tabular-nums;
}

/* ==================== 文字找茬 ==================== */
.td-line{
  font-size:19px;line-height:1.9;letter-spacing:3px;text-align:center;
  color:#2b2622;background:#fff;border:1px solid var(--line);border-radius:12px;
  padding:14px 10px;margin:10px 0;word-break:break-all;
}
.td-target{display:flex;flex-wrap:wrap;justify-content:center;gap:0;padding:10px 8px;}
.td-ch{
  font-family:inherit;font-size:19px;line-height:1.7;letter-spacing:3px;color:#2b2622;
  background:transparent;border:0;padding:0 1px;cursor:pointer;border-radius:4px;
  -webkit-tap-highlight-color:transparent;
}
.td-ch.c-ok{background:#eef6f2;color:#2f7d5e;font-weight:700;}
.td-ch.c-bad{background:#fbebe8;color:#bf3a2b;}
.td-ch.c-true{background:#eef6f2;color:#2f7d5e;}

/* ==================== 数量比较 ==================== */
.ml-wrap{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:10px 0 8px;}
.ml-panel{
  position:relative;height:230px;background:#fff;border:1.5px solid var(--line);
  border-radius:14px;cursor:pointer;-webkit-tap-highlight-color:transparent;
  transition:border-color .12s ease;
}
.ml-panel:active{border-color:#c1502e;}
.ml-panel i{
  position:absolute;width:11px;height:11px;border-radius:50%;background:#c1502e;
  transform:translate(-50%,-50%);
}