/* 课页壳 · shell.css：全站与各页样式（变量、共享组件、壳骨架、顶栏 / 左栏 / 抽屉、今天 / 学 / 我的 / 知识图 / 摸底 / 错题本等；不含课内与再练一练）。归属：前端线，谁的文件谁改、谁提交。源在构建脚本目录 scripts/shell/，build_lesson_pages.py 原样拼进产物 baike/shell/；2026-10-07 从构建脚本的大字符串里原样拆出（只搬不改）。 */
/* ===== 变量：取值来自设计包 网页风格统一-LearnPal风-v001/tokens.css（只换值不换名；--fsx 缩放机制保留；电视档只认手动 html[data-view=tv]，宽度不再自动变深色）===== */
:root,:root[data-view="phone"]{--c-bg:#F7F8FC;--c-surface:#FFFFFF;--c-surface-2:#F1F2F8;--c-ink:#25283E;--c-ink-2:#656A80;--c-ink-3:#72778B;--c-line:#E9EAF2;--c-accent:#6A63DC;--c-accent-ink:#FFFFFF;--c-accent-hover:#5750C5;--c-accent-soft:#EEEDFF;--c-accent-soft-2:#E2DFFB;--c-accent-2:#D98D54;--c-accent-2-soft:#FFF3E8;--c-ok:#47887C;--c-ok-soft:#EDF7F3;--c-ok-deep:#3B7267;--c-warn:#8A6A2E;--c-warn-soft:#FFF7E9;--c-danger:#B0473F;--c-danger-soft:#FFF2F0;--c-focus:#6A63DC;--c-focus-halo:rgba(106,99,220,.18);--c-lock:#C9CBDA;--c-scrim:rgba(37,40,62,.45);
--c-accent-2-ink:#B07A45;--c-ok-line:#E2EEE7;--c-warn-line:#F1E4C8;--c-danger-line:#F1D6D1;--c-card-main-a:#F0EFFF;--c-card-main-b:#E8EBFF;--c-card-main-line:#E6E4FC;--c-glass:rgba(255,255,255,.94);--c-empty-bg:rgba(255,255,255,.5);--c-empty-line:#DBD8E9;--c-note-bg:#FAF9F5;--c-note-line:#F1EEE6;--c-note-ink:#8A8474;--c-note-icon:#CAA268;--c-lv-1:#D9D6F5;--c-lv-2:#B4AEEC;--c-lv-3:#6A63DC;--c-lv-4:#2F2A8A;--c-lv-dot:#C0392B;--c-map-sea:#D9E8F5;--c-map-land:#F7F2E8;--c-map-land-2:#ECE6DA;--c-map-line:#DDD5C6;--c-map-ink:#3E4A5E;--c-map-ink-2:#6B7385;--c-map-t0:#8F836B;--c-map-lv-1:#EBD2A4;--c-map-lv-2:#DE9A2E;--c-map-lv-3:#C4640F;--c-map-lv-4:#7E3F08;--c-art-paper:#FFFFFF;--c-art-grid:#D9D6F4;--c-art-shadow:#E2E0F4;--c-art-a:#B9B3EE;--c-art-a2:#9F98E6;--c-art-a3:#D2CEF6;--c-art-a4:#CBC5F3;--c-art-b:#EFC9A0;--c-art-b2:#F7DFC5;--c-art-b-line:#B27A44;--c-art-line:#C5BFF0;color-scheme:light;
--c-mp-a:var(--c-accent);--c-mp-a-soft:#C9C5F2;--c-mp-b:var(--c-accent-2);--c-mp-b-soft:#F1D2B6;--c-mp-ok:var(--c-ok);--c-mp-no:var(--c-warn);--c-mp-ghost:#A9A3E8;--c-mp-grid:#E3E1F3;--c-mp-ink:var(--c-ink);--c-mp-ink-2:var(--c-ink-2);--c-mp-line:var(--c-ink-3);--c-mp-stage:#FFFFFF;--c-mp-panel:#F9F8FF;
--lv-0:#F1F2F8;--lv-1:#E2DFFB;--lv-2:#B4AFF0;--lv-3:#6A63DC;--lv-4:#3F3A99;--lv-debt:var(--c-warn-soft);
--fsx:1;--fs-xs:calc(12px*var(--fsx));--fs-sm:calc(14px*var(--fsx));--fs-md:calc(16px*var(--fsx));--fs-lg:calc(18px*var(--fsx));--fs-xl:calc(22px*var(--fsx));--fs-2xl:calc(28px*var(--fsx));--fs-display:calc(44px*var(--fsx));--lh-tight:1.3;--lh-body:1.65;--fw-title:700;--ls-title:-0.02em;
--font:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans CJK SC","Helvetica Neue",Arial,sans-serif;--font-mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:24px;--sp-6:32px;--sp-7:48px;--sp-section:32px;--pad-page:18px;--pad-card:20px;--pad-card-sm:14px;--content-max:100%;
--h-ctl:48px;--h-ctl-lg:52px;--h-ctl-sm:36px;--h-row:60px;--tile-sm:32px;--check:28px;--icon:20px;--icon-stroke:1.75;--r-sm:8px;--r-md:12px;--r-lg:20px;--r-pill:999px;--figh:200px;
--sh-1:0 1px 3px rgba(37,40,62,.05);--sh-2:0 24px 80px rgba(38,32,57,.14);--sh-accent:0 4px 9px rgba(106,99,220,.12);--sh-hover:0 3px 10px rgba(58,57,96,.06);--focus-w:3px;--focus-off:3px;
--t-state:120ms;--t-drawer:200ms;--t-collapse:300ms;--ease:cubic-bezier(.2,.7,.2,1);--nav-h:64px;--nav-w:216px;--rail-w:64px;--aside-w:320px;--top-h:56px;--abar-h:64px;--beat:18px;--beat-cur:22px;--col-text:640px;--col-side:320px;--col-gap:40px;--lp2-w:100%}
@media(min-width:641px){:root:not([data-view]){--fs-xs:calc(12px*var(--fsx));--fs-sm:calc(14px*var(--fsx));--fs-md:calc(16px*var(--fsx));--fs-lg:calc(18px*var(--fsx));--fs-xl:calc(24px*var(--fsx));--fs-2xl:calc(32px*var(--fsx));--fs-display:calc(52px*var(--fsx));--sp-4:20px;--sp-5:28px;--sp-6:40px;--sp-7:64px;--sp-section:40px;--pad-page:32px;--pad-card:24px;--pad-card-sm:16px;--content-max:720px;--h-ctl:48px;--h-ctl-lg:52px;--h-row:64px;--tile-sm:36px;--check:30px;--top-h:64px;--figh:180px;--lp2-w:640px}}
:root[data-view="desktop"]{--fs-xs:calc(12px*var(--fsx));--fs-sm:calc(14px*var(--fsx));--fs-md:calc(16px*var(--fsx));--fs-lg:calc(18px*var(--fsx));--fs-xl:calc(24px*var(--fsx));--fs-2xl:calc(32px*var(--fsx));--fs-display:calc(52px*var(--fsx));--sp-4:20px;--sp-5:28px;--sp-6:40px;--sp-7:64px;--sp-section:40px;--pad-page:32px;--pad-card:24px;--pad-card-sm:16px;--content-max:720px;--h-ctl:48px;--h-ctl-lg:52px;--h-row:64px;--tile-sm:36px;--check:30px;--top-h:64px;--figh:180px;--lp2-w:640px}
/* 窄电脑 641～1023：同一档，左栏收成 64 图标条、页边 24 */
@media(min-width:641px) and (max-width:1023px){:root:not([data-view]),:root[data-view="desktop"]{--nav-w:var(--rail-w);--pad-page:24px;--aside-w:0px}}
@media(min-width:1280px){:root:not([data-view]),:root[data-view="desktop"]{--lp2-w:calc(var(--col-text) + var(--col-gap) + var(--col-side))}}
@media(min-width:1600px){:root:not([data-view]),:root[data-view="desktop"]{--pad-page:43px;--content-max:760px;--col-text:680px;--col-side:340px}}
:root[data-view="tv"]{--c-bg:#15161F;--c-surface:#1E2030;--c-surface-2:#2A2D40;--c-ink:#F1F1F8;--c-ink-2:#B9BCCF;--c-ink-3:#969AB0;--c-line:#353852;--c-accent:#9E98F0;--c-accent-ink:#16172A;--c-accent-hover:#B4AFF5;--c-accent-soft:#2E2C55;--c-accent-soft-2:#3A3768;--c-accent-2:#E4A46F;--c-accent-2-soft:#3F2F22;--c-accent-2-ink:#F0BE8E;--c-ok:#7FC4B4;--c-ok-soft:#1E3A34;--c-ok-deep:#9AD6C8;--c-ok-line:#2C4F47;--c-warn:#E9C070;--c-warn-soft:#3D3320;--c-warn-line:#55482C;--c-danger:#F08A80;--c-danger-soft:#45201E;--c-danger-line:#5E2F2C;--c-focus:#9E98F0;--c-focus-halo:rgba(158,152,240,.22);--c-lock:#5C6079;--c-scrim:rgba(0,0,0,.6);--c-card-main-a:#24264A;--c-card-main-b:#1F2840;--c-card-main-line:#34366A;--c-glass:rgba(30,32,48,.94);--c-empty-bg:rgba(255,255,255,.03);--c-empty-line:#3A3D58;--c-note-bg:#24231F;--c-note-line:#35332B;--c-note-ink:#B3AB95;--c-note-icon:#CAA268;--c-lv-1:#3A3768;--c-lv-2:#5A54B0;--c-lv-3:#9E98F0;--c-lv-4:#D2CEF6;--c-lv-dot:#F08A80;--c-map-sea:#0B1630;--c-map-land:#242B3B;--c-map-land-2:#1B2130;--c-map-line:#3A4356;--c-map-ink:#E6E9F2;--c-map-ink-2:#A9B0C2;--c-map-t0:#7A8499;--c-map-lv-1:#7A5320;--c-map-lv-2:#B8781F;--c-map-lv-3:#F2B93B;--c-map-lv-4:#FFE38A;--c-art-paper:#262840;--c-art-grid:#3A3D5C;--c-art-shadow:#12131C;--c-art-a:#6A64C8;--c-art-a2:#504AA6;--c-art-a3:#8A84E0;--c-art-a4:#7A74D0;--c-art-b:#C48A5A;--c-art-b2:#E0AC80;--c-art-b-line:#E9C9A8;--c-art-line:#6E68C2;--c-mp-a-soft:#4A4690;--c-mp-b-soft:#6B4A2C;--c-mp-ghost:#7B76C8;--c-mp-grid:#3A3D58;--c-mp-stage:#1E2030;--c-mp-panel:#232538;--lv-0:#2A2D40;--lv-1:#3A3768;--lv-2:#5F58B8;--lv-3:#9E98F0;--lv-4:#C9C5F2;--sh-1:none;--sh-2:0 24px 64px rgba(0,0,0,.6);--sh-accent:none;--sh-hover:0 3px 10px rgba(0,0,0,.35);color-scheme:dark;--c-focus:#FFD166;--c-focus-halo:rgba(255,209,102,.18);--fs-xs:calc(22px*var(--fsx));--fs-sm:calc(26px*var(--fsx));--fs-md:calc(30px*var(--fsx));--fs-lg:calc(36px*var(--fsx));--fs-xl:calc(48px*var(--fsx));--fs-2xl:calc(68px*var(--fsx));--fs-display:calc(112px*var(--fsx));--lh-body:1.5;--sp-1:8px;--sp-2:14px;--sp-3:20px;--sp-4:28px;--sp-5:40px;--sp-6:56px;--sp-7:80px;--sp-section:56px;--pad-page:64px;--pad-card:40px;--pad-card-sm:28px;--content-max:1792px;--h-ctl:84px;--h-ctl-lg:100px;--h-ctl-sm:64px;--h-row:104px;--tile-sm:56px;--check:48px;--icon:36px;--icon-stroke:2;--r-sm:12px;--r-md:18px;--r-lg:28px;--sh-1:none;--sh-2:0 24px 64px rgba(0,0,0,.6);--sh-accent:none;--sh-hover:0 3px 10px rgba(0,0,0,.35);--focus-w:6px;--focus-off:4px;--nav-h:128px;--top-h:128px}
/* 深浅色（第 8 轮）：html[data-theme=light|dark|auto]，只换色与阴影；手机 / 电脑缺省浅，电视缺省深 */
:root[data-theme="dark"]{--c-bg:#15161F;--c-surface:#1E2030;--c-surface-2:#2A2D40;--c-ink:#F1F1F8;--c-ink-2:#B9BCCF;--c-ink-3:#969AB0;--c-line:#353852;--c-accent:#9E98F0;--c-accent-ink:#16172A;--c-accent-hover:#B4AFF5;--c-accent-soft:#2E2C55;--c-accent-soft-2:#3A3768;--c-accent-2:#E4A46F;--c-accent-2-soft:#3F2F22;--c-accent-2-ink:#F0BE8E;--c-ok:#7FC4B4;--c-ok-soft:#1E3A34;--c-ok-deep:#9AD6C8;--c-ok-line:#2C4F47;--c-warn:#E9C070;--c-warn-soft:#3D3320;--c-warn-line:#55482C;--c-danger:#F08A80;--c-danger-soft:#45201E;--c-danger-line:#5E2F2C;--c-focus:#9E98F0;--c-focus-halo:rgba(158,152,240,.22);--c-lock:#5C6079;--c-scrim:rgba(0,0,0,.6);--c-card-main-a:#24264A;--c-card-main-b:#1F2840;--c-card-main-line:#34366A;--c-glass:rgba(30,32,48,.94);--c-empty-bg:rgba(255,255,255,.03);--c-empty-line:#3A3D58;--c-note-bg:#24231F;--c-note-line:#35332B;--c-note-ink:#B3AB95;--c-note-icon:#CAA268;--c-lv-1:#3A3768;--c-lv-2:#5A54B0;--c-lv-3:#9E98F0;--c-lv-4:#D2CEF6;--c-lv-dot:#F08A80;--c-map-sea:#0B1630;--c-map-land:#242B3B;--c-map-land-2:#1B2130;--c-map-line:#3A4356;--c-map-ink:#E6E9F2;--c-map-ink-2:#A9B0C2;--c-map-t0:#7A8499;--c-map-lv-1:#7A5320;--c-map-lv-2:#B8781F;--c-map-lv-3:#F2B93B;--c-map-lv-4:#FFE38A;--c-art-paper:#262840;--c-art-grid:#3A3D5C;--c-art-shadow:#12131C;--c-art-a:#6A64C8;--c-art-a2:#504AA6;--c-art-a3:#8A84E0;--c-art-a4:#7A74D0;--c-art-b:#C48A5A;--c-art-b2:#E0AC80;--c-art-b-line:#E9C9A8;--c-art-line:#6E68C2;--c-mp-a-soft:#4A4690;--c-mp-b-soft:#6B4A2C;--c-mp-ghost:#7B76C8;--c-mp-grid:#3A3D58;--c-mp-stage:#1E2030;--c-mp-panel:#232538;--lv-0:#2A2D40;--lv-1:#3A3768;--lv-2:#5F58B8;--lv-3:#9E98F0;--lv-4:#C9C5F2;--sh-1:none;--sh-2:0 24px 64px rgba(0,0,0,.6);--sh-accent:none;--sh-hover:0 3px 10px rgba(0,0,0,.35);color-scheme:dark;}
@media(prefers-color-scheme:dark){:root[data-theme="auto"]{--c-bg:#15161F;--c-surface:#1E2030;--c-surface-2:#2A2D40;--c-ink:#F1F1F8;--c-ink-2:#B9BCCF;--c-ink-3:#969AB0;--c-line:#353852;--c-accent:#9E98F0;--c-accent-ink:#16172A;--c-accent-hover:#B4AFF5;--c-accent-soft:#2E2C55;--c-accent-soft-2:#3A3768;--c-accent-2:#E4A46F;--c-accent-2-soft:#3F2F22;--c-accent-2-ink:#F0BE8E;--c-ok:#7FC4B4;--c-ok-soft:#1E3A34;--c-ok-deep:#9AD6C8;--c-ok-line:#2C4F47;--c-warn:#E9C070;--c-warn-soft:#3D3320;--c-warn-line:#55482C;--c-danger:#F08A80;--c-danger-soft:#45201E;--c-danger-line:#5E2F2C;--c-focus:#9E98F0;--c-focus-halo:rgba(158,152,240,.22);--c-lock:#5C6079;--c-scrim:rgba(0,0,0,.6);--c-card-main-a:#24264A;--c-card-main-b:#1F2840;--c-card-main-line:#34366A;--c-glass:rgba(30,32,48,.94);--c-empty-bg:rgba(255,255,255,.03);--c-empty-line:#3A3D58;--c-note-bg:#24231F;--c-note-line:#35332B;--c-note-ink:#B3AB95;--c-note-icon:#CAA268;--c-lv-1:#3A3768;--c-lv-2:#5A54B0;--c-lv-3:#9E98F0;--c-lv-4:#D2CEF6;--c-lv-dot:#F08A80;--c-map-sea:#0B1630;--c-map-land:#242B3B;--c-map-land-2:#1B2130;--c-map-line:#3A4356;--c-map-ink:#E6E9F2;--c-map-ink-2:#A9B0C2;--c-map-t0:#7A8499;--c-map-lv-1:#7A5320;--c-map-lv-2:#B8781F;--c-map-lv-3:#F2B93B;--c-map-lv-4:#FFE38A;--c-art-paper:#262840;--c-art-grid:#3A3D5C;--c-art-shadow:#12131C;--c-art-a:#6A64C8;--c-art-a2:#504AA6;--c-art-a3:#8A84E0;--c-art-a4:#7A74D0;--c-art-b:#C48A5A;--c-art-b2:#E0AC80;--c-art-b-line:#E9C9A8;--c-art-line:#6E68C2;--c-mp-a-soft:#4A4690;--c-mp-b-soft:#6B4A2C;--c-mp-ghost:#7B76C8;--c-mp-grid:#3A3D58;--c-mp-stage:#1E2030;--c-mp-panel:#232538;--lv-0:#2A2D40;--lv-1:#3A3768;--lv-2:#5F58B8;--lv-3:#9E98F0;--lv-4:#C9C5F2;--sh-1:none;--sh-2:0 24px 64px rgba(0,0,0,.6);--sh-accent:none;--sh-hover:0 3px 10px rgba(0,0,0,.35);color-scheme:dark;}}
:root[data-view="tv"][data-theme="light"]{--c-bg:#F7F8FC;--c-surface:#FFFFFF;--c-surface-2:#F1F2F8;--c-ink:#25283E;--c-ink-2:#656A80;--c-ink-3:#72778B;--c-line:#E9EAF2;--c-accent:#6A63DC;--c-accent-ink:#FFFFFF;--c-accent-hover:#5750C5;--c-accent-soft:#EEEDFF;--c-accent-soft-2:#E2DFFB;--c-accent-2:#D98D54;--c-accent-2-soft:#FFF3E8;--c-accent-2-ink:#B07A45;--c-ok:#47887C;--c-ok-soft:#EDF7F3;--c-ok-deep:#3B7267;--c-ok-line:#E2EEE7;--c-warn:#8A6A2E;--c-warn-soft:#FFF7E9;--c-warn-line:#F1E4C8;--c-danger:#B0473F;--c-danger-soft:#FFF2F0;--c-danger-line:#F1D6D1;--c-focus:#C99A00;--c-focus-halo:rgba(201,154,0,.18);--c-lock:#C9CBDA;--c-scrim:rgba(37,40,62,.45);--c-card-main-a:#F0EFFF;--c-card-main-b:#E8EBFF;--c-card-main-line:#E6E4FC;--c-glass:rgba(255,255,255,.94);--c-empty-bg:rgba(255,255,255,.5);--c-empty-line:#DBD8E9;--c-note-bg:#FAF9F5;--c-note-line:#F1EEE6;--c-note-ink:#8A8474;--c-note-icon:#CAA268;--c-lv-1:#D9D6F5;--c-lv-2:#B4AEEC;--c-lv-3:#6A63DC;--c-lv-4:#2F2A8A;--c-lv-dot:#C0392B;--c-map-sea:#D9E8F5;--c-map-land:#F7F2E8;--c-map-land-2:#ECE6DA;--c-map-line:#DDD5C6;--c-map-ink:#3E4A5E;--c-map-ink-2:#6B7385;--c-map-t0:#8F836B;--c-map-lv-1:#EBD2A4;--c-map-lv-2:#DE9A2E;--c-map-lv-3:#C4640F;--c-map-lv-4:#7E3F08;--c-art-paper:#FFFFFF;--c-art-grid:#D9D6F4;--c-art-shadow:#E2E0F4;--c-art-a:#B9B3EE;--c-art-a2:#9F98E6;--c-art-a3:#D2CEF6;--c-art-a4:#CBC5F3;--c-art-b:#EFC9A0;--c-art-b2:#F7DFC5;--c-art-b-line:#B27A44;--c-art-line:#C5BFF0;--c-mp-a-soft:#C9C5F2;--c-mp-b-soft:#F1D2B6;--c-mp-ghost:#A9A3E8;--c-mp-grid:#E3E1F3;--c-mp-stage:#FFFFFF;--c-mp-panel:#F9F8FF;--lv-0:#F1F2F8;--lv-1:#E2DFFB;--lv-2:#B4AFF0;--lv-3:#6A63DC;--lv-4:#3F3A99;--sh-1:none;--sh-2:0 24px 64px rgba(0,0,0,.18);--sh-accent:none;--sh-hover:none;color-scheme:light;}
@media(prefers-color-scheme:light){:root[data-view="tv"][data-theme="auto"]{--c-bg:#F7F8FC;--c-surface:#FFFFFF;--c-surface-2:#F1F2F8;--c-ink:#25283E;--c-ink-2:#656A80;--c-ink-3:#72778B;--c-line:#E9EAF2;--c-accent:#6A63DC;--c-accent-ink:#FFFFFF;--c-accent-hover:#5750C5;--c-accent-soft:#EEEDFF;--c-accent-soft-2:#E2DFFB;--c-accent-2:#D98D54;--c-accent-2-soft:#FFF3E8;--c-accent-2-ink:#B07A45;--c-ok:#47887C;--c-ok-soft:#EDF7F3;--c-ok-deep:#3B7267;--c-ok-line:#E2EEE7;--c-warn:#8A6A2E;--c-warn-soft:#FFF7E9;--c-warn-line:#F1E4C8;--c-danger:#B0473F;--c-danger-soft:#FFF2F0;--c-danger-line:#F1D6D1;--c-focus:#C99A00;--c-focus-halo:rgba(201,154,0,.18);--c-lock:#C9CBDA;--c-scrim:rgba(37,40,62,.45);--c-card-main-a:#F0EFFF;--c-card-main-b:#E8EBFF;--c-card-main-line:#E6E4FC;--c-glass:rgba(255,255,255,.94);--c-empty-bg:rgba(255,255,255,.5);--c-empty-line:#DBD8E9;--c-note-bg:#FAF9F5;--c-note-line:#F1EEE6;--c-note-ink:#8A8474;--c-note-icon:#CAA268;--c-lv-1:#D9D6F5;--c-lv-2:#B4AEEC;--c-lv-3:#6A63DC;--c-lv-4:#2F2A8A;--c-lv-dot:#C0392B;--c-map-sea:#D9E8F5;--c-map-land:#F7F2E8;--c-map-land-2:#ECE6DA;--c-map-line:#DDD5C6;--c-map-ink:#3E4A5E;--c-map-ink-2:#6B7385;--c-map-t0:#8F836B;--c-map-lv-1:#EBD2A4;--c-map-lv-2:#DE9A2E;--c-map-lv-3:#C4640F;--c-map-lv-4:#7E3F08;--c-art-paper:#FFFFFF;--c-art-grid:#D9D6F4;--c-art-shadow:#E2E0F4;--c-art-a:#B9B3EE;--c-art-a2:#9F98E6;--c-art-a3:#D2CEF6;--c-art-a4:#CBC5F3;--c-art-b:#EFC9A0;--c-art-b2:#F7DFC5;--c-art-b-line:#B27A44;--c-art-line:#C5BFF0;--c-mp-a-soft:#C9C5F2;--c-mp-b-soft:#F1D2B6;--c-mp-ghost:#A9A3E8;--c-mp-grid:#E3E1F3;--c-mp-stage:#FFFFFF;--c-mp-panel:#F9F8FF;--lv-0:#F1F2F8;--lv-1:#E2DFFB;--lv-2:#B4AFF0;--lv-3:#6A63DC;--lv-4:#3F3A99;--sh-1:none;--sh-2:0 24px 64px rgba(0,0,0,.18);--sh-accent:none;--sh-hover:none;color-scheme:light;}}
/* 打印一律浅色（S6 ★3）：作业单打出来白纸黑字。三层 :root 抬权重压过深色 / 电视块，排在最后。四处一致（设计包 tokens.css / web/ui.css / 本模板 / tv/index.html）。 */
@media print{:root:root:root{--c-bg:#F7F8FC;--c-surface:#FFFFFF;--c-surface-2:#F1F2F8;--c-ink:#25283E;--c-ink-2:#656A80;--c-ink-3:#72778B;--c-line:#E9EAF2;--c-accent:#6A63DC;--c-accent-ink:#FFFFFF;--c-accent-hover:#5750C5;--c-accent-soft:#EEEDFF;--c-accent-soft-2:#E2DFFB;--c-accent-2:#D98D54;--c-accent-2-soft:#FFF3E8;--c-accent-2-ink:#B07A45;--c-ok:#47887C;--c-ok-soft:#EDF7F3;--c-ok-deep:#3B7267;--c-ok-line:#E2EEE7;--c-warn:#8A6A2E;--c-warn-soft:#FFF7E9;--c-warn-line:#F1E4C8;--c-danger:#B0473F;--c-danger-soft:#FFF2F0;--c-danger-line:#F1D6D1;--c-focus:#6A63DC;--c-focus-halo:rgba(106,99,220,.18);--c-lock:#C9CBDA;--c-scrim:rgba(37,40,62,.45);--c-card-main-a:#F0EFFF;--c-card-main-b:#E8EBFF;--c-card-main-line:#E6E4FC;--c-glass:rgba(255,255,255,.94);--c-empty-bg:rgba(255,255,255,.5);--c-empty-line:#DBD8E9;--c-note-bg:#FAF9F5;--c-note-line:#F1EEE6;--c-note-ink:#8A8474;--c-note-icon:#CAA268;--c-lv-1:#D9D6F5;--c-lv-2:#B4AEEC;--c-lv-3:#6A63DC;--c-lv-4:#2F2A8A;--c-lv-dot:#C0392B;--c-map-sea:#D9E8F5;--c-map-land:#F7F2E8;--c-map-land-2:#ECE6DA;--c-map-line:#DDD5C6;--c-map-ink:#3E4A5E;--c-map-ink-2:#6B7385;--c-map-t0:#8F836B;--c-map-lv-1:#EBD2A4;--c-map-lv-2:#DE9A2E;--c-map-lv-3:#C4640F;--c-map-lv-4:#7E3F08;--c-art-paper:#FFFFFF;--c-art-grid:#D9D6F4;--c-art-shadow:#E2E0F4;--c-art-a:#B9B3EE;--c-art-a2:#9F98E6;--c-art-a3:#D2CEF6;--c-art-a4:#CBC5F3;--c-art-b:#EFC9A0;--c-art-b2:#F7DFC5;--c-art-b-line:#B27A44;--c-art-line:#C5BFF0;--c-mp-a-soft:#C9C5F2;--c-mp-b-soft:#F1D2B6;--c-mp-ghost:#A9A3E8;--c-mp-grid:#E3E1F3;--c-mp-stage:#FFFFFF;--c-mp-panel:#F9F8FF;--lv-0:#F1F2F8;--lv-1:#E2DFFB;--lv-2:#B4AFF0;--lv-3:#6A63DC;--lv-4:#3F3A99;--sh-1:none;--sh-2:none;--sh-accent:none;--sh-hover:none;color-scheme:light}}
html[data-fs="large"]{--fsx:1.15}
html[data-fs="small"]{--fsx:.9}
@media(prefers-reduced-motion:reduce){:root{--t-state:0ms;--t-drawer:0ms;--t-collapse:0ms}}
/* ===== 共享组件 CSS：构建时从设计包 components.html 的「组件 CSS」段原样内联（.tier→body，.tier-phone/.tier-desktop→宽度断点，.tier-tv→html[data-view=tv]）。改那边，别改这里。===== */
/* 来自 components.html 组件 CSS 段（构建时内联）*/
/* ===== 组件 CSS（落地时抽成 web/components.css，app.css / parent.css / kp.css / 百科壳 / tv 都引它）===== */
body{font-family:var(--font);background:var(--c-bg);color:var(--c-ink);font-size:var(--fs-md);line-height:var(--lh-body);-webkit-font-smoothing:antialiased}
*,*::before,*::after{box-sizing:border-box}
:where(button),:where(input),:where(textarea),:where(select){font:inherit;color:inherit}
:where(button){cursor:pointer;border:0;background:none;padding:0;text-align:left;-webkit-tap-highlight-color:transparent}
a{color:inherit;text-decoration:none}
p,h1,h2,h3{margin:0}
:focus-visible{outline:var(--focus-w) solid var(--c-focus);outline-offset:var(--focus-off);box-shadow:0 0 0 calc(var(--focus-w) + var(--focus-off) + 2px) var(--c-focus-halo)}
svg.i{width:var(--icon);height:var(--icon);flex:none;stroke:currentColor;fill:none;stroke-width:var(--icon-stroke);stroke-linecap:round;stroke-linejoin:round}
svg.i.-sm{width:16px;height:16px}svg.i.-lg{width:28px;height:28px}
/* 字 */
.h1{font-size:var(--fs-2xl);font-weight:var(--fw-title);line-height:var(--lh-tight);letter-spacing:var(--ls-title);text-wrap:balance}
.h2{font-size:var(--fs-xl);font-weight:var(--fw-title);line-height:var(--lh-tight);letter-spacing:var(--ls-title)}
.h3{font-size:var(--fs-lg);font-weight:600;line-height:1.35}
.quiet{color:var(--c-ink-2);font-size:var(--fs-sm)}
.faint{color:var(--c-ink-3);font-size:var(--fs-sm)}
.eyebrow{color:var(--c-ink-3);font-size:var(--fs-xs);letter-spacing:.08em;font-weight:500}
.display{font-size:var(--fs-display);font-weight:var(--fw-title);line-height:1;letter-spacing:-0.02em;font-variant-numeric:tabular-nums}
.mono{font-family:var(--font-mono);letter-spacing:.06em}
.accent{color:var(--c-accent)}.ok{color:var(--c-ok)}
.stack>*+*{margin-top:var(--sp-4)}.stack-sm>*+*{margin-top:var(--sp-2)}.stack-lg>*+*{margin-top:var(--sp-5)}
.rowflex{display:flex;align-items:center;gap:var(--sp-3)}.rowflex.-wrap{flex-wrap:wrap}
.grow{flex:1 1 auto;min-width:0}.right{margin-left:auto}
.ellip{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mt-1{margin-top:var(--sp-1)}.mt-2{margin-top:var(--sp-2)}.mt-3{margin-top:var(--sp-3)}.mt-4{margin-top:var(--sp-4)}.mt-5{margin-top:var(--sp-5)}
.hide{display:none!important}
.statusline{display:flex;align-items:baseline;gap:var(--sp-3);flex-wrap:wrap}
.statusline .date{color:var(--c-ink-3);font-size:var(--fs-sm)}
.greet{font-size:var(--fs-sm);color:var(--c-ink-2);margin-top:var(--sp-1)}
/* 按钮 */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);min-height:var(--h-ctl);padding:0 var(--sp-5);border:1px solid transparent;border-radius:var(--r-md);font-weight:600;font-size:var(--fs-sm);line-height:1.3;white-space:nowrap;transition:background var(--t-state) var(--ease),transform var(--t-state) var(--ease),border-color var(--t-state) var(--ease)}
.btn .i{width:18px;height:18px}
.btn-primary{background:var(--c-accent);color:var(--c-accent-ink);box-shadow:var(--sh-accent)}
.btn-primary:hover{background:var(--c-accent-hover);transform:translateY(-1px)}
.btn-primary.is-soft{background:var(--c-accent-soft);color:var(--c-accent);box-shadow:none}
.btn-primary.is-soft:hover{background:var(--c-accent-soft-2);color:var(--c-accent);transform:none}
.btn-secondary{background:var(--c-surface);border-color:var(--c-line);color:var(--c-ink-2)}
.btn-secondary:hover{background:var(--c-accent-soft);border-color:var(--c-accent-soft-2);color:var(--c-accent)}
.btn-ghost{color:var(--c-ink-2);padding:0 var(--sp-3);font-weight:500}
.btn-ghost:hover{color:var(--c-accent);background:var(--c-accent-soft)}
.btn-danger{background:var(--c-danger-soft);color:var(--c-danger);border-color:var(--c-danger-line)}
html[data-view="tv"] .btn-danger{border-color:transparent}
.btn-lg{min-height:var(--h-ctl-lg);font-size:var(--fs-md);padding:0 var(--sp-6);min-width:140px}
.btn-sm{min-height:var(--h-ctl-sm);padding:0 var(--sp-3);font-size:var(--fs-xs);border-radius:var(--r-sm)}
.btn-block{width:100%}
.btn-icon{width:var(--h-ctl);padding:0;border-radius:var(--r-md)}
.btn-icon.-round{border-radius:50%}
.btn[disabled],.btn.is-disabled{cursor:default;transform:none;box-shadow:none}
.btn-primary[disabled],.btn-primary.is-disabled{background:var(--c-accent-soft-2);color:var(--c-accent-hover)}
.btn-secondary[disabled],.btn-secondary.is-disabled{color:var(--c-ink-3);background:var(--c-surface-2)}
.btn.is-busy{color:var(--c-accent-ink);background:var(--c-accent-hover)}
.btn.is-done{background:var(--c-ok-soft);color:var(--c-ok-deep);border-color:transparent}
.why{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:var(--r-sm);background:var(--c-warn-soft);color:var(--c-warn);font-size:var(--fs-sm);font-weight:500}
.why .i{width:16px;height:16px}
.link{display:inline-flex;align-items:center;gap:6px;min-height:var(--h-ctl);color:var(--c-accent);font-weight:600;font-size:var(--fs-sm)}
.link:hover{color:var(--c-accent-hover)}
.link .i{width:16px;height:16px}
.lnk{display:inline-flex;align-items:center;gap:3px;min-height:var(--h-ctl-sm);color:var(--c-accent);font-size:var(--fs-sm);font-weight:500;white-space:nowrap}
.lnk:hover{color:var(--c-accent-hover)}
.lnk .i{width:14px;height:14px}
.lnk.-quiet{color:var(--c-ink-3)}
.lnk.-quiet:hover{color:var(--c-accent)}
/* 卡 */
.card{background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r-lg);padding:var(--pad-card)}
.card.list{padding:0}
.card-main{position:relative;overflow:hidden;border-color:var(--c-card-main-line);background:linear-gradient(115deg,var(--c-card-main-a) 0%,var(--c-card-main-a) 43%,var(--c-card-main-b) 100%)}
.card-main.is-complete{background:var(--c-ok-soft);border-color:var(--c-ok-line)}
.card-sub{background:var(--c-surface-2);border-color:transparent;padding:var(--pad-card-sm) var(--pad-card)}
.card-accent{border-color:var(--c-accent);box-shadow:0 0 0 3px var(--c-accent-soft)}
.card-dashed{border-style:dashed;background:transparent}
.card>.h3+p,.card>.h2+p{margin-top:var(--sp-2)}
.card-fold{padding:0}
.fold-head{display:flex;align-items:center;gap:var(--sp-2);width:100%;min-height:var(--h-row);padding:0 var(--pad-card);font-weight:600;font-size:var(--fs-md)}
.fold-head .n{color:var(--c-ink-3);font-weight:500;font-size:var(--fs-sm)}
/* 折叠头：名字不折行、副题单行省略（右栏 320 宽时「不常用的 · 字号 · 颜色 …」不再折成两行；首页四件事 v001 从我的页提上来） */
.fold-head .ft{white-space:nowrap}
.fold-head .n{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.fold-head .chev{margin-left:auto;color:var(--c-ink-3);transition:transform var(--t-collapse) var(--ease)}
.card-fold.is-open .fold-head .chev{transform:rotate(180deg)}
.fold-body{display:none;padding:0 var(--pad-card) var(--pad-card);border-top:1px solid var(--c-line);padding-top:var(--sp-4)}
.card-fold.is-open .fold-body{display:block}
.hero-art{position:absolute;right:0;top:50%;transform:translateY(-50%);width:36%;max-width:280px;pointer-events:none;opacity:.95}
.hero-art svg{width:100%;height:auto;display:block}
.hero-copy{position:relative;z-index:1;max-width:60%}
@media(max-width:640px){.hero-copy{max-width:100%}}
@media(max-width:640px){.hero-art{width:46%;right:-24px;top:42%;opacity:.55}}
/* 行 */
.list{display:block}
.row{display:flex;align-items:center;gap:var(--sp-3);width:100%;min-height:var(--h-row);padding:var(--sp-3) var(--pad-card);text-align:left}
.list .row{border-bottom:1px solid var(--c-line)}
.list .row:last-child{border-bottom:0}
button.row:hover,a.row:hover{background:var(--c-surface-2)}
.row .body{flex:1 1 auto;min-width:0}
.row .title{display:block;font-weight:600;line-height:1.4}
.row .meta{display:block;color:var(--c-ink-2);font-size:var(--fs-sm);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.row .chev{color:var(--c-ink-3);margin-left:auto;width:16px;height:16px}
.row>.i:first-child{color:var(--c-ink-2)}
.row.-boxed{border:1px solid var(--c-line);border-radius:var(--r-lg);background:var(--c-surface);padding:var(--sp-4) var(--pad-card);margin-bottom:var(--sp-3)}
.row.-boxed:hover{border-color:var(--c-accent-soft-2);box-shadow:var(--sh-hover);background:var(--c-surface)}
.row.-boxed.is-on{border-color:var(--c-accent);box-shadow:0 0 0 3px var(--c-accent-soft)}
.row.is-done .title{color:var(--c-ink-2);text-decoration:line-through}
.row.-plain{padding-left:calc(var(--pad-card) + var(--tile-sm) + var(--sp-3))}
.tile{display:grid;place-items:center;width:44px;height:44px;border-radius:12px;background:var(--c-accent-soft);color:var(--c-accent);flex:none}
.tile .i{width:20px;height:20px}
.tile.-english{background:var(--c-accent-2-soft);color:var(--c-accent-2-ink)}
.tile.-ok{background:var(--c-ok-soft);color:var(--c-ok)}
.tile.-warn{background:var(--c-warn-soft);color:var(--c-warn)}
.tile.-lg{width:56px;height:56px;border-radius:16px}
.tile.-sm{width:var(--tile-sm);height:var(--tile-sm);border-radius:9px}
.tile.-sm .i{width:17px;height:17px}
.tile.-quiet{background:var(--c-surface-2);color:var(--c-ink-2)}
html[data-view="tv"] .tile{width:80px;height:80px;border-radius:20px}
.check{display:grid;place-items:center;width:var(--check);height:var(--check);border-radius:50%;border:1.5px solid var(--c-lock);flex:none;color:transparent}
.check.is-on{background:var(--c-ok);border-color:var(--c-ok);color:var(--c-accent-ink)}
.check .i{width:60%;height:60%;stroke-width:2.5}
.state{display:inline-flex;align-items:center;gap:6px;color:var(--c-ink-3);font-size:var(--fs-xs);white-space:nowrap}
.state.is-done{color:var(--c-ok)}
/* 首页状态板 v002（2026-09-23）：v001「我的三样」的 .card.list.three / .row.-map / .kt-thumb 三个变体撤掉（三样卡撤、知识图缩略不上首页），换成下面这一组。
   .board：状态板三张卡（进度 / 学了什么 / 错题本）共用；卡头一句 .lead-line；清单行标题单行省略，右侧 .state 主色文字链，.state.-quiet 灰字不可点 */
.board .lead-line{font-weight:600;font-size:var(--fs-md);line-height:1.4}
.board .row .title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.board .row .state{color:var(--c-accent);font-size:var(--fs-sm);font-weight:500;margin-left:auto;flex:none}
.board .row .state.-quiet{color:var(--c-ink-3);font-weight:400}
/* .card.list.wb 错题本：.row.-ask 暖底（有错题等你点一课，同错题页那一条） */
.card.list.wb{overflow:hidden}
.wb .row.-ask{background:var(--c-warn-soft);border-bottom-color:var(--c-warn-line)}
.wb .row.-ask .title,.wb .row.-ask .state{color:var(--c-warn)}
/* .sec-head .dir：主卡区块头右侧一句「接下来的方向：A → B」，12px 灰字单行省略 */
.sec-head .dir{color:var(--c-ink-3);font-size:var(--fs-xs);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
/* .ruler 册尺：一行 5 格等分；.-me 实心主色 = 在学那册；.-gr 下方小标「▲ 年级」，有年级时 .-hasgr 底边留 16px；.ruler-say 一句 */
.ruler{display:flex;gap:4px;margin-top:var(--sp-3)}
.ruler span{flex:1 1 0;text-align:center;font-size:var(--fs-xs);border:1px solid var(--c-line);border-radius:var(--r-sm);padding:6px 0;color:var(--c-ink-3);position:relative;background:var(--c-surface);white-space:nowrap}
.ruler span.-me{background:var(--c-accent);color:var(--c-accent-ink);border-color:transparent;font-weight:700}
.ruler span.-gr::after{content:"▲ 年级";position:absolute;left:0;right:0;top:100%;font-size:10px;color:var(--c-accent);line-height:1.4;padding-top:2px}
.ruler.-hasgr{margin-bottom:16px}
.ruler-say{color:var(--c-ink-2);font-size:var(--fs-sm);margin-top:var(--sp-2)}
/* .spider 蛛网：页内拼的 SVG（viewBox 300×270），图里没有数字；四圈 .ring（最外圈 --c-ink-3）、.axis 轴线、.me 多边形（主色 18% + 2px 描边）、
   .dot（没记录 .-none 空心、被点 .-pick 粗描边）、轴名 11px（被点的主色加粗）。单列 300×270，1280 右栏 272×246，电视 1.6 倍 */
.spider{display:block;margin:var(--sp-3) auto 0;max-width:100%;width:300px;height:270px}
.tcol-aside .spider{width:272px;height:246px}
html[data-view="tv"] .spider{width:480px;height:432px}
.spider .ring{fill:none;stroke:var(--c-line);stroke-width:1}
.spider .ring.-outer{stroke:var(--c-ink-3)}
.spider .axis{stroke:var(--c-line);stroke-width:1}
.spider .me{fill:var(--c-accent);fill-opacity:.18;stroke:var(--c-accent);stroke-width:2;stroke-linejoin:round}
.spider .dot{fill:var(--c-accent);stroke:var(--c-surface);stroke-width:1.5}
.spider .dot.-none{fill:var(--c-surface);stroke:var(--c-map-t0)}
.spider .dot.-pick{stroke:var(--c-accent);stroke-width:3;fill:var(--c-surface)}
.spider .ax{cursor:pointer}
.spider .ax .hit{fill:transparent;stroke:none}
.spider text{font-size:11px;fill:var(--c-ink-2);font-family:var(--font)}
.spider text.-pick{fill:var(--c-accent);font-weight:600}
/* .spider-note 图下一句 12px 居中；.spider-tip 提示行 14px：主题名加粗不折行 + 一个词 + 右侧「看那一片 ›」，窄时可折行 */
.spider-note{color:var(--c-ink-3);font-size:var(--fs-xs);margin-top:var(--sp-2);text-align:center}
.spider-tip{margin-top:var(--sp-2);font-size:var(--fs-sm);color:var(--c-ink-2);display:flex;flex-wrap:wrap;gap:2px 6px;align-items:baseline;min-width:0}
.spider-tip b{color:var(--c-ink);font-weight:600;white-space:nowrap}
.spider-tip .lnk{min-height:0;margin-left:auto;flex:none}
/* .theme-row 主题行：主题名（电脑 140 / 手机 104，省略）+ .cells 一排 12px 小格（一格一课，t1～t4 四档色、空心 = 没碰过，可换行）+ 右侧一个词 .wd；.-cur 在学主题主色 */
.theme-row{display:flex;align-items:center;gap:var(--sp-3);min-height:44px;padding:6px var(--pad-card);border-bottom:1px solid var(--c-line)}
.theme-row:last-child{border-bottom:0}
.theme-row .nm{flex:0 0 140px;font-size:var(--fs-sm);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media(max-width:640px){.theme-row .nm{flex-basis:104px}}
.theme-row.-cur .nm{color:var(--c-accent)}
.theme-row .wd{flex:none;font-size:var(--fs-xs);color:var(--c-ink-3);white-space:nowrap;min-width:44px;text-align:right}
.theme-row.-cur .wd{color:var(--c-accent);font-weight:600}
.cells{display:flex;gap:3px;flex:1 1 auto;flex-wrap:wrap;min-width:0}
.cells i{width:12px;height:12px;border-radius:3px;border:1.5px solid var(--c-map-t0);background:transparent;display:inline-block}
.cells i.t1,.cells-legend i.t1{background:var(--c-map-lv-1);border-color:transparent}
.cells i.t2,.cells-legend i.t2{background:var(--c-map-lv-2);border-color:transparent}
.cells i.t3,.cells-legend i.t3{background:var(--c-map-lv-3);border-color:transparent}
.cells i.t4,.cells-legend i.t4{background:var(--c-map-lv-4);border-color:transparent}
/* .cells-legend 卡底一行图例：五个小方块 + 词 */
.cells-legend{display:flex;gap:var(--sp-3);flex-wrap:wrap;padding:var(--sp-2) var(--pad-card) var(--sp-3);font-size:var(--fs-xs);color:var(--c-ink-3)}
.cells-legend span{display:inline-flex;align-items:center;gap:4px}
.cells-legend i{width:10px;height:10px;border-radius:2px;display:inline-block;border:1.5px solid var(--c-map-t0)}
/* .cov：首字母小方块（英语续学行；英语目录样板里同名，这里是 --tile-sm 方块版） */
.cov{width:var(--tile-sm);height:var(--tile-sm);border-radius:9px;background:var(--c-accent-2-soft);color:var(--c-accent-2-ink);display:grid;place-items:center;font-weight:700;font-size:13px;flex:none}
/* 标签 */
.pill,.tag{display:inline-flex;align-items:center;gap:5px;width:fit-content;border-radius:var(--r-sm);background:var(--c-accent-soft);color:var(--c-accent);font-size:var(--fs-xs);font-weight:600;line-height:1.5;padding:4px 8px}
.pill{border-radius:var(--r-pill);background:var(--c-surface-2);color:var(--c-ink-2)}
.pill.-ok{background:var(--c-ok-soft);color:var(--c-ok)}
.pill.-warn{background:var(--c-warn-soft);color:var(--c-warn)}
.pill.-danger{background:var(--c-danger-soft);color:var(--c-danger)}
.tag.-english{background:var(--c-accent-2-soft);color:var(--c-accent-2-ink)}
.tag.-white{background:var(--c-empty-bg);color:var(--c-accent)}
.tag.-goal{background:var(--c-surface-2);color:var(--c-ink-2)}
.tag.-concept{background:var(--c-ok-soft);color:var(--c-ok)}
/* 课程版本小标（2026-09-22）：目录行的课名后面跟一枚，比 .tag 更瘦，不撑行高；-new＝新版故事互动课，-quiet＝旧版文字课 / 待开发 */
.tag.-new,.tag.-quiet{padding:1px 7px;border-radius:5px;margin-left:6px;vertical-align:1px;font-weight:600}
.tag.-quiet{background:var(--c-surface-2);color:var(--c-ink-3)}
.count{display:inline-grid;place-items:center;min-width:20px;height:20px;padding:0 6px;border-radius:6px;background:var(--c-accent-soft-2);color:var(--c-accent-hover);font-size:11px;font-weight:600}
.dot{width:8px;height:8px;border-radius:50%;background:var(--c-accent);display:inline-block}
/* 顶栏 */
.top{display:flex;align-items:center;gap:var(--sp-3);height:var(--top-h);padding:0 var(--pad-page);background:var(--c-surface);border-bottom:1px solid var(--c-line);min-width:0;flex:none}
@media(max-width:640px){.top{padding:0 var(--sp-3) 0 var(--sp-4)}}
.brand{display:inline-flex;align-items:center;gap:8px;font-weight:700;font-size:var(--fs-md);white-space:nowrap;min-width:0}
.brand .mark{width:26px;height:26px;border-radius:8px;background:var(--c-accent);color:var(--c-accent-ink);display:inline-grid;place-items:center;font-size:14px;font-weight:800;flex:none;box-shadow:var(--sh-accent)}
.brand .sub{font-weight:500;color:var(--c-ink-2)}
@media(max-width:640px){.brand .sub{display:none}}
.crumbs{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm);color:var(--c-ink-3);min-width:0}
.crumbs b{color:var(--c-ink-2);font-weight:500}
.crumbs .sep{color:var(--c-lock)}
.top .ctx{min-width:0;font-size:var(--fs-sm);color:var(--c-ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1 1 auto}
.who{display:inline-flex;align-items:center;gap:8px;height:38px;padding:0 12px 0 4px;border-radius:var(--r-pill);border:1px solid var(--c-line);background:var(--c-surface);font-size:var(--fs-sm);font-weight:600;white-space:nowrap;flex:none}
.who .av{width:30px;height:30px;border-radius:50%;background:var(--c-accent-soft);color:var(--c-accent);display:grid;place-items:center;font-size:12px;font-weight:700}
.who .st{color:var(--c-ink-2);font-weight:500}
.who.-guest{padding:0 14px;color:var(--c-ink);border-color:var(--c-ink-3)}
.who.-guest .i{width:16px;height:16px}
.who.-parent{background:var(--c-warn-soft);border-color:var(--c-warn-line);color:var(--c-warn)}
.who.-parent .av{background:var(--c-warn-line);color:var(--c-warn)}
.tsearch{display:flex;align-items:center;gap:8px;height:42px;padding:0 14px;border:1px solid var(--c-line);border-radius:var(--r-md);background:var(--c-surface);color:var(--c-ink-3);width:300px;font-size:var(--fs-sm)}
.fsbtn{display:inline-flex;align-items:center;gap:6px;height:38px;padding:0 12px;border:1px solid var(--c-line);border-radius:var(--r-md);font-size:var(--fs-sm);font-weight:600;color:var(--c-ink-2)}
.fsbtn b{font-size:15px;color:var(--c-ink)}
/* 手机底栏 */
.tabs{position:absolute;left:0;right:0;bottom:0;height:var(--nav-h);display:flex;background:var(--c-glass);backdrop-filter:blur(12px);border-top:1px solid var(--c-line);padding:6px 8px}
.tab{flex:1 1 0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;color:var(--c-ink-3);font-size:11px;font-weight:500;position:relative;border-radius:var(--r-md)}
.tab .i{width:22px;height:22px}
.tab.is-active{color:var(--c-accent);font-weight:600}
.tab.is-active .i{stroke-width:2.1}
.tab.is-dim{color:var(--c-lock)}
.tab .lock{position:absolute;top:6px;right:calc(50% - 20px);width:12px;height:12px;color:var(--c-lock)}
.tab .dot{position:absolute;top:8px;right:calc(50% - 16px)}
/* 电脑左栏 */
.side{width:var(--nav-w);flex:none;background:var(--c-surface);border-right:1px solid var(--c-line);display:flex;flex-direction:column;padding:26px 16px 20px;gap:6px}
.side .sbrand{display:flex;align-items:center;gap:11px;padding:0 8px;margin-bottom:34px}
.side .sbrand .mark{width:40px;height:40px;border-radius:13px;font-size:20px}
.side .sbrand .nm{font-size:19px;font-weight:750;letter-spacing:-.02em;line-height:1.1}
.side .sbrand .sb{font-size:10px;letter-spacing:.18em;color:var(--c-ink-3);margin-top:4px}
.side .grp{padding:0 16px 8px;color:var(--c-ink-3);font-size:10px;letter-spacing:.12em}
.nl{display:flex;align-items:center;gap:13px;width:100%;min-height:48px;padding:0 16px;border-radius:11px;color:var(--c-ink-2);font-weight:500;font-size:15px;position:relative;text-align:left}
.nl:hover{color:var(--c-accent);background:var(--c-accent-soft)}
.nl.is-active{color:var(--c-accent-hover);background:var(--c-accent-soft);font-weight:600}
.nl.is-active .i{stroke-width:2.1}
.nl.is-dim{color:var(--c-lock)}
.nl .lock{margin-left:auto;width:14px;height:14px;color:var(--c-lock)}
.nl .dot{margin-left:auto;width:5px;height:5px}
.nl .count{margin-left:auto}
.side .sep{height:1px;background:var(--c-line);margin:8px 0}
.side .spring{flex:1}
.side .note{margin:0 2px 18px;padding:16px;background:var(--c-note-bg);border:1px solid var(--c-note-line);border-radius:13px;color:var(--c-note-ink);font-size:11px;line-height:1.8}
.side .note .i{color:var(--c-note-icon);margin-bottom:8px}
.side .foot{border-top:1px solid var(--c-line);padding-top:10px;display:grid;gap:2px}
.side .foot .nl{min-height:40px;font-size:13px}
/* 壳骨架 */
.shell{display:flex;height:100%;min-height:0}
.shell .work{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;height:100%}
.main{flex:1 1 auto;min-height:0;overflow:auto;padding:var(--sp-5) var(--pad-page) var(--sp-7)}
@media(max-width:640px){.main{padding:var(--sp-4) var(--pad-page) calc(var(--nav-h) + var(--sp-6))}}

.main-inner{max-width:var(--content-max);margin:0 auto}
.main-inner.-wide{max-width:1040px}
.two-col{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:var(--sp-5);align-items:start}
.two-col>*{min-width:0}
/* 表单 */
.field{display:block}
.field .label{display:block;font-size:var(--fs-sm);color:var(--c-ink-2);margin-bottom:6px;font-weight:500}
.input{display:flex;align-items:center;width:100%;min-height:var(--h-ctl);padding:0 14px;border:1px solid var(--c-line);border-radius:var(--r-md);background:var(--c-surface);color:var(--c-ink);font-size:var(--fs-md)}
.input.-big{min-height:var(--h-ctl-lg);font-size:var(--fs-lg);letter-spacing:.06em}
.input.is-focus{border-color:var(--c-accent);box-shadow:0 0 0 3px var(--c-accent-soft)}
.input .ph{color:var(--c-ink-3)}
.input.-err{border-color:var(--c-danger)}
.pw{position:relative;display:block}
.pw .input{padding-right:48px}
.pw .eye{position:absolute;right:6px;top:50%;transform:translateY(-50%);width:36px;height:36px;border-radius:var(--r-sm);display:inline-flex;align-items:center;justify-content:center;color:var(--c-ink-3)}
.pw .eye:hover{color:var(--c-accent);background:var(--c-accent-soft)}
.textarea{min-height:120px;align-items:flex-start;padding:12px 14px;line-height:1.7}
.help{font-size:var(--fs-sm);color:var(--c-ink-3);margin-top:6px}
.help.-err{color:var(--c-danger)}
.seg{display:inline-flex;gap:3px;padding:4px;background:var(--c-surface-2);border-radius:var(--r-md)}
.seg button{min-height:38px;padding:0 16px;border-radius:9px;font-size:var(--fs-sm);font-weight:500;color:var(--c-ink-2);display:inline-flex;align-items:center;gap:8px}
.seg button.is-on{background:var(--c-surface);color:var(--c-accent);font-weight:600;box-shadow:0 1px 3px rgba(58,56,96,.08)}
.seg.-sm{padding:3px;gap:2px}
.seg.-sm button{min-height:32px;padding:0 10px;font-size:var(--fs-xs)}   /* 小号：塞进窄右栏的设置行（孩子端「我的 → 不常用的」颜色行）时用，S6 新增 */
.chips{display:flex;gap:8px;flex-wrap:wrap}
.chip{min-height:34px;padding:0 13px;border-radius:var(--r-sm);border:1px solid transparent;font-size:var(--fs-sm);color:var(--c-ink-2);display:inline-flex;align-items:center;background:transparent}
.chip.-line{border-color:var(--c-line);background:var(--c-surface)}
.chip.is-on{background:var(--c-accent-soft);color:var(--c-accent);font-weight:600}
.toggle{width:44px;height:26px;border-radius:999px;background:var(--c-lock);position:relative;flex:none}
.toggle::after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:var(--c-accent-ink);transition:left var(--t-state)}
.toggle.is-on{background:var(--c-accent)}.toggle.is-on::after{left:21px}
.opt{display:flex;align-items:center;gap:12px;width:100%;min-height:56px;padding:12px 16px;border:1px solid var(--c-line);border-radius:var(--r-md);background:var(--c-surface);font-size:var(--fs-md);color:var(--c-ink);text-align:left}
.opt .l{display:inline-grid;place-items:center;width:28px;height:28px;border-radius:8px;border:1px solid var(--c-line);font-size:12px;color:var(--c-ink-2);flex:none}
.opt.is-on{border-color:var(--c-accent);background:var(--c-accent-soft)}
.opt.is-on .l{background:var(--c-accent);border-color:var(--c-accent);color:var(--c-accent-ink)}
.opt.is-ok{border-color:var(--c-ok);background:var(--c-ok-soft)}
.opt.is-no{border-color:var(--c-warn-line);background:var(--c-warn-soft)}
/* 进度 */
.progress{height:6px;border-radius:999px;background:var(--c-surface-2);overflow:hidden}
.progress i{display:block;height:100%;width:40%;background:var(--c-accent);border-radius:999px}
.progress.-busy i{width:35%;animation:pbar 1.4s var(--ease) infinite}
@keyframes pbar{0%{margin-left:-35%}100%{margin-left:100%}}
.steps{display:grid;grid-template-columns:auto 1fr;gap:var(--sp-2) var(--sp-5);align-items:end}
.steps .sl{font-size:var(--fs-xs);color:var(--c-ink-3);font-weight:500}
.steps .sl.is-on{color:var(--c-accent)}
.steps .sb{display:flex;gap:3px}
.steps .sb i{flex:1;height:5px;border-radius:999px;background:var(--c-line)}
.steps .sb i.is-done{background:var(--c-accent)}
.steps .sb i.is-on{background:var(--c-accent-soft-2);box-shadow:inset 0 -2px 0 var(--c-accent)}
.stepper{display:flex;align-items:center;justify-content:center;gap:14px;font-size:var(--fs-xs);color:var(--c-ink-3)}
.stepper span{display:inline-flex;align-items:center;gap:7px}
.stepper span i{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:50%;background:var(--c-surface-2);font-style:normal;font-size:11px}
.stepper span.is-on{color:var(--c-accent);font-weight:600}
.stepper span.is-on i{background:var(--c-accent);color:var(--c-accent-ink)}
.stepper span.is-done i{background:var(--c-accent-soft-2);color:var(--c-accent-hover)}
.stepper .ln{width:28px;height:1px;background:var(--c-line)}
/* 状态 */
.banner{display:flex;align-items:center;gap:var(--sp-3);padding:var(--pad-card-sm) var(--pad-card);border-radius:var(--r-md);background:var(--c-accent-soft);color:var(--c-accent-hover);font-size:var(--fs-sm);border:1px solid var(--c-accent-soft-2)}
.banner.-warn{background:var(--c-warn-soft);color:var(--c-warn);border-color:var(--c-warn-line)}
.banner.-danger{background:var(--c-danger-soft);color:var(--c-danger);border-color:var(--c-danger-line)}
/* .banner.-soft：可关的温和提醒（没答过问卷那一条），主色 soft 底，跟暖底真提醒 .-warn 区分 */
.banner.-soft{background:var(--c-accent-soft);color:var(--c-accent-hover);border-color:var(--c-accent-soft-2)}
.banner .x{margin-left:auto;color:inherit;opacity:.7;font-size:var(--fs-sm)}
.inline-fb{display:flex;align-items:center;gap:8px;padding:10px 14px;border-radius:var(--r-md);font-size:var(--fs-sm);line-height:1.5}
.inline-fb.-ok{background:var(--c-ok-soft);color:var(--c-ok-deep)}
.inline-fb.-err{background:var(--c-danger-soft);color:var(--c-danger)}
.inline-fb.-hint,.inline-fb.-warn{background:var(--c-warn-soft);color:var(--c-warn)}
.inline-fb .btn{margin-left:auto}
.inline-fb b{display:block;font-weight:600}
.confirm-strip{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);border-radius:var(--r-md);background:var(--c-danger-soft);border:1px solid var(--c-danger-line);color:var(--c-ink);font-size:var(--fs-sm)}
.empty{text-align:center;padding:var(--sp-7) var(--sp-5);border:1px dashed var(--c-empty-line);border-radius:var(--r-lg);color:var(--c-ink-2);background:var(--c-empty-bg)}
.empty .i{width:34px;height:34px;color:var(--c-lock);margin:0 auto var(--sp-3);stroke-width:1.4}
.empty .h3{color:var(--c-ink)}
.empty p{font-size:var(--fs-sm);margin-top:6px;max-width:400px;margin-left:auto;margin-right:auto}
.empty .btn{margin-top:var(--sp-4)}
.err-inline{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-4);border-radius:var(--r-lg);background:var(--c-surface);border:1px solid var(--c-line);font-size:var(--fs-sm);color:var(--c-ink-2)}
.err-inline .i{color:var(--c-warn)}
.err-card{border-left:4px solid var(--c-danger)}
.err-card .lead{font-weight:600}
.skeleton .bone{height:14px;border-radius:7px;background:linear-gradient(90deg,var(--c-surface-2),var(--c-line),var(--c-surface-2));background-size:200% 100%;animation:sk 1.6s linear infinite;margin-bottom:10px}
.skeleton .bone.-title{height:22px;width:55%}.skeleton .bone.-w40{width:40%}.skeleton .bone.-w80{width:80%}
.skeleton .bone.-btn{height:44px;width:140px;border-radius:12px;margin-top:18px;margin-bottom:0}
.skeleton .bone.-row{height:44px;border-radius:9px;margin-bottom:12px}
.skeleton .bone.-block{height:160px;border-radius:12px}   /* 首页状态板 v002：进度卡加载态占蛛网位的大骨 */
@keyframes sk{0%{background-position:200% 0}100%{background-position:-200% 0}}
/* 抽屉 */
.scrim{position:absolute;inset:0;background:var(--c-scrim);z-index:20}
.drawer{position:absolute;left:0;right:0;bottom:0;z-index:21;background:var(--c-surface);border-radius:var(--r-lg) var(--r-lg) 0 0;padding:var(--sp-3) var(--pad-page) var(--sp-5);box-shadow:var(--sh-2);max-height:72%;overflow:auto}
.drawer .grip{width:36px;height:4px;border-radius:2px;background:var(--c-lock);margin:0 auto var(--sp-3)}
.drawer .dhead{display:flex;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-3)}
.drawer.-side{left:auto;top:0;right:0;bottom:0;width:360px;border-radius:0;max-height:none;padding-top:var(--sp-5)}
@media(min-width:641px){.drawer{left:auto;top:0;right:0;bottom:0;width:360px;border-radius:0;max-height:none;padding-top:var(--sp-5)}}
.modal{position:absolute;inset:0;z-index:21;display:grid;place-items:center;padding:var(--sp-5)}
.modal .box{width:min(500px,100%);background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r-lg);box-shadow:var(--sh-2);padding:var(--sp-5)}
/* 胸牌头像 */
.av{display:inline-grid;place-items:center;width:34px;height:34px;border-radius:50%;background:var(--c-accent-soft);color:var(--c-accent);font-weight:700;font-size:13px;flex:none}
.av.-lg{width:56px;height:56px;font-size:22px}
/* 课内 */
.lesson-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-4);flex-wrap:wrap}
.lesson-head .path{font-size:var(--fs-sm);color:var(--c-ink-3)}
.lesson-head .path b{font-weight:500;color:var(--c-ink-2)}
.lesson-grid{display:grid;grid-template-columns:640px 320px;gap:40px;align-items:start}
.lesson-grid>*{min-width:0}
.lp-main{background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r-lg);padding:var(--sp-6) 33px}
@media(max-width:640px){.lp-main{padding:var(--sp-5) var(--sp-4);border-radius:var(--r-lg)}}
.lp-main>p{color:var(--c-ink-2);line-height:1.9}
.lp-main>p+p{margin-top:var(--sp-3)}
.facts{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-3)}
@media(max-width:640px){.facts{grid-template-columns:1fr 1fr}}
.fact{background:var(--c-surface-2);border-radius:var(--r-md);padding:12px 16px}
.fact .k{font-size:var(--fs-xs);color:var(--c-ink-3)}.fact .v{font-weight:700;font-size:var(--fs-lg);margin-top:2px}
.ol{counter-reset:n;display:grid;gap:6px;padding:0;margin:0;list-style:none}
.ol li{display:flex;gap:12px;font-size:var(--fs-md)}
.ol li::before{counter-increment:n;content:counter(n);color:var(--c-ink-3);width:1.2em;flex:none;font-variant-numeric:tabular-nums}
.ex{margin-top:var(--sp-5);padding:var(--sp-5);background:var(--c-mp-panel);border:1px solid var(--c-line);border-radius:var(--r-lg)}
html[data-view="tv"] .ex{background:var(--c-surface-2);border-color:transparent}
.ex .kick{display:flex;align-items:center;gap:8px;font-weight:600;color:var(--c-accent);font-size:var(--fs-sm);margin-bottom:var(--sp-2)}
.ex .stem{font-weight:600;font-size:var(--fs-lg);line-height:1.6}
.reveal{margin-top:var(--sp-4);display:grid;gap:8px}
.reveal .ln{display:flex;gap:12px;align-items:baseline;padding:10px 14px;border-radius:var(--r-md);background:var(--c-surface);border:1px solid var(--c-line)}
.reveal .ln.is-hid{border-style:dashed;color:var(--c-ink-3);background:transparent}
.reveal .ln .no{font-size:var(--fs-xs);color:var(--c-ink-3);width:1.4em;flex:none}
.reveal .ln .m{font-family:var(--font-mono);letter-spacing:.02em}
.q{border:1px solid var(--c-line);border-radius:var(--r-lg);background:var(--c-surface);padding:var(--sp-5)}
@media(max-width:640px){.q{padding:var(--sp-4)}}
.q .qhead{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm);color:var(--c-ink-3);margin-bottom:var(--sp-2)}
.q .qhead .tag{margin-right:auto}
.q .stem{font-weight:600;font-size:var(--fs-lg);line-height:1.6}
.q.is-folded{padding:var(--sp-3) var(--pad-card);display:flex;align-items:center;gap:12px;color:var(--c-ink-2);font-size:var(--fs-sm)}
.guess{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:var(--sp-3);font-size:var(--fs-sm);color:var(--c-ink-2)}
.guess .chip{border-color:var(--c-line);background:var(--c-surface)}
.answer{display:flex;align-items:center;gap:12px;margin-top:var(--sp-3)}
.answer .lab{font-size:var(--fs-sm);color:var(--c-ink-3);flex:none}
.paper{display:flex;align-items:center;gap:12px;margin-top:var(--sp-3);padding:12px 14px;border-radius:var(--r-md);background:var(--c-surface-2);color:var(--c-ink-2);font-size:var(--fs-sm)}
.paper .i{color:var(--c-ink-3)}
.ai-box{margin-top:var(--sp-3);padding:var(--sp-4);border-radius:var(--r-md);background:var(--c-accent-soft);border:1px solid var(--c-accent-soft-2)}
.ai-box .h3{font-size:var(--fs-md)}
.abar{flex:none;display:flex;align-items:center;gap:var(--sp-4);height:64px;padding:0 var(--pad-page);background:var(--c-surface);border-top:1px solid var(--c-line)}
.abar .pos{margin-left:auto;margin-right:auto;font-size:var(--fs-sm);color:var(--c-ink-2)}
.abar .pos b{color:var(--c-ink)}
.sticky-bottom{position:absolute;left:0;right:0;bottom:var(--nav-h);padding:var(--sp-3) var(--pad-page);background:linear-gradient(to top,var(--c-bg) 70%,rgba(247,248,252,0))}
.sticky-bottom .nav3{display:flex;justify-content:space-between;align-items:center;margin-top:8px;font-size:var(--fs-sm);color:var(--c-ink-2)}
.sticky-bottom .nav3 span{display:inline-flex;align-items:center;gap:4px;min-height:36px}
.side-card{background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r-lg);padding:var(--sp-4) var(--sp-5)}
.side-card .k{font-size:var(--fs-sm);font-weight:600;color:var(--c-ink-2);display:flex;align-items:center;gap:8px;margin-bottom:8px}
.side-card p{font-size:var(--fs-sm);color:var(--c-ink-2);line-height:1.8}
.hint-card{background:var(--c-note-bg);border:1px solid var(--c-note-line);border-radius:var(--r-lg);padding:var(--sp-4) var(--sp-5)}
html[data-view="tv"] .hint-card{background:var(--c-surface-2);border-color:transparent}
.hint-card .k{font-weight:600;color:var(--c-note-ink);font-size:var(--fs-sm)}
.hint-card p{color:var(--c-note-ink);font-size:var(--fs-sm);margin-top:6px;line-height:1.8}
/* .card.hint-card：只有一句 14px 次级字的白卡（首页第一次来：四件事收成一句） */
.card.hint-card{background:var(--c-surface);border-color:var(--c-line);padding:var(--pad-card);color:var(--c-ink-2);font-size:var(--fs-sm);line-height:1.6}
.done-mark{display:grid;place-items:center;width:56px;height:56px;border-radius:50%;background:var(--c-ok-soft);color:var(--c-ok)}
.done-mark .i{width:28px;height:28px;stroke-width:2.2}
.fig{border:1px solid var(--c-line);border-radius:var(--r-md);background:var(--c-surface);padding:var(--sp-3);display:grid;place-items:center;color:var(--c-ink-3);font-size:var(--fs-xs)}
/* 互动块（配色示例：类名沿用 runtime.css 的 .math-pilot / .mp-*，颜色全部走 --c-mp-*） */
.math-pilot{border:1px solid var(--c-line);border-radius:var(--r-lg);background:var(--c-mp-panel);padding:var(--sp-4);overflow:hidden}
.mp-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-3);margin-bottom:var(--sp-3)}
.mp-kicker{font-size:var(--fs-xs);font-weight:700;letter-spacing:.06em;color:var(--c-mp-a)}
.mp-title{font-weight:700;font-size:var(--fs-lg);line-height:1.3;margin-top:2px}
.mp-sub{font-size:var(--fs-sm);color:var(--c-ink-2);margin-top:3px}
.mp-stage{border:1px solid var(--c-mp-grid);border-radius:var(--r-md);background:var(--c-mp-stage);padding:var(--sp-2);overflow:hidden}
.mp-stage svg{display:block;width:100%;height:auto}
.mp-stage text{font-family:var(--font);fill:var(--c-mp-ink);font-size:14px}
.mp-readout{margin-top:var(--sp-3);padding:var(--sp-3);border-radius:var(--r-md);background:var(--c-accent-soft);line-height:1.55;color:var(--c-accent-hover)}
.mp-control{display:grid;grid-template-columns:minmax(86px,auto) minmax(100px,1fr) auto;align-items:center;gap:var(--sp-2);min-height:44px;margin-top:var(--sp-3)}
.mp-control label{font-size:var(--fs-sm);font-weight:600}
.mp-control output{min-width:3em;text-align:right;font-weight:700;font-variant-numeric:tabular-nums}
.mp-range{height:6px;border-radius:999px;background:var(--c-mp-grid);position:relative}
.mp-range::before{content:"";position:absolute;left:0;top:0;bottom:0;width:48%;border-radius:999px;background:var(--c-mp-a)}
.mp-range::after{content:"";position:absolute;left:48%;top:50%;width:18px;height:18px;margin:-9px 0 0 -9px;border-radius:50%;background:var(--c-mp-a);border:3px solid var(--c-accent-ink);box-shadow:0 0 0 1px var(--c-mp-ghost)}
.mp-opts{display:flex;gap:var(--sp-2);flex-wrap:wrap;margin-top:var(--sp-3)}
.mp-opt{min-height:44px;flex:1 1 104px;padding:8px 12px;border:1px solid var(--c-line);border-radius:var(--r-md);background:var(--c-surface);font-size:var(--fs-sm);text-align:center}
.mp-opt.is-pick{border-color:var(--c-mp-a);background:var(--c-accent-soft);font-weight:600;color:var(--c-accent-hover)}
.mp-cmp{margin-top:var(--sp-2);font-size:var(--fs-sm);color:var(--c-mp-no);line-height:1.55}
.mp-sum{margin-top:var(--sp-3);padding:var(--sp-3);border-radius:var(--r-md);background:var(--c-ok-soft);color:var(--c-ok-deep);font-weight:600;line-height:1.55}
/* 家长台 */
.aside{width:var(--aside-w);flex:none;padding:var(--sp-5) var(--pad-page) var(--sp-5) 0;overflow:auto}
.aside .card{margin-bottom:var(--sp-4)}
.fact-list>div{padding:12px 0;border-bottom:1px solid var(--c-line)}
.fact-list>div:last-child{border-bottom:0}
.fact-list .t{font-weight:600;font-size:var(--fs-sm)}.fact-list p{font-size:var(--fs-sm);color:var(--c-ink-2);margin-top:3px}
.fact-list .m{font-size:var(--fs-xs);color:var(--c-ink-3);margin-top:4px}
.plan-row{display:grid;grid-template-columns:76px minmax(0,1fr) 110px;gap:12px;align-items:end;padding:14px 16px;border:1px solid var(--c-line);border-radius:var(--r-md);background:var(--c-mp-panel);margin-top:10px}
html[data-view="tv"] .plan-row{background:var(--c-surface-2)}
.plan-row .field .label{font-size:var(--fs-xs)}
.plan-row .input{min-height:40px;font-size:var(--fs-sm)}
@media(max-width:640px){.plan-row{grid-template-columns:1fr 1fr}}
@media(max-width:640px){.plan-row .field:nth-child(2){grid-column:1/-1}}
.kv{display:grid;grid-template-columns:auto 1fr;gap:6px 16px;font-size:var(--fs-sm)}
.kv b{font-weight:500;color:var(--c-ink-3)}
.bigcode{font-family:var(--font-mono);font-size:var(--fs-display);font-weight:700;letter-spacing:.12em;line-height:1;color:var(--c-ink)}
@media(max-width:640px){.bigcode{font-size:36px}}
/* 电视 */
.tvnav{display:flex;align-items:center;gap:var(--sp-4);height:var(--nav-h);padding:0 var(--pad-page);background:var(--c-surface);border-bottom:1px solid var(--c-line);flex:none}
.tvnav .brand .mark{width:52px;height:52px;border-radius:16px;font-size:28px}
.tvnav .brand{font-size:var(--fs-lg);gap:16px}
.tvnav .ti{min-height:84px;padding:0 var(--sp-5);border-radius:var(--r-md);font-size:var(--fs-md);font-weight:600;color:var(--c-ink-2);display:inline-flex;align-items:center;gap:14px}
.tvnav .ti.is-active{background:var(--c-accent-soft);color:var(--c-accent)}
.tvnav .tr{margin-left:auto;color:var(--c-ink-3);font-size:var(--fs-xs)}
.kbd{display:grid;grid-template-columns:repeat(10,1fr);gap:8px;margin-top:var(--sp-3)}
.kbd span{display:grid;place-items:center;min-height:64px;border-radius:var(--r-sm);background:var(--c-surface-2);font-size:var(--fs-sm);font-weight:600}
.kbd span.is-focus{outline:var(--focus-w) solid var(--c-focus);outline-offset:var(--focus-off);box-shadow:0 0 0 calc(var(--focus-w) + var(--focus-off) + 2px) var(--c-focus-halo)}
.kbd span.-wide{grid-column:span 2}
.is-focus{outline:var(--focus-w) solid var(--c-focus);outline-offset:var(--focus-off);box-shadow:0 0 0 calc(var(--focus-w) + var(--focus-off) + 2px) var(--c-focus-halo)}
.today-grid{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:var(--sp-5)}
html[data-view="tv"] .card{padding:var(--pad-card)}
/* 目录格 */
.grade-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
@media(min-width:641px){.grade-grid{grid-template-columns:repeat(6,1fr)}}
.gcell{display:flex;flex-direction:column;justify-content:center;min-height:56px;padding:8px 14px;border:1px solid var(--c-line);border-radius:var(--r-md);background:var(--c-surface);font-weight:600;transition:border-color var(--t-state),box-shadow var(--t-state)}
.gcell:hover{border-color:var(--c-accent-soft-2);box-shadow:var(--sh-hover)}
.gcell small{display:block;font-weight:400;color:var(--c-ink-3);font-size:var(--fs-xs);margin-top:2px}
.gcell.-wide{grid-column:1/-1;flex-direction:row;align-items:center;gap:12px}
.gcell.is-here{background:var(--c-accent-soft);border-color:var(--c-accent-soft-2);color:var(--c-accent-hover)}
.gcell.is-here small{color:var(--c-accent)}
.subj{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-3)}
.subj-card{position:relative;padding:var(--sp-4) var(--pad-card);border:1px solid var(--c-accent-soft-2);background:var(--c-accent-soft);border-radius:var(--r-lg);overflow:hidden;min-height:0;display:flex;flex-direction:column;text-align:left}
.subj-card.-english{background:var(--c-accent-2-soft);border-color:var(--c-warn-line)}
html[data-view="tv"] .subj-card{background:var(--c-accent-soft);border-color:transparent}
html[data-view="tv"] .subj-card.-english{background:var(--c-accent-2-soft)}
.subj-card .kick{font-size:10px;letter-spacing:.14em;color:var(--c-accent);margin-bottom:6px}
@media(max-width:640px){.subj-card .kick{display:none}}
@media(max-width:640px){.subj-card p{display:none}}
.subj-card.-english .kick{color:var(--c-accent-2-ink)}
.subj-card .h3{font-size:18px}
.subj-card p{font-size:var(--fs-sm);color:var(--c-ink-2);margin-top:4px;max-width:240px;line-height:1.6}
.subj-card.-english p{color:var(--c-ink-2)}
.subj-card .link{margin-top:var(--sp-2);padding-top:0;min-height:auto;color:var(--c-accent-hover)}
.subj-card.-english .link{color:var(--c-accent-2-ink)}
.subj-card .art{position:absolute;right:14px;top:14px;width:36px;height:36px;color:var(--c-accent);opacity:.6;stroke-width:1.4}
.subj-card.-english .art{color:var(--c-accent-2)}
.course-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
@media(max-width:640px){.course-grid{grid-template-columns:1fr}}
.ccard{display:flex;align-items:center;gap:14px;padding:16px 18px;border:1px solid var(--c-line);border-radius:var(--r-lg);background:var(--c-surface);text-align:left}
.ccard .t{font-weight:600;font-size:15px;line-height:1.4}.ccard small{color:var(--c-ink-3);font-size:var(--fs-xs);display:block;margin-top:3px}
/* 知识树五档色条（孩子态只涂色不出档名） */
.kt{display:flex;gap:4px;height:8px;border-radius:999px;overflow:hidden}
.kt i{flex:1}.kt .t0{background:var(--c-line)}.kt .t1{background:var(--c-accent-soft-2)}.kt .t2{background:var(--c-lv-2)}.kt .t3{background:var(--c-accent)}.kt .t4{background:var(--c-accent-hover)}
.recite{padding:var(--sp-5);border-radius:var(--r-lg);background:var(--c-surface);border:1px solid var(--c-line)}
.wave{display:flex;align-items:center;gap:3px;height:36px}
.wave i{width:4px;border-radius:2px;background:var(--c-accent-soft-2)}
.wave i:nth-child(3n){height:80%}.wave i:nth-child(3n+1){height:45%}.wave i:nth-child(3n+2){height:60%}.wave i:nth-child(5n){height:30%}
.wave i.is-on{background:var(--c-accent)}
.seg button{white-space:nowrap}
@media(max-width:640px){.seg button{padding:0 10px;min-height:34px}}
.fsbtn,.who,.state,.abar .pos{white-space:nowrap}
.plan-row{grid-template-columns:76px minmax(0,1fr) 132px}
.plan-row .input{white-space:nowrap}
/* 家长台孩子节 v002（2026-09-23，方案 A「一张总览 + 页签」）三个组件变体：总览卡 .ovc / 页签条 .ptabs / 摘要行 .sumrow。
   窄电脑 1024 那一档「数格整行」写在 parent.css（这一段不带断点）。 */
