/* UX-B3-THEME-FONTS：主题层不再全局导入大字体；字体由需要导出的页面按需加载。 */
/* 默认字体令牌只指向系统字体；动态加载 shared/fonts.css 后，导出动作可使用本地字体。 */
:root{--gewu-font-display:system-ui,-apple-system,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;--gewu-font-sans:system-ui,-apple-system,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;--gewu-font-fun:system-ui,-apple-system,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;--gewu-font-mono:ui-monospace,"Cascadia Mono",Consolas,monospace;--gewu-font-math:"Cambria Math","STIX Two Math","Segoe UI Symbol","Microsoft YaHei",sans-serif}
/* 终稿主题 Token；框架仅换语义色，科学 Canvas 色保持例外。 */
:root,html[data-mode="study"]{
  color-scheme:light;--msp-bg:#F3F1EC;--msp-surface:#FBFAF7;--msp-raised:#EAE7E0;
  --msp-text:#17171A;--msp-muted:#55535C;--msp-subtle:#6B6871;--msp-line:#D9D5CC;--msp-edge:#77737B;
  --msp-accent:#FF5B14;--msp-accent-text:#B8430C;--msp-accent-soft:#FFE9DE;--msp-on-accent:#17171A;
  --msp-shadow:0 2px 0 #D9D5CC,0 8px 24px #17171A0D;--msp-overlay:#17171A99;
  --msp-science-blue:#235DB3;--msp-science-green:#226B3F;--msp-science-red:#B52C32;--msp-science-cyan:#09696F;--msp-science-purple:#7044AA;
}
html[data-mode="battle"]{
  color-scheme:dark;--msp-bg:#0F0F10;--msp-surface:#1A1A1C;--msp-raised:#242428;
  --msp-text:#EDEBE6;--msp-muted:#A09DA6;--msp-subtle:#A09DA6;--msp-line:#2E2E33;--msp-edge:#6E6A73;
  --msp-accent:#FF7A3D;--msp-accent-text:#FF7A3D;--msp-accent-soft:#3A2116;--msp-on-accent:#17171A;
  --msp-shadow:0 2px 0 #09090A,0 8px 24px #FF7A3D24;--msp-overlay:#09090ACC;
  --msp-science-blue:#79B4FF;--msp-science-green:#7BD49C;--msp-science-red:#FF9993;--msp-science-cyan:#65D7DD;--msp-science-purple:#D2A8FF;
}
/* 护眼 · 暖淡（eye）：淡豆沙绿纸底 + 暗芥末金（品牌芥末黄降明度版）+ 墨绿黑字。
   目标：去掉纯白 / 纯黑的高反差与蓝光反射，正文对比度仍 ≥ 7:1（AAA），长时间刷题不刺眼。*/
