/* AP101 课程站点（AP 微观 / 宏观）· 同源样式，CSP 安全（无外部字体） */
:root{
  --bg:#f7f6f2; --bg-2:#efede6; --surface:#ffffff; --surface-2:#f4f2ec; --surface-3:#ebe8df;
  --ink:#1c1e22; --ink-2:#464b53; --ink-3:#737983; --ink-4:#9aa0a8;
  --line:#e3e0d6; --line-2:#d2cec1;
  --accent:#1f5f8b; --accent-2:#2c77ab; --accent-ink:#ffffff; --accent-soft:#e2edf5; --accent-softer:#f0f6fa;
  --ok:#2b7a4b; --ok-soft:#e3f2e8; --warn:#9a5b06; --warn-soft:#fbefd9; --bad:#b4372f; --bad-soft:#fbe7e4;
  --gold:#a8790b; --gold-soft:#f8efd6; --lock:#8a8f97; --lock-soft:#eceae4;
  --c1:#1f5f8b; --c2:#c0392b; --c3:#2b7a4b; --area:#1f5f8b; --area2:#d4842a;
  --code-bg:#f2f0e9; --mark:#fff2b8;
  --shadow-1:0 1px 2px rgba(20,24,30,.04),0 2px 8px rgba(20,24,30,.04);
  --shadow-2:0 2px 6px rgba(20,24,30,.05),0 10px 30px rgba(20,24,30,.08);
  --radius:14px; --radius-sm:9px; --maxw:1180px; --prose:45rem;
  --sans: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "Source Han Sans SC", "Segoe UI", Roboto, sans-serif;
  --mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
  --ease: cubic-bezier(.2,.7,.2,1);
  color-scheme: light dark;
}
@media (prefers-color-scheme: dark){
  :root{
    --bg:#141619; --bg-2:#1a1d21; --surface:#1c1f24; --surface-2:#22262c; --surface-3:#2a2f36;
    --ink:#e8e6e1; --ink-2:#bcc0c6; --ink-3:#8d929a; --ink-4:#6c7178;
    --line:#2d3137; --line-2:#3a3f47;
    --accent:#7fb6dc; --accent-2:#9ccaea; --accent-ink:#0d1820; --accent-soft:#1b2b37; --accent-softer:#18222b;
    --ok:#79c597; --ok-soft:#18291f; --warn:#e3ac5c; --warn-soft:#2e2517; --bad:#ef8a80; --bad-soft:#331d1b;
    --gold:#e2bd5b; --gold-soft:#2e2814; --lock:#80858d; --lock-soft:#25282d;
    --c1:#7fb6dc; --c2:#ef8a80; --c3:#79c597; --area:#7fb6dc; --area2:#e3ac5c;
    --code-bg:#20242a; --mark:#4a4220;
    --shadow-1:0 1px 2px rgba(0,0,0,.3); --shadow-2:0 8px 30px rgba(0,0,0,.35);
  }
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-padding-top:76px}
body{margin:0;background:var(--bg);color:var(--ink);font:16px/1.7 var(--sans);text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}
a{color:var(--accent);text-decoration:none}
a:hover{text-decoration:underline;text-underline-offset:3px}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}
.skip{position:absolute;left:-999px;top:0;background:var(--accent);color:var(--accent-ink);padding:.5rem 1rem;z-index:99;border-radius:0 0 8px 0}
.skip:focus{left:0}
.vh{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.muted{color:var(--ink-3)}
.small{font-size:.86rem}
.nowrap{white-space:nowrap}
.noscript{max-width:40rem;margin:3rem auto;padding:1rem 1.25rem;background:var(--warn-soft);color:var(--warn);border-radius:var(--radius)}
svg.ic{width:1.1em;height:1.1em;vertical-align:-.18em;flex:none;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}

/* ---------- top bar & nav ---------- */
.topbar{position:sticky;top:0;z-index:40;background:color-mix(in srgb,var(--bg) 86%,transparent);backdrop-filter:saturate(1.4) blur(12px);-webkit-backdrop-filter:saturate(1.4) blur(12px);border-bottom:1px solid var(--line)}
.topbar-inner{max-width:var(--maxw);margin:0 auto;padding:.6rem 1.25rem;display:flex;align-items:center;gap:.55rem;min-height:56px}
.brand{font-weight:750;color:var(--ink);letter-spacing:.02em;white-space:nowrap}
.brand:hover{text-decoration:none;color:var(--accent)}
.sep{color:var(--ink-4)}
.crumb{color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.crumb.current{color:var(--ink);font-weight:600}
a.crumb:hover{color:var(--accent)}
.topnav{margin-left:auto;display:flex;gap:.2rem}
.topnav a{display:flex;align-items:center;gap:.4rem;padding:.45rem .8rem;border-radius:999px;color:var(--ink-2);font-size:.93rem;white-space:nowrap}
.topnav a:hover{background:var(--surface-2);text-decoration:none;color:var(--ink)}
.topnav a[aria-current="page"]{background:var(--accent-soft);color:var(--accent);font-weight:600}
.tabbar{display:none}
@media (max-width: 760px){
  .topnav{display:none}
  .tabbar{display:grid;grid-template-columns:repeat(5,1fr);position:fixed;left:0;right:0;bottom:0;z-index:45;background:color-mix(in srgb,var(--surface) 92%,transparent);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-top:1px solid var(--line);padding:.3rem .25rem calc(.3rem + env(safe-area-inset-bottom))}
  .tabbar a{display:flex;flex-direction:column;align-items:center;gap:.1rem;padding:.3rem 0;color:var(--ink-3);font-size:.72rem;border-radius:10px}
  .tabbar a svg.ic{width:1.35em;height:1.35em}
  .tabbar a:hover{text-decoration:none}
  .tabbar a[aria-current="page"]{color:var(--accent);font-weight:600}
  body{padding-bottom:calc(64px + env(safe-area-inset-bottom))}
}

/* ---------- main ---------- */
.main{max-width:var(--maxw);margin:0 auto;padding:1.6rem 1.25rem 4rem;outline:none;min-height:60vh}
.view{animation:viewIn .28s var(--ease)}
@keyframes viewIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.boot{display:flex;flex-direction:column;align-items:center;gap:.8rem;padding:5rem 0;color:var(--ink-3)}
.spinner{width:28px;height:28px;border-radius:50%;border:3px solid var(--line);border-top-color:var(--accent);animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.page-head{margin:0 0 1.4rem}
.eyebrow{margin:0 0 .35rem;color:var(--accent);font-size:.8rem;font-weight:650;letter-spacing:.08em}
.page-head h1{font-size:clamp(1.55rem,3.4vw,2.2rem);line-height:1.3;margin:0 0 .4rem;letter-spacing:-.01em}
.page-head h1 .en{display:block;font-size:.5em;font-weight:500;color:var(--ink-3);letter-spacing:0;margin-top:.35rem}
.page-head .lede{color:var(--ink-2);margin:.4rem 0 0;max-width:46rem}
h2.sec{font-size:1.12rem;margin:2.2rem 0 .9rem;display:flex;align-items:center;gap:.6rem}
h2.sec .count{font-size:.85rem;color:var(--ink-3);font-weight:400}
h2.sec .more{margin-left:auto;font-size:.88rem;font-weight:500}
.back{display:inline-flex;align-items:center;gap:.3rem;color:var(--ink-3);font-size:.9rem;margin-bottom:.8rem}
.back:hover{color:var(--accent);text-decoration:none}
/* 手机 / 触屏：常用的小链接、芯片加大点击区域（"← 返回"原来只有 24px 高） */
@media (max-width:760px), (pointer:coarse){
  .back{min-height:40px;padding-right:.6rem;margin-top:-.5rem;margin-bottom:.3rem}
  h2.sec .more{padding:.4rem 0}
  .kp-chip{min-height:34px;padding:.32rem .65rem}
  a.chip{min-height:30px;padding:.2rem .65rem}
  .linkbtn{min-height:36px}
  .kp-toc a{display:inline-block;padding:.25rem 0}
}

/* ---------- buttons, chips, inputs ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.45rem;padding:.62rem 1.1rem;border-radius:11px;border:1px solid var(--line-2);background:var(--surface);color:var(--ink);font-weight:600;font-size:.95rem;cursor:pointer;transition:background .15s,border-color .15s,transform .1s,box-shadow .15s;text-decoration:none;white-space:nowrap;line-height:1.3}
.btn:hover{border-color:var(--accent);color:var(--accent);text-decoration:none}
.btn:active{transform:translateY(1px)}
.btn[disabled],.btn.disabled{opacity:.5;cursor:not-allowed;pointer-events:none}
.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.btn-primary:hover{background:var(--accent-2);border-color:var(--accent-2);color:var(--accent-ink);box-shadow:0 4px 14px color-mix(in srgb,var(--accent) 28%,transparent)}
.btn-ok{background:var(--ok);border-color:var(--ok);color:#fff}
.btn-ok:hover{color:#fff;filter:brightness(1.06)}
.btn-danger{color:var(--bad);border-color:color-mix(in srgb,var(--bad) 45%,var(--line))}
.btn-danger:hover{background:var(--bad-soft);color:var(--bad);border-color:var(--bad)}
.btn-danger.solid{background:var(--bad);color:#fff;border-color:var(--bad)}
.btn-ghost{background:transparent;border-color:transparent;color:var(--ink-2)}
.btn-ghost:hover{background:var(--surface-2);border-color:transparent;color:var(--ink)}
.btn-sm{padding:.38rem .75rem;font-size:.85rem;border-radius:9px}
.btn-lg{padding:.85rem 1.5rem;font-size:1.05rem;border-radius:13px}
.btn-block{width:100%}
.btn-row{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center}
.btn-row.end{justify-content:flex-end}
.linkbtn{background:none;border:0;padding:0;color:var(--accent);cursor:pointer;font-size:.9rem;text-align:left}
.linkbtn:hover{text-decoration:underline;text-underline-offset:3px}
.chip{display:inline-flex;align-items:center;gap:.3rem;font-size:.78rem;line-height:1.5;padding:.12rem .55rem;border-radius:999px;background:var(--surface-2);color:var(--ink-2);border:1px solid var(--line);white-space:nowrap}
.chip.code{font-family:var(--mono);font-size:.74rem;font-weight:600}
.chip.ok{background:var(--ok-soft);color:var(--ok);border-color:transparent}
.chip.warn{background:var(--warn-soft);color:var(--warn);border-color:transparent}
.chip.bad{background:var(--bad-soft);color:var(--bad);border-color:transparent}
.chip.accent{background:var(--accent-soft);color:var(--accent);border-color:transparent}
.chip.lock{background:var(--lock-soft);color:var(--lock);border-color:transparent}
.chip.gold{background:var(--gold-soft);color:var(--gold);border-color:transparent}
.chips{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center}
.field{display:flex;flex-direction:column;gap:.35rem;margin:0 0 1rem}
.field label,.lbl{font-size:.86rem;color:var(--ink-2);font-weight:600}
.input,.field input,.field select,select.input,textarea{width:100%;padding:.62rem .8rem;border:1px solid var(--line-2);border-radius:10px;background:var(--surface);color:var(--ink);transition:border-color .15s,box-shadow .15s}
.input:focus,.field input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}
textarea{resize:vertical;min-height:5rem;line-height:1.65}
.check{display:inline-flex;align-items:center;gap:.5rem;cursor:pointer;user-select:none}
.check input{width:1.1rem;height:1.1rem;accent-color:var(--accent);margin:0}
.seg{display:inline-flex;background:var(--surface-2);border:1px solid var(--line);border-radius:999px;padding:3px;gap:2px}
.seg button{border:0;background:transparent;padding:.28rem .75rem;border-radius:999px;font-size:.82rem;color:var(--ink-2);cursor:pointer;white-space:nowrap}
.seg button[aria-checked="true"]{background:var(--surface);color:var(--accent);font-weight:650;box-shadow:var(--shadow-1)}

/* ---------- cards & grids ---------- */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:1.15rem 1.25rem;box-shadow:var(--shadow-1)}
.card h3{margin:0 0 .4rem;font-size:1.05rem;line-height:1.4}
.card p{margin:.35rem 0}
.card.soft{background:var(--surface-2);box-shadow:none}
.card.accent{background:var(--accent-softer);border-color:color-mix(in srgb,var(--accent) 25%,var(--line))}
.card.warn{background:var(--warn-soft);border-color:transparent}
.card.ok{background:var(--ok-soft);border-color:transparent}
.card.bad{background:var(--bad-soft);border-color:transparent}
.grid{display:grid;gap:.9rem}
.grid.g2{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}
.grid.g3{grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}
.grid.g4{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}
a.tile,button.tile{display:flex;flex-direction:column;gap:.35rem;text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:1.05rem 1.15rem;color:var(--ink);box-shadow:var(--shadow-1);transition:border-color .15s,transform .18s var(--ease),box-shadow .18s;cursor:pointer;position:relative;min-height:100%}
a.tile:hover,button.tile:hover{text-decoration:none;border-color:color-mix(in srgb,var(--accent) 55%,var(--line));transform:translateY(-2px);box-shadow:var(--shadow-2)}
.tile .t-icon{width:2.3rem;height:2.3rem;border-radius:11px;display:grid;place-items:center;background:var(--accent-soft);color:var(--accent);margin-bottom:.25rem}
.tile .t-icon svg.ic{width:1.25rem;height:1.25rem}
.tile .t-title{font-weight:650;font-size:1rem}
.tile .t-sub{color:var(--ink-3);font-size:.85rem;line-height:1.55}
.tile .t-badge{position:absolute;top:.85rem;right:.9rem}
.tile.disabled{opacity:.6;cursor:not-allowed}
.tile.disabled:hover{transform:none;box-shadow:var(--shadow-1);border-color:var(--line)}

/* ---------- dashboard ---------- */
.hero{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1.5rem;align-items:center;background:linear-gradient(135deg,var(--surface) 0%,var(--accent-softer) 100%);border:1px solid var(--line);border-radius:20px;padding:1.6rem 1.7rem;box-shadow:var(--shadow-1)}
.hero h1{margin:.1rem 0 .3rem;font-size:clamp(1.6rem,3.6vw,2.3rem);line-height:1.25;letter-spacing:-.01em}
.hero .en{color:var(--ink-3);font-size:.95rem;margin:0 0 1rem}
.hero .stats{display:flex;flex-wrap:wrap;gap:1.4rem;margin:1rem 0 1.2rem}
.stat{display:flex;flex-direction:column;min-width:5.5rem}
.stat b{font-size:1.35rem;line-height:1.2;font-variant-numeric:tabular-nums}
.stat span{color:var(--ink-3);font-size:.8rem}
.ring{position:relative;width:150px;height:150px}
.ring svg{width:100%;height:100%;transform:rotate(-90deg)}
.ring .trk{fill:none;stroke:var(--surface-3);stroke-width:12}
.ring .val{fill:none;stroke:var(--accent);stroke-width:12;stroke-linecap:round;transition:stroke-dashoffset 1s var(--ease)}
.ring .val2{fill:none;stroke:var(--ok);stroke-width:6;stroke-linecap:round;opacity:.9}
.ring .center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}
.ring .center b{font-size:1.9rem;line-height:1;font-variant-numeric:tabular-nums}
.ring .center span{font-size:.75rem;color:var(--ink-3);margin-top:.3rem}
.countdowns{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:.9rem;margin-top:1rem}
.cd{display:flex;gap:.9rem;align-items:center}
.cd .num{font-size:1.9rem;font-weight:750;line-height:1;font-variant-numeric:tabular-nums;min-width:3.2rem;text-align:center}
.cd .num small{display:block;font-size:.72rem;font-weight:500;color:var(--ink-3);margin-top:.25rem}
.cd .what{font-size:.9rem;line-height:1.5}
.cd .what b{display:block;font-size:.95rem}
.cd.urgent .num{color:var(--bad)}
.cd.soon .num{color:var(--warn)}
.today{display:flex;flex-wrap:wrap;gap:.6rem}
.today a{flex:1 1 200px}
.unit-card{display:flex;flex-direction:column;gap:.55rem}
.unit-card .u-top{display:flex;align-items:center;gap:.6rem}
.unit-card .u-no{width:2.2rem;height:2.2rem;border-radius:10px;display:grid;place-items:center;font-weight:750;background:var(--accent-soft);color:var(--accent);flex:none}
.unit-card.new .u-no{background:var(--surface-2);color:var(--ink-3)}
.unit-card.done .u-no{background:var(--ok-soft);color:var(--ok)}
.unit-card .u-title{font-weight:650;line-height:1.35}
.unit-card .u-en{color:var(--ink-3);font-size:.8rem}
.unit-card .u-meta{display:flex;justify-content:space-between;color:var(--ink-3);font-size:.8rem}
.bar{height:7px;border-radius:99px;background:var(--surface-3);overflow:hidden}
.bar>span{display:block;height:100%;background:var(--accent);border-radius:99px;transition:width .8s var(--ease)}
.bar.ok>span{background:var(--ok)}
.bar.lg{height:10px}
.streak{display:inline-flex;align-items:center;gap:.35rem}
.notice{display:flex;gap:.7rem;align-items:flex-start;padding:.8rem 1rem;border-radius:12px;background:var(--surface-2);color:var(--ink-2);font-size:.9rem;border:1px solid var(--line)}
.notice.warn{background:var(--warn-soft);color:var(--warn);border-color:transparent}
.notice.ok{background:var(--ok-soft);color:var(--ok);border-color:transparent}
.notice.bad{background:var(--bad-soft);color:var(--bad);border-color:transparent}
.notice.accent{background:var(--accent-soft);color:var(--accent);border-color:transparent}
.notice svg.ic{margin-top:.2rem}
.notice p{margin:0}

/* ---------- lists (lessons) ---------- */
.list{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);overflow:hidden;box-shadow:var(--shadow-1)}
.row{display:flex;gap:.9rem;align-items:center;padding:.9rem 1.1rem;border-top:1px solid var(--line);color:var(--ink);transition:background .15s}
.row:first-child{border-top:0}
a.row:hover{background:var(--accent-softer);text-decoration:none}
.row .st{width:2rem;height:2rem;border-radius:50%;display:grid;place-items:center;flex:none;background:var(--surface-2);color:var(--ink-3);font-size:.85rem;font-weight:700}
.row .st.ok{background:var(--ok-soft);color:var(--ok)}
.row .st.go{background:var(--accent);color:var(--accent-ink)}
.row .st.read{background:var(--accent-soft);color:var(--accent)}
.row .st.lock{background:var(--lock-soft);color:var(--lock)}
.row .body{flex:1;min-width:0}
.row .ttl{font-weight:600;line-height:1.4}
.row .sub{color:var(--ink-3);font-size:.82rem;margin-top:.15rem;display:flex;flex-wrap:wrap;gap:.35rem .8rem;align-items:center}
.row .end{flex:none;color:var(--ink-3);font-size:.85rem}
.row.locked .ttl{color:var(--ink-3)}
.lockline{display:flex;align-items:center;gap:.35rem;color:var(--lock);font-size:.8rem}