.ovc{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-3) var(--sp-4)}
.ovc .av{width:52px;height:52px;font-size:20px}
.ovc .who{display:block;flex:1 1 200px;min-width:0;height:auto;padding:0;border:0;border-radius:0;background:none;font-size:inherit;font-weight:400;white-space:normal}
.ovc .who .h1{font-size:var(--fs-xl);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ovc .who .say{color:var(--c-ink-2);font-size:var(--fs-sm);margin-top:2px;line-height:1.5}
.ovc-nums{display:flex;gap:var(--sp-2);flex:1 1 100%;min-width:0}
@media(min-width:641px){.ovc-nums{flex:0 1 330px;margin-left:auto}}
.ovc-num{flex:1 1 0;min-width:0;border-radius:var(--r-md);background:var(--c-surface);border:1px solid var(--c-card-main-line);padding:8px 10px;text-align:center}
.ovc-num b{display:block;font-size:var(--fs-xl);font-weight:var(--fw-title);line-height:1.15;letter-spacing:var(--ls-title);font-variant-numeric:tabular-nums}
.ovc-num span{display:block;color:var(--c-ink-3);font-size:var(--fs-xs);margin-top:2px;white-space:nowrap}
.ovc-num.-hot b{color:var(--c-accent)}
.ovc-act{flex:1 1 100%;display:flex;align-items:center;flex-wrap:wrap;gap:var(--sp-2) var(--sp-3)}
.ovc-act:empty{display:none}
.skeleton .bone.-num{height:56px;border-radius:12px;flex:1 1 0;margin:0}
.ptabs{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding:2px 0;margin:var(--sp-4) 0 var(--sp-3)}
.ptabs::-webkit-scrollbar{display:none}
.ptab{flex:none;display:inline-flex;align-items:center;gap:6px;min-height:var(--h-ctl-sm);padding:0 14px;border-radius:var(--r-pill);border:1px solid var(--c-line);background:var(--c-surface);color:var(--c-ink-2);font-size:var(--fs-sm);font-weight:500;white-space:nowrap}
.ptab .n{color:var(--c-ink-3);font-size:var(--fs-xs)}
.ptab .n:empty{display:none}
.ptab.is-on{background:var(--c-accent);border-color:var(--c-accent);color:var(--c-accent-ink);font-weight:600}
.ptab.is-on .n{color:inherit;opacity:.8}
.ptab:hover:not(.is-on){border-color:var(--c-accent-soft-2);color:var(--c-accent)}
.sumrow{display:flex;align-items:center;gap:var(--sp-3);flex-wrap:wrap;padding-top:var(--sp-3);border-top:1px solid var(--c-line);margin-top:var(--sp-1)}
.sumrow .faint{flex:1 1 auto;min-width:0}
.sumrow .btn{flex:none}
/* ===== 错题本 · 家长台变体（2026-09-24，设计包 精细化样板-错题本-v001/02-新增token.md）===== */
/* 三点 .dots：三站三个点（孩子端 / 家长台同一份；家长台 10px，旁边不写第几站）。-on 过了 / -due 当前站 / -fail 当前站上次没过（同 -due，不用红）/ 无类 = 还没到 */
.dots{display:inline-flex;gap:5px;align-items:center;flex:none}
.dots i{width:10px;height:10px;border-radius:50%;border:1.5px solid var(--c-lock);display:block}
.dots i.-on{background:var(--c-accent);border-color:var(--c-accent)}
.dots i.-due,.dots i.-fail{border:2px solid var(--c-accent);box-shadow:0 0 0 2px var(--c-accent-soft)}
.dots.-grad i{background:var(--c-ok);border-color:var(--c-ok)}
/* 站分组头 .stn-grp：站名 · 哪天 · 几道 + 右边展开 / 收起；卡里第一组没上边线 */
.stn-grp{display:flex;align-items:baseline;gap:var(--sp-2);padding:var(--sp-3) 0 var(--sp-1);border-top:1px solid var(--c-line);margin-top:var(--sp-2)}
.stn-grp:first-child{border-top:0;margin-top:0;padding-top:0}
.stn-grp b{font-weight:600}
.stn-grp .n{color:var(--c-ink-3);font-size:var(--fs-sm)}
.stn-grp .lnk{margin-left:auto;min-height:0}
/* 错题行 .mrow：小图 + 错因一句《课名》/ 来源 · 日期 · 到期 · 标签 · 记录 + 三点 + 撤回；手机上 .mside 换到第二行右对齐。
   （.side / .why 在这份组件里已是左栏与原因条，行内改叫 .mside / .mwhy） */
.mrow{display:flex;align-items:flex-start;gap:var(--sp-3);padding:10px 0;border-top:1px dashed var(--c-line);flex-wrap:wrap}
.stn-grp+.mrow{border-top:0}
.mrow .img{width:40px;height:40px;border-radius:8px;border:1px solid var(--c-line);background:var(--c-surface-2);overflow:hidden;flex:none;display:grid;place-items:center;color:var(--c-ink-3)}
.mrow .img img{width:100%;height:100%;object-fit:cover;display:block}
.mrow .img .i{width:18px;height:18px}
.mrow .body{flex:1 1 200px;min-width:0}
.mrow .mwhy{font-weight:600;line-height:1.4}
.mrow .mwhy .u{font-weight:400;color:var(--c-ink-2);font-size:var(--fs-sm)}
.mrow .meta{color:var(--c-ink-2);font-size:var(--fs-sm);margin-top:2px;display:flex;flex-wrap:wrap;gap:2px 8px;align-items:center}
.mrow .meta .lnk{min-height:0}
.mrow .mside{display:flex;align-items:center;gap:var(--sp-3);flex:none;margin-left:auto;padding-top:2px}
@media(max-width:640px){.mrow .mside{flex:1 1 100%;justify-content:flex-end;padding-top:0}}
.mrow .tag.-warn{background:var(--c-warn-soft);color:var(--c-warn)}
.mrow .alert{flex:1 1 100%;font-size:var(--fs-sm);color:var(--c-warn);background:var(--c-warn-soft);border-radius:var(--r-sm);padding:6px 10px;margin-top:2px}
.mrow .cands{flex:1 1 100%;display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--sp-2);margin-top:4px}
.mrow .cands .btn{white-space:normal;height:auto;min-height:36px;text-align:left}
.mrow .cands .faint{align-self:center}
.mrow .log{flex:1 1 100%;font-size:var(--fs-sm);color:var(--c-ink-2);background:var(--c-surface-2);border-radius:var(--r-sm);padding:8px 12px;margin-top:4px;line-height:1.7}
.mrow .inline-fb{flex:1 1 100%}
/* 撤回确认带 .dg-band：危险色描边，一句后果 + 确定撤回（实底危险）+ 算了 */
.dg-band{flex:1 1 100%;border:1px solid var(--c-danger-line);background:var(--c-danger-soft);border-radius:var(--r-md);padding:10px 14px;font-size:var(--fs-sm);color:var(--c-ink);margin-top:4px}
.dg-band .acts{display:flex;gap:var(--sp-2);margin-top:8px;align-items:center}
.btn-danger.-solid{background:var(--c-danger);color:var(--c-surface);border-color:var(--c-danger)}
/* 练习册照片拿不准的一道一张平行 .gp-row：段图 88×48（没图给占位一句）+ 正文 + 错 / 对（替代 todo-cols > todo-col > todo 三层） */
.gp-row{display:flex;gap:var(--sp-3);align-items:flex-start;padding:10px 0;border-top:1px dashed var(--c-line)}
.gp-row:first-child{border-top:0}
.gp-row .shot{width:88px;height:48px;border-radius:8px;border:1px solid var(--c-line);background:var(--c-surface-2);flex:none;display:grid;place-items:center;color:var(--c-ink-3);font-size:var(--fs-xs);overflow:hidden;text-align:center;line-height:1.3}
.gp-row .shot img{width:100%;height:100%;object-fit:cover;display:block}
.gp-row .body{flex:1 1 auto;min-width:0}
.gp-row .t{font-weight:600}
.gp-row .m{color:var(--c-ink-2);font-size:var(--fs-sm);line-height:1.6}
.gp-row .acts{display:flex;gap:var(--sp-2);margin-top:6px}
/* ===== 错题本 · 孩子端变体（2026-09-24，设计包 精细化样板-错题本-v001/02-新增token.md ①～④；百科壳内联同一份）===== */
/* ① 三点：孩子端卡上 12px、做题页顶条 .-lg 14px，当前站描边 2.5px + 3px 光晕（不闪不动）；家长台那份 10px 不动。站距一行 .mb-stn（展开时才出） */
.mb-head .dots{gap:6px;margin-top:6px}
.mb-head .dots i{width:12px;height:12px}
.dots.-lg{gap:6px}
.dots.-lg i{width:14px;height:14px}
.mb-head .dots i.-due,.mb-head .dots i.-fail,.dots.-lg i.-due,.dots.-lg i.-fail{border-width:2.5px;box-shadow:0 0 0 3px var(--c-accent-soft)}
.mb-stn{display:flex;justify-content:flex-end;gap:10px;font-size:var(--fs-xs);color:var(--c-ink-3);margin-top:2px;white-space:nowrap}
/* ② 错题卡 .mb-card：小图 + 课名 + 我写的 + 三点 / 错在哪 / 下一站 / 讲解 / 动作。-due 到期；-pick 等点课（暖底）；-grad 毕业（灰底）；-in 收进毕业折叠 */
.mb-card{padding:var(--pad-card-sm) var(--pad-card)}
.mb-card.-due{border-color:var(--c-accent-soft-2);box-shadow:0 0 0 3px var(--c-accent-soft)}
.mb-card.-pick{background:var(--c-warn-soft);border-color:var(--c-warn-line)}
.mb-card.-grad{background:var(--c-surface-2);border-color:transparent}
.mb-head{display:flex;align-items:flex-start;gap:var(--sp-3)}
.mb-img{width:56px;height:56px;border-radius:10px;border:1px solid var(--c-line);background:var(--c-surface-2);overflow:hidden;flex:none;display:grid;place-items:center;color:var(--c-ink-3)}
.mb-img img{width:100%;height:100%;object-fit:cover;display:block}
.mb-img .i{width:20px;height:20px}
.mb-body{flex:1 1 auto;min-width:0}
.mb-title{font-weight:600;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mb-card.-pick .mb-title{color:var(--c-warn);white-space:normal}
.mb-line{color:var(--c-ink-2);font-size:var(--fs-sm);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mb-why{margin-top:var(--sp-2);font-size:var(--fs-sm);color:var(--c-ink);line-height:1.6}
.mb-why b{font-weight:600;color:var(--c-ink-2)}
.mb-next{margin-top:2px;font-size:var(--fs-sm);color:var(--c-ink-3)}
.mb-card.-due .mb-next{color:var(--c-accent);font-weight:600}
.mb-note{margin-top:var(--sp-2);font-size:var(--fs-sm);color:var(--c-ink-2);background:var(--c-surface-2);border-radius:var(--r-sm);padding:8px 12px;line-height:1.6}
.mb-card.-pick .mb-note{background:transparent;padding:0}
.mb-acts{display:flex;align-items:center;gap:var(--sp-3);margin-top:var(--sp-3);flex-wrap:wrap}
@media(max-width:640px){.mb-acts>.btn:not(.btn-sm){flex:1 1 auto}}
.mb-acts .lnk{margin-left:auto}
.mb-cands{display:flex;flex-direction:column;gap:var(--sp-2);margin-top:var(--sp-3)}
.mb-cands .btn{justify-content:flex-start;text-align:left;white-space:normal;height:auto;min-height:44px;padding:8px 14px}
.mb-box{margin-top:var(--sp-3);background:var(--c-surface-2);border-radius:var(--r-md);padding:var(--pad-card-sm) var(--pad-card)}
.mb-card .pill.-ok{margin-left:auto}
.mb-card.-in{animation:up 320ms var(--ease) both}
.inline-fb.-soft{background:var(--c-surface-2);color:var(--c-ink-2)}
/* ③ 做题页顶条 .tbar.stnbar：左「‹ 回错题本」+ 中一句（超长省略）+ 右 .dots.-lg；手机上也不折行 */
.tbar.stnbar{display:flex;flex-direction:row;align-items:center;gap:var(--sp-3);min-height:44px;margin:0 0 var(--sp-3)}
.stnbar .mid{flex:1 1 auto;min-width:0;font-size:var(--fs-sm);color:var(--c-ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.stnbar .mid b{color:var(--c-ink);font-weight:600}
.stnbar .dots{margin-left:auto}
/* ④ 毕业动画 .grad（只在 graduated:true 回包那一次加）：三点 0 / 180 / 360ms 依次亮成 --c-ok → 640ms 一句出场 → 820ms 主按钮；总 1.14s；减少动效时全静态 */
@keyframes dotin{0%{background:transparent;border-color:var(--c-lock);transform:scale(.85)}60%{transform:scale(1.3)}100%{background:var(--c-ok);border-color:var(--c-ok);transform:scale(1)}}
.grad .dots i{animation:dotin 360ms var(--ease) both}
.grad .dots i:nth-child(2){animation-delay:180ms}
.grad .dots i:nth-child(3){animation-delay:360ms}
.grad .grad-line{animation:up 320ms var(--ease) both;animation-delay:640ms}
.grad .grad-act{animation:up 320ms var(--ease) both;animation-delay:820ms}
.grad-line{display:flex;align-items:center;gap:var(--sp-3);margin-top:var(--sp-5)}
.grad-line .h1{font-size:var(--fs-xl)}
@media(prefers-reduced-motion:reduce){.grad .dots i,.grad .grad-line,.grad .grad-act,.mb-card.-in{animation:none}.grad .dots i{background:var(--c-ok);border-color:var(--c-ok)}}
/* ===== 百科壳专属（下面只留共享组件没有的：壳骨架、顶栏细节、搜索、目录树、课内页）===== */
html,body{margin:0;height:100%}
body{display:grid;grid-template-rows:var(--top-h) minmax(0,1fr) var(--nav-h);height:100vh;height:100dvh;overflow:hidden;position:static;box-shadow:none;border-radius:0}
@media(min-width:641px){body{grid-template-rows:var(--top-h) minmax(0,1fr) var(--abar-h)}body.no-abar{grid-template-rows:var(--top-h) minmax(0,1fr)}body.no-abar .abar{display:none}}
a{text-decoration:none}
.rowflex{flex-wrap:wrap}
.hid{display:none!important}
.desktop-only{display:none}
@media(min-width:641px){.phone-only{display:none!important}.desktop-only{display:block}}
/* 顶栏：手机 = 品牌 + 胸牌 + 搜索（课内换成 目录 + 课名 + 胸牌）；电脑 = 面包屑 + 字号 + 胸牌 + 搜索（品牌在左栏） */
.top{position:relative;z-index:12}
.top .brand{text-decoration:none}
.top .brand .mark{width:22px;height:22px;border-radius:7px;font-size:13px}
.top .crumbs{display:none}
.top .menu{display:inline-flex;align-items:center;gap:4px;min-height:38px;padding:0 var(--sp-3) 0 var(--sp-2);border:1px solid var(--c-line);border-radius:var(--r-md);background:var(--c-surface);font-size:var(--fs-sm);font-weight:600;flex:none;color:var(--c-ink-2)}
.search{position:relative;margin-left:auto;flex:0 0 auto}
.search .sbox input{border:0;background:transparent;flex:1;min-width:0;outline:none;color:var(--c-ink);font-size:var(--fs-sm);font-family:inherit}
.search input::placeholder{color:var(--c-ink-3)}
.results{position:absolute;right:0;top:calc(100% + 6px);width:min(480px,94vw);max-height:70vh;overflow:auto;background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r-lg);box-shadow:var(--sh-2);display:none;font-size:var(--fs-sm);z-index:30}
.results.open{display:block}
.results .hint{padding:var(--sp-2) var(--pad-card);color:var(--c-ink-3);font-size:var(--fs-xs);border-top:1px solid var(--c-line)}
.results .r{display:block;width:100%;text-align:left;padding:var(--sp-3) var(--pad-card);border:0;border-bottom:1px solid var(--c-line);background:transparent;line-height:1.5}
.results .r:last-of-type{border-bottom:0}
.results .r:hover,.results .r.sel{background:var(--c-surface-2)}
.results .r .t{display:block;font-weight:600;font-size:var(--fs-md);line-height:1.4;margin-top:4px}
.results .r .path{display:block;color:var(--c-ink-3);font-size:var(--fs-xs);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.results mark{background:var(--c-accent-soft);color:var(--c-accent-hover);padding:0 1px;border-radius:3px}
@media(max-width:640px){.results{left:var(--sp-3);right:var(--sp-3);width:auto}.results .hint{display:none}}
@media(max-width:640px){.top{padding:0 var(--sp-3) 0 var(--sp-4)}.top .brand{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis}.top .brand .sub{display:none}.top.-ctx .brand{display:none}
 .top #menuBtn{display:none}.top.-ctx #menuBtn{display:inline-flex}
 .search{flex:none}.search .sbox{width:36px;height:36px;padding:0;justify-content:center;border:0;background:transparent;color:var(--c-ink-2)}.search .sbox input{display:none}
 body.searching .top .brand,body.searching .top .ctx,body.searching .top .menu,body.searching .top .who{display:none}body.searching .search{flex:1 1 auto;margin-left:0}body.searching .search .sbox{width:100%;height:42px;padding:0 14px;border:1px solid var(--c-line);background:var(--c-surface)}body.searching .search .sbox input{display:block}}
.top .fs-ctl{display:none}
@media(min-width:641px){.top .brand{display:none}.top .crumbs{display:flex;flex:1 1 auto}.top .ctx{display:none}.top .fs-ctl{display:inline-flex;margin-left:auto}.top .fs-ctl+.who{margin-left:var(--sp-2)}.top .who+.search{margin-left:var(--sp-2)}}
/* 顶栏胸牌：进门（未登录）/ 小雨 在学（孩子）/ 在看 小雨（家长，黄底）—— 底子在共享组件 .who，这里只补文字省略与手机课内的压缩 */
.who{max-width:160px;color:var(--c-ink);cursor:pointer;text-decoration:none}
.who .nm{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.who .nm small{font-weight:500;color:var(--c-ink-2);margin-left:2px;font-size:inherit}
.who.-guest{color:var(--c-ink)}
@media(max-width:640px){.top .who{max-width:120px}.top.-ctx .who{padding:0 4px;max-width:44px}.top.-ctx .who .nm{display:none}.top.-ctx .who.-guest{padding:0 var(--sp-2);max-width:none}.top.-ctx .who.-parent{padding:0 var(--sp-2) 0 4px;max-width:110px}.top.-ctx .who.-parent .nm{display:block}}
/* AI 批改作答区 */
.warn-inline{display:flex;align-items:flex-start;gap:var(--sp-3);border-radius:var(--r-md);padding:var(--sp-2) var(--sp-3);font-size:var(--fs-md);margin-top:var(--sp-3);background:var(--c-warn-soft);color:var(--c-warn)}
.warn-inline .i{flex:none;margin-top:2px}
.warn-inline b{font-weight:700}
.box.-pr .aiq{margin-top:var(--sp-3)}
.box.-pr .aiq .sk{font-size:var(--fs-md);font-weight:600;color:var(--c-ink);margin-bottom:var(--sp-2)}
.box.-pr .aiq .ta{min-height:88px;padding:var(--sp-2) var(--sp-4);line-height:1.6;resize:vertical;display:block}
.box.-pr .aiq .airow{display:flex;align-items:center;gap:var(--sp-3);margin-top:var(--sp-3);flex-wrap:wrap}
.pick{cursor:pointer}
.box.-pr .aiq .thumb{display:inline-flex;align-items:center;gap:var(--sp-2)}
.box.-pr .aiq .thumb img{width:64px;height:64px;object-fit:cover;border-radius:var(--r-md);border:1px solid var(--c-line)}
.box.-pr .aiq .lnk,.box.-pr .lnk{background:transparent;border:0;padding:0;color:var(--c-accent);font-size:var(--fs-sm);font-weight:600;text-decoration:underline}
.box.-pr .pts{margin:0;padding:0;list-style:none}
.box.-pr .pts li{display:flex;gap:var(--sp-2);align-items:flex-start;font-size:var(--fs-sm);color:var(--c-ink-2);padding:var(--sp-1) 0}
.box.-pr .pts li .m{flex:none;font-weight:700}
.box.-pr .pts li.-y .m{color:var(--c-ok)}
.box.-pr .pts li.-n .m{color:var(--c-danger)}
.box.-pr .said{margin-top:var(--sp-3);font-size:var(--fs-sm);color:var(--c-ink-2);white-space:pre-wrap}
.fsrow{display:flex;align-items:center;gap:var(--sp-3);margin:0 0 var(--sp-3)}
.drawer .dtop{position:sticky;top:0;z-index:4;background:var(--c-surface);padding-top:var(--sp-3)}
.drawer.-tree{padding-top:0;scroll-padding-top:var(--dtop-h,96px)}
.drawer.-tree .dtop{box-shadow:0 8px 12px -10px var(--c-scrim)}
.fsrow .lab{font-size:var(--fs-sm);color:var(--c-ink-2);white-space:nowrap}
.fs-seg{flex:1}.fs-seg>button{flex:1;min-height:40px}
/* 骨架：左栏（电脑 216 / 窄电脑 64）+ 正文 */
.body{min-height:0;display:grid;grid-template-columns:minmax(0,1fr);position:relative}
@media(min-width:641px){.body{grid-template-columns:var(--nav-w) minmax(0,1fr)}}
.main{overflow:auto;padding:var(--pad-page);min-width:0;-webkit-overflow-scrolling:touch}
@media(max-width:640px){.main{padding:var(--sp-4) var(--pad-page) var(--sp-6)}}
@media(min-width:641px){.main{padding:var(--sp-5) var(--pad-page) 72px}.body.-wide .main-inner{max-width:min(960px,100%)}.main-inner.lp2{max-width:var(--lp2-w)}}
/* 按钮：底子全在共享组件；这里只留百科壳的补丁 */
.btn.-wrap{white-space:normal;text-align:left;line-height:1.3}
.btn-danger.is-armed{background:var(--c-danger);color:#fff}
/* 卡 / 折叠：底子在共享组件 */
.eyebrow{margin-bottom:var(--sp-2)}
.card-fold.-quiet .fold-head{min-height:48px;font-weight:500;color:var(--c-ink-2);font-size:var(--fs-sm)}
.card-fold.-quiet{border-color:transparent;background:var(--c-surface-2)}
.card-fold.-quiet .fold-body{border-top-color:transparent}
.row.is-muted{opacity:.55;cursor:default}
.check.is-on{animation:pop var(--t-collapse) var(--ease)}
@keyframes pop{0%{transform:scale(.85)}60%{transform:scale(1.12)}100%{transform:scale(1)}}
.inline-fb{margin-top:var(--sp-3);align-items:flex-start}
.inline-fb .i{flex:none;margin-top:2px}
.input.is-err{border-color:var(--c-danger)}
/* 抽屉：底子在共享组件 .drawer；这里只留外壳与滑入动画 */
.drawer-wrap{position:fixed;inset:0;z-index:40}
.drawer-scrim{position:absolute;inset:0;background:var(--c-scrim)}
.drawer{animation:up var(--t-drawer) var(--ease);max-height:86%;padding-bottom:0}
.drawer .dhead .h3{flex:1}
@keyframes up{from{transform:translateY(24px);opacity:0}to{transform:none;opacity:1}}
/* 左栏树 */
.tree-nav{overflow:auto;border-right:1px solid var(--c-line);background:var(--c-surface);padding:0 var(--sp-3) var(--sp-6);min-height:0}
.drawer .tree-nav{border:0;padding:0 0 var(--sp-6);background:transparent;overflow:visible}
.tn-segwrap{position:sticky;top:0;z-index:2;background:var(--c-surface);padding:var(--sp-4) 0 var(--sp-3)}
.drawer .tn-segwrap{position:static}
.tn-seg{width:100%;display:flex}
.tn-seg>button{flex:1;min-height:40px}
.tn-g{border-top:1px solid var(--c-line)}
.tn-g:first-of-type{border-top:0}
.tn-gh{width:100%;display:flex;align-items:center;gap:var(--sp-2);min-height:44px;padding:0 var(--sp-2);border:0;background:transparent;font-weight:600;font-size:var(--fs-sm);text-align:left;color:var(--c-ink)}
.tn-gh .chev{margin-left:auto;color:var(--c-ink-3);width:18px;height:18px;transition:transform var(--t-collapse) var(--ease)}
.tn-g.is-open>.tn-gh .chev{transform:rotate(180deg)}
.tn-g>.tn-body{display:none;padding:0 0 var(--sp-3)}
.tn-g.is-open>.tn-body{display:block}
.tn-c{font-size:var(--fs-sm);color:var(--c-ink-2);padding:var(--sp-2) var(--sp-2) var(--sp-1) var(--sp-4);font-weight:600;display:flex;align-items:center;gap:var(--sp-2);width:100%;border:0;background:transparent;text-align:left}
.tn-c .chev{margin-left:auto;width:16px;height:16px;color:var(--c-ink-3);transition:transform var(--t-collapse) var(--ease)}
.tn-c.is-open .chev{transform:rotate(90deg)}
.tn-c.is-cur{color:var(--c-accent)}
.tn-u{display:flex;align-items:center;gap:var(--sp-2);min-height:40px;padding:var(--sp-1) var(--sp-2) var(--sp-1) var(--sp-5);border-radius:var(--r-md);font-size:var(--fs-sm);color:var(--c-ink);text-decoration:none;position:relative;line-height:1.35;border:0;background:transparent;width:100%;text-align:left}
.tn-u:hover{background:var(--c-surface-2)}
.tn-u .bk{flex:none;font-size:var(--fs-xs);color:var(--c-ink-3);min-width:2.2em;white-space:nowrap}
.tree-nav.-grade .tn-u .bk{display:none}
.tn-u.is-current{background:var(--c-accent-soft);color:var(--c-ink);font-weight:600}
.tn-u.is-current::before{content:"";position:absolute;left:0;top:8px;bottom:8px;width:3px;border-radius:2px;background:var(--c-accent)}
.tn-u.is-done .bk{color:var(--c-ok)}
.tn-u .mark{margin-left:auto;width:16px;height:16px;color:var(--c-ok);flex:none}
/* 手机底栏：今天 / 学 / 错题 / 我的（底子在共享组件 .tabs/.tab；当前格 .is-active；灰格带小锁；错题有等着看的出小点） */
.tabs{position:static;height:auto;min-height:var(--nav-h)}
.tab{border:0;background:transparent;min-width:0}
.tab .lock,.nl .lock{display:none}
.tab.is-dim .lock,.nl.is-dim .lock{display:block}
.tab .lock .i,.nl .lock .i{width:12px;height:12px}
.tab .dot,.nl .dot{display:none}
.tab.has-dot .dot,.nl.has-dot .dot{display:block}
/* 首页 */
.grade-grid .gcell{cursor:pointer;text-align:left}
.gcell.-wide{justify-content:flex-start;font-weight:500;color:var(--c-ink-2)}
/* 摸底选年级：3 列（电脑 6 列，见共享组件），在学那一册预亮，格子居中 */
#pbGrades .gcell{text-align:center;align-items:center;padding:8px 10px}
/* 摸底：题头 + 进度（件数，不是分数）；进度只在这里出一次 */
.pb-top{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-3);margin-bottom:var(--sp-2)}
.pb-top .eyebrow{margin-bottom:0;margin:0}
.pb-prog{font-size:var(--fs-sm);color:var(--c-ink-2);font-weight:600;white-space:nowrap}
#inner.-probe .progress{margin-bottom:var(--sp-4)}
/* 摸底题卡：题头只放「摸底」这一个标签，不再放题号 */
#inner.-probe .q .qhead{margin-bottom:var(--sp-3)}
.box.-pr.q[data-pbi] .opts{display:grid;gap:var(--sp-2);margin-top:var(--sp-4)}
.box.-pr.q[data-pbi] .opts .opt{min-width:0}
/* 动作区：电脑跟在题卡后面（不 sticky）；手机贴在四格底栏之上，.why 在主按钮上方一行 */
.pb-acts{margin-top:var(--sp-5)}
.pb-acts .pb-prim{display:flex;align-items:center;gap:var(--sp-3);flex-wrap:wrap}
.pb-acts .pb-ghosts{margin-top:var(--sp-3)}
.pb-ghosts{display:flex;align-items:center;justify-content:center;gap:var(--sp-4);flex-wrap:wrap;row-gap:var(--sp-1)}
#inner .pb-acts .pb-ghosts{justify-content:flex-start}
.pb-note{margin-top:var(--sp-4);color:var(--c-ink-3);font-size:var(--fs-sm);line-height:1.7}
#inner.-probe .pb-ghosts{margin-top:var(--sp-5)}
@media(max-width:640px){
 body>#pbActs{position:fixed;left:0;right:0;bottom:var(--nav-h);z-index:12;margin:0;padding:10px var(--pad-page) 8px;background:linear-gradient(to top,var(--c-bg) 80%,rgba(247,248,252,0))}
 body>#pbActs .pb-prim{flex-direction:column-reverse;align-items:stretch;gap:6px}
 body>#pbActs .why{align-self:center;padding:3px 10px}
 body>#pbActs .pb-ghosts{justify-content:center;margin-top:4px;gap:var(--sp-4)}
 body>#pbActs .btn-ghost{min-height:32px}
 #inner.-probe{padding-bottom:140px}
}
.search-big{color:var(--c-ink-3);cursor:pointer;gap:8px}
.search-big .i{flex:none}
.subj-card{cursor:pointer;color:inherit;text-decoration:none}
.subj-card .link{min-height:auto}
/* ---------- 学 · 英语目录（#tab=learn&subject=english）：学页统一 v001 起与数学同一个课行 .lrow（样式见「学页统一 v001」那一段）。
   旧的 .en-grid / .en-card 两列图卡撤掉；兜底页 casebook_v2/shell.css 自己有一份，不受影响。 ---------- */
.zero{padding:var(--pad-card);background:var(--c-surface-2);border-radius:var(--r-lg);color:var(--c-ink-2);font-size:var(--fs-sm);display:flex;gap:10px;align-items:flex-start}
.zero>.i{flex:none;color:var(--c-ink-3);margin-top:2px}
.zero .lnk{display:inline-flex;margin-top:4px;min-height:0}
#inner.-learn .sec-head .n{color:var(--c-ink-3);font-size:var(--fs-sm)}
.gcell small.-faint{color:var(--c-lock)}
.bookhead .bk.-wait{cursor:default}
.bookhead .bk.-wait .i{opacity:.4}
.bookhead .bk .bone.-bk{display:inline-block;width:132px;height:28px;border-radius:var(--r-md);vertical-align:middle;background:linear-gradient(90deg,var(--c-surface-2),var(--c-line),var(--c-surface-2));background-size:200% 100%;animation:sk 1.6s linear infinite}
/* 页脚上一行：学习范围（wordapp.level 的唯一写入口；先做占位分段器，见课页 handoff §1.8） */
.lvl{margin-top:var(--sp-5);display:flex;align-items:baseline;gap:var(--sp-2);flex-wrap:wrap}
.lvl .lnk{min-height:0}
.lvl .faint{font-size:var(--fs-xs)}
.lvl-panel{margin-top:var(--sp-3);padding:var(--pad-card);background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r-lg)}
.lvl-panel .seg{margin-bottom:var(--sp-3);flex-wrap:wrap}
.lvl-steps{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
@media(min-width:641px){.lvl-steps{grid-template-columns:repeat(4,1fr)}}
.lvl-steps .gcell{cursor:pointer;text-align:left}
.lvl-panel .note{color:var(--c-ink-3);font-size:var(--fs-xs);line-height:1.6;margin-top:var(--sp-3)}
body.subject-pick #searchWrap,body.subject-pick #railConcept,body.subject-pick #rail .sep{display:none}
body.subject-pick #searchWrap,body.subject-pick #railConcept,body.subject-pick #rail .sep{display:none}
/* ===== 孩子端统一壳 v001：今天 / 学 / 错题 / 我的 四格的卡与行（底子在共享组件；这里只留百科壳的补丁）===== */
.statusline{margin-bottom:var(--sp-4)}
.statusline.-tight{margin-bottom:0}
/* 续学主卡（学页 / 摸底歇一下 · 好了）：与今天页 .tp-hero 同一套节奏；门卡里的三条勾 */
.hero .tag{margin-bottom:var(--sp-2)}
.hero .title{font-size:var(--fs-xl);font-weight:var(--fw-title);line-height:var(--lh-tight);letter-spacing:var(--ls-title);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.hero .why{display:block;width:auto;padding:0;border-radius:0;background:none;font-weight:400;color:var(--c-ink-2);font-size:var(--fs-sm);margin-top:var(--sp-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hero .acts{display:flex;align-items:center;gap:var(--sp-3);margin-top:var(--sp-5)}
.gate .lead{font-size:var(--fs-xl);font-weight:var(--fw-title);line-height:var(--lh-tight);letter-spacing:var(--ls-title);margin-top:var(--sp-3)}
.gate .pts{margin:var(--sp-3) 0 0;padding:0;list-style:none;display:flex;flex-direction:column;gap:var(--sp-1)}
.gate .pts li{display:flex;align-items:center;gap:var(--sp-2);color:var(--c-ink-2);font-size:var(--fs-sm)}
.gate .pts .i{color:var(--c-accent);width:16px;height:16px;flex:none}
@media(max-width:640px){
 .hero .acts{flex-direction:column;align-items:stretch;gap:var(--sp-2)}
 .hero .acts .btn-ghost{align-self:center}
 .hero .hero-copy{max-width:100%}
 .hero .hero-art{display:none}
 .hero.-art .hero-art{display:block;width:32%;right:-4px;top:12px;transform:none;opacity:.9}
 .hero.-art .tag,.hero.-art .title,.hero.-art .why{margin-right:26%}
 .gate .lead{margin-right:26%}
}
@media(min-width:641px){
 .hero{min-height:220px;display:flex;align-items:center}
 .hero>.hero-copy{width:100%;max-width:60%}
 .hero .hero-art{width:36%;right:0}
 .gate .lead{font-size:var(--fs-2xl)}
}
.card.card-fold.-plain .fold-head{cursor:default}
.card.list .uw-lh{display:flex;align-items:baseline;gap:var(--sp-3);padding:var(--sp-4) var(--pad-card) 0;flex-wrap:wrap}
.card.list .uw-list{padding:var(--sp-3) var(--pad-card) var(--pad-card)}
.card.list .uw-empty{padding:var(--sp-2) var(--pad-card) var(--pad-card)}
.row .body{display:flex;flex-direction:column}
.row .ic{width:var(--icon);display:inline-flex;justify-content:center;align-items:center;color:var(--c-ink-2);flex:none;font-weight:800}
.row .ic.-accent{color:var(--c-accent)}
.row.plain{cursor:default}
.row .seg{margin-left:auto}
.row.-leave{flex-wrap:wrap}
.card.list .card-fold{border-radius:0}
.card.list .card-fold .fold-head{padding:0 var(--pad-card)}
.card.list .card-fold .fold-body{padding:0}
.card.list .card-fold .fold-body .row{padding-left:calc(var(--pad-card) + var(--sp-4))}
.pill{white-space:nowrap;flex:none}
.pill.kt-tier{background:var(--c-ink);color:var(--c-bg)}
.pill.kt-err{color:var(--c-danger);background:var(--c-danger-soft);display:inline-flex;align-items:center}
.prog-card .progress{margin-top:var(--sp-3)}
.prog-card .legend{display:flex;justify-content:space-between;gap:var(--sp-3);margin-top:var(--sp-2);font-size:var(--fs-sm);color:var(--c-ink-2);flex-wrap:wrap}
.prog-card .legend .ellip{min-width:0}
/* 复审 L2 §4.2：活动卡 + 知识图入口卡合成一张（.prog-card.-kt）：一句 + 小版图 + 一行「上次学到」+「看知识图 ›」 */
.prog-card.-kt .h3{margin-top:4px}
/* 小版图压成一条（样板是一条扁图）：真版图接近方形，限高居中，四周是海色 */
.prog-card .kt-mini{display:flex;justify-content:center;margin-top:var(--sp-3);border-radius:var(--r-md);overflow:hidden;background:var(--c-map-sea);height:168px}
.prog-card .kt-mini svg{display:block;height:100%;width:auto;max-width:100%}
.prog-card .lastline{display:flex;align-items:center;gap:var(--sp-2);margin-top:var(--sp-3);font-size:var(--fs-sm);color:var(--c-ink-2);min-width:0}
.prog-card .lastline .ellip{flex:1 1 auto;min-width:0}
.prog-card .lastline .lnk{flex:none;min-height:0}
.prog-card .ktgo{display:inline-flex;margin-top:var(--sp-3);min-height:0;font-weight:600}
/* 关于你（我的页精细化 v001）：card-sub 里两行，行不占卡的左右内边距 */
.about .row{padding-left:0;padding-right:0;border-bottom:0;min-height:52px}
.about .row:first-child{padding-top:0}
.about .row:last-child{padding-bottom:0}
.about .row .title{font-size:var(--fs-md)}
/* 不常用的：折叠头与副题都不折行，右列 320 宽时副题省略 */
#mineMore>.fold-head .n{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;margin-left:auto;padding-left:var(--sp-2)}
#mineMore>.fold-head>.i{margin-left:var(--sp-2)}
#mineMore .fold-body{padding:0}
.mine-head{display:flex;align-items:center;gap:var(--sp-4);margin-bottom:var(--sp-4)}
.mine-head .h1{font-size:var(--fs-xl)}
.hero-art{width:38%}
.card-main .hero-copy{max-width:66%}
@media(max-width:640px){.card-main .hero-copy{max-width:100%}.hero-art{width:46%;right:-24px;top:42%;opacity:.55}}
.rc-card:has(textarea) .hero-art,.rc-card:has(.rc-bar) .hero-art{display:none}
/* ---------- 知识树（KT，2026-09-19）：「我的」入口卡 + 树页。颜色只用 :root 的 token。
   2026-09-22 起这一页是**会点亮的版图**：省 = 册 / 市 = 主题 / 县 = 概念 / 乡镇 = 课，
   形状来自构建产物 atlas.json，页面只按回包 t 上色。地图那一套颜色是专用的 --c-map-*
   （配色「灯火暖黄」，深色 = 夜里的灯火）：海 / 陆 / 县界 / 省界 / 五档灯火各一个名字，
   整站主色 --c-accent 与旧五档 --c-lv-1～4 一个不动（错题红点仍用 --c-lv-dot）。
   头尾标记不动：构建脚本与单测按它取段。 ---------- */
/* 册分段器（换册三条路之一，另两条是点省、点灰邻省） */
.kt-books{display:flex;gap:6px;flex-wrap:nowrap;overflow-x:auto;padding:2px 2px 6px;margin:0 -2px;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.kt-books::-webkit-scrollbar{display:none}
.kt-books .chip{flex:none;cursor:pointer;font-weight:600;color:var(--c-ink-2)}
@media(min-width:641px){.kt-books{flex-wrap:wrap;overflow:visible}}
/* 手机：「整张图」那一格固定在最左不随滚（复审 L2 §5）；进来仍滚到当前册（ktChipCenter） */
@media(max-width:640px){.kt-books .chip[data-ktbook="all"]{position:sticky;left:0;z-index:1;background:var(--c-bg);box-shadow:-4px 0 0 0 var(--c-bg),8px 0 8px -4px var(--c-bg)}
  .kt-books .chip.is-on[data-ktbook="all"]{background:linear-gradient(var(--c-accent-soft),var(--c-accent-soft)),var(--c-bg)}}
/* 顶条：只剩一颗返回（回「我的」/ 回家长台） */
.kt-top{display:flex;align-items:center;gap:var(--sp-3);margin-bottom:calc(var(--sp-2) * -1);min-height:var(--h-ctl-sm)}
.kt-page.-cols .kt-top{margin-bottom:var(--sp-2)}
.kt-top .btn-ghost{padding-left:0}
/* 地图卡：一页只有这一张。图框（.kt-mapwrap）按档定高，全国 / 省在里面原地换，框不跳高 */
.card.kt-mapcard{padding:var(--sp-3)}
@media(min-width:641px){.card.kt-mapcard{padding:var(--sp-4)}}
.kt-mapbox{position:relative}
.kt-mapwrap{background:var(--c-map-sea);border-radius:var(--r-md);overflow:hidden;height:280px}
.kt-mapwrap.-one{height:300px}
.kt-mapwrap.-cols{height:400px}
/* 图等比缩进框里；框比图高 / 宽出来的那一圈照样画邻省陆地与海（overflow 放开、由框裁掉），不留白条 */
.kt-mapwrap .kt-map{width:100%;height:100%;max-width:none;margin:0;border-radius:0;overflow:visible}
.kt-map{display:block;width:100%;height:auto;border-radius:var(--r-md);max-width:560px;margin:0 auto}
.kt-map.-nat{max-width:none}
.kt-map text{font-family:var(--font);pointer-events:none;user-select:none}
.kt-map [role=button]{cursor:pointer}
.kt-map [role=button]:focus-visible{outline:var(--focus-w,3px) solid var(--c-focus);outline-offset:2px}
.kt-map .kt-hit{fill:transparent}
.kt-map .kt-hit:hover{fill:var(--c-accent);fill-opacity:.12}
.kt-tlist{font-size:var(--fs-sm);color:var(--c-ink-2);margin:var(--sp-2) 0 0;line-height:1.6;white-space:nowrap;overflow-x:auto;scrollbar-width:none;padding-bottom:2px}
.kt-tlist::-webkit-scrollbar{display:none}
.kt-tlist b{color:var(--c-ink);font-weight:600;margin-right:2px}
.kt-tlist span{white-space:nowrap}
.kt-note{color:var(--c-ink-3);font-size:var(--fs-xs);margin-top:var(--sp-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 乡镇弹层：绝对定位，不占文档流、不撑高页面。
   电脑 -float：浮在图框上、贴在点旁边（left / top 由 ktPlacePop 画完再量）；
   手机 -sheet：盖在图框正下方的册卡上（.kt-below），不盖图——点开的乡镇永远露着，靠高亮环对上；
   比册卡高就往下延到页脚上方（仍是绝对定位，页面高度不变）。 */
.kt-pop{border-color:var(--c-accent-soft-2);box-shadow:0 0 0 3px var(--c-accent-soft)}
.kt-pop.-sheet,.kt-pop.-float{position:absolute;z-index:3;margin:0;padding:var(--sp-4);box-shadow:0 0 0 3px var(--c-accent-soft),var(--sh-2)}
.kt-below{position:relative}
.kt-pop.-sheet{top:0;left:0;right:0;min-height:100%}
.kt-pop.-float{top:var(--sp-2);right:var(--sp-2);width:288px;max-width:calc(100% - var(--sp-4));max-height:calc(100% - var(--sp-4));overflow:auto}
.kt-pop:focus{outline:none}
.kt-pop:focus-visible{outline:var(--focus-w,3px) solid var(--c-focus);outline-offset:2px}
.kt-pop .kt-crumb{color:var(--c-ink-3);font-size:var(--fs-sm);margin-top:2px}
.kt-pop .h3{margin-top:var(--sp-1)}
.kt-pop .kt-meta{display:flex;flex-wrap:wrap;gap:var(--sp-2) var(--sp-3);align-items:center;margin-top:var(--sp-3);font-size:var(--fs-sm);color:var(--c-ink-2)}
.kt-pop .kt-acts{display:flex;align-items:center;gap:var(--sp-3);margin-top:var(--sp-4);flex-wrap:wrap}
.kt-pop.-sheet .kt-meta{margin-top:var(--sp-2)}
.kt-pop.-sheet .kt-acts{margin-top:var(--sp-3)}
/* 册卡：一句 + 最暗的一块 + 五档一行 + 图例 + 副计数一行（三档一致，不缩字号） */
.kt-nums{display:grid;grid-template-columns:repeat(5,1fr);gap:var(--sp-2);margin-top:var(--sp-3)}
.kt-num{display:flex;flex-direction:column;min-width:0}
.kt-num b{font-size:var(--fs-xl);font-weight:800;line-height:1.1;font-variant-numeric:tabular-nums}
.kt-num span{font-size:var(--fs-sm);color:var(--c-ink-2);white-space:nowrap}
.kt-num b{white-space:nowrap}
.kt-num b i{margin-right:4px;vertical-align:.12em}
.kt-legend{display:flex;flex-wrap:wrap;gap:4px var(--sp-3);margin-top:var(--sp-2);font-size:var(--fs-xs);color:var(--c-ink-2)}
.kt-legend span{display:inline-flex;align-items:center;gap:6px}
.kt-num i,.kt-legend i{width:12px;height:12px;border-radius:50%;display:inline-block;flex:none;box-sizing:border-box;background:var(--c-map-land);border:1.5px solid var(--c-map-t0)}
.kt-num i.t1,.kt-legend i.t1{background:var(--c-map-lv-1);border:0}
.kt-num i.t2,.kt-legend i.t2{background:var(--c-map-lv-2);border:0}
.kt-num i.t3,.kt-legend i.t3{background:var(--c-map-lv-3);border:0}
.kt-num i.t4,.kt-legend i.t4{background:var(--c-map-lv-4);border:0}
.kt-legend i.-county{border-radius:3px;background:var(--c-map-lv-2);border:0;opacity:.5}
.kt-legend i.-dot{width:8px;height:8px;background:var(--c-lv-dot);border:0}
.kt-sub{margin-top:var(--sp-2);font-size:var(--fs-xs)}
.kt-sub b{font-weight:700;color:var(--c-ink-2);font-variant-numeric:tabular-nums}
/* 手机收一点间距（主会话 9/23：390 省态 ≤ 一屏）：册卡内距 20 → 16、几处 12 / 8 → 8 / 6，内容一样不少 */
@media(max-width:640px){.card.kt-overview{padding:var(--sp-4)}.kt-books{padding-bottom:2px}.kt-nums{margin-top:var(--sp-2)}.kt-legend,.kt-sub{margin-top:6px}
  .kt-note{white-space:normal;text-overflow:clip;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}}   /* 手机：说明行最多折两行，不再截成省略号（9/23） */
/* 「我的」入口卡：小版图缩略 + 一句话 +「看知识图 ›」（五档四格与进度条已删） */
.kt-entry{display:block;text-decoration:none;color:inherit;transition:transform var(--t-state) var(--ease),box-shadow var(--t-state) var(--ease)}
.kt-entry:hover{transform:translateY(-1px);box-shadow:var(--sh-hover);border-color:var(--c-accent-soft-2)}
.kt-entry-row{display:flex;gap:var(--sp-4);align-items:center}
.kt-entry-mini{width:120px;flex:none}
.kt-entry-mini .kt-map{border-radius:var(--r-sm)}
@media(max-width:640px){.kt-entry-mini{width:104px}}
.kt-entry-body{flex:1 1 auto;min-width:0}
.kt-entry .h3{margin-top:var(--sp-1)}
.kt-entry-go{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);margin-top:var(--sp-2);flex-wrap:wrap}
.kt-entry-go .lnk{font-weight:600;white-space:nowrap}
.kt-entry-go .faint{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kt-page .empty{padding:var(--sp-3) 0;border:0;background:transparent}
/* 「知识树 / 知识图」两段（2026-09-23，用户定；只在宿主给了 VIEW_MODE_KEY 时出，孩子端没有） */
.kt-mode{display:flex;width:fit-content}
/* 知识树（列表那一种，2026-09-19 原样搬回，只在家长台出）：主题卡 → 概念 → 课名清单，五档用旧的 --c-lv-*（不用地图色）。
   跟图同名的几个类（册卡计数 / 图例 / 错题标）一律收在 .kt-page.-tree 底下，不串到图那边。
   t0 且默认会 → 淡绿斜纹；t0 且学校学过没查 → 淡色斜纹。 */
.kt-stack{display:flex;height:8px;border-radius:4px;overflow:hidden;background:var(--c-line);flex:1 1 0;min-width:0}
.kt-stack.-big{height:12px;border-radius:6px;margin-top:var(--sp-3);flex:none;width:100%}
.kt-stack>i{display:block;flex:1 1 0;min-width:0}
.kt-stack>i.t0,.kt-seg>i.t0,.kt-dot.t0,.kt-page.-tree .kt-legend i.t0{background:var(--c-line)}
.kt-stack>i.t1,.kt-seg>i.t1,.kt-dot.t1,.kt-page.-tree .kt-legend i.t1{background:var(--c-lv-1)}
.kt-stack>i.t2,.kt-seg>i.t2,.kt-dot.t2,.kt-page.-tree .kt-legend i.t2{background:var(--c-lv-2)}
.kt-stack>i.t3,.kt-seg>i.t3,.kt-dot.t3,.kt-page.-tree .kt-legend i.t3{background:var(--c-lv-3)}
.kt-stack>i.t4,.kt-seg>i.t4,.kt-dot.t4,.kt-page.-tree .kt-legend i.t4{background:var(--c-lv-4)}
.kt-seg>i.-known,.kt-dot.-known,.kt-page.-tree .kt-legend i.-known{background:repeating-linear-gradient(45deg,var(--c-ok-soft) 0 3px,var(--c-ok) 3px 4px)}
.kt-seg>i.-unchecked,.kt-dot.-unchecked,.kt-page.-tree .kt-legend i.-unchecked{background:repeating-linear-gradient(45deg,var(--c-surface-2) 0 3px,var(--c-ink-3) 3px 4px)}
.kt-seg{display:flex;gap:2px;height:8px;flex:1 1 100%;min-width:0}
.kt-seg.-dense{gap:1px}
.kt-seg>i{display:block;flex:1 1 0;min-width:1px;border-radius:3px;position:relative}
.kt-seg.-dense>i{border-radius:1px}
.kt-seg>i.-err::after{content:"";position:absolute;right:-1px;top:-4px;width:6px;height:6px;border-radius:50%;background:var(--c-lv-dot);border:1px solid var(--c-surface)}
.kt-page.-tree .kt-nums{grid-template-columns:repeat(4,1fr);gap:var(--sp-3) var(--sp-2)}
.kt-page.-tree .kt-num.-ps b{color:var(--c-ink-2)}
.kt-page.-tree .kt-legend{gap:var(--sp-2) var(--sp-4);margin-top:var(--sp-3);font-size:var(--fs-sm)}
.kt-page.-tree .kt-legend i{border-radius:3px;border:0}
.kt-page.-tree .kt-legend i.kt-errdot,.kt-page.-tree .kt-err::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--c-lv-dot);display:inline-block;flex:none}
.kt-page.-tree .kt-err::before{margin-right:4px;vertical-align:1px}
.kt-grid{display:grid;grid-template-columns:1fr;gap:var(--sp-3)}
@media(min-width:641px){.kt-grid{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}}
.kt-theme{padding:0;overflow:hidden}
.kt-theme.is-open{border-color:var(--c-accent-soft-2);box-shadow:0 0 0 3px var(--c-accent-soft)}
.kt-th{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-2) var(--sp-3);width:100%;min-height:var(--h-row);padding:var(--sp-3) var(--sp-4);background:transparent;border:0;text-align:left;font:inherit;color:inherit;cursor:pointer;border-radius:var(--r-lg)}
.kt-tname{font-size:var(--fs-md);font-weight:700;line-height:1.3}
.kt-tn{color:var(--c-ink-3);font-size:var(--fs-sm);white-space:nowrap}
.kt-th>.chev{margin-left:auto;color:var(--c-ink-3);flex:none;transition:transform var(--t-collapse) var(--ease)}
.kt-theme.is-open .kt-th>.chev{transform:rotate(180deg)}
.kt-tb{border-top:1px solid var(--c-line);padding:0 var(--sp-4) var(--sp-2)}
.kt-c+.kt-c{border-top:1px solid var(--c-line)}
.kt-ch{display:flex;align-items:center;gap:var(--sp-3);width:100%;padding:var(--sp-3) 0;background:transparent;border:0;text-align:left;font:inherit;color:inherit;cursor:pointer}
.kt-cbody{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:6px}
.kt-cbody .kt-seg{flex:0 0 auto;width:100%}
.kt-ctitle{font-size:var(--fs-md);font-weight:600;line-height:1.3}
.kt-csub{font-size:var(--fs-sm);color:var(--c-ink-2)}
.kt-ch>.chev{color:var(--c-ink-3);flex:none;transition:transform var(--t-collapse) var(--ease)}
.kt-c.is-open .kt-ch>.chev{transform:rotate(90deg)}
.kt-cb{padding:0 0 var(--sp-2);border-top:1px dashed var(--c-line)}
.kt-u{cursor:pointer}
.kt-u .title{font-size:var(--fs-md);font-weight:500}
.kt-dot{width:12px;height:12px;border-radius:50%;flex:none;display:inline-block}
.kt-right{display:flex;gap:4px;flex-wrap:wrap;justify-content:flex-end;align-items:center;margin-left:auto;flex:none;max-width:52%}
.kt-right .pill{font-variant-numeric:tabular-nums}
.kt-goal{font-size:var(--fs-xs);color:var(--c-ink-2);white-space:nowrap}
.kt-foot{margin-top:var(--sp-2)}
/* ---------- 今天先做这个（TP 样式，2026-09-19）：「今天」页的版式
   2026-09-21 按「精细化样板-今天页-v001」换了结构：主卡 / 摸底细条 / 清单行 / 待确认记录 / 提示小卡 / ≥1280 两栏 ---------- */
.tp-dot{width:10px;height:10px;border-radius:50%;flex:none;display:inline-block;background:var(--c-ink-3)}
.tp-dot.-review{background:var(--c-accent)}
.tp-dot.-suspect{background:var(--c-danger)}
.tp-dot.-recite{background:var(--c-ok)}
.tp-dot.-stable_check{background:var(--c-ok-deep)}
.tp-dot.-new{background:var(--c-ink)}
.tp-row .title{font-weight:600}
.tp-row.is-done .title{color:var(--c-ink-3);text-decoration:line-through}
.tp-row.is-done .meta{color:var(--c-ink-3)}
/* 页头：手机日期换行，电脑同行 */
#inner.-today .statusline,#inner.-learn .statusline,#inner.-probe .statusline{display:block;margin-bottom:var(--sp-5)}
#inner.-today .statusline .date,#inner.-learn .statusline .date,#inner.-probe .statusline .date{display:block;margin-top:2px}
@media(min-width:641px){#inner.-today .statusline,#inner.-learn .statusline,#inner.-probe .statusline{display:flex;align-items:baseline;gap:var(--sp-3)}#inner.-today .statusline .date,#inner.-learn .statusline .date,#inner.-probe .statusline .date{display:inline;margin-top:0}}
#inner.-learn .crumb,#inner.-probe .crumb{margin-bottom:var(--sp-2)}
/* 区块与区块头 */
#inner.-today .sec,#inner.-learn .sec,#inner.-probe .sec{margin-top:var(--sp-section)}
#inner.-today .sec.-first,#inner.-learn .sec.-first,#inner.-probe .sec.-first{margin-top:0}
#inner.-today .banner{margin-bottom:var(--sp-4)}
/* 首页四件事 v001：提醒条里的「去答 ›」是行内文字链；v002 进度卡 / 第一次来那一句紧贴主卡下（区块间距 --sp-4，它们是首屏一组） */
#inner.-today .banner .grow .lnk{display:inline;min-height:0}
#inner.-today .sec.-tight{margin-top:var(--sp-4)}
/* 首页状态板 v002：蛛网折叠卡的展开体不要上内边距；手机档主题名 104 宽（组件里 .tier-phone 只认手动档位，自动档在这里补）；
   我的页收下「课表上的事」那一节：区块间距与区块头同今天页 */
#homeSpider .fold-body{padding:0 var(--pad-card) var(--pad-card)}
/* 册尺中间收起的那一格「…」（小毛病打包 ②：在学那册与年级差得远时两头各留两格）：不画框、不占等分宽 */
.ruler span.-gap{flex:0 0 auto;border-color:transparent;background:none;padding:6px 2px;color:var(--c-ink-3)}
@media(max-width:640px){.theme-row .nm{flex-basis:104px}}
#inner.-mine .sec{margin-top:var(--sp-section)}
#inner.-mine .mine-about{margin-top:var(--sp-section)}
#inner.-mine .sec-head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-3);margin-bottom:var(--sp-3)}
#inner.-mine .sec-head .lnk{min-height:0}
#inner.-today .sec-head,#inner.-learn .sec-head,#inner.-probe .sec-head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-3);margin-bottom:var(--sp-3)}
#inner.-today .sec-head .eyebrow,#inner.-learn .sec-head .eyebrow{margin:0}
#inner.-today .sec-head .lnk,#inner.-learn .sec-head .lnk{min-height:0}
#inner.-learn .sec-head .h3{font-size:var(--fs-lg)}
/* 主卡（引擎卡 / 摸底主卡 / 空计划主卡）与门卡共用一套节奏 */
.tp-hero .tag,.gate .tag{margin-bottom:var(--sp-2)}
.tp-hero .title{font-size:var(--fs-xl);font-weight:var(--fw-title);line-height:var(--lh-tight);letter-spacing:var(--ls-title);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.tp-hero .why,.rc .why{display:block;width:auto;padding:0;border-radius:0;background:none;font-weight:400;color:var(--c-ink-2);font-size:var(--fs-sm);margin-top:var(--sp-2)}
.tp-hero .acts,.gate .acts{display:flex;align-items:center;gap:var(--sp-3);margin-top:var(--sp-5)}
@media(max-width:640px){
 .tp-hero .acts,.gate .acts{flex-direction:column;align-items:stretch;gap:var(--sp-2)}
 .tp-hero .acts .btn-ghost,.gate .acts .btn-ghost{align-self:center}
 .tp-hero .hero-copy,.gate .hero-copy{max-width:100%}
 .tp-hero .hero-art{display:none}
 .tp-hero.-art .hero-art,.gate .hero-art{display:block;width:32%;right:-4px;top:12px;transform:none;opacity:.9}
 .tp-hero.-art .tag,.tp-hero.-art .title,.tp-hero.-art .why,.gate .tag,.gate .h2{margin-right:26%}
}
@media(min-width:641px){
 .tp-hero{min-height:240px;display:flex;align-items:center}
 .gate{min-height:260px;display:flex;align-items:center}
 .tp-hero>.hero-copy,.gate>.hero-copy{width:100%;max-width:60%}
 .tp-hero .hero-art,.gate .hero-art{width:36%;right:0}
}
/* 先了解你：摸底（有排课时）+ 认识你 + 聊聊喜欢什么，三行一张清单卡；动作在行内第二行，右列 320 也放得下 */
.know .row{flex-wrap:wrap;align-items:flex-start;padding-top:var(--sp-3);padding-bottom:var(--sp-3)}
.know .row>.tile{margin-top:2px}
.know .row .body{flex:1 1 0;min-width:0}
.know .row .meta{white-space:normal;overflow:visible;text-overflow:clip;line-height:1.5}
.know .row .meta .lnk{display:inline;min-height:0;white-space:normal}
.know .row .acts{flex:1 0 100%;display:flex;align-items:center;gap:var(--sp-3);margin-top:var(--sp-2);padding-left:calc(var(--tile-sm) + var(--sp-3))}
/* 641～1279 是整宽单列：动作放回标题右侧同一行；手机太窄、≥1280 在 320 右列，都还是两行式 */
@media(min-width:641px) and (max-width:1279px){
 .know .row{flex-wrap:nowrap;align-items:center}
 .know .row .acts{flex:0 0 auto;margin-top:0;padding-left:0;margin-left:auto}
}
/* 待确认记录卡 */
.rc .h3{margin-top:var(--sp-1)}
.rc .sub{color:var(--c-ink-3);font-size:var(--fs-sm);margin-top:var(--sp-1)}
.rc .acts{margin-top:var(--sp-4);display:flex;gap:var(--sp-3);align-items:center}
@media(max-width:640px){.rc .acts{flex-direction:column;align-items:stretch}.rc .acts .btn{width:100%}}
/* 两栏：只在 ≥1280（主列 640 + 右列 320 + 间距 40，与课内讲义同一组数） */
#inner.-today .today-cols>.tcol-aside>*:first-child>.sec:first-child{margin-top:var(--sp-section)}
@media(min-width:1280px){
 html:not([data-view="tv"]) #inner.-today,html:not([data-view="tv"]) #inner.-learn,html:not([data-view="tv"]) #inner.-probe,html:not([data-view="tv"]) #inner.-wrong,html:not([data-view="tv"]) #inner.-mine{max-width:calc(var(--col-text) + var(--col-gap) + var(--col-side))}
 html:not([data-view="tv"]) #inner.-today .today-cols,html:not([data-view="tv"]) #inner.-learn .today-cols,html:not([data-view="tv"]) #inner.-probe .today-cols,html:not([data-view="tv"]) #inner.-wrong .today-cols,html:not([data-view="tv"]) #inner.-mine .today-cols{display:grid;grid-template-columns:var(--col-text) var(--col-side);column-gap:var(--col-gap);align-items:start}
 html:not([data-view="tv"]) #inner.-today .today-cols>*,html:not([data-view="tv"]) #inner.-learn .today-cols>*,html:not([data-view="tv"]) #inner.-probe .today-cols>*,html:not([data-view="tv"]) #inner.-wrong .today-cols>*,html:not([data-view="tv"]) #inner.-mine .today-cols>*{min-width:0}
 html:not([data-view="tv"]) #inner.-wrong .today-cols>.tcol-aside>*+*,html:not([data-view="tv"]) #inner.-mine .today-cols>.tcol-aside>*+*{margin-top:var(--sp-4)}
 html:not([data-view="tv"]) #inner.-today .today-cols>.tcol-aside>*:first-child>.sec:first-child{margin-top:0}
 html:not([data-view="tv"]) #inner.-learn .today-cols>.tcol-aside>.sec:first-child,html:not([data-view="tv"]) #inner.-probe .today-cols>.tcol-aside>.sec:first-child{margin-top:0}
}
/* ---------- 折叠目录树（学页目录卡 / 英语分组 / 目录抽屉 共用）：册 → 概念 → 课，三层 ---------- */
.tree>.fold{border-top:1px solid var(--c-line)}
.tree>.fold:first-child{border-top:0}
.fold>.fold-head{display:flex;align-items:center;gap:var(--sp-2);width:100%;min-height:52px;padding:0 var(--pad-card);font-weight:600;font-size:var(--fs-md);text-align:left;border:0;background:transparent;color:inherit}
.fold>.fold-head:hover{background:var(--c-surface-2)}
.fold>.fold-head .fh-t{flex:1 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fold>.fold-head .fh-m{color:var(--c-ink-3);font-weight:500;font-size:var(--fs-sm);white-space:nowrap}
.fold>.fold-head .fh-m.-here{color:var(--c-accent)}
.fold>.fold-head>.chev{color:var(--c-ink-3);width:16px;height:16px;flex:none;margin-left:0;transition:transform var(--t-collapse) var(--ease)}
.fold.is-open>.fold-head>.chev{transform:rotate(180deg)}
.fold>.fold-head .lnk .chev{width:14px;height:14px;transform:none;color:inherit}
.fold>.fold-body{display:none;padding:0;border-top:0}
.fold.is-open>.fold-body{display:block;padding-bottom:var(--sp-2)}
.fold.is-open>.fold-head{color:var(--c-accent-hover)}
.fold.is-open>.fold-head .fh-m{color:var(--c-ink-3)}
.fold.-l2>.fold-head{min-height:44px;padding-left:calc(var(--pad-card) + var(--sp-4));font-weight:500;font-size:15px;color:var(--c-ink)}
.fold.-l2>.fold-head .fh-t b{font-weight:500;color:var(--c-ink-3)}
@media(max-width:640px){.fold.-l2>.fold-head .fh-t b{display:none}}
.fold.-l2>.fold-head .lnk{min-height:0;flex:none}
.fold.-l2.is-open>.fold-head{color:var(--c-ink);font-weight:600}
.fold.-l2.is-open>.fold-body{padding-bottom:var(--sp-1)}
.tree .row.-l3{min-height:44px;padding:var(--sp-1) var(--pad-card) var(--sp-1) calc(var(--pad-card) + var(--sp-6));gap:var(--sp-2);border-bottom:0}
.tree .row.-l3 .title{font-size:15px;font-weight:500}
.tree .row.-l3 .tile{width:26px;height:26px;border-radius:7px}
.tree .row.-l3 .tile .i{width:14px;height:14px}
.tree .row.-l3.is-cur .title{font-weight:600}
.tree .row.-l3 .state{font-size:var(--fs-xs)}
.tree .row.-l3.-plain{padding-left:calc(var(--pad-card) + var(--sp-6) + 26px + var(--sp-2))}
.tree .row.-l3:hover{background:var(--c-surface-2)}
/* 切换栏 = 页头：「一年级 ▾」+（数学）「上册 | 下册」，右侧 数学 | 英语 */
.bookhead{position:relative;margin-bottom:var(--sp-4)}
.bookhead .bar{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}
.bookhead .bk{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-2xl);font-weight:var(--fw-title);line-height:var(--lh-tight);letter-spacing:var(--ls-title);padding:2px 6px 2px 0;border:0;background:transparent;color:inherit;border-radius:var(--r-md)}
.bookhead .bk .i{width:22px;height:22px;color:var(--c-ink-3);stroke-width:2;transition:transform var(--t-collapse) var(--ease)}
.bookhead .bk:hover{background:var(--c-surface-2)}
.bookhead .bk.is-on .i{transform:rotate(180deg)}
.bookhead .seg{margin:0 0 0 auto;padding:3px}
.bookhead .seg button{min-height:34px;padding:0 14px}
@media(min-width:641px){.bookhead{margin-bottom:var(--sp-5)}}
/* 电脑：页头下浮层换册 */
.gpop{position:absolute;left:0;top:calc(100% + 8px);z-index:25;width:min(640px,100%);background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r-lg);box-shadow:var(--sh-2);padding:var(--pad-card)}
.gpop .gh{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:var(--sp-3)}
.gpop .grade-grid{grid-template-columns:repeat(5,1fr)}
.gpop .gcell{align-items:center;text-align:center}
.gpop .gcell.-wide{justify-content:center}
/* 手机：底部抽屉换册 */
.drawer.-book{animation:up var(--t-drawer) var(--ease);max-height:86%;overflow:auto}
.drawer.-book .dhead{display:flex;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-3)}
.drawer.-book .dhead .h3{flex:none}
.drawer.-book .dhead .faint{margin-left:auto}
.drawer.-book .gcell.-wide{justify-content:center}
.drawer.-book .grade-grid{grid-template-columns:repeat(3,1fr);padding-bottom:var(--sp-5)}
.drawer.-book .gcell{align-items:center;text-align:center}
/* ---------- 学页统一 v001（2026-10-05，设计包 精细化样板-学页统一-v001）：小图位、两档疏密（一到三年级大档 / 四年级起紧档）；课行 .lrow / .lgrid 随学页一图撤掉 ----------
   新增 token 15 个（02-新增token.md）：照 --c-instr 那一段的写法单写在这里，不进 components.css。主题色底全是现有色的别名，深浅色自动跟着换。 */
:root{--lrow-pic:44px;--lrow-pic-big:72px;--lrow-h:var(--h-row);--lrow-h-big:92px;--lrow-st:28px;--lrow-badge:22px;--lrow-col-min:300px;
--c-th-a-bg:var(--c-accent-soft);--c-th-a-ink:var(--c-accent);--c-th-b-bg:var(--c-accent-2-soft);--c-th-b-ink:var(--c-accent-2-ink);--c-th-c-bg:var(--c-ok-soft);--c-th-c-ink:var(--c-ok);--c-th-d-bg:var(--c-warn-soft);--c-th-d-ink:var(--c-warn)}
@media(min-width:641px){:root:not([data-view]){--lrow-pic-big:64px}}
:root[data-view="desktop"]{--lrow-pic-big:64px}
:root[data-view="tv"]{--lrow-pic:72px;--lrow-pic-big:120px;--lrow-h-big:150px;--lrow-st:48px;--lrow-badge:36px;--lrow-col-min:520px}
/* 小图位：有封面用封面（英语 cover_sq；数学第二步 cover），没有用主题图标 + 主题色底 */
.pic{position:relative;flex:none;width:var(--lrow-pic);height:var(--lrow-pic);border-radius:var(--r-sm);display:grid;place-items:center;background:var(--c-th-a-bg);color:var(--c-th-a-ink)}
.pic>img{width:100%;height:100%;object-fit:cover;display:block;border-radius:inherit}
.pic>.ti{width:56%;height:56%;stroke-width:1.6}
.pic.-b{background:var(--c-th-b-bg);color:var(--c-th-b-ink)}
.pic.-c{background:var(--c-th-c-bg);color:var(--c-th-c-ink)}
.pic.-d{background:var(--c-th-d-bg);color:var(--c-th-d-ink)}
.pic.-ph{background:var(--c-accent-2-soft);color:var(--c-accent-2-ink);font-weight:700;font-size:var(--fs-lg)}
.pic.-todo{background:var(--c-surface-2);color:var(--c-ink-3);font-weight:700}
/* 「能动手」= 小图右下角一个手形小圆标（不占课名那一行）*/
.pic .hand{position:absolute;right:-5px;bottom:-5px;width:var(--lrow-badge);height:var(--lrow-badge);border-radius:50%;background:var(--c-surface);color:var(--c-accent);border:1px solid var(--c-accent-soft-2);display:grid;place-items:center;box-shadow:0 0 0 2px var(--c-surface)}
.pic .hand .i{width:60%;height:60%;stroke-width:1.9}
.tree>.zero{background:transparent;border-radius:0}
.err-card>.i{width:32px;height:32px;color:var(--c-ink-3);display:block;margin-bottom:var(--sp-2);stroke-width:1.4}
/* 「接着学」一行（书签）：小图 · 上次学到 + 课名 + 位置 · 唯一主按钮（整行一个按钮，里面的「接着学」是长得像主按钮的 span） */
.lastrow{display:flex;align-items:center;gap:var(--sp-3);width:100%;padding:12px 14px 12px 12px;margin-bottom:var(--sp-4);color:inherit;text-align:left;cursor:pointer;transition:border-color var(--t-state)}
.lastrow:hover{border-color:var(--c-accent-soft-2)}
.lastrow .pic{width:calc(var(--lrow-pic) + 8px);height:calc(var(--lrow-pic) + 8px);border-radius:var(--r-md)}
.lastrow .bd{flex:1 1 auto;min-width:0;display:flex;flex-direction:column}
.lastrow .eb{font-size:var(--fs-xs);color:var(--c-ink-3);line-height:1.3}
.lastrow .t{font-size:var(--fs-md);font-weight:700;line-height:1.35;overflow-wrap:anywhere;text-wrap:pretty}
.lastrow .m{font-size:var(--fs-xs);color:var(--c-ink-3);margin-top:2px;line-height:1.3}
.lastrow .btn{min-height:40px;padding:0 var(--sp-4);pointer-events:none}
/* 游客门条（替代整屏「先进门」大卡） */
.gatebar{display:flex;align-items:center;gap:var(--sp-3);padding:10px 12px;margin-bottom:var(--sp-4);background:linear-gradient(135deg,var(--c-card-main-a),var(--c-card-main-b));border-color:var(--c-card-main-line)}
.gatebar .lk{width:40px;height:40px;border-radius:50%;background:var(--c-surface);color:var(--c-accent);display:grid;place-items:center;flex:none}
.gatebar .bd{flex:1;min-width:0;font-size:var(--fs-sm);line-height:1.4;font-weight:600}
.gatebar .bd .lnk{font-size:var(--fs-xs);font-weight:500;margin-top:2px;min-height:0}
.gatebar .btn{min-height:40px;padding:0 var(--sp-4)}
#inner.-learn .gatebar+.sec{margin-top:0}
html[data-view="tv"] .lastrow .btn,html[data-view="tv"] .gatebar .btn{min-height:var(--h-ctl-sm)}
/* 切换栏：「上册 | 下册」小分段跟在年级名后，「数学 | 英语」靠右；手机年级名小一号（一行要放两个分段器） */
.bookhead .seg.-half{margin:0 0 0 var(--sp-1)}
.bookhead .seg.-half button{min-height:30px;padding:0 10px;font-size:var(--fs-xs)}
.bookhead .seg.-half button[disabled]{opacity:.45;cursor:default}
@media(min-width:641px){.bookhead .seg.-half button{min-height:32px;padding:0 12px;font-size:var(--fs-sm)}}
.bookhead .seg.-subj{margin:0 0 0 auto}
@media(max-width:640px){.bookhead .bk{font-size:var(--fs-xl)}.bookhead .bk .i{width:20px;height:20px}}
/* 宽屏右栏「这一册在哪」：册尺 + 主题跳转（英语：年级尺 + 组跳转 + 学习范围） */
.where{padding:var(--pad-card-sm) var(--pad-card-sm) var(--sp-4)}
.where .eb{font-size:var(--fs-xs);color:var(--c-ink-3);letter-spacing:.04em;margin-bottom:var(--sp-2)}
.ruler{display:grid;grid-template-columns:repeat(9,1fr);gap:4px;margin-bottom:var(--sp-3)}
.ruler.-en{grid-template-columns:repeat(5,1fr)}
.ruler button{height:28px;border-radius:6px;background:var(--c-surface-2);font-size:11px;color:var(--c-ink-2);display:grid;place-items:center;position:relative;text-align:center}
.ruler.-en button{height:30px;font-size:12px}
.ruler button:hover{color:var(--c-accent)}
.ruler button.is-on{background:var(--c-accent);color:var(--c-accent-ink);font-weight:700}
.ruler button.-here::after{content:"";position:absolute;top:3px;right:3px;width:5px;height:5px;border-radius:50%;background:var(--c-accent)}
.ruler button.is-on.-here::after{background:var(--c-accent-ink)}
.ruler button.-none{opacity:.55}
.tlist{list-style:none;margin:0;padding:var(--sp-2) 0 0;border-top:1px solid var(--c-line)}
.tlist button{display:flex;justify-content:space-between;align-items:center;gap:8px;width:100%;min-height:36px;padding:0 10px;border-radius:8px;font-size:var(--fs-sm);color:var(--c-ink-2)}
.tlist button:hover{background:var(--c-surface-2)}
.tlist button span{color:var(--c-ink-3);font-size:var(--fs-xs);white-space:nowrap}
.tlist button.is-on{background:var(--c-accent-soft);color:var(--c-accent);font-weight:600}
.where .more{margin-top:var(--sp-2);padding:var(--sp-2) 10px 0;border-top:1px solid var(--c-line);font-size:var(--fs-xs);color:var(--c-ink-3);line-height:1.6}
.where .more .lnk{min-height:0}
.where .lvl{margin-top:0}
/* ---------- 学页一图（2026-10-05，设计包 精细化样板-学页一图-v001，方案 B「方块岛」）：一册一座方块岛，每课一格；类名同样板 map.html §3 ----------
   新增 token 只有 --c-map-z0～z3（02-新增token.md §2）：学页局部，不进全站 token；排在全站深浅色块之后，同权重时不被盖掉。 */
/* 学页一图：主题底色（四色轮换；只表示哪一片，不表示进度） */
:root,:root[data-view="phone"]{--c-map-z0:#F7F2E8;--c-map-z1:#DFEBD3;--c-map-z2:#E4E0F7;--c-map-z3:#F6DDD5}
:root[data-view="tv"],:root[data-theme="dark"]{--c-map-z0:#242B3B;--c-map-z1:#213A30;--c-map-z2:#302D52;--c-map-z3:#43292F}
@media(prefers-color-scheme:dark){:root[data-theme="auto"]{--c-map-z0:#242B3B;--c-map-z1:#213A30;--c-map-z2:#302D52;--c-map-z3:#43292F}}
:root[data-view="tv"][data-theme="light"]{--c-map-z0:#F7F2E8;--c-map-z1:#DFEBD3;--c-map-z2:#E4E0F7;--c-map-z3:#F6DDD5}
@media(prefers-color-scheme:light){:root[data-view="tv"][data-theme="auto"]{--c-map-z0:#F7F2E8;--c-map-z1:#DFEBD3;--c-map-z2:#E4E0F7;--c-map-z3:#F6DDD5}}
@media print{:root:root:root{--c-map-z0:#F7F2E8;--c-map-z1:#DFEBD3;--c-map-z2:#E4E0F7;--c-map-z3:#F6DDD5}}
/* ≥1280 两栏：岛要 776 宽（样板同一组数），学页主列放宽，右栏 320 不变 */
@media(min-width:1280px){
 html:not([data-view="tv"]) #inner.-learn{max-width:calc(776px + 32px + var(--col-side))}
 html:not([data-view="tv"]) #inner.-learn .today-cols{grid-template-columns:minmax(0,1fr) var(--col-side);column-gap:32px}
 html:not([data-view="tv"]) #inner.-learn .today-cols>.tcol-aside>*+*{margin-top:12px}
}
/* 手机：页头「学」+ 副标题并成一行（同样板），省出一行给岛，一屏放得下 */
@media(max-width:640px){#inner.-learn .statusline{display:flex;align-items:baseline;gap:10px}#inner.-learn .statusline .date{display:inline;margin-top:0}#inner.-learn .isl-info{margin-bottom:8px}}
/* 页头 → 切换栏 →「接着学」→ 岛 之间收成 12（同样板），三档岛底都落在一屏里 */
#inner.-learn .statusline,#inner.-learn .bookhead,#inner.-learn .lastrow,#inner.-learn .gatebar{margin-bottom:var(--sp-3)}
/* 「接着学」一行的骨架（learnmap 头 3 秒没到时；这时不出主按钮） */
.lastrow.-sk{cursor:default}
.lastrow.-sk .pic{background:none}
.lastrow.-sk .bone{display:block;border-radius:6px;background:linear-gradient(90deg,var(--c-surface-2),var(--c-line),var(--c-surface-2));background-size:200% 100%;animation:sk 1.6s linear infinite}
.lastrow.-sk .pic .bone{width:100%;height:100%;border-radius:inherit}
.lastrow.-sk .bd .bone{height:12px;width:40%}
.lastrow.-sk .bd .bone+.bone{height:16px;width:70%;margin-top:6px}
/* 说明栏：手机 / 平板粘在图上方（滚动容器是 #main，顶栏在它外面，所以贴 0）；电脑放右栏顶上。固定一处，不挡任何格子 */
.isl-info{position:sticky;top:0;z-index:12;min-height:92px;padding:10px 12px;margin-bottom:10px;display:flex;gap:10px;align-items:center;box-shadow:0 4px 14px rgba(37,40,62,.06)}
.isl-info .bd{flex:1;min-width:0}
.isl-info .hint{color:var(--c-ink-2);font-size:13px}
.isl-info .eb{font-size:12px;color:var(--c-ink-3)}
.isl-info .t{font-weight:700;font-size:var(--fs-md);line-height:1.35;margin:1px 0}
.isl-info .s{font-size:13px;color:var(--c-ink-2)}
.isl-info .pre{font-size:12.5px;color:var(--c-ink-2);margin-top:4px;display:flex;align-items:center;gap:6px}
.isl-info .pre i{display:inline-block;width:14px;height:10px;border:2px dashed var(--c-accent);border-radius:3px;flex:none}
.isl-info .btn{flex:none;min-height:40px;padding:0 14px;gap:4px}
.isl-tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}
.isl-tag{display:inline-flex;align-items:center;gap:3px;font-size:12px;border-radius:999px;padding:1px 8px;background:var(--c-surface-2);color:var(--c-ink-2)}
.isl-tag.-ok{background:var(--c-ok-soft);color:var(--c-ok)}.isl-tag.-on{background:var(--c-accent-soft);color:var(--c-accent)}
.isl-lg{display:flex;flex-wrap:wrap;gap:4px 12px;font-size:12px;color:var(--c-ink-3);margin-top:4px}
.isl-lg span{display:inline-flex;align-items:center;gap:4px}
.isl-lg .bdg{position:static!important;width:14px!important;height:14px!important}
.isl-lg .fr{display:inline-block;width:14px;height:10px;border:2px dashed var(--c-accent);border-radius:3px}
.tcol-aside .isl-info{position:static;margin:0;min-height:150px;flex-direction:column;align-items:stretch}
.isl-info .act{display:flex;align-items:center;gap:10px;margin-top:10px}
/* 分片（超过 90 课）*/
.isl-parts{display:flex;align-items:center;gap:8px;margin:0 0 8px;flex-wrap:wrap}
.isl-parts .seg button{min-height:32px;padding:0 12px;font-size:13px}
.isl-parts .cap{font-size:12px;color:var(--c-ink-3)}
/* 岛 */
.isl-wrap{width:100%}
.isl{position:relative;background:var(--c-map-sea);border-radius:16px;overflow:hidden;margin:0 auto;touch-action:manipulation}
.isl svg{position:absolute;left:0;top:0;display:block;pointer-events:none}
.isl-c{position:absolute;border:1px solid var(--c-map-line);border-radius:9px;padding:0;margin:0;min-height:0;cursor:pointer;overflow:hidden;text-align:left;display:block;color:var(--c-map-ink);font:inherit;transition:box-shadow .12s,opacity .12s}
.isl-c.z0{background:var(--c-map-z0)}.isl-c.z1{background:var(--c-map-z1)}.isl-c.z2{background:var(--c-map-z2)}.isl-c.z3{background:var(--c-map-z3)}
@media (hover:hover){.isl-c:hover{box-shadow:0 0 0 2px var(--c-map-ink);z-index:3}}
.isl-c.is-sel{box-shadow:0 0 0 2px var(--c-map-ink);z-index:3}
.isl-c:focus-visible{outline:3px solid var(--c-focus);outline-offset:2px;z-index:4}
.isl-c.is-cur{border:2.5px solid var(--c-accent)}
.isl-c.is-start{border:2px dashed var(--c-accent)}
.isl-c.is-pre::after{content:"";position:absolute;inset:3px;border:2px dashed var(--c-accent);border-radius:7px;pointer-events:none}
.isl-c.is-dim{opacity:.3}
.isl-c .no{position:absolute;font-variant-numeric:tabular-nums;font-weight:700;color:var(--c-map-ink);line-height:1}
.isl-c .tt{position:absolute;left:8px;right:6px;top:6px;bottom:5px;font-weight:600;line-height:1.28;overflow:hidden;overflow-wrap:anywhere;color:var(--c-map-ink)}
.isl-c .tt b{color:var(--c-map-ink);margin-right:4px;font-weight:800;font-variant-numeric:tabular-nums}
.isl-c .tt .fl{float:right;height:17px}
.isl-c .tt.-nw{left:5px;right:3px;top:4px;bottom:3px;line-height:1.2}   /* 窄格课名（小毛病打包 ①） */
.isl-c .tt.-nw b{margin-right:3px}
.isl-c img{position:absolute;display:block;object-fit:contain;border-radius:6px}
.isl-c .ph{position:absolute;border-radius:6px;display:grid;place-items:center;background:var(--c-surface-2);color:var(--c-ink-3);font-weight:700}
/* 英语词条在图下面一行（返修 10/5：不再压在图上）；位置 / 字号由 islandHtml 按格子给 */
.isl-c .wd{position:absolute;left:2px;right:2px;bottom:2px;display:flex;align-items:center;justify-content:center;color:var(--c-map-ink);font-weight:600;text-align:center;padding:0 2px;font-size:12.5px;line-height:1.15;overflow:hidden;overflow-wrap:normal;word-break:keep-all}
.bdg{position:absolute;display:grid;place-items:center;border-radius:50%}
.bdg .i{stroke-width:2.6}
.bdg.-ok{background:var(--c-ok);color:var(--c-accent-ink)}
.bdg.-on{background:var(--c-accent);color:var(--c-accent-ink)}
.bdg.-on .i{fill:currentColor;stroke:none}
.isl-c .hand{position:absolute;display:grid;place-items:center;border-radius:50%;background:var(--c-glass);color:var(--c-map-ink-2)}
.isl.-sk .isl-c{cursor:default;border-color:transparent;background:linear-gradient(90deg,var(--c-surface-2),var(--c-surface),var(--c-surface-2));background-size:200% 100%;animation:sk 1.4s linear infinite;opacity:.85}
.isl-leg{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px;padding:0;list-style:none}
.isl-leg button{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--c-line);background:var(--c-surface);color:var(--c-ink);border-radius:999px;padding:3px 10px 3px 6px;min-height:30px;font-size:12.5px;cursor:pointer}
.isl-leg button.is-on,.tlist button[data-hl].is-on{border-color:var(--c-accent);color:var(--c-accent)}
.isl-leg small,.tlist small{color:var(--c-ink-3);font-size:12px}
.tlist button[data-hl]{justify-content:flex-start;border:1px solid transparent}
.tlist button[data-hl] small{margin-left:auto;white-space:nowrap}
.sw{width:14px;height:14px;border-radius:4px;border:1px solid var(--c-map-line);flex:none;display:inline-block}
.sw.z0{background:var(--c-map-z0)}.sw.z1{background:var(--c-map-z1)}.sw.z2{background:var(--c-map-z2)}.sw.z3{background:var(--c-map-z3)}
.todo-line{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--c-ink-3);margin-top:8px}
.todo-line .i{width:13px;height:13px;flex:none}
@media (prefers-reduced-motion:reduce){.isl-c{transition:none}.isl.-sk .isl-c{animation:none}}
/* ---------- 学页一图 · 一屏（返修 2026-10-05）：电脑 ≥1024 与电视，学页整页 = 一屏、#main 不上下滚；岛的格子按可用高宽算（islandLayout），字号跟着缩。
   ≥1280 两栏照旧，右栏不滚（放不下一级一级收：-c1～-c4）；电视与 1024～1279 挂 -side：岛在左边占满高，其余在右边一栏。手机 / 平板不挂 -fit，照旧可滚 ---------- */
#inner.-learn.-fit{margin-top:-8px;margin-bottom:-56px}
html[data-view="tv"] #inner.-learn.-fit{margin-top:-16px;margin-bottom:-48px}
#inner.-learn.-fit>.statusline{position:absolute;width:1px;height:1px;margin:0;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
#inner.-learn.-fit .bookhead,#inner.-learn.-fit .lastrow,#inner.-learn.-fit .gatebar{margin-bottom:10px}
@media(max-height:820px){#inner.-learn.-fit:not(.-side) .lastrow{padding-top:8px;padding-bottom:8px}#inner.-learn.-fit:not(.-side) .lastrow .pic{width:var(--lrow-pic);height:var(--lrow-pic)}}
html:not([data-view="tv"]) #inner.-learn.-fit .today-cols{align-items:stretch}
#inner.-learn.-fit .tcol-aside{display:flex;flex-direction:column;min-height:0}
#inner.-learn.-fit .tcol-aside>#islInfo{flex:1 1 0;min-height:140px;overflow:hidden}
#inner.-learn.-fit .tcol-aside>.todo-line{margin-top:8px}
#inner.-learn.-fit .isl-info .act{margin-top:auto;padding-top:8px}
#islInfo.-f1 .isl-tags,#islInfo.-f1 .act .eb{display:none}
#islInfo.-f2 .pre{display:none}
#islInfo.-f3 .s{display:none}
/* -side：右边一栏宽 --isl-side，岛那一块绝对定位在左边（高由 islandLayout 给） */
#inner.-learn.-side{position:relative;--isl-side:280px;--isl-gap:24px}
html[data-view="tv"] #inner.-learn.-side{--isl-side:600px;--isl-gap:48px}
#inner.-learn.-side>*{width:var(--isl-side);max-width:none;margin-left:auto;margin-right:0}
#inner.-learn.-side .isl-wrap{position:absolute;left:0;top:0;width:calc(100% - var(--isl-side) - var(--isl-gap));display:flex;align-items:flex-start;justify-content:center}
#inner.-learn.-side .isl-wrap .isl{margin:0}
#inner.-learn.-side .isl-info{position:static;margin:0 0 10px;min-height:0;height:168px;flex-direction:column;align-items:stretch;overflow:hidden}
html[data-view="tv"] #inner.-learn.-side .isl-info{height:260px}
#inner.-learn.-side .isl-leg{margin-top:0}
#inner.-learn.-side>.foot{margin-top:12px;padding-top:8px}
#inner.-learn.-side>.en-tools{margin-top:8px!important}
/* 电视：格子、说明、图例的字按电视距离放大 */
html[data-view="tv"] .isl{border-radius:20px}
html[data-view="tv"] .isl-c{border-radius:12px}
html[data-view="tv"] .isl-c .tt{left:12px;right:10px;top:10px;bottom:8px}
html[data-view="tv"] .isl-info .hint,html[data-view="tv"] .isl-info .s{font-size:22px}
html[data-view="tv"] .isl-info .eb,html[data-view="tv"] .isl-info .pre,html[data-view="tv"] .isl-lg,html[data-view="tv"] .todo-line{font-size:20px}
html[data-view="tv"] .isl-info .pre i,html[data-view="tv"] .isl-lg .fr{width:20px;height:14px}
html[data-view="tv"] .isl-lg .bdg{width:20px!important;height:20px!important}
html[data-view="tv"] .isl-tag{font-size:19px;padding:2px 12px}
html[data-view="tv"] .isl-info .btn{min-height:var(--h-ctl-sm);font-size:var(--fs-sm)}
html[data-view="tv"] .isl-leg{gap:8px}
html[data-view="tv"] .isl-leg button{font-size:20px;min-height:48px;padding:4px 14px 4px 10px;gap:8px}
html[data-view="tv"] .isl-leg small{font-size:18px}
html[data-view="tv"] .isl-leg .sw{width:20px;height:20px}
html[data-view="tv"] .isl-parts .seg button{min-height:48px;font-size:20px}
html[data-view="tv"] .isl-parts .cap{font-size:18px}
/* 收：-c1 收紧间距 → -c2 折起「学习范围」说明那段、图例去掉课数 → -c3 主题清单两列 → -c4 收起册尺（切换栏的「年级 ▾」照样能换）、图例收起 */
html:not([data-view="tv"]) #inner.-learn.-fit.-c1 .today-cols>.tcol-aside>*+*{margin-top:8px}
#inner.-learn.-c1 .where{padding:12px 14px 10px}
#inner.-learn.-c1 .where .eb{margin-bottom:6px}
#inner.-learn.-c1 .ruler{margin-bottom:8px}
#inner.-learn.-c1 .tlist{padding-top:4px}
#inner.-learn.-c1 .tlist button{min-height:30px}
#inner.-learn.-c1 .foot{padding-top:6px;font-size:11.5px;line-height:1.45}
#inner.-learn.-c1 .en-tools{margin-top:6px!important}
#inner.-learn.-c1 .en-tools .lnk{min-height:0}
#inner.-learn.-side.-c1 .lastrow{padding-top:8px;padding-bottom:8px}
#inner.-learn.-side.-c1 .isl-leg{gap:4px}
#inner.-learn.-side.-c1 .isl-leg button{min-height:28px;padding:2px 8px 2px 5px}
html[data-view="tv"] #inner.-learn.-side.-c1 .isl-leg button{min-height:40px;font-size:18px}
#inner.-learn.-c2 .where .more .faint,#inner.-learn.-side.-c2 .lvl .faint{display:none}
#inner.-learn.-side.-c2 .isl-leg small{display:none}
#inner.-learn.-c3 .tlist{display:grid;grid-template-columns:1fr 1fr;column-gap:4px}
#inner.-learn.-c3 .tlist button{padding:0 6px;font-size:12.5px;gap:4px}
#inner.-learn.-c3 .tlist small{font-size:11px}
#inner.-learn.-side.-c3 .lastrow .m{display:none}
#inner.-learn.-c4 .where>.eb,#inner.-learn.-c4 .where .ruler{display:none}
#inner.-learn.-c4 .tlist{border-top:0;padding-top:0}
#inner.-learn.-side.-c4 .isl-leg{display:none}
/* 目录抽屉：册名小标签（按主题时课按册排）、课名后的「能动手」手形小标 */
.blab{padding:10px var(--sp-2) 4px var(--sp-5);font-size:var(--fs-xs);color:var(--c-ink-3);font-weight:600;letter-spacing:.04em}
.row .hand-s{display:inline-flex;flex:none;color:var(--c-accent)}
.row .hand-s .i{width:15px;height:15px}
/* 抽屉 / 左栏里的树：去卡边，行收紧，当前课淡紫底 + 左边一条竖条 */
.tree-nav .tree{border:0;border-radius:0;background:transparent;padding:0}
.tree-nav .fold>.fold-head{padding-left:var(--sp-2);padding-right:var(--sp-2);font-size:var(--fs-sm);min-height:44px}
.tree-nav .fold.-l2>.fold-head{padding-left:var(--sp-4);font-size:var(--fs-sm)}
.tree-nav .tree .row.-l3{padding-left:var(--sp-5);padding-right:var(--sp-2);border-radius:var(--r-md);min-height:40px}
.tree-nav .tree .row.-l3 .title{font-size:var(--fs-sm)}
.tree-nav .tree .row.-l3.-plain{padding-left:calc(var(--sp-5) + 26px + var(--sp-2))}
.tree-nav .tree .row.-l3.is-cur{background:var(--c-accent-soft);position:relative}
.tree-nav .tree .row.-l3.is-cur::before{content:"";position:absolute;left:0;top:8px;bottom:8px;width:3px;border-radius:2px;background:var(--c-accent)}
/* 首页「作业本上有错题？拍给我」与「我的错题」（成长后台阶段 3 · F3） */
.uw-card{margin-top:var(--sp-4)}
.uw-h{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-3);flex-wrap:wrap}
.uw-h .eyebrow{margin-bottom:0}
.uw-card .lnk,.uw-mine{background:transparent;border:0;padding:0;color:var(--c-accent);font-size:var(--fs-sm);font-weight:600;text-decoration:none;white-space:nowrap;cursor:pointer}
.uw-card>*{position:relative;z-index:1}
.uw-card .hero-art{z-index:0}
.uw-card .h2{margin-top:var(--sp-1)}
.uw-card .uw-lead{margin-top:var(--sp-2);color:var(--c-ink-2);font-size:var(--fs-md)}
.uw-acts{display:flex;align-items:center;gap:var(--sp-3);margin-top:var(--sp-3);flex-wrap:wrap}
.uw-acts>.btn,.uw-acts>.pick{flex:0 1 auto;max-width:100%}
.uw-thumb{display:flex;align-items:center;gap:var(--sp-3);margin-top:var(--sp-3);flex-wrap:wrap}
.uw-thumb img{width:88px;height:88px;object-fit:cover;border-radius:var(--r-md);border:1px solid var(--c-line)}
.uw-card .uw-ta{min-height:64px;padding:var(--sp-2) var(--sp-4);line-height:1.6;resize:vertical;display:block;width:100%;margin-top:var(--sp-3)}
.uw-line{display:flex;align-items:flex-start;gap:var(--sp-2);margin-top:var(--sp-3);padding:var(--sp-3) var(--sp-4);border-radius:var(--r-md);background:var(--c-surface-2);font-weight:600;word-break:break-word}
.uw-line .i{flex:none;width:20px;height:20px;margin-top:2px;color:var(--c-accent)}
.uw-line.-ok{background:var(--c-accent-soft)}
.uw-ask{margin-top:var(--sp-3);padding:var(--sp-3) var(--sp-4);border-radius:var(--r-md);background:var(--c-accent-soft);font-weight:600;word-break:break-word}
.uw-cands{display:flex;flex-direction:column;gap:var(--sp-2);margin-top:var(--sp-3)}
.uw-cands>.btn{width:100%;justify-content:flex-start;height:auto;min-height:var(--h-ctl);padding-top:var(--sp-2);padding-bottom:var(--sp-2)}
.uw-x{margin-top:var(--sp-3);padding-top:var(--sp-3);border-top:1px solid var(--c-line)}
.uw-x p{margin:var(--sp-1) 0 0;color:var(--c-ink-2);white-space:pre-wrap;word-break:break-word}
.uw-list{display:flex;flex-direction:column;gap:var(--sp-2)}
.uw-row{display:flex;gap:var(--sp-3);align-items:center;width:100%;text-align:left;min-height:var(--h-row);padding:var(--sp-3) var(--sp-4);border:1px solid var(--c-line);border-radius:var(--r-lg);background:var(--c-surface);cursor:pointer}
.uw-row:hover{border-color:var(--c-accent-soft-2);box-shadow:var(--sh-hover)}
.uw-row.is-open{border-color:var(--c-accent);box-shadow:0 0 0 3px var(--c-accent-soft)}
.uw-row .grow{flex:1;min-width:0}
.uw-row .title{display:block;font-weight:600;line-height:1.4;word-break:break-word}
.uw-row .meta{display:block;font-size:var(--fs-sm);color:var(--c-ink-2);margin-top:2px;word-break:break-word}
.uw-row .pill{margin-left:auto}
.uw-detail{margin-top:var(--sp-2);padding:var(--sp-3) var(--sp-4);border:1px solid var(--c-line);border-radius:var(--r-lg);background:var(--c-surface-2)}
.uw-detail .uw-line{background:var(--c-surface)}
/* ===== 错题页精细化 v001：拍照条（uwbar）+ 按课归组的清单 ===== */
.uwbar{display:flex;align-items:center;gap:var(--sp-3);padding:12px var(--pad-card);min-height:64px}
.uwbar>*{position:relative;z-index:1}
.uwbar .tile{flex:none}
.uwbar .txt{flex:1 1 auto;min-width:0}
.uwbar .txt .t{display:block;font-weight:600;line-height:1.3}
.uwbar .txt .s{display:block;font-size:var(--fs-sm);color:var(--c-ink-2);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.uwbar>.btn,.uwbar>.pick{flex:none}
.uwbar .t .-short{display:none}
@media(max-width:640px){.uwbar .t .-long{display:none}.uwbar .t .-short{display:inline}.uwbar .txt .s{display:none}.uwbar>.btn,.uwbar>.pick{padding:0 14px}}
/* 1280 两栏时这条落在 320px 右栏里，一行摆不下就整块换行：文字占一行、按钮自己占一行（照样板 .tier[data-cols] .aside .uwbar） */
#inner.-wrong .tcol-aside .uwbar{flex-wrap:wrap}
#inner.-wrong .tcol-aside .uwbar .txt{flex:1 1 160px}
#inner.-wrong .tcol-aside .uwbar .txt .t,#inner.-wrong .tcol-aside .uwbar .txt .s{white-space:normal}
#inner.-wrong .tcol-aside .uwbar>.btn,#inner.-wrong .tcol-aside .uwbar>.pick{flex:1 1 100%;justify-content:center}
.uwbar.-tall{flex-direction:column;align-items:stretch}
.uwbar .hd{display:flex;align-items:center;gap:var(--sp-3)}
.uwbar .bd{margin-top:var(--sp-2)}
.uwbar .bd .uw-ta{margin-top:var(--sp-2);min-height:56px}
.uwbar .bones{display:flex;gap:6px;margin-top:10px}
.uwbar .bones i{height:6px;border-radius:3px;background:var(--c-line);flex:1 1 0}
.uwbar .bones i:last-child{flex:0 0 40%}
.uwbar .uw-thumb{margin-top:0;align-items:center}
.uwbar .uw-thumb img{width:72px;height:90px;object-fit:contain;max-height:160px;background:var(--c-surface)}
.uwbar .uw-thumb .grow{flex:1 1 auto;min-width:0}
.uwbar .uw-cands{margin-top:var(--sp-2)}
/* ===== 错题本（2026-09-24）：分组标签、骨架小图、页脚、做题页的壳（卡 / 三点 / 顶条 / 毕业动画在组件 CSS 里）===== */
.uwbar .bd .uw-x:first-child{margin-top:0;padding-top:0;border-top:0}
.uw-page .mb-list>.sec-lab{font-size:var(--fs-xs);letter-spacing:.12em;color:var(--c-ink-3);margin:var(--sp-5) 0 var(--sp-2)}
.uw-page .mb-list>.sec-lab:first-child{margin-top:0}
.uw-page .mb-list>.card-fold,.uw-page .mb-list>.mb-allgrad{margin-top:var(--sp-4)}
.uw-page .mb-list>.mb-allgrad:first-child{margin-top:0}
.uw-page .mb-list>.mb-allgrad+.card-fold{margin-top:var(--sp-3)}
.uw-page .mb-grad .fold-body{padding-top:var(--sp-3)}
.uw-page .mb-allgrad .t{font-weight:600}
.uw-page .mb-more{text-align:center;margin-top:var(--sp-2)}
.uw-page .mb-empty{margin-top:var(--sp-3)}
.uw-page .mb-tail{margin-top:var(--sp-4)}
.uw-page .mb-card.skeleton .bone{margin-bottom:8px}
.uw-page .mb-card.skeleton .bone.-img{width:56px;height:56px;border-radius:10px;margin:0;flex:none}
.uw-page .mb-card.skeleton .grow .bone:last-child{margin-bottom:0}
.mb-box .uw-x:first-child{margin-top:0;padding-top:0;border-top:0}
.mb-box .quiet,.mb-box .faint{margin:0}
.mb-task .qbar{margin-top:var(--sp-1)}
.mb-task .qbar .qt .mb-qimg{display:block;max-width:100%;max-height:160px;object-fit:contain;border-radius:8px;margin-bottom:var(--sp-2);background:var(--c-surface)}
.mb-task .answer{margin-top:var(--sp-4)}
.mb-task .answer .input{font-size:var(--fs-lg)}
.mb-task .input.is-err{border-color:var(--c-danger)}
.od-card .od-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:var(--sp-3);margin-top:var(--sp-4)}
.od-card .od-row{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}
.od-card .od-q{font-size:var(--fs-lg);font-variant-numeric:tabular-nums;white-space:nowrap;min-width:7.5em}
.od-card .od-row .input{flex:1 1 5em;min-width:5em;max-width:9em;font-size:var(--fs-lg)}
.od-card .od-fix{color:var(--c-danger);font-size:var(--fs-sm)}
.od-card .od-mark{color:var(--c-ok)}
.mb-task .hint-in{margin-top:var(--sp-3);display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}
.mb-task .sticky-bottom{position:static;background:none;margin-top:var(--sp-5);padding:var(--sp-3) 0 0;border-top:1px solid var(--c-line);display:flex;gap:var(--sp-3);align-items:center;justify-content:flex-end;flex-wrap:wrap}
@media(max-width:640px){.mb-task .sticky-bottom{flex-direction:column;align-items:stretch}.mb-task .sticky-bottom .btn{width:100%}}
.mb-aside .quiet+.quiet{margin-top:2px}
/* 清单：「爸爸妈妈拍的作业」卡头 + 首页错题条暖底行（错题本改版后旧「按课清单」的课行 / 题行样式已删，小毛病打包 10/6） */
.card.list.-tight{padding:0}
.uw-lh{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-3);padding:var(--pad-card) var(--pad-card) 6px}
.uw-lh .faint{white-space:nowrap}
.row.-ask{background:var(--c-warn-soft);border-bottom:1px solid var(--c-warn-line)}
.row.-ask .title,.row.-ask .chev{color:var(--c-warn)}
.pwr-photo{display:block;max-width:min(100%,520px);max-height:520px;object-fit:contain;border:1px solid var(--c-line);border-radius:var(--r-md);margin-top:var(--sp-3);background:var(--c-surface-2)}
.pwr-photo[hidden],.pwr-photo-fail[hidden]{display:none!important}
.pwr-field{margin-top:var(--sp-4)}
.pwr-field .eyebrow{margin-bottom:var(--sp-1)}
.pwr-field p{white-space:pre-wrap;word-break:break-word;line-height:1.7}
.warn{color:var(--c-warn);font-size:var(--fs-sm)}
/* ===== v002 讲义式两栏：左栏 .side（电脑 216 品牌栏 / 窄电脑 64 图标条）/ 目录抽屉 / 底部操作条 / 一条进度 / 右列 ===== */
.side{display:none}
@media(min-width:641px){.side{display:flex;z-index:11;min-height:0;overflow:auto;overflow-x:hidden}}
.side .sbrand{text-decoration:none;color:inherit}
.side .nl{border:0;background:transparent;cursor:pointer;flex:none;font-family:inherit}
.side .nl .i{width:20px;height:20px}
.side .nl .a{font-size:18px;font-weight:800;line-height:20px;height:20px;width:20px;text-align:center;flex:none}
.side .nl[disabled]{opacity:.5;cursor:default;background:transparent}
.side .nl .lock{margin-left:auto}
.side .nl .dot{margin-left:auto}
.side .foot .nl .fsl{font-weight:500;color:var(--c-ink-3)}
body:has(#inner.lp2) .side .note{display:none}
@media(min-width:641px) and (max-width:1023px){
 .side{padding:16px 8px 12px;gap:4px}
 .side .sbrand{padding:0;margin-bottom:18px;justify-content:center}
 .side .sbrand>div,.side .grp,.side .note,.side .nl>span{display:none}
 .side .nl{justify-content:center;padding:0;min-height:44px;position:relative}
 .side .nl .lock{position:absolute;top:2px;right:4px;margin:0}
 .side .nl .dot{position:absolute;top:6px;right:8px;margin:0}
 .side .foot{padding-top:8px}
 .side .foot .nl{min-height:40px}}
.rail-drawer{position:absolute;left:var(--nav-w);top:0;bottom:0;width:280px;background:var(--c-surface);border-right:1px solid var(--c-line);box-shadow:var(--sh-2);z-index:10;display:none;overflow:auto;scroll-padding-top:var(--dtop-h,96px)}
@media(min-width:641px){.rail-drawer.is-open{display:block;animation:slidein var(--t-drawer) var(--ease)}}
@keyframes slidein{from{transform:translateX(-12px);opacity:0}to{transform:none;opacity:1}}
.rail-drawer .dh{position:sticky;top:0;z-index:3;display:flex;align-items:center;gap:var(--sp-2);height:48px;padding:0 var(--sp-2) 0 var(--sp-4);font-size:var(--fs-xs);color:var(--c-ink-3);background:var(--c-surface)}
.rail-drawer .dh .btn-icon{margin-left:0;width:32px;min-height:32px}
.rail-drawer .dh .btn-icon .i{width:16px;height:16px}
.rail-drawer .tree-nav{border:0;overflow:visible;padding:0 var(--sp-3) var(--sp-6)}
.rail-drawer .tn-segwrap{top:48px;padding-top:var(--sp-2)}
/* 目录抽屉 · 学科层（2026-09-23 样板 精细化样板-目录抽屉-v001）：头行右侧「数学 | 英语」分段器，只切抽屉内容；
   英语层 = 年级 → 课两层，只列做好的课；读不到 / 加载中 / 0 门三态 */
.rail-drawer .dh>span{flex:none}
.dsubj{margin-left:auto;display:flex;min-width:0}
.subj-seg{padding:3px}
.subj-seg button{min-height:32px;padding:0 12px;flex:none;font-size:var(--fs-sm)}
@media(max-width:640px){.subj-seg button{min-height:34px}}
.drawer.-tree .dhead .h3{flex:none}
.drawer .dhead .btn-icon{flex:none}
.tree-nav .tree .row.is-cur{scroll-margin:120px 0}
.tree-nav .tn-note{padding:var(--sp-4) var(--sp-2) var(--sp-2);color:var(--c-ink-3);font-size:var(--fs-xs)}
.tree-nav .tn-foot{padding:var(--sp-4) var(--sp-2) 0;color:var(--c-ink-3);font-size:var(--fs-xs);display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.tree-nav .tn-foot .lnk{font-size:var(--fs-xs);min-height:0}
.tree .zero{display:block;background:transparent;border-radius:0;padding:var(--sp-2) var(--pad-card) var(--sp-3) calc(var(--pad-card) + var(--sp-4));color:var(--c-ink-2);font-size:var(--fs-sm);line-height:1.5}
.tree .zero .lnk{margin:0 0 0 6px;display:inline-flex;min-height:0}
.tree-nav .tree .zero{padding-left:var(--sp-4);padding-right:var(--sp-2)}
.tree-nav .sk{padding:var(--sp-2)}
.tree-nav .sk .bone{height:14px;border-radius:7px;margin:14px 0;width:70%;background:linear-gradient(90deg,var(--c-surface-2),var(--c-line),var(--c-surface-2));background-size:200% 100%;animation:sk 1.6s linear infinite}
.tree-nav .sk .bone:nth-child(2){width:55%}.tree-nav .sk .bone:nth-child(3){width:62%}
.derr{margin:var(--sp-3) var(--sp-2) 0;padding:var(--sp-4);border:1px dashed var(--c-empty-line);border-radius:var(--r-lg);background:var(--c-empty-bg);text-align:center;color:var(--c-ink-2);font-size:var(--fs-sm)}
.derr .i{display:block;width:28px;height:28px;color:var(--c-ink-3);margin:0 auto var(--sp-2);stroke-width:1.4}
.derr b{display:block;color:var(--c-ink);font-size:var(--fs-md);margin-bottom:4px}
.derr .btn{margin-top:var(--sp-3);min-height:40px;font-size:var(--fs-sm)}
.tree .row .title small{font-weight:500;color:var(--c-ink-2);font-size:var(--fs-xs);margin-left:6px}
/* 学科 ≥4 个：分段器降到头行下面一整行 */
.rail-drawer .dh:has(.subj-seg.-wide),.drawer .dhead:has(.subj-seg.-wide){flex-wrap:wrap;height:auto}
.dsubj:has(.-wide){flex:1 0 100%;margin:var(--sp-2) 0 0}.subj-seg.-wide{flex:1}.subj-seg.-wide button{flex:1}