html[data-mode="eye"]{
  color-scheme:light;--msp-line-h:1.82;--msp-bg:#EFF2EA;--msp-surface:#F8FAF4;--msp-raised:#E3E8DC;
  --msp-text:#1F2A20;--msp-muted:#556055;--msp-subtle:#6B7569;--msp-line:#D2D9CB;--msp-edge:#7C8778;
  --msp-accent:#7E630F;--msp-accent-text:#664E0A;--msp-accent-soft:#EFE9D2;--msp-on-accent:#FBFCF7;
  --msp-shadow:0 2px 0 #D2D9CB,0 8px 24px #1F2A2010;--msp-overlay:#1F2A20B8;
  --msp-science-blue:#2F5D8A;--msp-science-green:#2C6B45;--msp-science-red:#A63A3A;--msp-science-cyan:#0A6E70;--msp-science-purple:#65408F;
}
/* 护眼档正文行距放宽一点，降低密排文字的疲劳感；讲台换成墨绿板，与浅底页面不打架。*/
html[data-mode]{
  --bg:var(--msp-bg);--card:var(--msp-surface);--surface:var(--msp-surface);--surface-2:var(--msp-raised);--surface-3:var(--msp-raised);
  --ink:var(--msp-text);--ink-2:var(--msp-muted);--ink-3:var(--msp-subtle);--text:var(--msp-text);--text-2:var(--msp-muted);--text-3:var(--msp-subtle);
  --line:var(--msp-line);--line-2:var(--msp-line);--line-strong:var(--msp-edge);
  --brand:var(--msp-accent);--brand-d:var(--msp-accent-text);--brand-dd:var(--msp-accent-text);--brand-l:var(--msp-accent-soft);--brand-xl:var(--msp-accent-soft);
  --gold:var(--msp-accent);--gold-l:var(--msp-accent-text);--gold-d:var(--msp-accent-text);--gold-dim:var(--msp-accent-soft);
  --blue:var(--msp-science-blue);--blue-d:var(--msp-science-blue);--blue-l:var(--msp-raised);--blue-xl:var(--msp-raised);
  --green:var(--msp-science-green);--red:var(--msp-science-red);--cyan:var(--msp-science-cyan);--purple:var(--msp-science-purple);--amber:var(--msp-accent-text);
  --sh:var(--msp-shadow);--sh-h:var(--msp-shadow);--tt-ink:var(--msp-text);--tt-gold:var(--msp-accent);--tt-line:var(--msp-line);
  --side:#17171A;--side-2:#24252A;--side-3:#45484F;
  scroll-padding-top:100px;scroll-padding-bottom:100px;
}
html[data-mode] body{background:var(--msp-bg);color:var(--msp-text);font-family:system-ui,-apple-system,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;font-size:16px;line-height:var(--msp-line-h,1.7);margin:0}
button,input,select,textarea{font-family:inherit}
html[data-mode] :is(.ph-top h1,.soc-top h1,.msp-assessment h1,.vhero h1){font-family:var(--gewu-font-display);font-weight:400}
html[data-mode] :is(.mono,.num,.rk,.kpi-v,.rd b,.vv){font-family:var(--gewu-font-mono);font-variant-numeric:tabular-nums}
html[data-mode] :is(button,[role="button"],select,input:not([type="checkbox"]):not([type="radio"])){min-height:44px}
html[data-mode] button,html[data-mode] [role="button"]{min-width:44px;touch-action:manipulation}
html[data-mode] input,html[data-mode] select,html[data-mode] textarea{color-scheme:inherit;max-width:100%;color:var(--msp-text)}
html[data-mode] :focus-visible{outline:3px solid var(--msp-accent-text)!important;outline-offset:3px}
html[data-mode] button:disabled{cursor:not-allowed}
html[data-mode] button:active:not(:disabled){transform:translateY(1px)}
html[data-mode] :is(.col,.grid>.col,.panel,.card,.fml-card){min-width:0}
html[data-mode] :is(.tbl-wrap,.exam-sol,.fml-eq){overflow-x:auto}
html[data-mode] .tag.live,html[data-mode] .tag.stu,html[data-mode] .tag.par,html[data-mode] .tag.tea,html[data-mode] .tag.off{background:var(--msp-raised);color:var(--msp-muted)}
html[data-mode] :is(.sec-title i,.card-h .dot){background:var(--msp-accent)}
html[data-mode] :is(.les.ready,.les.ready:hover,.les-no,.tbl th,.exam-opts.pickable li,.sensor-read .sr){background:var(--msp-raised);border-color:var(--msp-line)}
html[data-mode] :is(.badge,.badge.demo,.badge.soon,.diff-易,.diff-中,.diff-难,.exam-yr,.exam-count,.progress-pill,.back){background:var(--msp-raised);color:var(--msp-muted);border-color:var(--msp-line)}
html[data-mode] .les.ready .les-no{background:var(--msp-accent);color:var(--msp-on-accent)}
html[data-mode] .sheet-hd button{color:var(--msp-text);background:var(--msp-raised)}
html[data-mode] .sb-chk,html[data-mode] .pt-box{background:var(--msp-surface);border-color:var(--msp-edge)}
html[data-mode] .sb-item.on .sb-chk,html[data-mode] .pt.on .pt-box{background:var(--msp-accent);border-color:var(--msp-accent);color:var(--msp-on-accent)}
html[data-mode] .sb-item.on .sb-chk::after{border-color:var(--msp-on-accent)}
html[data-mode] .predict-opt.right .po-k,html[data-mode] .ch-step.done .ch-sno{background:var(--msp-accent);color:var(--msp-on-accent)}
html[data-mode] .predict-opt.wrong .po-k{background:var(--msp-raised);color:var(--msp-text)}
html[data-mode] input[type="range"]{height:44px;background:transparent;accent-color:var(--msp-accent)}
html[data-mode] input[type="range"]::-webkit-slider-runnable-track{height:6px;border-radius:4px;background:var(--msp-line)}
html[data-mode] input[type="range"]::-webkit-slider-thumb{margin-top:-8px;background:var(--msp-accent);border-color:var(--msp-on-accent);width:22px;height:22px}
html[data-mode] input[type="range"]::-moz-range-track{height:6px;background:var(--msp-line)}
html[data-mode] input[type="range"]::-moz-range-thumb{background:var(--msp-accent);border-color:var(--msp-on-accent)}
.msp-theme-control{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--msp-muted);white-space:nowrap}
.msp-theme-control select{padding:8px;border:1px solid var(--msp-line);border-radius:10px;background:var(--msp-surface);font-size:12px}
.msp-skip{position:fixed;left:12px;top:-100px;z-index:9999;padding:12px 18px;background:var(--msp-surface);color:var(--msp-text)}
.msp-skip:focus{top:12px}
/* 导航统一：品牌 = 回到首页。旧版各页自己写「返回目录 / 返回学习 / 返回我的」，
   文案与行为三套，用户找不到回去的路。全站统一到这里。 */