/* ---------- lesson ---------- */
.lesson-head{margin-bottom:1.3rem;max-width:60rem}
.lesson-head h1{font-size:clamp(1.55rem,3.4vw,2.15rem);line-height:1.3;margin:.1rem 0 .25rem;letter-spacing:-.01em}
.lesson-head .en{color:var(--ink-3);margin:0 0 .8rem;font-size:.98rem}
.lesson-head .status{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center;margin-top:.9rem}
.layout{display:grid;grid-template-columns:15rem minmax(0,1fr);gap:2.6rem;align-items:start}
.toc{position:sticky;top:76px;max-height:calc(100vh - 96px);overflow:auto;font-size:.86rem;padding-right:.25rem}
.toc details summary{cursor:pointer;font-weight:650;color:var(--ink-2);padding:.3rem 0;list-style:none}
.toc details summary::-webkit-details-marker{display:none}
.toc ol{list-style:none;margin:.4rem 0 0;padding:0;border-left:1px solid var(--line)}
.toc li a{display:block;padding:.22rem .75rem;color:var(--ink-3);line-height:1.45;border-left:2px solid transparent;margin-left:-1px}
.toc li.l3 a{padding-left:1.5rem;font-size:.82rem}
.toc li a:hover{color:var(--ink);text-decoration:none}
.toc li a.active{color:var(--accent);border-left-color:var(--accent);font-weight:600}
.toc li.quiz a{color:var(--accent);font-weight:600}
.toc .toc-extra{margin-top:1.2rem;padding-top:1rem;border-top:1px solid var(--line)}
.toc .toc-extra h4{margin:0 0 .4rem;font-size:.8rem;color:var(--ink-3);letter-spacing:.05em}
.toc .toc-extra a{display:block;padding:.15rem 0;font-size:.84rem}
.lesson-foot{margin-top:2.5rem;padding-top:1.5rem;border-top:1px solid var(--line)}
.pager{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
.pager a,.pager .disabled{display:block;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:.85rem 1.1rem;color:var(--ink)}
.pager a:hover{border-color:var(--accent);text-decoration:none}
.pager span.k{display:block;font-size:.76rem;color:var(--ink-3)}
.pager .next{text-align:right}
.pager .disabled{opacity:.6}
.read-box{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;background:var(--surface-2);border-radius:var(--radius);padding:.85rem 1.1rem;margin:2rem 0 1rem}

/* ---------- prose ---------- */
.prose{min-width:0;max-width:var(--prose);font-size:1.02rem;line-height:1.85}
.prose>:first-child{margin-top:0}
.prose h2{font-size:1.42rem;margin:2.8rem 0 .9rem;padding-top:1.2rem;border-top:1px solid var(--line);line-height:1.4}
.prose h3{font-size:1.14rem;margin:2rem 0 .6rem;line-height:1.45}
.prose h4{font-size:1rem;margin:1.5rem 0 .5rem}
.prose p,.prose ul,.prose ol{margin:.75rem 0}
.prose ul,.prose ol{padding-left:1.45rem}
.prose li{margin:.3rem 0}
.prose li>ul,.prose li>ol{margin:.25rem 0}
.prose strong{font-weight:650}
.prose blockquote{margin:1.1rem 0;padding:.8rem 1.15rem;background:var(--surface);border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:0 var(--radius-sm) var(--radius-sm) 0;color:var(--ink-2)}
.prose blockquote p{margin:.4rem 0}
.prose hr{border:0;border-top:1px solid var(--line);margin:2rem 0}
.prose code{font-family:var(--mono);font-size:.86em;background:var(--code-bg);padding:.1em .35em;border-radius:4px}
.prose .katex{font-size:1.04em}
.math-display{overflow-x:auto;overflow-y:hidden;margin:1rem 0;padding:.4rem 0}
.code{position:relative;margin:1rem 0}
.code pre{margin:0;background:var(--code-bg);border:1px solid var(--line);border-radius:var(--radius-sm);padding:1rem 1.1rem;overflow:auto;font-size:.85rem;line-height:1.65;white-space:pre-wrap;word-break:break-word}
.code pre code{background:none;padding:0;font-size:inherit}
.copy{position:absolute;top:.45rem;right:.45rem;font:600 .74rem var(--sans);color:var(--ink-2);background:var(--surface);border:1px solid var(--line-2);border-radius:7px;padding:.2rem .55rem;cursor:pointer;opacity:.9}
.copy:hover{border-color:var(--accent);color:var(--accent)}
.copy.done{color:var(--ok);border-color:var(--ok)}
.table-wrap{overflow-x:auto;margin:1rem 0;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface)}
.table-wrap table{border-collapse:collapse;width:100%;font-size:.9rem;line-height:1.6}
.table-wrap th,.table-wrap td{padding:.55rem .8rem;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
.table-wrap th{background:var(--surface-2);font-weight:650;white-space:nowrap}
.table-wrap tr:last-child td{border-bottom:0}
.prose li.task{list-style:none;margin-left:-1.45rem;display:flex;gap:.6rem;cursor:pointer;border-radius:6px;padding:.1rem .25rem;transition:background .15s}
.prose li.task:hover{background:var(--surface-2)}
.prose li.task .box{flex:none;width:1.05em;height:1.05em;margin-top:.42em;border:1.5px solid var(--ink-3);border-radius:4px;display:grid;place-items:center;transition:all .15s}
.prose li.task.done .box{background:var(--ok);border-color:var(--ok)}
.prose li.task.done .box::after{content:"";width:.32em;height:.58em;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg) translate(-1px,-1px)}
.prose li.task.done{color:var(--ink-3)}
.diagram-note{position:relative;background:var(--gold-soft);border-radius:var(--radius-sm);padding:.7rem 1rem .7rem 1rem;color:var(--ink-2);font-size:.93rem;line-height:1.75}
.diagram-note .dn-tag{display:inline-flex;align-items:center;gap:.3rem;font-size:.74rem;font-weight:700;color:var(--gold);background:color-mix(in srgb,var(--gold) 14%,transparent);border-radius:99px;padding:.05rem .55rem;margin-right:.5rem;letter-spacing:.04em;vertical-align:.08em}
details.reveal{margin:1rem 0;border:1px dashed var(--line-2);border-radius:var(--radius-sm);background:var(--surface)}
details.reveal>summary{cursor:pointer;padding:.65rem 1rem;color:var(--accent);font-weight:600;font-size:.93rem;list-style:none;display:flex;align-items:center;gap:.5rem}
details.reveal>summary::-webkit-details-marker{display:none}
details.reveal>summary::before{content:"";width:.5rem;height:.5rem;border:solid currentColor;border-width:0 2px 2px 0;transform:rotate(-45deg);transition:transform .2s;margin-right:.15rem}
details.reveal[open]>summary::before{transform:rotate(45deg)}
details.reveal[open]{border-style:solid}
details.reveal[open]>summary{border-bottom:1px solid var(--line)}
.reveal-body{padding:.2rem 1.1rem .6rem}
details.fold{margin:1rem 0;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);padding:0 1rem}
details.fold>summary{cursor:pointer;padding:.65rem 0;font-weight:600;color:var(--ink-2)}
details.fold[open]>summary{border-bottom:1px solid var(--line);margin-bottom:.4rem}
.link-text{color:var(--ink-2)}
.quiz-h2{scroll-margin-top:80px}

/* ---------- quiz ---------- */
.quiz-slot{margin:1rem 0 2rem}
.quiz-cta{display:flex;gap:1rem 1.4rem;align-items:center;justify-content:space-between;flex-wrap:wrap}
.quiz-cta .qc-text{flex:1 1 18rem;min-width:0}
.quiz-cta h3{margin:0 0 .3rem}
.quiz-cta p{margin:0}
.lesson-foot .quiz-cta{margin-bottom:1rem}
.quiz-page .quiz-slot{margin:1.2rem 0 1.6rem}
.quiz-page .pager{max-width:var(--prose)}
.quiz{background:var(--surface);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow-2);overflow:hidden;font-size:1rem;line-height:1.75}
.quiz-top{display:flex;flex-wrap:wrap;gap:.7rem;align-items:center;justify-content:space-between;padding:.9rem 1.2rem;background:var(--surface-2);border-bottom:1px solid var(--line)}
.quiz-top .q-title{font-weight:700;display:flex;align-items:center;gap:.5rem}
.quiz-body{padding:1.2rem}
.quiz-intro{display:flex;flex-direction:column;gap:.9rem}
.quiz-intro .rule{font-size:.92rem;color:var(--ink-2);background:var(--surface-2);border-radius:var(--radius-sm);padding:.7rem 1rem}
.quiz-intro .rule p{margin:.2rem 0}
.qdots{display:flex;flex-wrap:wrap;gap:5px;margin:0 0 1rem}
.qdots span{width:22px;height:6px;border-radius:99px;background:var(--surface-3)}
.qdots span.cur{background:var(--accent)}
.qdots span.ok{background:var(--ok)}
.qdots span.bad{background:var(--bad)}
.qcard{position:relative}
.qcard+.qcard{margin-top:1.4rem;padding-top:1.4rem;border-top:1px solid var(--line)}
.q-head{display:flex;flex-wrap:wrap;align-items:center;gap:.45rem;margin-bottom:.7rem}
.q-num{font-weight:750;color:var(--ink-2);margin-right:.2rem;font-variant-numeric:tabular-nums}
.diff{display:inline-flex;gap:2px;margin-left:.1rem}
.diff i{width:6px;height:6px;border-radius:50%;background:var(--line-2)}
.diff i.on{background:var(--warn)}
.flag{margin-left:auto}
.flag[aria-pressed="true"]{color:var(--warn);border-color:var(--warn);background:var(--warn-soft)}
.q-stem{font-size:1.02rem}
.q-stem p{margin:.35rem 0}
.q-stem .table-wrap{font-size:.92rem}
.q-en{color:var(--ink-2);font-size:.97rem;border-left:2px solid var(--line-2);padding-left:.8rem;margin-top:.55rem}
html[data-qlang="zh"] .q-en{display:none}
html[data-qlang="en"] .q-zh:not(.only){display:none}
html[data-qlang="en"] .q-en{border-left:0;padding-left:0;color:var(--ink);font-size:1.02rem;margin-top:0}
.choices{display:flex;flex-direction:column;gap:.5rem;margin:1rem 0 .4rem;padding:0;list-style:none}
.choice{display:flex;gap:.75rem;align-items:flex-start;text-align:left;width:100%;padding:.68rem .9rem;border:1.5px solid var(--line);border-radius:12px;background:var(--surface);cursor:pointer;transition:border-color .12s,background .12s;line-height:1.6}
button.choice:hover{border-color:color-mix(in srgb,var(--accent) 55%,var(--line));background:var(--accent-softer)}
.choice .L{flex:none;width:1.75rem;height:1.75rem;border-radius:50%;display:grid;place-items:center;font-weight:700;font-size:.85rem;background:var(--surface-2);color:var(--ink-2);margin-top:-.05rem;transition:all .12s}
.choice .ct{flex:1;min-width:0}
.choice .mark{flex:none;font-weight:800;margin-left:.3rem}
.choice.selected{border-color:var(--accent);background:var(--accent-softer)}
.choice.selected .L{background:var(--accent);color:var(--accent-ink)}
.choices.review .choice{cursor:default}
.choice.correct{border-color:var(--ok);background:var(--ok-soft)}
.choice.correct .L{background:var(--ok);color:#fff}
.choice.correct .mark{color:var(--ok)}
.choice.wrong{border-color:var(--bad);background:var(--bad-soft)}
.choice.wrong .L{background:var(--bad);color:#fff}
.choice.wrong .mark{color:var(--bad)}
.hint{font-size:.82rem;color:var(--ink-3);margin:.4rem 0 0}
.num-grid{display:flex;flex-direction:column;gap:.55rem;margin:1rem 0 .3rem}
.num-row{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}
.num-row .nl{min-width:4.5rem;font-weight:600;color:var(--ink-2);font-size:.92rem}
.num-row input{width:11rem;max-width:100%;padding:.55rem .75rem;border:1.5px solid var(--line-2);border-radius:10px;background:var(--surface);font-variant-numeric:tabular-nums;font-size:1rem}
.num-row input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}
.num-row .nu{color:var(--ink-3);font-size:.9rem}
.ta-wrap{margin:1rem 0 .3rem}
.ta-wrap label.lbl{display:block;margin-bottom:.35rem}
.paper{display:inline-flex;align-items:center;gap:.45rem;margin-top:.5rem;font-size:.86rem;color:var(--ink-2);cursor:pointer}
.paper input{accent-color:var(--accent)}
.q-actions{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center;margin-top:1rem}
.q-actions .spacer{flex:1}
.verdict{display:flex;align-items:center;gap:.5rem;font-weight:700;padding:.6rem .9rem;border-radius:11px;margin:1rem 0 .6rem;animation:pop .3s var(--ease)}
.verdict.ok{background:var(--ok-soft);color:var(--ok)}
.verdict.bad{background:var(--bad-soft);color:var(--bad)}
.verdict.neutral{background:var(--surface-2);color:var(--ink-2)}
@keyframes pop{from{transform:scale(.97);opacity:0}to{transform:none;opacity:1}}
.fb-note{font-size:.8rem;color:var(--ink-3);margin:.2rem 0}
.sol{margin-top:.8rem;background:var(--surface-2);border-radius:12px;padding:.8rem 1rem;font-size:.95rem}
.sol .k,.your .k,.rubric .k{display:inline-block;font-size:.74rem;font-weight:700;letter-spacing:.06em;color:var(--ink-3);margin-bottom:.15rem}
.sol p{margin:.3rem 0}
.sol-ans{padding-bottom:.5rem;border-bottom:1px dashed var(--line-2);margin-bottom:.5rem}
.sol-ans p:first-of-type{font-weight:600}
.miscon{font-size:.88rem;color:var(--warn);margin:.5rem 0 0}
.miscon .k{color:var(--warn)}
.your{margin-top:.8rem;padding:.7rem 1rem;border:1px solid var(--line);border-radius:12px;font-size:.95rem}
.your p{margin:.2rem 0;white-space:pre-wrap;word-break:break-word}
.rubric{margin-top:.8rem;border:1.5px solid color-mix(in srgb,var(--accent) 35%,var(--line));border-radius:12px;padding:.75rem 1rem;background:var(--accent-softer)}
.rubric ul{list-style:none;margin:.3rem 0 0;padding:0;display:flex;flex-direction:column;gap:.35rem}
.rubric label{display:flex;gap:.6rem;align-items:flex-start;cursor:pointer;line-height:1.6;font-size:.94rem}
.rubric input{width:1.1rem;height:1.1rem;margin-top:.28rem;accent-color:var(--ok);flex:none}
.rubric .pts{flex:none;color:var(--ink-3);font-size:.8rem;margin-left:auto;padding-left:.5rem;white-space:nowrap}
.rubric li.static{display:flex;gap:.55rem;font-size:.92rem}
.rubric li.static .m{flex:none;font-weight:800;width:1.1rem}
.rubric li.static.got .m{color:var(--ok)}
.rubric li.static.miss .m{color:var(--bad)}
.rubric .sum{margin-top:.5rem;font-size:.85rem;color:var(--ink-2)}
.num-review{width:100%;border-collapse:collapse;font-size:.92rem;margin-top:.6rem}
.num-review td,.num-review th{padding:.4rem .6rem;border-bottom:1px solid var(--line);text-align:left}
.num-review th{font-size:.78rem;color:var(--ink-3);font-weight:650}
.num-review .ok{color:var(--ok);font-weight:700}
.num-review .bad{color:var(--bad);font-weight:700}
.quiz-summary{text-align:center;padding:1rem 0 .5rem}
.quiz-summary .big{font-size:2.6rem;font-weight:800;line-height:1.1;font-variant-numeric:tabular-nums}
.quiz-summary .big.ok{color:var(--ok)}
.quiz-summary .big.bad{color:var(--bad)}
.quiz-summary p{margin:.4rem auto;max-width:34rem;color:var(--ink-2)}
.passed-badge{display:inline-flex;align-items:center;gap:.5rem;padding:.4rem .9rem;border-radius:99px;background:var(--ok-soft);color:var(--ok);font-weight:700}
.review-list{display:flex;flex-direction:column;gap:.7rem;margin-top:1rem;text-align:left}
details.qrev{border:1px solid var(--line);border-radius:12px;background:var(--surface)}
details.qrev>summary{cursor:pointer;list-style:none;padding:.7rem 1rem;display:flex;gap:.6rem;align-items:center;font-size:.93rem}
details.qrev>summary::-webkit-details-marker{display:none}
details.qrev>summary .m{flex:none;width:1.5rem;height:1.5rem;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:.8rem}
details.qrev>summary .m.ok{background:var(--ok-soft);color:var(--ok)}
details.qrev>summary .m.bad{background:var(--bad-soft);color:var(--bad)}
details.qrev>summary .m.part{background:var(--warn-soft);color:var(--warn)}
details.qrev>summary .s{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-2)}
details.qrev>summary .sc{flex:none;color:var(--ink-3);font-size:.82rem;font-variant-numeric:tabular-nums}
details.qrev[open]>summary{border-bottom:1px solid var(--line)}
details.qrev .qrev-body{padding:.8rem 1rem 1rem}
.burst{position:fixed;left:50%;top:40%;width:0;height:0;pointer-events:none;z-index:100}
.burst i{position:absolute;width:9px;height:9px;border-radius:2px;opacity:0;animation:burst 1.1s var(--ease) forwards}
@keyframes burst{0%{opacity:1;transform:translate(0,0) rotate(0)}100%{opacity:0;transform:translate(var(--dx),var(--dy)) rotate(540deg)}}