.brand-home{display:inline-flex;align-items:center;gap:8px;
  text-decoration:none;color:inherit;font-weight:800;font-size:16px;letter-spacing:.5px}
.brand-home small{font-weight:400;font-size:12px;
  letter-spacing:0;opacity:.7}
.msp-material-paper{background:var(--msp-surface);border:1px solid var(--msp-line)}
.msp-material-metal{background:linear-gradient(135deg,var(--msp-surface),var(--msp-raised));border:1px solid var(--msp-edge)}
.msp-material-graphite{background:#17171A;color:#F5F5F2;border:1px solid #45484F}
.msp-section-nav{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 16px}
.msp-section-nav button{padding:10px 16px;border:1px solid var(--msp-line);background:var(--msp-surface);border-radius:10px;color:var(--msp-text);font-weight:650}
/* 顶轨骨架：全站 8 页共用，单一事实源已搬到 shared/rail.css（顶轨重设计）。
   这里只留顶栏内部仍会用到的两个原子类；.topbar / .cab-top 已全站下线。 */
.brand{display:flex;align-items:center;gap:10px;font-weight:800;font-size:16px;letter-spacing:.5px;
  text-decoration:none;color:inherit}
.brand small{font-weight:400;color:var(--ink-3);font-size:12px;letter-spacing:0}
/* 品牌即首页：全站唯一「回到首页」入口，取代旧的「返回目录 / 返回学习 / 返回我的」 */
.brand-home{padding:4px 6px;margin-left:-6px;border-radius:12px;transition:background .18s}
.brand-home:hover{background:rgba(255,255,255,.07)}
.brand-home:focus-visible{outline:2px solid #EBB500;outline-offset:2px}
.spacer{flex:1}
.msp-section-nav button.on{background:var(--msp-accent);color:var(--msp-on-accent);border-color:var(--msp-accent)}
html[data-mode] :is(.top){background:var(--msp-surface);border-color:var(--msp-line);backdrop-filter:none;height:auto;min-height:64px;padding-top:env(safe-area-inset-top);flex-wrap:wrap}
html[data-mode] .logo{background:var(--msp-accent);color:var(--msp-on-accent);box-shadow:none}
html[data-mode] .botnav{position:sticky;bottom:0;display:none;grid-template-columns:repeat(5,minmax(0,1fr));background:var(--msp-surface);border-color:var(--msp-line);padding-bottom:env(safe-area-inset-bottom);backdrop-filter:none}
html[data-mode] .botnav button{font-size:12px;min-height:64px;color:var(--msp-muted)}
html[data-mode] .botnav button.on{color:var(--msp-accent-text);background:var(--msp-accent-soft)}
html[data-mode] .botnav button.on::before{background:var(--msp-accent)}
html[data-mode] .botnav button em{background:var(--msp-accent);color:var(--msp-on-accent)}
html[data-mode] .wrap,html[data-mode] .lab{padding-bottom:24px;min-width:0}
@media(max-width:700px){html[data-mode] .wrap,html[data-mode] .lab{padding-bottom:24px}}
html[data-mode] :is(.play-hero,.hero,.fml-top,.soc-top,.jokecard){background:var(--msp-surface);color:var(--msp-text);border:1px solid var(--msp-line);box-shadow:var(--msp-shadow)}
html[data-mode] :is(.play-hero h1,.fml-top h1,.soc-top h1,.jokecard .jk-q){color:var(--msp-text)}
html[data-mode] :is(.fml-top p,.soc-top p,.jokecard .jk-a){color:var(--msp-muted);font-size:16px}
html[data-mode] :is(.play-hero .ph-kicker,.play-hero h1 .hl,.jokecard .jk-kick){background:var(--msp-accent-soft);color:var(--msp-accent-text)}
html[data-mode] :is(.rankbar,.wallbar,.codebar,.streakbar,.fcard,.rep-hero,.premium){background:var(--msp-surface);color:var(--msp-text);border-color:var(--msp-line);box-shadow:var(--msp-shadow)}
html[data-mode] :is(.rankbar .rk-info span,.rankbar .rk-next,.rk-mm,.rk-fit,.wb-head span,.codebar .cb-desc,.codebar .cb-next,.codebar .cb-score span,.streakbar .sk-lab,.sk-hint,.fc-due,.fc-lv,.fc-hint,.rep-hero p,.premium p){color:var(--msp-muted)}
html[data-mode] .rk-anchor{color:var(--msp-muted)!important}
html[data-mode] .rk-review{color:var(--msp-accent-text)!important}
html[data-mode] :is(.rankbar .rk-info b em,.codebar .cb-score b,.rk-fit em,.sk-hint b,.streakbar .sk-num,.premium h3,.rep-ring b){color:var(--msp-accent-text)}
html[data-mode] :is(.rankbar .rk-next b,.wall-cell b,.wall-cell.got span,.ub-shoe,.ub-name,.ub-ticket b,.ub-ticket .ub-row span:last-child,.pick-head h3,.pick-item .pi-name){color:var(--msp-text)}
html[data-mode] :is(.rk-bar,.rk-fitbar,.codebar .cb-bar,.mdl-bar,.sb-bar,.wm-bar,.hpbar){background:var(--msp-raised)}
html[data-mode] :is(.rk-bar i,.codebar .cb-bar i,.mdl-bar i,.sb-bar i,.wm-bar i){background:var(--msp-accent)}
html[data-mode] :is(.rankbar .rk-shoe,.rk-badge,.codebar .cb-badge,.streakbar .sk-flame,.sk-day.on,.wb-declaim){background:var(--msp-accent);color:var(--msp-on-accent);border-color:var(--msp-accent)}
html[data-mode] :is(.sk-day,.wall-cell,.wall-cell.got){background:var(--msp-raised);color:var(--msp-muted);border-color:var(--msp-line);box-shadow:none}
html[data-mode] .wall-cell.got{border-style:solid;border-color:var(--msp-accent-text)}
html[data-mode] .wall-cell.got::after{color:var(--msp-accent-text);opacity:1}
/* 2026-10-06：.labcta / .lc-* 随首页实验台入口条 #goLab 下线，从下面名单里摘掉
   （同名单的 .cabinet-entry 仍是活的鞋柜入口，保留）。 */
html[data-mode] :is(.tk-item,.tk-item:hover,.ip-say b,.ip-silent,.rk-changeshoe,.cabinet-entry){background:var(--msp-raised);color:var(--msp-text);border-color:var(--msp-line);box-shadow:none}
html[data-mode] :is(.cabinet-entry .ce-i){background:var(--msp-accent-soft);color:var(--msp-accent-text);border-color:var(--msp-line)}
html[data-mode] :is(.cabinet-entry .ce-go){background:var(--msp-accent);color:var(--msp-on-accent)}
html[data-mode] :is(.cabinet-entry .ce-t b){color:var(--msp-text)}
html[data-mode] :is(.cabinet-entry .ce-t span){color:var(--msp-muted)}
html[data-mode] :is(.cabinet-entry .ce-t span em){color:var(--msp-accent-text)}

html[data-mode] :is(.btn,.pbtn.prim,.soc-btn.gold,.soc-next,.fc-b,.predict-cta button,.exam-btn.load){background:var(--msp-accent);color:var(--msp-on-accent);border-color:var(--msp-accent);box-shadow:0 2px 0 var(--msp-accent-text);min-height:52px}
html[data-mode] :is(.btn.ghost,.pbtn,.preset,.exam-btn,.fml-cat,.fml-use button,.soc-btn.ghost,.ub-btn.ghost,.pick-foot button.ghost,.predict-cta button.ghost,.fc-b.ghost){background:var(--msp-raised);color:var(--msp-text);border-color:var(--msp-line);box-shadow:none}
html[data-mode] :is(.preset.on,.pbtn.on,.fml-cat.on,.phasebar button.on,.seg button.on,.seg2 button.on,.hbtab.on,.kid.on){background:var(--msp-accent-soft);color:var(--msp-accent-text);border-color:var(--msp-accent-text)}
html[data-mode] :is(.fml-card,.fc-card,.lifelab,.hintbox,.chainbox,.predict,.wrongmap,.scorebox,.sensor,.rest-card,.unbox-card,.pick-card,.pick-head,.pick-item,.sheet-card,.mdl,.duel,.team,.board,.rep-sec,.soc-empty){background:var(--msp-surface);border-color:var(--msp-line);color:var(--msp-text);box-shadow:var(--msp-shadow)}
html[data-mode] :is(.fml-eq,.formula,.fc-memo,.fml-memo,.ll-note,.ll-cell,.ph-bar,.readrow,.readrow .rd,.stage,.stage-w,.objcard,.objcard .ob,.ch-head,.ch-in,.ch-opt,.ch-why,.hintbox-head,.soc-note,.soc-q .sq-n,.predict-opt,.predict-opt .po-k,.stem,.opt,.pt,.guide,.exp,.verdict,.soc-kpi,.soc-kpi.alt,.rep-k,.wm-row,.seg,.seg2,.phasebar button,.hbtab,.kid,.board-rk,.cls-row,.duty,.mdl-ic,.pick-item .pi-art,.ub-ticket,.task){background:var(--msp-raised);border-color:var(--msp-line);color:var(--msp-text)}
html[data-mode] :is(.fml-name,.fml-var b,.fc-q,.fc-eq,.ll-head,.ll-cell b,.ch-head b,.ch-q,.readrow .rd b,.wm-head b,.wm-t b,.sq-t,.predict-q,.map-chap-h,.mdl-t b,.pt-head b,.pt-tx b,.vd-line b,.duel-p b,.duel-timer,.res-card h3,.res-cmp div b,.board-nm b,.cls-row b,.team-h b,.duty .d-tx b,.rep-sec h3,.rep-k b,.rep-w .rw-t b,.adv-t b,.soc-note b,.sb-item.on .sb-t,.sb-res b){color:var(--msp-text)}
html[data-mode] :is(.fml-name em,.fc-cat,.ll-head,.sb-head,.sheet-hd,.predict-head,.ll-head .ll-kick,.sb-i,.fc-i,.mdl-badge,.lv,.lv.cleared,.lv.mastered,.goal-chip,.goal-chip.on,.sb-v,.sb-item.on .sb-v,.pt-v,.pt.on .pt-v,.pt-head span,.vd-h i){background:var(--msp-accent-soft);color:var(--msp-accent-text);border-color:var(--msp-line)}
html[data-mode] :is(.sb-head b,.sb-total,.ch-prog,.ch-chev,.ch-fb.ok,.ch-sno,.guide-h,.exp b,.lockans b,.board-sc b,.team-h i,.ll-note b){color:var(--msp-accent-text)}
html[data-mode] :is(.pick-head p,.pick-item .pi-tag,.ub-warn,.guide p,.exp p,.ch-unit,.ch-why,.rest-card p,.sensor-b,.sensor-read .sr span){color:var(--msp-muted)}
html[data-mode] :is(.sb-res,.sb-res.zero,.sb-res.full,.rest-card .rc-tip,.res-card.win,.res-card.lose,.res-card.draw,.task.done,.task p,.task h4,.task.done p,.exam-tip,.exam-tip b){background:var(--msp-raised);color:var(--msp-text);border-color:var(--msp-line);box-shadow:none}
html[data-mode] :is(.exam-opts.pickable li,.exam-opt,.predict-opt,.ch-opt,.opt){min-height:56px;font-size:16px}
html[data-mode] :is(.exam-opts.pickable li.right,.exam-opt.right,.predict-opt.right,.ch-opt.pick,.exam-fb.ok,.predict-reveal.ok,.verdict.ok,.fc-b.yes){background:var(--msp-accent-soft);color:var(--msp-accent-text);border:2px solid var(--msp-accent-text)}
html[data-mode] :is(.exam-opts.pickable li.wrong,.exam-opt.wrong,.predict-opt.wrong,.exam-fb.no,.predict-reveal.no,.verdict.bad,.fc-b.no){background:var(--msp-raised);color:var(--msp-muted);border:2px dashed var(--msp-edge)}
html[data-mode] .exam-opts.pickable li.right::after,html[data-mode] .exam-opt.right::after{content:' ✓ 正确';color:var(--msp-accent-text);font-weight:700}
html[data-mode] .exam-opts.pickable li.wrong::after,html[data-mode] .exam-opt.wrong::after{content:' × 再复习';color:var(--msp-muted);font-weight:700}
html[data-mode] :is(.exam-stem,.stem,.concl,.ch-q,.ch-why,.sq-t,.steps,.fml-var,.guide p,.exp p,.exam-ans,.exam-sol){font-size:16px;line-height:1.8}
html[data-mode] :is(.fml-eq,.fc-eq,.formula){font-family:"Cambria Math","STIX Two Math","Times New Roman",serif;color:var(--msp-text);user-select:text}


/* 讲台版式（走道 / 台词列）由 index.html 的基础样式统一定义，这里只换配色。
   旧写法把气泡设成 margin:142px 18px 10px 136px + z-index:2、老师全宽绝对定位，
   老师踱步时必然走到气泡后面被盖住，已移除。 */
/* 走道地面标记：基础样式为深底配的浅色，浅色主题下会看不见，这里换成语义色。 */


html[data-mode] .tstage .t-board{background:#24262A;border-color:#73777B}
html[data-mode] .tstage .t-board i{color:#F5F5F2}

html[data-mode] :is(.pick-mask,.unbox-mask,.restmask,.sheet,#modal){background:var(--msp-overlay);backdrop-filter:none}
html[data-mode] :is(.pick-card,.unbox-card,.rest-card,.sheet-card,.md){max-height:calc(100dvh - 32px - env(safe-area-inset-top) - env(safe-area-inset-bottom));overflow:auto}
html[data-mode] .sheet-card{padding-bottom:calc(22px + env(safe-area-inset-bottom))}
html[data-mode] main[id^="exp"] canvas{filter:none;outline:1px solid var(--msp-line);outline-offset:-1px}
html[data-mode] :is(.fml-search,.lg-field input,.fld input,.fld select,.fld textarea,.toolbar input,.toolbar select){background:var(--msp-surface);color:var(--msp-text);border-color:var(--msp-line)}
/* 后台：默认学习场景；手动夜战仍可用，表格独立横向滚动。 */
html[data-mode] body[data-msp-page="admin"]{font-size:14px}
html[data-mode] #login{background:var(--msp-bg);padding:16px;overflow:auto}
html[data-mode] :is(.lg-btn,.btn.pri){background:var(--msp-accent);color:var(--msp-on-accent);border-color:var(--msp-accent)}
html[data-mode] :is(.chip,.kpi.hi){background:var(--msp-surface)}
html[data-mode] th{background:var(--msp-raised)}
html[data-mode] td{border-color:var(--msp-line)}
html[data-mode] :is(.bar,.chart .b1){background:var(--msp-accent)}
html[data-mode] :is(.bar-wrap,.chart .b2){background:var(--msp-raised)}
html[data-mode] .side :is(.nav-g,.side-f,.side-h b span){color:#B7BAC0}
html[data-mode] .side .nav-i{color:#E0E1E4}
html[data-mode] .side .nav-i.on{color:var(--msp-on-accent);box-shadow:none}
html[data-mode] body[data-msp-page="admin"] .card-b{overflow-x:auto}
html[data-mode] body[data-msp-page="admin"] .body{padding-bottom:calc(60px + env(safe-area-inset-bottom))}
@media(max-width:700px){
  html[data-mode] .botnav{position:fixed;inset:auto 0 0;display:grid;z-index:60}
  html[data-mode] #topChip{display:none}
  .msp-theme-control>span{display:none}.msp-theme-control select{max-width:152px}
    html[data-mode] .back{padding:6px;min-width:44px}
  html[data-mode] :is(.fml-search,.ll-note){min-width:0;width:100%}
  html[data-mode] .formula{flex-wrap:wrap}
  html[data-mode] .les-t :is(b,span){white-space:normal}
  html[data-mode] .ch-meta{display:none}
  html[data-mode] body[data-msp-page="admin"] .top{padding:10px;gap:8px}
  html[data-mode] body[data-msp-page="admin"] .top-r{flex-wrap:wrap;margin-left:0}
  html[data-mode] body[data-msp-page="admin"] .body{padding:12px}
  html[data-mode] .toolbar input{min-width:0;width:100%}
  html[data-mode] .row2{grid-template-columns:1fr}
  /* 复习卡：小屏将长文案与三个操作按钮拆成两行，避免 flex:none 挤出视口。 */
  html[data-mode] #rvBox .duty{align-items:flex-start;flex-wrap:wrap;min-width:0;overflow-wrap:anywhere}
  html[data-mode] #rvBox .duty .d-av{flex:0 0 32px}
  html[data-mode] #rvBox .duty .d-tx{flex:1 1 calc(100% - 44px);min-width:0;overflow-wrap:anywhere}
  html[data-mode] #rvBox .duty > span:last-child{display:flex;flex:1 1 100%;min-width:0;max-width:100%;gap:7px;flex-wrap:wrap;margin-left:44px}
  html[data-mode] #rvBox .duty > span:last-child .soc-btn{flex:1 1 120px;min-width:0;width:auto;margin-right:0!important;white-space:normal;overflow-wrap:anywhere}
}
@media(prefers-reduced-motion:reduce){
  html[data-mode] *,html[data-mode] *::before,html[data-mode] *::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}
  /* 降低动效时老师不踱步，居中站定即可（位置由基础样式接管） */

}
.msp-assessment-header{max-width:1000px;margin:auto;padding:20px;display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.msp-assessment{max-width:1000px;margin:auto;padding:18px 16px calc(96px + env(safe-area-inset-bottom));overflow-wrap:anywhere}
.msp-assessment-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:16px;margin-bottom:20px}
.msp-metric,.msp-question,.msp-assessment-work,.msp-login{padding:18px;border:1px solid var(--msp-line);border-radius:14px;background:var(--msp-surface);min-width:0}
.msp-metric h2{margin:0;color:var(--msp-accent-text)}
.msp-action{display:inline-flex;align-items:center;justify-content:center;min-height:48px;min-width:44px;padding:10px 16px;margin:8px 8px 8px 0;border:1px solid var(--msp-line);border-radius:10px;background:var(--msp-accent);color:var(--msp-on-accent);font:inherit;font-weight:650;text-decoration:none;cursor:pointer}
.msp-action:disabled{opacity:.55;cursor:wait}
.msp-question{margin:18px 0;width:100%}.msp-question legend{padding:0 5px;font-weight:650;max-width:100%;white-space:pre-wrap}
.msp-option{display:flex;align-items:flex-start;gap:12px;padding:12px;margin:8px 0;border:1px solid var(--msp-line);border-radius:10px;min-height:56px;cursor:pointer}
.msp-option input{flex:none;margin-top:6px;accent-color:var(--msp-accent);width:20px;height:20px}
.msp-option:has(input:checked),html[data-mode] .exam-opt.selected{border:2px solid var(--msp-accent-text);background:var(--msp-accent-soft);color:var(--msp-text)}
.msp-login label{display:block;margin:12px 0}.msp-login input,.msp-assessment select{display:block;width:100%;padding:10px;border:1px solid var(--msp-line);border-radius:8px;background:var(--msp-surface);font:inherit}
.msp-status{white-space:pre-wrap}.msp-error{border-left:3px solid var(--msp-accent-text);padding:10px;background:var(--msp-raised)}
.msp-result-score{font-size:24px;font-weight:750}.msp-assessment-meta{font-size:13px;overflow-wrap:anywhere}
html[data-mode] .exam-sol{white-space:pre-wrap}
.msp-feedback-box{padding:8px 12px;border:1px solid var(--msp-line);border-radius:10px;font-size:14px;background:var(--msp-surface)}
.msp-feedback-box summary{min-height:44px;display:flex;align-items:center;cursor:pointer}
[data-msp-feedback]{display:flex;gap:12px;align-items:center;flex-wrap:wrap}[data-msp-feedback] label{display:flex;align-items:center;gap:6px;min-height:44px}[data-msp-feedback] input{width:20px;height:20px;accent-color:var(--msp-accent)}
.msp-math-render,#mathPreview{overflow-x:auto;padding:12px 0;max-width:100%;user-select:text}
@media(forced-colors:active){button,[role="button"],input,select{border:1px solid ButtonText!important}.botnav button.on{outline:2px solid Highlight}.exam-opt.right{border-style:solid!important}.exam-opt.wrong{border-style:dashed!important}}

/* 护眼档讲台只换「黑板」的色温：暖墨绿板 + 浅青绿字 + 品牌芥末黄标题，
   比冷灰 #24262A 更护眼，也和整页豆沙绿纸底呼应。
   必须放在上面 html[data-mode] 规则之后，才能盖住它的 background 简写。*/
html[data-mode="eye"] .tstage .t-board{background:#2F3A2C;border-color:#6F7A66}
html[data-mode="eye"] .tstage .t-board i{color:#E8EFE2}
html[data-mode="eye"] .tstage .t-board b{color:#EBB500}

/* 全站底部导航已退役：DOM 暂保留用于旧链接兼容，但所有前台页面与视口均不显示。 */
html[data-mode] body:not([data-msp-page="admin"]){padding-bottom:0}
html[data-mode] .msp-bottom-nav,
html[data-mode] .botnav.msp-bottom-nav,
html[data-mode] .msp-lab-nav.msp-bottom-nav{
  display:none!important
}

/* 站点 LOGO：头部特写（由 logo-work 的程序化脚本从原插画裁出）。
   米白圆角底 + object-fit:cover，四档主题（含护眼）下都清晰，不依赖父容器样式。 */
.brand-avatar{
  width:30px;height:30px;border-radius:9px;background:#FFFFFF;object-fit:cover;
  flex:0 0 auto;display:block;
  box-shadow:0 2px 8px rgba(20,20,20,.16), 0 0 0 1px rgba(20,20,20,.07);
}
.brand-home:hover .brand-avatar{box-shadow:0 4px 12px rgba(20,20,20,.28)}

/* UX-B2-PRIMARY-NAV-CSS：桌面统一一级导航；窄屏由页面自身底栏或菜单承接。 */
.msp-primary-nav{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-left:auto}.msp-primary-nav a{display:inline-flex;align-items:center;min-height:40px;padding:7px 10px;border:1px solid var(--msp-line);border-radius:9px;color:var(--msp-muted);font-size:12px;font-weight:700;text-decoration:none}.msp-primary-nav a:hover,.msp-primary-nav a[aria-current="page"]{color:var(--msp-accent-text);border-color:var(--msp-accent-text);background:var(--msp-accent-soft)}
.assessment-guide{display:grid;gap:5px;margin:0 0 18px;padding:14px 16px;border-left:3px solid var(--msp-accent);background:var(--msp-raised);color:var(--msp-muted);font-size:13px;line-height:1.7}.assessment-guide b{color:var(--msp-text)}.msp-result-exits{margin-top:18px;padding-top:14px;border-top:1px solid var(--msp-line)}.msp-result-exits h3{margin:0 0 5px;color:var(--msp-text)}.msp-result-exits p{color:var(--msp-muted);line-height:1.7}.msp-result-exits .msp-action{margin-top:4px}
@media(max-width:900px){.msp-primary-nav{order:5;width:100%;margin-left:0;justify-content:flex-start}.msp-primary-nav a{flex:1 1 auto;justify-content:center}.msp-assessment-header .msp-primary-nav{order:3}.msp-assessment-header{gap:10px}}
@media(max-width:520px){.msp-primary-nav{gap:4px}.msp-primary-nav a{padding:6px 7px;font-size:11px}.assessment-guide{font-size:12px}}

/* UX-B2-ME-CSS：个人学习中心。 */
.msp-me-center{max-width:1080px;margin:0 auto;padding-top:clamp(18px,4vw,42px)}
.me-hero{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;padding:26px 28px;border:1px solid var(--msp-line);border-radius:20px;background:var(--msp-surface);box-shadow:var(--msp-shadow)}
.me-hero-copy{min-width:0}.me-kicker,.me-card-kicker{color:var(--msp-accent-text);font-size:11px;font-weight:800;letter-spacing:.1em}.me-hero :is(h1,h2){margin:8px 0 10px;font-size:clamp(28px,4.4vw,48px);line-height:1.15;color:var(--msp-text)}.me-hero p{max-width:62ch;margin:0;color:var(--msp-muted);line-height:1.75}.me-side{flex:0 0 min(290px,36%);display:flex;min-width:0;flex-direction:column;gap:10px}
.me-account{flex:none;padding:14px 16px;border-left:3px solid var(--msp-accent);background:var(--msp-raised);color:var(--msp-text);font-size:13px;line-height:1.65}
.me-side-actions{margin:0;display:flex;flex-wrap:wrap;gap:6px 16px;font-size:13px}
.me-side-actions a{color:var(--msp-accent-text);text-decoration:none;border-bottom:1px solid var(--msp-line);padding-bottom:2px}
.me-side-actions a:hover{border-color:var(--msp-accent)}
.me-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-top:16px}.me-card{display:flex;flex-direction:column;min-width:0;padding:20px;border:1px solid var(--msp-line);border-radius:16px;background:var(--msp-surface);box-shadow:var(--msp-shadow)}.me-card strong{margin-top:9px;font-size:28px;line-height:1.2;color:var(--msp-text)}.me-card p{min-height:3.4em;margin:8px 0 14px;color:var(--msp-muted);font-size:13px;line-height:1.65}.me-action{display:inline-flex;align-items:center;justify-content:center;align-self:flex-start;min-height:44px;padding:9px 14px;border:1px solid var(--msp-accent);border-radius:9px;background:var(--msp-accent);color:var(--msp-on-accent);font:inherit;font-weight:750;text-decoration:none;cursor:pointer}.me-action:disabled{opacity:.5;cursor:not-allowed}
.me-links{margin-top:22px;padding:20px;border:1px solid var(--msp-line);border-radius:16px;background:var(--msp-surface)}.me-section-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap}.me-section-head h2{margin:0;color:var(--msp-text);font-size:20px}.me-section-head span{color:var(--msp-muted);font-size:12px}.me-link-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:14px}.me-link{display:flex;flex-direction:column;align-items:flex-start;min-width:0;min-height:142px;padding:15px;text-align:left;border:1px solid var(--msp-line);border-radius:12px;background:var(--msp-raised);color:var(--msp-text);font:inherit;text-decoration:none;cursor:pointer}.me-link b{font-size:15px}.me-link span{margin-top:7px;color:var(--msp-muted);font-size:12px;line-height:1.6}.me-link em{margin-top:auto;color:var(--msp-accent-text);font-size:12px;font-style:normal;font-weight:750}.me-link:hover{border-color:var(--msp-accent-text);transform:translateY(-1px)}.me-note{display:flex;gap:10px;align-items:flex-start;margin-top:14px;padding:14px 16px;border-left:3px solid var(--msp-accent);background:var(--msp-raised);color:var(--msp-muted);font-size:12px;line-height:1.7}.me-note b{flex:none;color:var(--msp-text)}
@media(max-width:820px){.me-hero{display:block;padding:22px 18px}.me-side{margin-top:18px}.me-account{margin-top:0;max-width:none}.me-grid{grid-template-columns:1fr}.me-card p{min-height:0}.me-link-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:480px){.me-link-grid{grid-template-columns:1fr}.me-link{min-height:112px}}

/* 首页信息架构 v1：探索内容是次级入口，不与学习抓手争夺优先级。 */
html[data-mode] .explore-entry{display:flex;align-items:center;justify-content:space-between;gap:12px;cursor:pointer;color:var(--msp-text);font-weight:750}
html[data-mode] .explore-entry span{color:var(--msp-muted);font-size:12px;font-weight:500}
html[data-mode] .explore-entry.is-open{border-color:var(--msp-accent-text);background:var(--msp-accent-soft)}
html[data-mode] #physics-toys:empty{display:none}
/* 2026-10-06：.scientist-home-link 三条随首页「物理学家人物馆」入口条一起下线
   （首页已删该链接，scientists.html 也不复用这个类）。base 版在 shared/scientist-gallery.css，
   但那里已无使用者，保留无害；此处是主题覆写，直接摘掉免留死 token。 */

/* 2026-10-06：原「UX-B3-HOME-START-THEME」整段删除。
   那段是给写死深色的 index.html 打补丁用的（study/eye 两档单独覆写 .start/.start-card）。
   现在 index.html 的 .start/.start-card 已全部改走 --msp-* token，四档自动一致，
   补丁与源样式同值、留着只是冗余，还会挡住以后调 token。 */