/* ---------- exam ---------- */
.exam-bar{position:sticky;top:56px;z-index:30;display:flex;flex-wrap:wrap;gap:.6rem 1rem;align-items:center;background:color-mix(in srgb,var(--surface) 94%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid var(--line);border-radius:14px;padding:.6rem .9rem;margin:0 0 1.2rem;box-shadow:var(--shadow-1)}
.exam-bar .eb-title{font-weight:700;font-size:.95rem}
.exam-bar .eb-prog{color:var(--ink-3);font-size:.85rem;font-variant-numeric:tabular-nums}
.exam-bar .eb-end{margin-left:auto;display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}
.timer{display:inline-flex;align-items:center;gap:.4rem;font:700 1.05rem/1 var(--mono);font-variant-numeric:tabular-nums;padding:.35rem .7rem;border-radius:9px;background:var(--surface-2)}
.timer.low{color:var(--warn);background:var(--warn-soft)}
.timer.crit{color:var(--bad);background:var(--bad-soft);animation:pulse 1s infinite}
.timer.paused{opacity:.6}
@keyframes pulse{50%{opacity:.6}}
.exam-paper{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:1.3rem 1.4rem;box-shadow:var(--shadow-1)}
.navgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(2.5rem,1fr));gap:.35rem;margin:.6rem 0}
.navgrid button{height:2.4rem;border-radius:9px;border:1.5px solid var(--line);background:var(--surface);font-weight:650;font-size:.85rem;cursor:pointer;position:relative;font-variant-numeric:tabular-nums}
.navgrid button.ans{background:var(--accent-soft);border-color:transparent;color:var(--accent)}
.navgrid button.cur{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 30%,transparent)}
.navgrid button.flg::after{content:"";position:absolute;top:3px;right:3px;width:7px;height:7px;border-radius:50%;background:var(--warn)}
.navgrid button.ok{background:var(--ok-soft);color:var(--ok);border-color:transparent}
.navgrid button.bad{background:var(--bad-soft);color:var(--bad);border-color:transparent}
.legend{display:flex;flex-wrap:wrap;gap:.9rem;font-size:.78rem;color:var(--ink-3)}
.legend i{display:inline-block;width:.8rem;height:.8rem;border-radius:3px;vertical-align:-.1rem;margin-right:.3rem;background:var(--surface);border:1.5px solid var(--line)}
.legend i.ans{background:var(--accent-soft);border-color:transparent}
.legend i.flg{background:var(--warn);border-color:transparent;border-radius:50%}
.pause-cover{position:fixed;inset:0;z-index:65;background:color-mix(in srgb,var(--bg) 92%,transparent);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);display:grid;place-items:center;padding:1.5rem}
.pause-cover .card{max-width:26rem;text-align:center}
.score-hero{display:grid;grid-template-columns:auto 1fr;gap:1.6rem;align-items:center}
.score-big{font-size:3.2rem;font-weight:800;line-height:1;font-variant-numeric:tabular-nums}
.score-big small{font-size:1rem;font-weight:600;color:var(--ink-3)}
.ap-badge{width:96px;height:96px;border-radius:24px;display:grid;place-items:center;font-size:2.8rem;font-weight:850;background:var(--accent-soft);color:var(--accent)}
.ap-badge.s5,.ap-badge.s4{background:var(--ok-soft);color:var(--ok)}
.ap-badge.s3{background:var(--warn-soft);color:var(--warn)}
.ap-badge.s2,.ap-badge.s1{background:var(--bad-soft);color:var(--bad)}
.kv{display:grid;grid-template-columns:auto 1fr;gap:.35rem 1rem;font-size:.92rem;margin:.6rem 0}
.kv dt{color:var(--ink-3)}
.kv dd{margin:0}
.btable{width:100%;border-collapse:collapse;font-size:.9rem}
.btable th,.btable td{padding:.5rem .6rem;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle}
.btable th{font-size:.78rem;color:var(--ink-3);font-weight:650}
.btable td.num{font-variant-numeric:tabular-nums;white-space:nowrap}
.btable .bar{min-width:5rem}
.weak{color:var(--bad);font-weight:650}

/* ---------- flashcards ---------- */
.flash-wrap{max-width:40rem;margin:0 auto}
.flash{perspective:1400px;cursor:pointer;margin:1rem 0}
.flash-inner{position:relative;min-height:260px;transition:transform .5s var(--ease);transform-style:preserve-3d;display:grid}
.flash.flipped .flash-inner{transform:rotateY(180deg)}
.flash-face{grid-area:1/1;backface-visibility:hidden;-webkit-backface-visibility:hidden;background:var(--surface);border:1px solid var(--line);border-radius:20px;box-shadow:var(--shadow-2);padding:1.6rem 1.6rem 1.2rem;display:flex;flex-direction:column;justify-content:center;gap:.6rem;font-size:1.08rem;line-height:1.75}
.flash-face.back{transform:rotateY(180deg);background:var(--accent-softer)}
.flash-face .side{position:absolute;top:.9rem;left:1.1rem;font-size:.74rem;color:var(--ink-3);letter-spacing:.06em;font-weight:700}
.flash-face .src{position:absolute;bottom:.8rem;right:1.1rem;font-size:.74rem;color:var(--ink-4)}
.flash-face .term{font-size:1.5rem;font-weight:700;line-height:1.35}
.flash-face .term-en{font-size:1.15rem;color:var(--accent);font-weight:600}
.flash-face .def{font-size:.98rem;color:var(--ink-2)}
.boxes{display:grid;grid-template-columns:repeat(5,1fr);gap:.4rem;margin:.6rem 0}
.boxes div{background:var(--surface-2);border-radius:10px;padding:.5rem;text-align:center;font-size:.78rem;color:var(--ink-3)}
.boxes b{display:block;font-size:1.15rem;color:var(--ink);font-variant-numeric:tabular-nums}

/* ---------- graphs ---------- */
.graph-box{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm);padding:.6rem;display:flex;justify-content:center}
.graph-box svg.gsvg{width:100%;height:auto;max-width:560px;display:block}
.gsvg{font-family:var(--sans);overflow:visible}
.gsvg text{fill:var(--ink);stroke:none;font-size:15px}
.gsvg .ax{stroke:var(--ink);stroke-width:2;fill:none}
.gsvg .c1{stroke:var(--c1);stroke-width:2.6;fill:none}
.gsvg .c2{stroke:var(--c2);stroke-width:2.6;fill:none}
.gsvg .c3{stroke:var(--c3);stroke-width:2.6;fill:none}
.gsvg .guide{stroke:var(--ink-3);stroke-width:1.3;stroke-dasharray:5 4;fill:none}
.gsvg .area{fill:var(--area);fill-opacity:.18;stroke:none}
.gsvg .area2{fill:var(--area2);fill-opacity:.22;stroke:none}
.gsvg .lbl{fill:var(--ink);font-size:15px;font-weight:600;stroke:none}
.gsvg .note{fill:var(--ink-3);font-size:12.5px;stroke:none}
.gsvg .pt{fill:var(--ink);stroke:var(--surface);stroke-width:1.5}
.gsvg text.c1,.gsvg .lbl.c1{fill:var(--c1);stroke:none}
.gsvg text.c2,.gsvg .lbl.c2{fill:var(--c2);stroke:none}
.gsvg text.c3,.gsvg .lbl.c3{fill:var(--c3);stroke:none}
.gsvg .pt.c1,.gsvg circle.c1{fill:var(--c1);stroke:none}
.gsvg .pt.c2,.gsvg circle.c2{fill:var(--c2);stroke:none}
.gsvg .pt.c3,.gsvg circle.c3{fill:var(--c3);stroke:none}
.gsvg marker path,.gsvg marker polygon{fill:currentColor}
.graph-fig{margin:1.4rem 0}
.graph-fig figcaption{text-align:center;font-size:.86rem;color:var(--ink-2);margin-top:.45rem}
.graph-fig figcaption .en{display:block;color:var(--ink-3);font-size:.78rem}
a.graph-ref{background:var(--accent-soft);border-radius:6px;padding:0 .35rem;font-size:.92em}
.gcard .graph-box{padding:.3rem;border:0;background:var(--surface-2);aspect-ratio:4/3;align-items:center;margin-bottom:.5rem}
.gcard .graph-box svg.gsvg{max-height:100%}
.gdetail{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:1.6rem;align-items:start}
.gdetail .graph-box{padding:1rem}
.gdetail .graph-box.hidden-fig{min-height:260px;align-items:center;color:var(--ink-3);background:repeating-linear-gradient(45deg,var(--surface-2),var(--surface-2) 12px,var(--surface) 12px,var(--surface) 24px)}
.glist{margin:.3rem 0 1rem;padding-left:1.3rem}
.glist li{margin:.3rem 0}
.labels-check{list-style:none;padding:0;margin:.5rem 0;display:flex;flex-direction:column;gap:.4rem}
.labels-check label{display:flex;gap:.55rem;align-items:flex-start;cursor:pointer}
.labels-check input{margin-top:.35rem;accent-color:var(--ok)}
.variants{display:grid;gap:.8rem;grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}

/* ---------- glossary ---------- */
.searchbar{position:sticky;top:56px;z-index:20;background:var(--bg);padding:.6rem 0 .8rem;display:flex;flex-wrap:wrap;gap:.6rem;align-items:center}
.searchbar .input{max-width:30rem;flex:1 1 16rem}
.gl-list{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);overflow:hidden}
.gl-item{padding:.85rem 1.1rem;border-top:1px solid var(--line)}
.gl-item:first-child{border-top:0}
.gl-item .t{display:flex;flex-wrap:wrap;align-items:baseline;gap:.3rem .7rem}
.gl-item .zh{font-weight:700;font-size:1.02rem}
.gl-item .enm{color:var(--accent);font-weight:600}
.gl-item .d{margin:.25rem 0 0;color:var(--ink-2);font-size:.93rem;line-height:1.7}
.gl-item .meta{margin-top:.3rem;display:flex;gap:.4rem;flex-wrap:wrap;align-items:center;font-size:.8rem}
mark{background:var(--mark);color:inherit;border-radius:3px;padding:0 .1em}

/* ---------- modal / toast ---------- */
.modal-back{position:fixed;inset:0;z-index:80;background:rgba(15,18,22,.42);display:grid;place-items:center;padding:1.2rem;animation:fade .15s}
@keyframes fade{from{opacity:0}}
.modal{background:var(--surface);border-radius:18px;box-shadow:0 20px 60px rgba(0,0,0,.25);max-width:30rem;width:100%;padding:1.4rem 1.5rem 1.2rem;animation:pop .2s var(--ease)}
.modal h2{margin:0 0 .5rem;font-size:1.15rem}
.modal .m-body{color:var(--ink-2);font-size:.95rem}
.modal .m-body p{margin:.4rem 0}
.modal .btn-row{margin-top:1.2rem;justify-content:flex-end}
.toast-wrap{position:fixed;left:50%;bottom:1.4rem;transform:translateX(-50%);z-index:90;display:flex;flex-direction:column;gap:.5rem;align-items:center;pointer-events:none}
@media (max-width:760px){.toast-wrap{bottom:calc(76px + env(safe-area-inset-bottom))}}
/* 讲课模式的翻页栏贴在屏幕底部：提示条往上让开，不挡"下一页 / 继续" */
html:has(#ls-deck:not([hidden]) .deck-ctrl) .toast-wrap{bottom:5.4rem}
@media (max-width:760px){html:has(#ls-deck:not([hidden]) .deck-ctrl) .toast-wrap{bottom:calc(130px + env(safe-area-inset-bottom))}}
.toast{background:var(--ink);color:var(--bg);padding:.6rem 1rem;border-radius:11px;font-size:.9rem;box-shadow:var(--shadow-2);animation:toast .25s var(--ease);max-width:90vw}
.toast.ok{background:var(--ok);color:#fff}
.toast.bad{background:var(--bad);color:#fff}
@keyframes toast{from{opacity:0;transform:translateY(8px)}}

/* ---------- lock ---------- */
.lock-page{max-width:34rem;margin:3rem auto;text-align:center}
.lock-page .lk{width:4rem;height:4rem;margin:0 auto 1rem;border-radius:50%;display:grid;place-items:center;background:var(--lock-soft);color:var(--lock)}
.lock-page .lk svg.ic{width:1.8rem;height:1.8rem}
.lock-page h1{font-size:1.4rem;margin:.2rem 0 .5rem}
.lock-page p{color:var(--ink-2)}

/* ---------- settings ---------- */
.set-row{display:flex;gap:1rem;align-items:flex-start;justify-content:space-between;padding:1rem 0;border-top:1px solid var(--line);flex-wrap:wrap}
.set-row:first-child{border-top:0}
.set-row .sr-text{flex:1 1 18rem}
.set-row .sr-text b{display:block}
.set-row .sr-text span{color:var(--ink-3);font-size:.87rem}
.tts-pick{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap;max-width:100%}
.tts-pick select{max-width:min(22rem,100%)}
.switch{position:relative;width:46px;height:27px;flex:none;border-radius:99px;background:var(--line-2);border:0;cursor:pointer;transition:background .2s}
.switch::after{content:"";position:absolute;top:3px;left:3px;width:21px;height:21px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.25);transition:transform .2s var(--ease)}
.switch[aria-checked="true"]{background:var(--warn)}
.switch.okc[aria-checked="true"]{background:var(--ok)}
.switch[aria-checked="true"]::after{transform:translateX(19px)}
.free-banner{display:flex;align-items:center;gap:.5rem;justify-content:center;background:var(--warn-soft);color:var(--warn);font-size:.82rem;padding:.35rem 1rem;border-bottom:1px solid var(--line)}

/* ---------- login ---------- */
.login-page{min-height:100vh;display:grid;place-items:center;background:radial-gradient(1200px 600px at 20% -10%,var(--accent-soft),transparent 60%),radial-gradient(900px 500px at 110% 110%,var(--gold-soft),transparent 60%),var(--bg)}
.login-wrap{width:100%;max-width:25rem;padding:1.5rem 1.25rem;margin:0 auto}
.login-card{background:var(--surface);border:1px solid var(--line);border-radius:22px;box-shadow:var(--shadow-2);padding:2rem 1.8rem 1.6rem}
.login-mark{width:3.2rem;height:3.2rem;border-radius:15px;display:grid;place-items:center;background:var(--accent);color:var(--accent-ink);font-weight:850;letter-spacing:.04em;margin-bottom:1.1rem;font-size:1.05rem}
.login-card h1{font-size:1.32rem;line-height:1.4;margin:0 0 .35rem}
.login-sub{color:var(--ink-3);font-size:.9rem;margin:0 0 1.4rem;line-height:1.6}
.login-card .field input{padding:.75rem .9rem;font-size:1.05rem;letter-spacing:.06em}
.login-msg{min-height:1.5em;margin:.8rem 0 0;font-size:.9rem;color:var(--bad);text-align:center}
.login-msg.ok{color:var(--ok)}
.login-hint{margin:.6rem 0 0;font-size:.78rem;color:var(--ink-4);text-align:center}
.login-foot{text-align:center;font-size:.86rem;margin-top:1.2rem}
.login-foot a{color:var(--ink-3)}
.shake{animation:shake .4s}
@keyframes shake{20%,60%{transform:translateX(-6px)}40%,80%{transform:translateX(6px)}}

/* ---------- responsive ---------- */
@media (max-width: 980px){
  .layout{grid-template-columns:1fr;gap:1rem}
  .toc{position:static;max-height:none;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:.45rem 1rem}
  .toc details summary{list-style:revert}
  .toc .toc-extra{display:none}
  .prose{max-width:none}
  .gdetail{grid-template-columns:1fr}
}
@media (max-width: 640px){
  body{font-size:15.5px}
  .main{padding:1.1rem 1rem 3rem}
  .hero{grid-template-columns:1fr;padding:1.25rem 1.2rem}
  .hero .ring{justify-self:center;order:-1;width:130px;height:130px}
  .pager{grid-template-columns:1fr}
  .pager .next{text-align:left}
  .quiz-body{padding:1rem .95rem}
  .exam-paper{padding:1rem}
  .score-hero{grid-template-columns:1fr;text-align:center;justify-items:center}
  .row{padding:.8rem .9rem}
  .exam-bar{top:56px;border-radius:12px;padding:.45rem .6rem;gap:.3rem .6rem}
  /* 手机上考试栏压成两行（计时 · 语言 · 交卷 一行），少挡题目 */
  .exam-bar .eb-end{width:100%;margin-left:0;gap:.35rem;justify-content:space-between}
  .exam-bar .seg button{padding:.26rem .5rem;font-size:.78rem}
  .exam-bar .timer{padding:.3rem .55rem;font-size:.98rem}
  .exam-bar .btn-sm{padding:.34rem .6rem}
  .prose{font-size:1rem;line-height:1.82}
}
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
}

/* ---------- print ---------- */
@media print{
  .topbar,.tabbar,.toc,.quiz-slot,.quiz-h2,.lesson-foot,.read-box,.copy,.btn,.exam-bar,.free-banner,.toast-wrap,.skip{display:none!important}
  body{background:#fff;color:#000;font-size:11pt;padding:0}
  .main{max-width:none;padding:0}
  .layout{display:block}
  .prose{max-width:none}
  details.reveal{border:1px solid #ccc}
  details.reveal>summary{display:none}
  a{color:#000}
  .view{animation:none}
}

/* 中文在 flex 收缩时会按单字换行：标签类一律不换行 */
.chip,.btn,.timer,.seg button{white-space:nowrap}

/* 复习单：列表项内嵌图 */
.prose li.gitem{list-style:none;margin:1.2rem 0 1.2rem -1.45rem;padding:1rem 1.1rem;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow-1)}
.prose li.gitem>.graph-fig{margin:0 0 .7rem}
.prose li.gitem>.graph-fig .graph-box{max-width:440px;margin:0 auto;border:0;background:var(--surface-2)}
.prose li.gitem>p{margin:.3rem 0}
.prose .choices,.quiz .choices{padding-left:0;margin-left:0}
.prose .choices li,.prose .choices .choice{margin:0}
.prose .qcard p,.quiz .qcard p{margin:.35rem 0}
.prose .quiz ul,.prose .quiz ol{margin:.4rem 0}
.hero>div{min-width:0}
.btn-lg{white-space:normal;max-width:100%}
.btn{max-width:100%}
.btable b{white-space:nowrap}
@media (max-width: 640px){.hero .btn-row .btn-lg{width:100%;justify-content:space-between;text-align:left}}

/* ================= 知识图谱 ================= */
:root{
  --kt-bigidea:#7a4d8c; --kt-skill:#a0702c; --kt-unit:#355c8c; --kt-lesson:#3f7f6c;
  --kt-kp:#c0924e; --kt-concept:#b5616c; --kt-graph:#2c7fb8; --kt-method:#7b68c4;
  --kg-canvas:#fbfaf7; --kg-edge:#9aa3ad;
}
@media (prefers-color-scheme: dark){
  :root{
    --kt-bigidea:#c49ad4; --kt-skill:#d8a65e; --kt-unit:#8fb3e0; --kt-lesson:#7cc4ab;
    --kt-kp:#e2bd84; --kt-concept:#e3939c; --kt-graph:#74b6e6; --kt-method:#b3a5ee;
    --kg-canvas:#171a1e; --kg-edge:#5d6670;
  }
}
.kg-ic{width:1em;height:1em;flex:none;overflow:visible;vertical-align:-.12em}
.kg-ic .sh{stroke-width:1.2}
.t-bigidea{--kc:var(--kt-bigidea)} .t-skill{--kc:var(--kt-skill)} .t-unit{--kc:var(--kt-unit)} .t-lesson{--kc:var(--kt-lesson)}
.t-kp{--kc:var(--kt-kp)} .t-concept{--kc:var(--kt-concept)} .t-graph{--kc:var(--kt-graph)} .t-method{--kc:var(--kt-method)}
.kg-ic .sh{fill:var(--kc);stroke:var(--kc)}
.kg-ic .sh.ring{fill:transparent;stroke-width:2}
.kg-view .page-head{margin:0}
.kg-head{display:grid;grid-template-columns:minmax(0,1fr) minmax(16rem,26rem) auto;gap:.8rem 1.2rem;align-items:center;margin:0 0 1rem}
.kg-title h1{font-size:clamp(1.3rem,2.6vw,1.75rem);margin:.05rem 0 .15rem;line-height:1.3}
.kg-title p{margin:0}
.kg-search{position:relative}
.kg-search .input{padding-left:2.2rem;padding-right:2.2rem;border-radius:12px}
.kg-sicon{position:absolute;left:.75rem;top:50%;transform:translateY(-50%);color:var(--ink-3);display:flex}
.kg-search kbd{position:absolute;right:.6rem;top:50%;transform:translateY(-50%);font:600 .72rem var(--mono);color:var(--ink-3);border:1px solid var(--line-2);border-radius:5px;padding:0 .35rem;background:var(--surface-2)}
.kg-sug{position:absolute;left:0;right:0;top:calc(100% + 6px);z-index:35;background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-2);padding:.3rem;max-height:60vh;overflow:auto}
.kg-opt{display:flex;align-items:center;gap:.55rem;width:100%;text-align:left;background:none;border:0;border-radius:8px;padding:.45rem .6rem;cursor:pointer;font-size:.9rem;color:var(--ink)}
.kg-opt.cur,.kg-opt:hover{background:var(--accent-softer)}
.kg-opt .o-zh{font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kg-opt .o-en{color:var(--ink-3);font-size:.78rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex:1}
.kg-opt .o-t{font-size:.72rem;color:var(--ink-3);white-space:nowrap}
.kg-none{padding:.6rem;color:var(--ink-3);font-size:.88rem}
.kg-seg a,.kg-seg span{display:inline-block;padding:.32rem .9rem;border-radius:999px;font-size:.86rem;color:var(--ink-2);white-space:nowrap}
.kg-seg a:hover{text-decoration:none;color:var(--ink)}
.kg-seg a[aria-selected="true"]{background:var(--surface);color:var(--accent);font-weight:650;box-shadow:var(--shadow-1)}
.kg-seg .dis{color:var(--ink-4);cursor:not-allowed}

/* 全景 */
.kg-canvas{position:relative;height:calc(100vh - 210px);min-height:440px;background:var(--kg-canvas);border:1px solid var(--line);border-radius:18px;overflow:hidden;box-shadow:var(--shadow-1)}
.kg-svg{width:100%;height:100%;display:block;touch-action:none;cursor:grab;user-select:none;-webkit-user-select:none;--kz:1;--ns:1}
.kg-svg.panning{cursor:grabbing}
.kg-svg .e{stroke:var(--kg-edge);stroke-width:.8;opacity:.32;vector-effect:non-scaling-stroke;transition:opacity .15s}
.kg-svg .e.et-prereq{stroke:var(--accent);opacity:.4}
.kg-svg .e.et-related{stroke-dasharray:3 3}
.kg-svg .e.far{opacity:0}
.kg-svg.show-far .e.far{opacity:.08}
.kg-svg.no-rel .e.et-related{display:none}
.kg-svg .n{cursor:pointer;transition:opacity .15s}
.kg-svg .n .sh{fill:var(--kc);stroke:var(--kg-canvas);stroke-width:1;vector-effect:non-scaling-stroke;transform:scale(var(--ns));transition:transform .12s}
.kg-svg .n .sh.ring{fill:var(--kg-canvas);stroke:var(--kc);stroke-width:1.4}
.kg-svg .n:hover .sh{transform:scale(calc(var(--ns) * 1.35))}
.kg-svg .lb{display:none;fill:var(--ink);font-size:calc(11px / var(--kz));font-weight:600;paint-order:stroke;stroke:var(--kg-canvas);stroke-width:calc(3.2px / var(--kz));stroke-linejoin:round;transform:translateY(calc(var(--r) * var(--ns) * 1px + 11px / var(--kz)))}
.kg-svg .t-unit .lb,.kg-svg .t-bigidea .lb,.kg-svg .t-skill .lb{font-size:calc(13px / var(--kz));font-weight:750}
.kg-svg .t-concept .lb{font-weight:500;font-size:calc(10px / var(--kz))}
.kg-svg .n.lbon .lb{display:block}
.kg-svg.hl .n{opacity:.12}
.kg-svg.hl .e{opacity:.04}
.kg-svg.hl .n.on{opacity:1}
.kg-svg.hl .n.on .lb{display:block}
.kg-svg.hl .e.on{opacity:.85;stroke-width:1.5;stroke:var(--ink-3)}
.kg-svg.hl .e.on.et-prereq{stroke:var(--accent)}
.kg-svg .n.cur .sh{stroke:var(--ink);stroke-width:2;transform:scale(calc(var(--ns) * 1.5))}
.kg-svg .n.cur .lb{font-size:calc(13px / var(--kz));font-weight:800}
.kg-svg.hide-bigidea .t-bigidea,.kg-svg.hide-bigidea .x-bigidea,
.kg-svg.hide-skill .t-skill,.kg-svg.hide-skill .x-skill,
.kg-svg.hide-unit .t-unit,.kg-svg.hide-unit .x-unit,
.kg-svg.hide-lesson .t-lesson,.kg-svg.hide-lesson .x-lesson,
.kg-svg.hide-kp .t-kp,.kg-svg.hide-kp .x-kp,
.kg-svg.hide-concept .t-concept,.kg-svg.hide-concept .x-concept,
.kg-svg.hide-graph .t-graph,.kg-svg.hide-graph .x-graph,
.kg-svg.hide-method .t-method,.kg-svg.hide-method .x-method{display:none}
.kg-svg.c-mastery .n[class*="st-"] .sh{fill:var(--surface-3);stroke:var(--ink-4)}
.kg-svg.c-mastery .n.st-done .sh{fill:var(--ok);stroke:var(--ok)}
.kg-svg.c-mastery .n.st-prog .sh{fill:var(--warn);stroke:var(--warn)}
.kg-svg.c-mastery .n.st-lock .sh{fill:var(--lock);stroke:var(--lock);opacity:.45}
.kg-svg.c-mastery .n.st-new .sh{fill:var(--surface);stroke:var(--ink-3)}
.kg-svg.c-mastery .n:not([class*="st-"]) .sh{opacity:.35}
.kg-legend{position:absolute;left:.8rem;bottom:2.2rem;background:color-mix(in srgb,var(--surface) 92%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid var(--line);border-radius:14px;padding:.55rem .55rem .45rem;box-shadow:var(--shadow-1);display:flex;flex-direction:column;gap:.05rem;max-height:calc(100% - 4rem);overflow:auto}
.kl-h{font-size:.7rem;color:var(--ink-3);letter-spacing:.05em;padding:0 .35rem .2rem;font-weight:650}
.kg-lg{display:flex;align-items:center;gap:.5rem;background:none;border:0;border-radius:8px;padding:.22rem .4rem;font-size:.84rem;color:var(--ink);cursor:pointer;text-align:left}
.kg-lg:hover{background:var(--surface-2)}
.kg-lg small{margin-left:auto;padding-left:.6rem;color:var(--ink-3);font-size:.72rem;font-variant-numeric:tabular-nums}
.kg-lg.off{color:var(--ink-4);text-decoration:line-through}
.kg-lg.off .kg-ic{opacity:.3}
.kg-stl{display:none;margin-top:.35rem;padding-top:.35rem;border-top:1px solid var(--line)}
.kg-canvas.c-mastery .kg-stl{display:block}
.kg-st{display:flex;align-items:center;gap:.45rem;font-size:.8rem;padding:.1rem .4rem;color:var(--ink-2)}
.kg-st i{width:.75rem;height:.75rem;border-radius:50%;display:inline-block}
i.st-done,.sd.st-done{background:var(--ok)} i.st-prog,.sd.st-prog{background:var(--warn)} i.st-new,.sd.st-new{background:var(--surface);border:1.5px solid var(--ink-3)} i.st-lock,.sd.st-lock{background:var(--lock);opacity:.55}
.chip.st-done{background:var(--ok-soft);color:var(--ok);border-color:transparent}
.chip.st-prog{background:var(--warn-soft);color:var(--warn);border-color:transparent}
.chip.st-lock{background:var(--lock-soft);color:var(--lock);border-color:transparent}
.kg-zoom{position:absolute;right:.8rem;bottom:2.2rem;display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-1);overflow:hidden}
.kg-zoom button{width:2.4rem;height:2.4rem;border:0;background:none;font-size:1.15rem;cursor:pointer;color:var(--ink-2)}
.kg-zoom button+button{border-top:1px solid var(--line)}
.kg-zoom button:hover{background:var(--surface-2);color:var(--ink)}
.kg-tools{position:absolute;right:.8rem;top:.8rem;display:flex;gap:.4rem}
.kg-tools .btn{background:color-mix(in srgb,var(--surface) 92%,transparent)}
.kg-pop{position:absolute;right:.8rem;top:3.4rem;z-index:6;width:min(20rem,calc(100% - 1.6rem));background:var(--surface);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow-2);padding:.8rem .9rem}
.kp-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:.4rem}
.kp-row{display:flex;align-items:center;justify-content:space-between;gap:.6rem;padding:.4rem 0;font-size:.86rem}
label.kp-row{justify-content:flex-start}
.kc-x{border:0;background:none;color:var(--ink-3);cursor:pointer;padding:.2rem;border-radius:6px;display:flex}
.kc-x:hover{background:var(--surface-2);color:var(--ink)}
.kg-hint{position:absolute;left:.9rem;top:.75rem;margin:0;text-align:left;font-size:.74rem;color:var(--ink-3);pointer-events:none}
.kg-tip{position:absolute;z-index:5;max-width:220px;pointer-events:none;background:var(--ink);color:var(--bg);border-radius:9px;padding:.4rem .6rem;font-size:.8rem;line-height:1.45;box-shadow:var(--shadow-2);display:flex;flex-direction:column}
.kg-tip span{opacity:.8}
.kg-tip small{opacity:.65;font-size:.72rem}
.kg-card{position:absolute;right:.8rem;top:3.6rem;z-index:7;width:min(22rem,calc(100% - 1.6rem));max-height:calc(100% - 7rem);overflow:auto;background:var(--surface);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow-2);padding:.9rem 1rem;animation:pop .2s var(--ease)}
.kg-card.static{position:static;width:auto;max-height:none;animation:none}
.kc-top{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;font-size:.78rem;color:var(--ink-3)}
.kc-type{display:inline-flex;align-items:center;gap:.35rem;font-weight:700;color:var(--kc)}
.kc-loc{min-width:0}
.kc-top .kc-x{margin-left:auto}
.kc-title{margin:.35rem 0 .2rem;font-size:1.15rem;line-height:1.4}
.kc-en{display:block;font-size:.82rem;font-weight:500;color:var(--ink-3)}
.kc-desc{margin:.35rem 0;font-size:.9rem;color:var(--ink-2);line-height:1.7}
.kg-card .btn-row{gap:.4rem}
.kg-dock{position:sticky;bottom:.8rem;z-index:8;margin-top:1rem}
.kg-dock .kg-card{box-shadow:var(--shadow-2);border-color:color-mix(in srgb,var(--accent) 25%,var(--line))}

/* 分层 */
.kl-chips{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center;margin:0 0 .8rem}
.kl-chips .lbl{margin-right:.2rem}
.kl-chips .chip{cursor:pointer;font-size:.82rem;padding:.25rem .7rem}
.kl-chips .chip b{font-weight:700;margin-left:.15rem;color:var(--ink-3)}
.kl-steps{display:none}
.kl-cols{display:grid;grid-template-columns:repeat(var(--ncol),minmax(10.5rem,1fr));gap:.8rem;overflow-x:auto;padding-bottom:.4rem;align-items:start}
.kl-col{background:var(--surface);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow-1);display:flex;flex-direction:column;max-height:calc(100vh - 260px);min-height:12rem}
.kl-col header{padding:.75rem .85rem .55rem;border-bottom:1px solid var(--line);display:grid;grid-template-columns:auto 1fr auto;column-gap:.45rem;align-items:baseline}
.kl-no{font:700 .72rem var(--mono);color:var(--accent)}
.kl-col header b{font-size:.98rem}
.kl-tot{font-size:.8rem;color:var(--ink-3);font-variant-numeric:tabular-nums}
.kl-col header small{grid-column:1/-1;color:var(--ink-3);font-size:.76rem;margin-top:.1rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kl-list{overflow:auto;padding:.45rem;display:flex;flex-direction:column;gap:.3rem}
.kl-item{display:flex;align-items:center;gap:.5rem;width:100%;text-align:left;background:var(--surface);border:1.5px solid var(--line);border-radius:11px;padding:.5rem .6rem;cursor:pointer;color:var(--ink);transition:border-color .12s,background .12s}
.kl-item:hover{border-color:color-mix(in srgb,var(--kc) 60%,var(--line))}
.kl-item.sel{border-color:var(--kc);background:color-mix(in srgb,var(--kc) 10%,var(--surface))}
.kl-item.dim{opacity:.45}
.kl-item .nm{flex:1;min-width:0;font-size:.88rem;font-weight:600;line-height:1.35}
.kl-item .nm small{display:block;font-weight:400;color:var(--ink-3);font-size:.74rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kl-item .ct{flex:none;font-size:.78rem;color:var(--ink-3);font-variant-numeric:tabular-nums;background:var(--surface-2);border-radius:99px;padding:0 .45rem}
.sd{flex:none;width:.55rem;height:.55rem;border-radius:50%;display:inline-block}
.kl-group+.kl-group{margin-top:.5rem}
.kl-gh{display:flex;align-items:center;gap:.4rem;font-size:.78rem;font-weight:700;color:var(--ink-2);padding:.2rem .2rem .3rem}
.kl-gh span{color:var(--ink-3);font-weight:500}
.kl-empty{color:var(--ink-4);text-align:center;margin:1rem 0}

/* 专注 */
.kf-jump{display:flex;flex-wrap:wrap;gap:.35rem;margin:0 0 .8rem}
.kf-jump .chip{cursor:pointer}
.kf-wrap{position:relative;background:var(--surface);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow-1);padding:.6rem 1rem}
.kf-lines{position:absolute;left:0;top:0;pointer-events:none;overflow:visible}
.kf-lines path{fill:none;stroke:var(--line-2);stroke-width:1.3;stroke-dasharray:4 4}
.kf-lines path.kl-pre,.kf-lines path.kl-earlier,.kf-lines path.kl-post{stroke:var(--accent);opacity:.55;stroke-dasharray:none}
.kf-lines path.kl-loc{stroke:var(--kt-lesson);opacity:.5}
.kf-lines path.kl-big{stroke:var(--kt-bigidea);opacity:.45}
.kf-lines path.kl-graph{stroke:var(--kt-graph);opacity:.5}
.kf-lines path.kl-method{stroke:var(--kt-method);opacity:.5}
.kf-lines path.kl-concept{stroke:var(--kt-concept);opacity:.4}
.kf-lines path.kl-skill{stroke:var(--kt-skill);opacity:.45}
.kf-row{position:relative;display:grid;grid-template-columns:7.5rem minmax(0,1fr);gap:.8rem;align-items:center;padding:1.05rem 0;z-index:1}
.kf-row+.kf-row{border-top:1px dashed color-mix(in srgb,var(--line) 70%,transparent)}
.kf-lab{font-size:.8rem;color:var(--ink-3);font-weight:650}
.kf-lab small{font-weight:500;color:var(--ink-4)}
.kf-items{display:flex;flex-wrap:wrap;gap:.45rem .5rem;justify-content:center}
.kf-chip{display:inline-flex;align-items:center;gap:.4rem;max-width:100%;padding:.38rem .7rem;border-radius:10px;border:1.5px solid color-mix(in srgb,var(--kc) 45%,var(--line));background:var(--surface);color:var(--ink);font-size:.85rem;font-weight:600;line-height:1.35;box-shadow:var(--shadow-1)}
.kf-chip span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:16rem}
.kf-chip:hover{text-decoration:none;border-color:var(--kc);background:color-mix(in srgb,var(--kc) 8%,var(--surface))}
.kf-chip.cur{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-size:1rem;padding:.55rem 1rem;border-radius:12px;box-shadow:0 6px 20px color-mix(in srgb,var(--accent) 30%,transparent)}
.kf-chip.cur .kg-ic .sh{fill:var(--accent-ink);stroke:var(--accent-ink)}
.kf-chip.cur span{max-width:22rem}
.kf-cur{padding:1.4rem 0}
.kf-none{font-size:.82rem;color:var(--ink-4)}
.kf-expand{border:1px dashed var(--line-2);background:var(--surface-2);border-radius:10px;padding:.35rem .8rem;font-size:.82rem;color:var(--ink-2);cursor:pointer}
.kf-expand:hover{border-color:var(--accent);color:var(--accent)}
.kf-more{padding:.5rem 0}

@media (max-width: 980px){
  .kg-head{grid-template-columns:1fr auto}
  .kg-search{grid-column:1/-1;order:3}
}
@media (max-width: 760px){
  .kg-head{grid-template-columns:1fr;gap:.6rem}
  .kg-seg{justify-self:start}
  .kg-canvas{height:calc(100vh - 290px - env(safe-area-inset-bottom));min-height:380px;border-radius:14px}
  .kg-legend{left:.5rem;bottom:2rem;padding:.35rem;font-size:.78rem;max-height:46%}
  .kg-legend .kl-h{display:none}
  .kg-lg{padding:.15rem .3rem;font-size:.76rem}
  .kg-lg small{display:none}
  .kg-zoom{right:.5rem;bottom:2rem}
  .kg-card{left:.5rem;right:.5rem;top:auto;bottom:.5rem;width:auto;max-height:58%;border-radius:16px}
  .kg-tools{right:.5rem;top:.5rem}
  .kg-pop{right:.5rem;top:3rem}
  .kl-steps{display:flex;flex-wrap:wrap;align-items:center;gap:.25rem;margin:0 0 .7rem;font-size:.8rem}
  .kl-steps i{color:var(--ink-4);font-style:normal}
  .kl-steps button{border:1px solid var(--line);background:var(--surface);border-radius:99px;padding:.22rem .6rem;color:var(--ink-2);cursor:pointer;max-width:9.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .kl-steps button span{font:700 .66rem var(--mono);color:var(--accent);margin-right:.25rem}
  .kl-steps button.cur{border-color:var(--accent);color:var(--accent);background:var(--accent-softer);font-weight:650}
  .kl-cols{display:block;overflow:visible}
  .kl-col{display:none;max-height:none}
  .kl-col.active{display:flex}
  .kg-dock{bottom:calc(72px + env(safe-area-inset-bottom))}
  .kf-wrap{padding:.4rem .7rem}
  .kf-row{grid-template-columns:1fr;gap:.45rem;padding:.8rem 0}
  .kf-lab{text-align:center}
  .kf-chip{font-size:.8rem;padding:.32rem .55rem}
  .kf-chip span{max-width:12rem}
  .kf-chip.cur{font-size:.95rem}
}
@media print{.kg-canvas,.kg-search,.kg-seg{display:none}}
.kg-svg .e.xu{opacity:.13}
.kg-svg.hl .e.xu.on{opacity:.85}
.kg-svg.hl .e.xu:not(.on){opacity:.03}
.kg-card.compact .kc-desc,.kg-card.compact .kc-meta{display:none}
.kg-card.compact .kc-title{margin:.15rem 0 .45rem;font-size:1.02rem}
.kg-card.compact .kc-en{display:inline;margin-left:.4rem}
.kc-tg{margin-left:auto;padding:.15rem .55rem}
.kc-tg+.kc-x{margin-left:0}
@media (max-width: 760px){
  .kg-canvas{height:calc(100vh - 380px - env(safe-area-inset-bottom));min-height:400px}
  .kg-legend{left:.5rem;right:.5rem;top:2.3rem;bottom:auto;flex-direction:row;flex-wrap:nowrap;overflow-x:auto;max-height:none;padding:.2rem .3rem;border-radius:11px;scrollbar-width:none}
  .kg-legend::-webkit-scrollbar{display:none}
  .kg-lg{flex:none;white-space:nowrap}
  .kg-stl{display:none!important}
  .kg-hint{top:.6rem;left:.7rem;right:5.5rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .kg-tools{top:.35rem}
  .kg-tools .btn{padding:.25rem .55rem}
  .kg-pop{top:2.9rem}
  .kg-zoom{bottom:.6rem}
}
@media (max-width: 760px){
  .kg-title .eyebrow{display:none}
  .kg-title h1{font-size:1.25rem}
  .kg-head{margin-bottom:.7rem}
}
@media (max-width: 760px){
  .kg-dock .kg-card{padding:.6rem .75rem}
  .kg-dock .kg-card.compact .btn-row{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;padding-bottom:.1rem}
  .kg-dock .kg-card.compact .btn-row::-webkit-scrollbar{display:none}
  .kg-dock .kg-card.compact .btn-row .btn{flex:none}
  .kg-dock .kg-card.compact .kc-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:.95rem;margin:.1rem 0 .35rem}
  .kg-dock .kg-card.compact .kc-loc{display:none}
  .kl-chips{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}
  .kl-chips::-webkit-scrollbar{display:none}
  .kl-chips .chip,.kl-chips .lbl{flex:none}
}
.kf-lab{position:relative;z-index:2}
@media (max-width: 760px){.kf-lab{justify-self:center;background:var(--surface);padding:0 .5rem;border-radius:6px}}

/* =====================================================================
   讲课模式（幻灯片播放器）
   ===================================================================== */
.mode-bar{display:flex;align-items:center;gap:.4rem .9rem;flex-wrap:wrap;margin:.95rem 0 0}
.mode-seg button{font-size:.9rem;padding:.4rem 1rem;display:inline-flex;align-items:center;gap:.35rem}
.mode-seg button .ic{width:1.05em;height:1.05em}
.mode-hint{font-size:.8rem;color:var(--ink-3)}
.deck{position:relative;display:flex;flex-direction:column;margin-top:1.1rem;background:var(--surface);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow-2);overflow:clip}
.deck-top{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.3rem .9rem;align-items:center;padding:.75rem 1.2rem .25rem}
.deck-chap{font-size:.78rem;font-weight:700;color:var(--accent);letter-spacing:.02em;white-space:nowrap;max-width:12rem;overflow:hidden;text-overflow:ellipsis}
.deck-prog{position:relative;height:6px;border-radius:99px;background:var(--surface-3)}
.deck-prog i{position:absolute;left:0;top:0;bottom:0;border-radius:99px;background:var(--accent);transition:width .35s var(--ease)}
.deck-mark{position:absolute;top:50%;width:10px;height:10px;margin:-5px 0 0 -5px;border-radius:50%;background:var(--line-2);box-shadow:0 0 0 2px var(--surface)}
.deck-mark.seen{background:var(--accent)}
.deck-chaps{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:.3rem;list-style:none;margin:.35rem 0 0;padding:0}
.deck-chaps button{border:1px solid var(--line);background:transparent;border-radius:99px;font-size:.74rem;line-height:1.5;padding:.05rem .6rem;color:var(--ink-4);cursor:pointer}
.deck-chaps button.seen{color:var(--ink-2)}
.deck-chaps button.on{background:var(--accent-soft);border-color:transparent;color:var(--accent);font-weight:650}
.deck-chaps button:hover{border-color:var(--accent)}
.deck-stage{position:relative;display:flex;min-height:clamp(360px,56vh,600px);padding:1.3rem 2.4rem 1.6rem}
.slide{width:100%;min-width:0;margin:auto 0}
.slide h2{font-size:clamp(1.3rem,2.1vw,1.8rem);line-height:1.3;margin:.05rem 0 .95rem;letter-spacing:-.01em}
.sl-kicker{display:flex;align-items:center;flex-wrap:wrap;gap:.35rem;margin:0 0 .3rem;font-size:.78rem;font-weight:700;letter-spacing:.05em;color:var(--accent)}
.sl-kicker .ic{width:1.05em;height:1.05em}
.sl-kicker .muted{font-weight:500;letter-spacing:0;color:var(--ink-3)}
.slide .katex{font-size:1.05em}
.sl-cols{display:grid;gap:1.6rem;align-items:center}
.sl-cols.has-fig{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
.sl-main{min-width:0}
.sl-bullets{list-style:none;margin:0;padding:0;display:grid;gap:.75rem}
.sl-bullets li{position:relative;padding-left:1.55rem;font-size:clamp(1rem,1.4vw,1.16rem);line-height:1.62}
.sl-bullets li::before{content:"";position:absolute;left:.3rem;top:.62em;width:.48rem;height:.48rem;border-radius:2px;background:var(--accent);transform:rotate(45deg)}
.sl-formula{margin:1.1rem 0 0;padding:.75rem 1rem;border-radius:12px;background:var(--accent-softer);border:1px solid var(--accent-soft);font-size:1.06rem;text-align:center;overflow-x:auto}
.sl-note{font-size:.88rem;color:var(--ink-3);margin:.9rem 0 0}
.sl-fig{margin:0;min-width:0}
.sl-fig .graph-box{border:0;background:var(--surface-2);border-radius:14px}
.sl-fig svg.gsvg{width:100%;height:auto;max-width:520px;max-height:min(50vh,400px);margin:0 auto}
.sl-fig figcaption{font-size:.8rem;color:var(--ink-3);text-align:center;margin-top:.4rem}
[data-frag]{transition:opacity .35s var(--ease),transform .35s var(--ease)}
.frag-hidden{opacity:0;transform:translateY(6px);pointer-events:none;visibility:hidden}
.sl-gcols{grid-template-columns:minmax(0,1.1fr) minmax(0,1fr)}
.sl-gsteps{list-style:none;margin:0;padding:0;display:grid;gap:.5rem;counter-reset:gs}
.sl-gsteps li{counter-increment:gs;position:relative;padding:.5rem .8rem .5rem 2.5rem;border-radius:11px;background:var(--surface-2);font-size:1rem;line-height:1.55;transition:background .25s,opacity .35s,transform .35s}
.sl-gsteps li::before{content:counter(gs);position:absolute;left:.7rem;top:.55rem;width:1.3rem;height:1.3rem;border-radius:50%;background:var(--line-2);color:var(--ink);font-size:.74rem;font-weight:700;display:grid;place-items:center}
.sl-gsteps li.frag-cur{background:var(--accent-soft)}
.sl-gsteps li.frag-cur::before{background:var(--accent);color:var(--accent-ink)}
.gsvg path,.gsvg line,.gsvg circle,.gsvg polygon,.gsvg rect{transition:opacity .3s}
.gsvg .g-dim{opacity:.2}
.gsvg .g-hot.c1,.gsvg .g-hot.c2,.gsvg .g-hot.c3{stroke-width:3.4}
.sl-prompt{margin:-.45rem 0 .7rem;color:var(--ink-2);font-size:.98rem}
.sl-tasks{list-style:none;margin:0 0 .85rem;padding:0;display:flex;flex-wrap:wrap;gap:.45rem}
.sl-tasks li{flex:1 1 13rem;display:flex;gap:.45rem;align-items:flex-start;padding:.4rem .7rem;border-radius:11px;border:1px solid var(--line);background:var(--surface-2);font-size:.88rem;line-height:1.45;color:var(--ink-3);transition:border-color .2s,background .2s}
.sl-tasks li.cur{border-color:var(--accent);background:var(--accent-softer);color:var(--ink)}
.sl-tasks li.done{border-color:color-mix(in srgb,var(--ok) 45%,transparent);background:var(--ok-soft);color:var(--ink)}
.tk-n{display:none}
.tk-box{flex:none;width:1.05rem;height:1.05rem;margin-top:.12rem;border-radius:5px;border:2px solid var(--line-2);display:grid;place-items:center}
.sl-tasks li.cur .tk-box{border-color:var(--accent)}
.sl-tasks li.done .tk-box{background:var(--ok);border-color:var(--ok)}
.sl-tasks li.done .tk-box::after{content:"";width:.28rem;height:.52rem;border:solid var(--surface);border-width:0 2px 2px 0;transform:translate(0,-1px) rotate(45deg)}
.sl-takeaway{display:flex;gap:.5rem;align-items:flex-start;margin:.9rem 0 0;padding:.65rem .95rem;border-radius:12px;background:var(--ok-soft);font-size:.95rem;animation:fade .3s}
.sl-takeaway .ic{flex:none;color:var(--ok);margin-top:.22rem}
.sl-takeaway[hidden],#ls-deck[hidden],#ls-notes[hidden]{display:none}
.sl-problem{margin-bottom:.95rem;padding:.7rem 1rem;border-left:4px solid var(--accent);border-radius:0 12px 12px 0;background:var(--surface-2);font-size:1rem}
.sl-problem p{margin:.2rem 0}
.sl-steps{list-style:none;margin:0;padding:0;display:grid;gap:.55rem;counter-reset:ss}
.sl-steps li{counter-increment:ss;display:flex;gap:.6rem;align-items:baseline;font-size:1rem;line-height:1.6}
.sl-steps li::before{content:counter(ss);flex:none;width:1.4rem;height:1.4rem;border-radius:50%;background:var(--accent-soft);color:var(--accent);font-size:.76rem;font-weight:700;display:grid;place-items:center;transform:translateY(.12rem)}
.st-l{flex:none;min-width:4.6em;font-weight:650;color:var(--ink-2)}
.sl-answer{display:flex;flex-wrap:wrap;gap:.3rem .8rem;align-items:baseline;margin-top:1rem;padding:.7rem 1rem;border-radius:12px;background:var(--ok-soft);border:1px solid color-mix(in srgb,var(--ok) 35%,transparent)}
.sl-answer b{flex:none;font-size:.76rem;letter-spacing:.05em;color:var(--ok)}
.sl-table{margin:0}
.sl-table table{font-size:.96rem}
.sl-table th{white-space:normal}
.sl-table th[scope="row"]{color:var(--ink-2);min-width:5.5em}
.sl-q{font-size:clamp(1.05rem,1.55vw,1.22rem);font-weight:600;line-height:1.55;margin-bottom:1rem}
.sl-q p{margin:.2rem 0}
.sl-choices{display:grid;gap:.55rem}
.sl-choice{display:flex;align-items:center;gap:.75rem;width:100%;text-align:left;padding:.7rem .9rem;border-radius:12px;border:1.5px solid var(--line-2);background:var(--surface);font-size:1rem;line-height:1.45;cursor:pointer;transition:border-color .15s,background .15s,opacity .2s}
.sl-choice:hover:not(:disabled){border-color:var(--accent);background:var(--accent-softer)}
.sl-choice:disabled{cursor:default;color:var(--ink)}
.ch-k{flex:none;width:1.8rem;height:1.8rem;border-radius:8px;background:var(--surface-2);display:grid;place-items:center;font-size:.85rem;font-weight:700}
.sl-choice.ok{border-color:var(--ok);background:var(--ok-soft)}
.sl-choice.ok .ch-k{background:var(--ok);color:var(--surface)}
.sl-choice.bad{border-color:var(--bad);background:var(--bad-soft)}
.sl-choice.bad .ch-k{background:var(--bad);color:var(--surface)}
.answered .sl-choice:not(.picked){opacity:.55}
.sl-num{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}
.sl-num input{width:10rem;padding:.55rem .8rem;border-radius:10px;border:1.5px solid var(--line-2);background:var(--surface);font-size:1.05rem}
.sl-num input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.sl-num input.ok{border-color:var(--ok);background:var(--ok-soft)}
.sl-num input.bad{border-color:var(--bad);background:var(--bad-soft)}
.sl-num .unit{color:var(--ink-3)}
.sl-fb{margin-top:.9rem}
.sl-fb-box{padding:.75rem 1rem;border-radius:12px;border:1px solid var(--line);animation:fade .25s}
.sl-fb-box.ok{background:var(--ok-soft);border-color:color-mix(in srgb,var(--ok) 35%,transparent)}
.sl-fb-box.bad{background:var(--bad-soft);border-color:color-mix(in srgb,var(--bad) 35%,transparent)}
.sl-fb-box>b{display:flex;align-items:center;gap:.35rem}
.sl-fb-box.ok>b{color:var(--ok)} .sl-fb-box.bad>b{color:var(--bad)}
.sl-fb-box p{margin:.35rem 0 0}
.sl-fb-box .btn{margin-top:.6rem}
.sl-hint{margin:0;font-size:.9rem;color:var(--warn)}
.shake{animation:shake .4s}
.sl-pits{display:grid;gap:.75rem}
.pit{display:grid;grid-template-columns:1fr 1fr;gap:.6rem}
.pit p{margin:0;padding:.6rem .85rem;border-radius:12px;font-size:.98rem;line-height:1.55}
.pit-w{background:var(--bad-soft)}
.pit-r{background:var(--ok-soft)}
.tag{display:inline-flex;align-items:center;gap:.2rem;margin-right:.45rem;font-size:.72rem;font-weight:700;vertical-align:.08em}
.tag .ic{width:.95em;height:.95em}
.tag.bad{color:var(--bad)} .tag.ok{color:var(--ok)}
.pit-why{display:block;margin-top:.25rem;font-size:.84rem;color:var(--ink-3)}
.sl-titlecard{max-width:48rem}
.sl-titlecard h2{font-size:clamp(1.8rem,3.3vw,2.6rem);margin:.2rem 0 .45rem}
.sl-sub{margin:0 0 1.1rem;font-size:1.1rem;color:var(--ink-2)}
.sl-goals{padding:.8rem 1.1rem;border-radius:14px;background:var(--surface-2);font-size:.98rem}
.sl-goals ol{margin:.35rem 0 0;padding-left:1.3rem}
.sl-goals li{margin:.15rem 0}
.sl-hook{display:flex;gap:.55rem;align-items:flex-start;margin:1rem 0 0;padding:.7rem 1rem;border-radius:12px;background:var(--gold-soft);font-size:1.04rem}
.sl-hook .ic{flex:none;color:var(--gold);margin-top:.25rem}
.sl-take{list-style:none;margin:0;padding:0;display:grid;gap:.55rem}
.sl-take li{display:flex;gap:.55rem;align-items:flex-start;font-size:1.02rem;line-height:1.55}
.sl-take .ic{flex:none;color:var(--ok);margin-top:.28rem}
.sl-score{margin-top:1rem}
.sl-score-in{display:flex;flex-wrap:wrap;align-items:baseline;gap:.3rem .7rem;padding:.6rem 1rem;border-radius:12px;background:var(--accent-softer);border:1px solid var(--accent-soft)}
.sl-score-in b{font-size:1.6rem;color:var(--accent);font-variant-numeric:tabular-nums}
.sl-score p{margin:.4rem 0 0}
.sl-cta{margin-top:1.1rem}
.deck-narr{border-top:1px solid var(--line);background:var(--surface-2)}
.deck-narr-t{display:flex;align-items:center;gap:.45rem;width:100%;padding:.55rem 1.2rem;border:0;background:transparent;color:var(--ink-2);font-size:.85rem;font-weight:650;text-align:left;cursor:pointer}
.deck-narr-t .ic{width:1.05em;height:1.05em;color:var(--accent)}
.kbd{font:600 .68rem/1.4 var(--mono);padding:0 .35rem;border:1px solid var(--line-2);border-radius:5px;color:var(--ink-3);background:var(--surface)}
.deck-narr-t .chev{margin-left:auto;width:.5rem;height:.5rem;border:solid var(--ink-3);border-width:0 2px 2px 0;transform:rotate(-135deg) translate(-2px,-2px);transition:transform .2s}
.deck-narr:not(.open) .chev{transform:rotate(45deg)}
.deck-narr-b{display:none;padding:0 1.2rem .95rem 2.75rem;font-size:.98rem;line-height:1.8}
.deck-narr.open .deck-narr-b{display:block}
.deck-narr-b p{margin:0;max-width:54rem}
.deck-ctrl{position:sticky;bottom:0;z-index:4;display:flex;align-items:center;gap:.5rem;padding:.55rem .9rem;border-top:1px solid var(--line);background:color-mix(in srgb,var(--surface) 94%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.deck-count{min-width:4.5em;text-align:center;font-size:.85rem;color:var(--ink-3);font-variant-numeric:tabular-nums}
.deck-tools{display:flex;gap:.2rem;margin-left:auto}
.deck-next{min-width:8.5rem}
.deck-next.is-locked{background:var(--surface-3);border-color:var(--surface-3);color:var(--ink-2)}
.deck-prev:disabled{opacity:.4;cursor:default}
.slide.enter-next{animation:slNext .32s var(--ease)}
.slide.enter-prev{animation:slPrev .32s var(--ease)}
@keyframes slNext{from{opacity:0;transform:translateX(26px)}}
@keyframes slPrev{from{opacity:0;transform:translateX(-26px)}}
.deck:fullscreen{width:100vw;height:100vh;margin:0;border:0;border-radius:0}
.deck:-webkit-full-screen{width:100vw;height:100vh;margin:0;border:0;border-radius:0}
.deck.is-full{position:fixed;inset:0;z-index:90;width:auto;height:100vh;height:100dvh;margin:0;border:0;border-radius:0}
.deck:fullscreen .deck-stage{flex:1;aspect-ratio:auto;overflow:auto;padding:2rem 5vw}
.deck:-webkit-full-screen .deck-stage{flex:1;aspect-ratio:auto;overflow:auto;padding:2rem 5vw}
.deck.is-full .deck-stage{flex:1;aspect-ratio:auto;overflow:auto;padding:1.2rem 5vw}
.deck:fullscreen .slide{max-width:1200px;margin:auto}
.deck.is-full .slide{max-width:1200px;margin:auto}
html.deck-lock,html.deck-lock body{overflow:hidden}
/* 互动组件（widgets.js） */
.wbox{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(15rem,1fr);gap:1rem 1.4rem;align-items:start}
.w-fig{min-width:0}
.w-fig svg.wplot{display:block;width:100%;height:auto;max-height:min(56vh,440px);touch-action:pan-y}
.w-side{display:grid;gap:.9rem;min-width:0}
.wbox.w-stack{grid-template-columns:minmax(0,1fr)}
.wbox.w-stack .w-side{grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));align-items:start}
.w-ctrls{display:grid;gap:.7rem}
.w-slider{display:grid;gap:.1rem}
.w-sl-top{display:flex;justify-content:space-between;gap:.6rem;font-size:.85rem;color:var(--ink-2)}
.w-sl-top output{font-weight:650;color:var(--ink);font-variant-numeric:tabular-nums;text-align:right}
.w-slider input[type="range"]{width:100%;height:30px;margin:0;accent-color:var(--accent);cursor:pointer;touch-action:pan-y}
.w-seg{display:grid;gap:.25rem}
.w-seg-l{font-size:.85rem;color:var(--ink-2)}
.w-seg-b{display:flex;flex-wrap:wrap;gap:3px;padding:3px;border:1px solid var(--line);border-radius:12px;background:var(--surface-2)}
.w-seg-b button{flex:1 1 auto;min-height:36px;padding:.35rem .6rem;border:0;border-radius:9px;background:transparent;color:var(--ink-2);font-size:.84rem;cursor:pointer}
.w-seg-b button[aria-checked="true"]{background:var(--surface);color:var(--accent);font-weight:650;box-shadow:var(--shadow-1)}
.w-btns{display:flex;flex-wrap:wrap;gap:.4rem}
.w-btn{min-height:38px;padding:.4rem .8rem;border:1px solid var(--accent);border-radius:10px;background:var(--accent);color:var(--accent-ink);font-size:.85rem;font-weight:600;cursor:pointer}
.w-btn.ghost{background:transparent;color:var(--accent)}
.w-btn:hover{box-shadow:0 2px 10px color-mix(in srgb,var(--accent) 25%,transparent)}
.w-check{display:flex;align-items:center;gap:.45rem;min-height:32px;font-size:.86rem;color:var(--ink-2);cursor:pointer}
.w-check input{width:1.05rem;height:1.05rem;accent-color:var(--accent)}
.w-read{display:grid;grid-template-columns:1fr 1fr;gap:.4rem;margin:0}
.w-ro{min-width:0;padding:.4rem .6rem;border-radius:10px;background:var(--surface-2)}
.w-ro.wide{grid-column:1/-1}
.w-ro dt{font-size:.72rem;color:var(--ink-3)}
.w-ro dd{margin:0;font-size:.95rem;font-weight:650;line-height:1.4;font-variant-numeric:tabular-nums}
.w-ro.wide dd{font-size:.88rem;font-weight:500}
.w-ro dd.ok{color:var(--ok)} .w-ro dd.bad{color:var(--bad)}
.w-note{margin:.4rem 0 0;font-size:.82rem;color:var(--ink-3)}
.w-err{color:var(--bad)}
.gsvg .w-old{stroke-dasharray:6 5;opacity:.45}
.gsvg .w-rev{fill:var(--c3);fill-opacity:.24;stroke:none}
.gsvg .w-dwl{fill:var(--bad);fill-opacity:.3;stroke:var(--bad);stroke-width:1;stroke-opacity:.6}
.gsvg .w-profit{fill:var(--ok);fill-opacity:.22;stroke:none}
.gsvg .w-loss{fill:var(--bad);fill-opacity:.2;stroke:none}
.gsvg .w-price{stroke:var(--gold);stroke-width:2.4;fill:none}
.gsvg text.w-price{fill:var(--gold);stroke:none}
.gsvg .w-atc{stroke:var(--ink-2);stroke-width:2;stroke-dasharray:none}
.gsvg .w-brk{fill:none;stroke:var(--ink-2);stroke-width:1.5}
.gsvg .w-brk.warn{stroke:var(--warn)} .gsvg .w-brk.bad{stroke:var(--bad)}
.gsvg text.w-brk-t{fill:var(--ink-2);font-weight:650}
.gsvg text.w-brk-t.warn{fill:var(--warn)} .gsvg text.w-brk-t.bad{fill:var(--bad)}
.gsvg text.w-red{fill:var(--bad)} .gsvg text.w-blue{fill:var(--c1)}
.gsvg .w-bar{fill:var(--surface-3);stroke:none}
.gsvg .w-bar.on{fill:var(--accent);fill-opacity:.75}
.w-cum{margin-top:.5rem}
.w-cum-t{margin-bottom:.25rem;font-size:.85rem;color:var(--ink-2);font-variant-numeric:tabular-nums}
.w-cum-bar{height:10px;border-radius:99px;background:var(--surface-3);overflow:hidden}
.w-cum-bar i{display:block;height:100%;background:var(--ok);transition:width .3s}
.w-taccount{margin-bottom:.6rem;padding:.7rem .9rem;border:1px solid var(--line);border-radius:12px;background:var(--surface)}
.ta-h{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.5rem;font-size:.92rem;font-weight:650}
.ta-h span{font-size:.8rem;font-weight:500;color:var(--ink-3)}
.ta-grid{display:grid;grid-template-columns:1fr 1fr;margin-top:.5rem;border-top:2px solid var(--ink)}
.ta-col{display:grid;gap:.25rem;align-content:start;padding:.4rem .6rem;font-size:.88rem}
.ta-col:first-child{border-right:2px solid var(--ink)}
.ta-col b{font-size:.76rem;color:var(--ink-3)}
.ta-col div{display:flex;justify-content:space-between;gap:.5rem}
.ta-col em{font-style:normal;font-weight:650;font-variant-numeric:tabular-nums}
.ta-ex em{color:var(--warn)} .ta-loan em{color:var(--accent)}
.w-payoff-matrix .w-fig{overflow-x:auto}
.w-matrix table{margin:0 auto;border-collapse:separate;border-spacing:5px;font-size:.95rem}
.w-matrix th{padding:.3rem .5rem;font-size:.85rem;font-weight:600;color:var(--ink-2)}
.w-matrix .mx-col{color:var(--c2)}
.w-matrix .mx-row{text-align:right}
.w-matrix .mx-row span{display:block;font-size:.72rem;color:var(--c1)}
.w-matrix td{position:relative;min-width:7rem;padding:.9rem .8rem 1.35rem;border:2px solid transparent;border-radius:12px;background:var(--surface-2);text-align:center}
.w-matrix td.nash{border-color:var(--gold);background:var(--gold-soft)}
.w-matrix td button{min-width:2.7rem;min-height:2.7rem;border:2px dashed var(--line-2);border-radius:10px;background:var(--surface);font-size:1.15rem;font-weight:700;cursor:pointer}
.w-matrix .mx-a{color:var(--c1)} .w-matrix .mx-b{color:var(--c2)}
.w-matrix button.on{border-style:solid;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.w-matrix button.ok{border-style:solid;border-color:var(--ok);background:var(--ok-soft)}
.w-matrix button.bad{border-style:solid;border-color:var(--bad);background:var(--bad-soft)}
.mx-sep{margin:0 .3rem;color:var(--ink-3)}
.mx-ne{position:absolute;left:0;right:0;bottom:.2rem;font-size:.68rem;font-weight:700;color:var(--gold)}
.sl-interactive .w-fig svg.wplot{max-height:min(46vh,400px)}
.lab-stage{margin-bottom:1.6rem}
.lab-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:.6rem 1rem;margin-bottom:1rem}
.lab-head h2{margin:0}
.lab-head p{margin:.25rem 0 0;max-width:46rem;font-size:.92rem;color:var(--ink-2)}
.lab-head code,.lab-doc code{font-size:.82rem}
.lab-doc{margin-top:1.1rem;font-size:.86rem}
.lab-doc summary{cursor:pointer;color:var(--ink-2)}
.lab-v{font-variant-numeric:tabular-nums;white-space:nowrap}
a.tile.lab-tile.on{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
@media (max-width: 980px){
  .deck-stage{padding:1.1rem 1.4rem 1.3rem}
}
@media (max-width: 760px){
  .mode-hint{display:none}
  .mode-bar .mode-seg{width:100%}
  .mode-seg button{flex:1;justify-content:center;padding:.45rem .5rem}
  .deck{margin-left:-.35rem;margin-right:-.35rem;border-radius:14px}
  .deck-top{padding:.65rem .9rem .2rem}
  .deck-chaps{display:none}
  .deck-stage{aspect-ratio:auto;min-height:52vh;padding:1rem .95rem 1.2rem}
  .slide{margin:0}
  .slide h2{font-size:1.28rem}
  .sl-cols.has-fig,.sl-gcols{grid-template-columns:minmax(0,1fr);gap:1rem}
  .sl-bullets li{font-size:1rem}
  .pit{grid-template-columns:1fr}
  .sl-table table{font-size:.86rem}
  .sl-table th,.sl-table td{padding:.45rem .55rem}
  .sl-table th[scope="row"]{min-width:3.5em}
  .deck-ctrl{bottom:calc(60px + env(safe-area-inset-bottom));padding:.5rem .6rem;box-shadow:0 -6px 18px rgba(0,0,0,.07)}
  .deck.is-full .deck-ctrl{bottom:0}
  .deck-prev span,.deck-tools .btn span,.deck-narr-t .kbd{display:none}
  .deck-next{flex:1;min-width:0}
  .deck-count{min-width:3.4em}
  .deck-narr-b{padding:0 1rem .9rem}
  .wbox{grid-template-columns:minmax(0,1fr)}
  .w-fig svg.wplot,.sl-interactive .w-fig svg.wplot{max-height:none}
  .w-matrix td{min-width:5.6rem;padding:.7rem .4rem 1.3rem}
}
@media (max-width: 760px){
  .deck:fullscreen .deck-ctrl{bottom:0}
}
@media (hover: none){
  .deck-narr-t .kbd{display:none}
}
@media (prefers-reduced-motion: reduce){
  .slide.enter-next,.slide.enter-prev,.sl-takeaway,.sl-fb-box,.shake{animation:none}
  [data-frag],.sl-gsteps li,.gsvg path,.gsvg line,.gsvg circle,.gsvg polygon,.gsvg rect{transition:none}
  .deck-prog i,.w-cum-bar i{transition:none}
}
@media print{
  .deck,.mode-bar{display:none!important}
  #ls-notes[hidden]{display:block!important}
}
/* 计算类组件（gdp-calculator / price-index / unemployment-flow / comparative-advantage / table-curve / circular-flow） */
.wbox [hidden]{display:none!important}
.w-panel{min-width:0}
.w-ctrls.w-panel{display:grid;gap:.7rem}
.w-cls{list-style:none;margin:0;padding:0;display:grid;gap:.4rem;counter-reset:cls}
.w-cls li{counter-increment:cls;display:grid;grid-template-columns:1.6rem minmax(0,1fr) auto auto;gap:.2rem .6rem;align-items:center;padding:.45rem .6rem;border:1px solid var(--line);border-radius:11px;background:var(--surface);font-size:.92rem;line-height:1.45}
.w-cls li::before{content:counter(cls);width:1.4rem;height:1.4rem;border-radius:50%;background:var(--surface-2);color:var(--ink-3);font-size:.72rem;font-weight:700;display:grid;place-items:center}
.w-cls .cls-l{min-width:0}
.w-cls .cls-a{font-variant-numeric:tabular-nums;font-weight:650;color:var(--ink-2)}
.w-cls .cls-r{grid-column:2/-1;font-size:.82rem;color:var(--ink-3)}
.w-cls .cls-r:empty{display:none}
.w-cls li.ok{border-color:color-mix(in srgb,var(--ok) 45%,transparent);background:var(--ok-soft)}
.w-cls li.ok .cls-r{color:var(--ok)}
.w-cls li.bad{border-color:color-mix(in srgb,var(--bad) 45%,transparent);background:var(--bad-soft)}
.w-cls li.bad .cls-r{color:var(--bad)}
.w-cls li.rev .cls-r{color:var(--ink-2)}
.w-side .w-cls li{grid-template-columns:1.6rem minmax(0,1fr);font-size:.86rem}
.w-side .w-cls .w-select{grid-column:2}
.w-select{min-height:36px;max-width:100%;padding:.3rem 1.6rem .3rem .55rem;border:1.5px solid var(--line-2);border-radius:9px;background:var(--surface);font-size:.86rem;cursor:pointer}
.w-select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.w-tablewrap{overflow-x:auto;margin:0 0 .6rem}
.w-table{border-collapse:collapse;width:100%;font-size:.88rem;font-variant-numeric:tabular-nums}
.w-table th,.w-table td{padding:.38rem .55rem;border-bottom:1px solid var(--line);text-align:right;white-space:nowrap}
.w-table thead th{background:var(--surface-2);font-weight:650;color:var(--ink-2)}
/* 表头允许换行：长列名（如“落在 10% 段的收入（30,000–60,000）”）不再把输入列挤出可视区 */
.w-table thead th{white-space:normal;min-width:4.5rem;vertical-align:bottom;line-height:1.3}
.w-table tbody th{text-align:left;font-weight:600;color:var(--ink-2)}
.w-table tr.sum td,.w-table tr.sum th{font-weight:700;color:var(--ink)}
.w-table th.on,.w-table td.on{background:var(--accent-soft);color:var(--accent);font-weight:700}
.w-table tr.on td,.w-table tr.on th{background:var(--gold-soft)}
.w-tc td.qz{padding:.2rem .3rem}
.w-tc td.qz input{width:4.6rem;padding:.3rem .4rem;border:1.5px solid var(--line-2);border-radius:7px;background:var(--surface);font:inherit;text-align:right}
.w-tc td.qz input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.w-tc td.qz input.ok{border-color:var(--ok);background:var(--ok-soft)}
.w-tc td.qz input.bad{border-color:var(--bad);background:var(--bad-soft)}
.w-twin{display:grid;grid-template-columns:1fr 1fr;gap:.6rem}
.wbox.w-comparative-advantage,.wbox.w-gdp-calculator,.wbox.w-circular-flow{grid-template-columns:minmax(0,1.6fr) minmax(15rem,1fr)}
.w-twin svg.wplot{max-height:none}
.w-stock{margin:.2rem 0 1rem}
.st-bar{display:flex;height:38px;border-radius:10px;overflow:hidden;border:1px solid var(--line)}
.st-bar span{display:block;height:100%;transition:width .3s var(--ease)}
.st-e{background:var(--c1)} .st-u{background:var(--bad)} .st-n{background:var(--surface-3)}
.st-lf{margin-top:.3rem;border-top:2px solid var(--ink-2);padding-top:.2rem;font-size:.8rem;color:var(--ink-2);text-align:center;white-space:nowrap;transition:width .3s var(--ease)}
.st-key{list-style:none;margin:.6rem 0 0;padding:0;display:flex;flex-wrap:wrap;gap:.3rem 1rem;font-size:.84rem;color:var(--ink-2)}
.st-key i{display:inline-block;width:.8rem;height:.8rem;border-radius:3px;margin-right:.3rem;vertical-align:-.08em}
.w-cf svg{width:100%;height:auto;display:block;max-height:420px}
.cf-node rect{fill:var(--surface-2);stroke:var(--line-2);stroke-width:1.5}
.cf-hh rect,.cf-firms rect{fill:var(--accent-soft);stroke:var(--accent)}
.cf-flow{fill:none;stroke-width:3}
.cf-money{stroke:var(--c3)} .cf-real{stroke:var(--area2);stroke-dasharray:7 5}
.cf-flow.cf-hot{stroke-width:5.5}
.gsvg text.cf-hot{fill:var(--accent);font-weight:700}
.cf-k{display:inline-block;width:1.6rem;height:0;border-top:3px solid;vertical-align:.25em;margin-right:.3rem}
.cf-k.cf-money{border-color:var(--c3)} .cf-k.cf-real{border-color:var(--area2);border-top-style:dashed}
@media (max-width: 760px){
  .wbox.w-comparative-advantage,.wbox.w-gdp-calculator,.wbox.w-circular-flow{grid-template-columns:minmax(0,1fr)}
  .w-twin{grid-template-columns:1fr}
  .w-cls li{grid-template-columns:1.6rem minmax(0,1fr) auto}
  .w-cls .w-select{grid-column:2/-1}
}
@media (prefers-reduced-motion: reduce){
  .st-bar span,.st-lf{transition:none}
}
/* =====================================================================
   英语通关（#/english/<单元>）
   ===================================================================== */
.eng-tabs{position:sticky;top:62px;z-index:15;display:flex;gap:.25rem;overflow-x:auto;margin:0 0 1.1rem;padding:.35rem;border:1px solid var(--line);border-radius:14px;background:color-mix(in srgb,var(--surface) 94%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);scrollbar-width:none}
.eng-tabs::-webkit-scrollbar{display:none}
.eng-tabs a{flex:none;padding:.42rem .85rem;border-radius:10px;color:var(--ink-2);font-size:.9rem;font-weight:600;white-space:nowrap}
.eng-tabs a:hover{text-decoration:none;background:var(--surface-2)}
.eng-tabs a[aria-current="page"]{background:var(--accent);color:var(--accent-ink)}
.eng-stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:.6rem}
.eng-stats .stat{padding:.7rem .9rem;border:1px solid var(--line);border-radius:12px;background:var(--surface)}
.eng-stats .stat b{display:block;font-size:1.4rem;font-variant-numeric:tabular-nums}
.eng-stats .stat span{font-size:.8rem;color:var(--ink-3)}
.eng-path{list-style:none;margin:0;padding:0;display:grid;gap:.5rem}
.eng-path li{display:flex;align-items:center;gap:.8rem;padding:.7rem .9rem;border:1px solid var(--line);border-radius:12px;background:var(--surface)}
.eng-path li.done{border-color:color-mix(in srgb,var(--ok) 40%,transparent);background:var(--ok-soft)}
.ep-n{flex:none;width:1.9rem;height:1.9rem;border-radius:50%;display:grid;place-items:center;background:var(--surface-2);font-weight:700;color:var(--ink-2)}
.eng-path li.done .ep-n{background:var(--ok);color:var(--surface)}
.ep-n .ic{width:1rem;height:1rem}
.ep-b{flex:1;min-width:0;display:grid}
.eng-tool{display:flex;flex-wrap:wrap;gap:.6rem .9rem;align-items:center;margin-bottom:.9rem}
.eng-tool .seg{flex-wrap:wrap;border-radius:14px}
.eng-tool .search{position:relative;flex:1 1 14rem;max-width:24rem}
.eng-tool .search .ic{position:absolute;left:.65rem;top:50%;transform:translateY(-50%);width:1rem;height:1rem;color:var(--ink-3)}
.eng-tool .search input{width:100%;padding:.5rem .8rem .5rem 2.1rem;border:1.5px solid var(--line-2);border-radius:10px;background:var(--surface);font-size:.92rem}
.eng-tool .search input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.say{display:inline-grid;place-items:center;width:1.9rem;height:1.9rem;padding:0;border:1px solid var(--line);border-radius:50%;background:var(--surface);color:var(--accent);cursor:pointer;vertical-align:middle;flex:none}
.say:hover{background:var(--accent-soft)}
.say .ic{width:1rem;height:1rem}
.ipa{font-family:var(--mono);font-size:.82rem;color:var(--ink-3)}
.pos{font-size:.75rem;font-style:italic;color:var(--ink-3)}
.term-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(300px,100%),1fr));gap:.8rem}
.term-card{min-width:0;overflow-wrap:anywhere;display:flex;flex-direction:column;gap:.35rem;padding:.9rem 1rem;border:1px solid var(--line);border-radius:14px;background:var(--surface);box-shadow:var(--shadow-1)}
.term-card.known{border-color:color-mix(in srgb,var(--ok) 45%,transparent)}
.term-card.unknown{border-color:color-mix(in srgb,var(--warn) 55%,transparent)}
.term-card header{display:flex;flex-wrap:wrap;align-items:center;gap:.3rem .55rem}
.term-card h3{margin:0;font-size:1.15rem}
.tc-zh{margin:0;font-weight:650;font-size:1rem}
.tc-simple{margin:0;font-size:.88rem;color:var(--ink-2)}
.tc-ex{margin:.2rem 0 0;padding:.5rem .7rem;border-left:3px solid var(--accent);border-radius:0 10px 10px 0;background:var(--surface-2);font-size:.9rem}
.tc-ex p{margin:0}
.tc-ex,.sent-en,.dr-sent,.sent-zh{max-width:100%;overflow-x:auto}
.tc-ex strong{color:var(--accent)}
.tc-exzh{margin-top:.25rem!important;color:var(--ink-3);font-size:.85rem}
.tc-meta{margin:0;display:flex;flex-wrap:wrap;gap:.3rem;align-items:center;font-size:.84rem}
.tc-meta .k,.cmd-card .k,.sent-gram .k{flex:none;margin-right:.35rem;padding:0 .35rem;border-radius:5px;background:var(--surface-2);color:var(--ink-3);font-size:.72rem;font-weight:700}
.tc-conf{color:var(--warn)}
.tc-act{margin-top:auto;padding-top:.3rem}
.fw-list{display:flex;flex-wrap:wrap;gap:.45rem}
.fw{display:inline-flex;align-items:center;gap:.35rem;padding:.25rem .3rem .25rem .7rem;border:1px solid var(--line);border-radius:99px;background:var(--surface);font-size:.92rem}
.cmd-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(280px,100%),1fr));gap:.8rem}
.cmd-card{min-width:0;overflow-wrap:anywhere;padding:.9rem 1rem;border:1px solid var(--line);border-left:4px solid var(--accent);border-radius:12px;background:var(--surface)}
.cmd-card header{display:flex;align-items:center;gap:.5rem;margin-bottom:.4rem}
.cmd-card h3{margin:0;font-size:1.25rem}
.cmd-zh{margin-left:auto;font-weight:650;color:var(--accent)}
.cmd-card p{margin:.35rem 0 0;font-size:.9rem;line-height:1.6}
.cmd-pit{color:var(--bad)}
.cmd-pit .k .ic{width:.9em;height:.9em;vertical-align:-.1em}
.phr-list{display:grid;gap:.45rem}
.phr{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);gap:.3rem 1rem;align-items:center;padding:.6rem .9rem;border:1px solid var(--line);border-radius:12px;background:var(--surface)}
.phr-en{display:flex;align-items:center;gap:.4rem}
.phr-zh{display:grid;font-size:.92rem}
.phr-q{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:.3rem}
.qnav{display:flex;flex-wrap:wrap;gap:.35rem;margin-bottom:1rem}
.qnav a{display:grid;place-items:center;min-width:2.3rem;height:2.3rem;padding:0 .4rem;border:1px solid var(--line-2);border-radius:9px;background:var(--surface);color:var(--ink-2);font-weight:650;font-variant-numeric:tabular-nums}
.qnav a:hover{text-decoration:none;border-color:var(--accent)}
.qnav a.read{background:var(--ok-soft);border-color:color-mix(in srgb,var(--ok) 40%,transparent);color:var(--ok)}
.qnav a[aria-current="page"]{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.read-head{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;margin-bottom:.8rem}
.read-head h2{margin:0 auto 0 0;font-size:1.2rem;display:flex;align-items:center;gap:.4rem;flex-wrap:wrap}
.read-head .switch[aria-checked="true"]{background:var(--accent)}
.sent{min-width:0;overflow-wrap:anywhere;margin-bottom:.8rem;padding:.85rem 1rem;border:1px solid var(--line);border-radius:14px;background:var(--surface)}
.sent-top{display:flex;align-items:center;gap:.5rem;margin-bottom:.35rem}
.sent-top .part{font-size:.76rem;font-weight:700;letter-spacing:.04em;color:var(--accent)}
.sent-en{margin:0;font-size:1.08rem;line-height:1.9}
.chunk{padding:.08rem .15rem;border-radius:6px;border-bottom:2px solid color-mix(in srgb,var(--accent) 35%,transparent);cursor:pointer;transition:background .15s}
.chunk:hover,.chunk:focus-visible,.chunk.on{background:var(--accent-soft);outline:none}
.chunk.on{border-bottom-color:var(--accent)}
.chunk-zh{margin:.35rem 0 0;padding:.35rem .6rem;border-radius:8px;background:var(--gold-soft);font-size:.9rem;min-height:2rem}
.sent-more{margin-top:.5rem}
.sent.hidezh .sent-more{display:none}
.sent-zh{margin:0 0 .45rem;font-size:.95rem;color:var(--ink-2)}
.chunk-tbl{margin:.3rem 0}
.chunk-tbl td{white-space:normal;text-align:left}
.sent-gram{margin:.45rem 0 0;font-size:.88rem;color:var(--ink-2)}
.sent-terms{margin:.5rem 0 0;display:flex;flex-wrap:wrap;gap:.3rem}
.sent .btn[data-act="reveal"]{margin-top:.5rem}
.read-foot{margin-top:1rem}
.dr-top{display:flex;align-items:center;gap:.8rem;flex-wrap:wrap;margin-bottom:.5rem}
.dr-top .back{margin:0}
.dr-top .small{margin-left:auto}
.dr-card{margin-top:.8rem}
.dr-sent{font-size:1.08rem;line-height:1.75;margin:0 0 .9rem}
.dr-choices{display:grid;gap:.5rem}
.dr-choices .sl-choice.sel{border-color:var(--accent);background:var(--accent-softer)}
.dr-fb{margin-top:.8rem}
.dr-full{margin:.4rem 0 0}
.dr-spell input{width:min(18rem,100%)}
.cz-blank{display:inline-block;min-width:4.5rem;border-bottom:2px solid var(--accent);color:transparent;line-height:1.2}
.match{display:grid;grid-template-columns:1fr 1fr;gap:.6rem}
.mcol{display:grid;gap:.45rem;align-content:start}
.mbtn{min-height:48px;padding:.5rem .7rem;border:1.5px solid var(--line-2);border-radius:12px;background:var(--surface);font-size:.95rem;cursor:pointer;text-align:center;transition:border-color .15s,background .15s,opacity .2s}
.mbtn:hover:not(:disabled){border-color:var(--accent)}
.mbtn.on{border-color:var(--accent);background:var(--accent-soft)}
.mbtn.done{border-color:color-mix(in srgb,var(--ok) 45%,transparent);background:var(--ok-soft);opacity:.55;cursor:default}
.mbtn.bad{border-color:var(--bad);background:var(--bad-soft);animation:shake .4s}
.eng-done{text-align:center;padding:1.6rem 1.2rem}
.eng-done .big{font-size:2.6rem;font-weight:800;line-height:1.1;font-variant-numeric:tabular-nums}
.eng-done .big.ok{color:var(--ok)} .eng-done .big.bad{color:var(--bad)}
.weak{display:flex;flex-wrap:wrap;gap:.4rem}
.eng-note .btn{flex:none;align-self:center}
@media (max-width: 760px){
  .eng-tabs{top:60px}
  .phr{grid-template-columns:1fr}
  .term-grid,.cmd-grid{grid-template-columns:minmax(0,1fr)}
  .eng .chip{white-space:normal}
  .eng-tool .search{max-width:none}
  .sent{padding:.75rem .8rem}
}
@media (prefers-reduced-motion: reduce){
  .mbtn.bad{animation:none}
  .chunk{transition:none}
}
/* 英语通关：搭配/术语 chip 可能是一整句，允许换行，避免页面横向滚动 */
.tc-meta .chip,.sent-terms .chip,.weak .chip{white-space:normal;max-width:100%;text-align:left;height:auto;line-height:1.35}

/* 知识点讲解 #/kp/<id> */
.kp-head h1{margin:.2rem 0 .3rem}
.kp-head .kp-en{font-size:.55em;font-weight:500;color:var(--ink-3);letter-spacing:0}
.kp-head .lede{max-width:46rem}
.kp-head .eyebrow{display:flex;align-items:center;gap:.35rem;flex-wrap:wrap}
.kp-layout{display:grid;grid-template-columns:minmax(0,1fr) 15.5rem;gap:1.4rem;align-items:start;margin-top:1.2rem}
.kp-main{min-width:0;display:grid;gap:1rem}
.kp-block{padding:1.3rem 1.4rem;scroll-margin-top:76px}
.kp-block .slide h2{font-size:clamp(1.15rem,1.7vw,1.45rem);margin-bottom:.7rem}
.kp-prose{max-width:none;font-size:1rem}
.kp-prose p:first-child{margin-top:0}
.kp-next{display:flex;gap:.45rem;align-items:flex-start;margin:.8rem 0 0;color:var(--ink-2);font-size:.92rem}
.kp-next .ic{flex:none;margin-top:.2em;color:var(--accent)}
.kp-t-graph .sl-gsteps li{cursor:pointer}
.kp-t-graph .sl-gsteps li:hover{background:var(--accent-softer)}
.kp-side{position:sticky;top:76px;display:grid;gap:.8rem;max-height:calc(100vh - 96px);overflow:auto;padding-bottom:.5rem}
.kp-sbox{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:.8rem .9rem}
.kp-sbox h4{margin:0 0 .5rem;font-size:.78rem;letter-spacing:.04em;color:var(--ink-3)}
.kp-toc{margin:0;padding-left:1.1rem;font-size:.86rem;display:grid;gap:.2rem}
.kp-toc a{color:var(--ink-2);text-decoration:none}
.kp-toc a:hover{color:var(--accent)}
.kp-chips{display:flex;flex-wrap:wrap;gap:.35rem}
.kp-chip{display:inline-flex;align-items:center;gap:.3rem;padding:.25rem .55rem;border-radius:999px;border:1px solid var(--line-2);background:var(--surface);font-size:.82rem;color:var(--ink);text-decoration:none;max-width:100%;line-height:1.3}
.kp-chip:hover{border-color:var(--accent);color:var(--accent)}
.kp-chip.dim{opacity:.7}
.kp-chip .kg-ic{width:.85rem;height:.85rem;flex:none}
.kp-chip span{overflow:hidden;text-overflow:ellipsis}
.kp-chip .kp-seen .ic{width:.8rem;height:.8rem;color:var(--ok)}
.kp-glink{display:flex;gap:.35rem;align-items:center;font-size:.86rem;padding:.2rem 0}
.kp-pager{margin-top:.6rem}
.kp-idx{display:grid;gap:.1rem;padding:.6rem 1rem}
.kp-idx-row{display:grid;grid-template-columns:13rem minmax(0,1fr);gap:.6rem 1rem;padding:.6rem 0;border-top:1px solid var(--line);align-items:start}
.kp-idx-row:first-child{border-top:0}
.kp-idx-l{font-size:.86rem;font-weight:600;color:var(--ink-2)}
.toc-extra.kp-extra .kp-chips{margin-top:.2rem}
@media (max-width: 980px){
  .kp-layout{grid-template-columns:minmax(0,1fr)}
  .kp-side{position:static;max-height:none;grid-template-columns:repeat(auto-fit,minmax(14rem,1fr))}
  .kp-side .kp-tocbox{display:none}
}
@media (max-width: 640px){
  .kp-block{padding:1rem .95rem}
  .kp-idx-row{grid-template-columns:minmax(0,1fr)}
}
/* 讲解页：表格 / 长公式不撑宽卡片；例题步骤标签过长时可收缩换行 */
.kp-main>*{min-width:0}
.kp-block{min-width:0}
.kp-prose table{display:block;max-width:100%;overflow-x:auto}
.kp-prose .katex-display{overflow-x:auto;overflow-y:hidden;padding:.2rem 0}
.kp-block .st-l{flex:0 1 auto;max-width:42%}
@media (max-width: 640px){
  .kp-block .sl-steps li{flex-wrap:wrap}
  .kp-block .st-l{max-width:none;flex-basis:calc(100% - 2rem)}
}

/* 题目涉及的知识点 & 测验后的建议复习 */
.q-kp{margin-top:.9rem;padding-top:.75rem;border-top:1px dashed var(--line-2)}
.q-kp .k{display:block;font-size:.76rem;font-weight:700;letter-spacing:.04em;color:var(--ink-3);margin-bottom:.35rem}
.q-kp p{margin:.4rem 0 0}
.weak-kp .wk-row{display:grid;grid-template-columns:7rem minmax(0,1fr);gap:.4rem .8rem;padding:.55rem 0;border-top:1px solid var(--line);align-items:start}
.weak-kp .wk-row .lbl{font-size:.8rem;font-weight:650;color:var(--ink-3);padding-top:.25rem}
.kp-chip .kp-n{font-size:.72rem;color:var(--bad);font-weight:700;margin-left:.1rem}
.kp-practice .btn{width:100%;justify-content:center}
@media (max-width: 640px){ .weak-kp .wk-row{grid-template-columns:minmax(0,1fr)} }

/* ================= P1 自适应：掌握度 / 今天学什么 / 智能练习 / 学习计划 / 问助教 ================= */
/* 掌握度等级：hi ≥ 80%（且 ≥ 3 题）· mid 50–80% · lo < 50% · none 数据不足 */
.chip.m-hi{background:var(--ok-soft);color:var(--ok);border-color:transparent}
.chip.m-mid{background:var(--warn-soft);color:var(--warn);border-color:transparent}
.chip.m-lo{background:var(--bad-soft);color:var(--bad);border-color:transparent}
.chip.m-none{color:var(--ink-3)}
i.m-hi,.sd.m-hi{background:var(--ok)} i.m-mid,.sd.m-mid{background:var(--warn)} i.m-lo,.sd.m-lo{background:var(--bad)} i.m-none,.sd.m-none{background:var(--surface-3);border:1.5px solid var(--ink-4)}
.kg-svg.c-mastery .n.m-hi .sh{fill:var(--ok);stroke:var(--ok);opacity:1}
.kg-svg.c-mastery .n.m-mid .sh{fill:var(--warn);stroke:var(--warn);opacity:1}
.kg-svg.c-mastery .n.m-lo .sh{fill:var(--bad);stroke:var(--bad);opacity:1}
.kg-svg.c-mastery .n.m-none .sh{fill:var(--surface-3);stroke:var(--ink-4);opacity:.9}
.kg-st small{color:var(--ink-4);font-size:.7rem;margin-left:.15rem}
.kl-h.kl-h2{margin-top:.4rem;padding-top:.4rem;border-top:1px dashed var(--line)}
/* 讲解页侧栏：你的掌握度 */
.kp-mast .km-top{display:flex;align-items:center;gap:.5rem;margin-bottom:.4rem}
.kp-mast .km-v{font-size:1.5rem;line-height:1.1;font-variant-numeric:tabular-nums}
.km-bar.m-hi>span{background:var(--ok)} .km-bar.m-mid>span{background:var(--warn)} .km-bar.m-lo>span{background:var(--bad)} .km-bar.m-none>span{background:var(--ink-4)}
/* 题目解析区 / 幻灯片 / 讲解页：问助教 */
.sol-ask{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.7rem;padding-top:.6rem;border-top:1px dashed var(--line-2)}
.ask-tutor .ic{color:var(--accent)}
/* 仪表盘：今天学什么 */
.card.today-card{padding:.9rem 1rem}
.td-plan{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem .7rem;padding:.1rem .2rem .7rem;border-bottom:1px solid var(--line);margin-bottom:.3rem}
.today-card .notice{margin-bottom:.5rem}
.today-list{list-style:none;margin:0;padding:0}
.today-list li+li{border-top:1px solid var(--line)}
.td-row{display:flex;align-items:center;gap:.75rem;padding:.65rem .3rem;color:var(--ink);border-radius:10px;min-width:0}
.td-row:hover{text-decoration:none;background:var(--surface-2)}
.td-ic{width:2.1rem;height:2.1rem;border-radius:10px;display:grid;place-items:center;flex:none;background:var(--accent-soft);color:var(--accent)}
.today-list li.opt .td-ic{background:var(--surface-2);color:var(--ink-3)}
.td-b{display:flex;flex-direction:column;min-width:0;flex:1}
.td-b b{font-weight:650;line-height:1.4;overflow-wrap:anywhere}
.td-b small{color:var(--ink-3);font-size:.82rem;line-height:1.5;overflow-wrap:anywhere}
.td-m{flex:none;font-size:.78rem;color:var(--ink-3);white-space:nowrap}
.td-go{flex:none;color:var(--ink-4);width:1rem;height:1rem}
.td-foot{margin:.5rem .2rem 0}
@media (max-width: 520px){ .td-m{display:none} }
/* 混合练习：智能练习 */
.smart-card{margin-bottom:.4rem}
.smart-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,17rem),1fr));gap:.9rem;margin-top:.6rem}
.smart-opt{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:.8rem .9rem;min-width:0}
.smart-opt>b{display:flex;align-items:center;gap:.4rem}
.smart-opt .kp-chips{margin:.35rem 0 .2rem}
.smart-opt .btn-row{margin-top:.7rem}
.kp-chip.tg .kp-n{color:var(--ink-3)}
.smart-tg{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem .6rem;margin:0 0 .8rem}
.smart-tg .lbl{font-size:.78rem}
.smart-rh{margin:1.2rem 0 .4rem;font-size:1rem;text-align:left}
.quiz-summary .table-wrap{text-align:left;margin:.4rem 0}
.quiz-summary .btable td{vertical-align:middle}
/* 学习计划 */
.pl-top{align-items:start}
.pl-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,9rem),1fr));gap:0 .8rem}
.pl-days .chip{cursor:pointer}
.pl-diag{margin:.1rem 0 .3rem;align-items:flex-start;line-height:1.5}
.pl-diag input{margin-top:.2rem;flex:none}
.pl-stats{display:flex;flex-wrap:wrap;gap:1rem 1.4rem;margin:.4rem 0 .6rem}
.pl-sum .notice{margin-top:.6rem}
.pl-weeks{display:grid;gap:.7rem}
.pl-week{padding:.85rem 1rem}
.pl-week.cur{border-color:color-mix(in srgb,var(--accent) 45%,var(--line));box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 12%,transparent)}
details.pl-week>summary{list-style:none;cursor:pointer}
details.pl-week>summary::-webkit-details-marker{display:none}
details.pl-week[open]>summary{margin-bottom:.2rem}
.pl-wh{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .55rem}
.pl-wk{font-size:.98rem}
.pl-date{color:var(--ink-3);font-size:.85rem;font-variant-numeric:tabular-nums}
.pl-load{margin-left:auto;font-size:.78rem;color:var(--ink-3);white-space:nowrap}
.pl-load.over{color:var(--bad);font-weight:650}
.pl-title{margin:.3rem 0 0;font-weight:600;font-size:.92rem;color:var(--ink-2);overflow-wrap:anywhere}
.chip.ph-learn{background:var(--accent-soft);color:var(--accent);border-color:transparent}
.chip.ph-review{background:var(--gold-soft);color:var(--gold);border-color:transparent}
.chip.ph-mock{background:var(--warn-soft);color:var(--warn);border-color:transparent}
.pl-tasks{list-style:none;margin:.5rem 0 0;padding:0;display:grid;gap:.15rem}
.pl-tasks li{display:flex;align-items:baseline;gap:.6rem;font-size:.9rem;min-width:0}
.pl-tasks li a{display:inline-flex;align-items:baseline;gap:.4rem;min-width:0;color:var(--ink)}
.pl-tasks li a .ic{flex:none;color:var(--accent);position:relative;top:.12em}
.pl-tasks li a span{overflow-wrap:anywhere}
.pl-tasks li .muted{margin-left:auto;white-space:nowrap}
.pl-tasks li.done a{color:var(--ink-3);text-decoration:line-through}
.pl-tasks li.done a .ic{color:var(--ok)}
@media (max-width: 520px){ .pl-load{margin-left:0;width:100%} .pl-tasks li .muted{display:none} }

/* ===== P2 FRQ 训练 #/frq、#/frq/<题号>（app.js 第 21c 节） ===== */
.frq-top{margin-bottom:.4rem}
.frq-rules-l{margin:.2rem 0 0;padding-left:1.1rem;display:grid;gap:.35rem;color:var(--ink-2);line-height:1.6}
.frq-stats .stats{display:flex;flex-wrap:wrap;gap:1rem 1.4rem}
.frq-filter{margin:1.2rem 0 0;display:flex;flex-wrap:wrap;gap:.4rem}
.frq-filter a.chip{text-decoration:none}
.frq-row .end{display:flex;flex-wrap:wrap;gap:.3rem;justify-content:flex-end;max-width:11rem}
.frq-head .chips{margin-top:.6rem}
.frq-tools{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem .9rem;margin-top:.8rem}
.frq-tools .linkbtn{margin-left:auto}
.frq-stem{margin-bottom:1rem}
.frq-stem .eyebrow,.frq-part .eyebrow{margin-bottom:.4rem}
.frq-prog{display:flex;align-items:center;gap:.9rem;margin:0 0 1rem;font-size:.9rem;color:var(--ink-2);flex-wrap:wrap}
.frq-prog>span{flex:none}
.frq-prog .bar{flex:1 1 8rem;min-width:6rem}
.frq-parts{display:flex;flex-direction:column;gap:1rem}
.frq-part{scroll-margin-top:84px;min-width:0}
.frq-part.is-done{border-color:color-mix(in srgb,var(--ok) 35%,var(--line))}
.fp-head{display:flex;flex-wrap:wrap;align-items:center;gap:.45rem .55rem;margin-bottom:.55rem}
.fp-title{margin:0;font-size:1.02rem;display:flex;align-items:baseline;gap:.5rem}
.fp-label{font-weight:800;color:var(--accent);font-variant-numeric:tabular-nums}
.fp-st{margin-left:auto}
.fp-prompt{margin-bottom:.8rem}
.fp-tip{margin:.2rem 0 .6rem}
.fp-widget{margin:.2rem 0 .4rem;min-width:0}
.fp-widget.is-locked .w-ctrls{opacity:.65}
.fp-widget.is-locked .w-fig{pointer-events:none}
.fp-out{margin-top:.5rem}
.fp-out .verdict{margin-top:.6rem}
.fp-out .verdict:focus{outline:none;box-shadow:0 0 0 2px var(--accent)}
.fp-out .sl-fb-box:focus{outline:2px solid var(--accent);outline-offset:2px}
.fp-out .sol{margin-top:.7rem}
.fp-rub{margin:.5rem 0;padding:.65rem .9rem;border:1px solid var(--line);border-radius:12px;background:var(--surface-2);font-size:.93rem}
.fp-rub .k,.fp-how .k{display:block;font-size:.76rem;font-weight:700;letter-spacing:.04em;color:var(--ink-3);margin-bottom:.25rem}
.fp-rub ul{list-style:none;margin:0;padding:0;display:grid;gap:.3rem}
.fp-rub li{display:flex;gap:.55rem;align-items:flex-start;line-height:1.55}
.fp-rub li .m{flex:none;width:1.1rem;font-weight:800;color:var(--ink-3)}
.fp-rub li.got .m{color:var(--ok)}
.fp-rub li.miss .m{color:var(--bad)}
.fp-rub p{margin:.35rem 0 0}
.fp-how{margin:.5rem 0 0;padding:.7rem .95rem;border-radius:12px;border:1.5px dashed color-mix(in srgb,var(--accent) 45%,var(--line));background:var(--accent-softer);font-size:.93rem}
.fp-how ul{margin:.2rem 0 .4rem;padding-left:1.1rem}
.fp-how p{margin:.35rem 0 0}
.fp-how code{white-space:normal;overflow-wrap:anywhere}
.fp-prac{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin-top:.8rem}
.fp-pv{font-weight:650;font-size:.9rem;display:inline-flex;align-items:center;gap:.3rem}
.fp-pv.ok{color:var(--ok)} .fp-pv.bad{color:var(--bad)}
.fp-scnote{margin:.45rem 0 0}
.fp-choices{margin:.2rem 0}
.fp-numrow{margin:.2rem 0}
.fp-numrow input{max-width:100%}
.fp-cloze{margin:.2rem 0;font-size:1.02rem;line-height:2.5;overflow-wrap:anywhere}
.fp-bw{display:inline-flex;align-items:center;gap:.15rem;max-width:100%;vertical-align:middle}
.fp-blank{max-width:100%;min-width:0;padding:.28rem .5rem;border-radius:9px;border:1.5px solid var(--line-2);background:var(--surface);color:var(--ink);font-size:.95rem;line-height:1.35;cursor:pointer}
.fp-blank:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}
.fp-blank:disabled{cursor:default;opacity:1}
.fp-blank.ok{border-color:var(--ok);background:var(--ok-soft)}
.fp-blank.bad{border-color:var(--bad);background:var(--bad-soft)}
.fp-mark{font-weight:800;font-size:.95rem}
.fp-mark.ok{color:var(--ok)} .fp-mark.bad{color:var(--bad)}
.frq-part .ta-wrap textarea{width:100%;min-height:9rem;padding:.7rem .85rem;border-radius:12px;border:1.5px solid var(--line-2);background:var(--surface);color:var(--ink);resize:vertical;line-height:1.6}
.frq-part .ta-wrap textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}
.frq-part .sol-ask{display:flex;flex-wrap:wrap;gap:.5rem;margin:.7rem 0 .2rem}
.kp-chip .kp-n.frq-m{color:var(--ink-3)}
.kp-chip .kp-n.frq-m.m-hi{color:var(--ok)}
.kp-chip .kp-n.frq-m.m-mid{color:var(--warn)}
.kp-chip .kp-n.frq-m.m-lo{color:var(--bad)}
.frq-sum{margin-top:1.2rem;border-color:color-mix(in srgb,var(--accent) 40%,var(--line))}
.frq-sum h2{margin:0 0 .6rem;font-size:1.12rem;display:flex;align-items:center;gap:.45rem}
.frq-score{display:flex;flex-wrap:wrap;align-items:baseline;gap:.4rem 1rem}
.frq-score b{font-size:2rem;line-height:1.1;font-variant-numeric:tabular-nums}
.frq-score b small{font-size:.5em;color:var(--ink-3);font-weight:500}
.frq-score b.ok{color:var(--ok)} .frq-score b.bad{color:var(--bad)}
.frq-score span{color:var(--ink-3);font-size:.88rem}
.frq-tab td.num{white-space:nowrap}
.frq-allok{color:var(--ok);font-weight:650;display:flex;align-items:center;gap:.35rem}
@media (max-width: 640px){
  .frq-row{flex-wrap:wrap}
  .frq-row .end{max-width:none;width:100%;justify-content:flex-start;padding-left:2.9rem}
  .frq-tools .linkbtn{margin-left:0}
  .fp-st{margin-left:0}
  .frq-part{padding:1rem .85rem}
  .fp-cloze{line-height:2.7}
}
@media print{ .fp-widget .w-ctrls,.frq-part .q-actions,.frq-sum .btn-row{display:none} }
.frq-part .sol-ans p{font-weight:400}
/* 组件作答模式（FRQ 作图小问）：不给实时对错提示 */
.w-answer .w-cls li.ok,.w-answer .w-cls li.bad{border-color:var(--line);background:var(--surface)}
.w-answer .w-cls li.ok .cls-r,.w-answer .w-cls li.bad .cls-r{color:var(--ink-3)}
.w-answer .w-tc td.qz input.ok,.w-answer .w-tc td.qz input.bad{border-color:var(--line-2);background:var(--surface)}
