/* Forma study shell. Light "Paper" by default; all colours come from palette tokens (palette-system.css) so the dark palettes restyle every view.
   Shell: floating pill header → home dashboard (banner, tiles, chapter table, now-studying player, week, upcoming, progress) → chapter → lesson (learn / explore / practice) → papers. */
@font-face{font-family:'DM Sans';src:url('./vendor/fonts/dm-sans.ttf') format('truetype');font-weight:100 1000;font-display:swap}
:root{--radius:20px;--radius-s:12px;--shadow:0 20px 60px -24px rgba(20,24,30,.28);--shadow-s:0 8px 24px -12px rgba(20,24,30,.22);--ease:cubic-bezier(.2,.75,.2,1);--dur:.36s;--sheet-max:1040px;--glass:color-mix(in srgb,var(--surface) 78%,transparent);--serif:Georgia,'Times New Roman',serif}
html[data-theme=dark],html[data-theme=graphite],html[data-theme=lofi],html[data-theme=midnight]{--shadow:0 24px 60px -24px rgba(0,0,0,.75);--shadow-s:0 8px 24px -12px rgba(0,0,0,.6)}
html{scroll-behavior:smooth}html[data-motion=reduced]{scroll-behavior:auto}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
body.study-body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.6 'DM Sans',system-ui,sans-serif;-webkit-font-smoothing:antialiased;min-height:100dvh}
body.study-body:before{content:'';position:fixed;inset:0;z-index:-1;pointer-events:none;background:radial-gradient(ellipse 60% 40% at 85% -10%,color-mix(in srgb,var(--accent) 14%,transparent),transparent 70%),radial-gradient(ellipse 40% 30% at 0% 60%,color-mix(in srgb,var(--accent) 7%,transparent),transparent 70%)}
body.study-body.access-locked>:not(#accessGate){display:none!important}
.study-body *{box-sizing:border-box}.study-body button,.study-body input,.study-body select,.study-body textarea{font:inherit;color:inherit}.study-body button{cursor:pointer;border:0;background:none}.study-body a{color:var(--accent);text-decoration:none}.study-body a:hover{text-decoration:underline;text-underline-offset:3px}
.study-body a.btn,.study-body a.chapter-row,.study-body a.lesson-item,.study-body .shell-nav a,.study-body .segmented a,.study-body .shell-search-results a,.study-body .bank-list a,.study-body .home-tile,.study-body a.tile-art,.study-body .home-tile-links a,.study-body .home-row,.study-body .home-list a,.study-body .player a{color:var(--ink)}.study-body a.btn-primary{color:var(--on-accent)}.study-body a.btn:hover,.study-body a.chapter-row:hover,.study-body a.lesson-item:hover,.study-body .bank-list a:hover,.study-body .home-tile:hover,.study-body .home-row:hover,.study-body .home-list a:hover,.study-body .home-tile-links a:hover{text-decoration:none}
.study-body :focus-visible{outline:3px solid var(--accent);outline-offset:3px;border-radius:8px}
[hidden]{display:none!important}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
/* ---------- floating header ---------- */
.shell-header{position:sticky;top:10px;z-index:40;display:flex;align-items:center;gap:12px;max-width:1280px;height:60px;margin:10px auto 0;padding:0 8px 0 16px;border:1px solid var(--line);border-radius:999px;background:var(--glass);backdrop-filter:blur(18px) saturate(1.3);-webkit-backdrop-filter:blur(18px) saturate(1.3);box-shadow:inset 0 1px 0 color-mix(in srgb,#fff 35%,transparent),0 12px 40px -22px rgba(0,0,0,.35);width:calc(100% - 28px)}
.shell-brand{display:flex;align-items:center;gap:9px;font-size:21px;font-weight:650;letter-spacing:-1px;color:var(--ink);white-space:nowrap}.shell-brand i{font:italic 22px var(--serif);display:grid;place-items:center;width:30px;height:30px;border-radius:9px;background:var(--accent);color:var(--on-accent);line-height:1}.shell-brand small{display:block;font:500 9.5px/1 'DM Sans';letter-spacing:1.6px;color:var(--muted);margin-top:3px}
.shell-nav{position:relative;display:flex;gap:2px;padding:3px;border:1px solid var(--line);border-radius:999px;background:color-mix(in srgb,var(--soft) 60%,transparent)}
.shell-nav a,.shell-nav button{position:relative;z-index:1;display:inline-flex;align-items:center;gap:6px;min-height:38px;padding:7px 15px;border-radius:999px;font-size:13.5px;font-weight:520;color:var(--muted);transition:color var(--dur) var(--ease)}.shell-nav a:hover,.shell-nav button:hover{color:var(--ink);text-decoration:none}.shell-nav [aria-current=page]{color:var(--ink)}
.shell-nav .nav-pill{position:absolute;z-index:0;top:3px;left:0;height:calc(100% - 6px);width:0;border-radius:999px;background:var(--surface);box-shadow:var(--shadow-s);transition:left .45s var(--ease),width .45s var(--ease);opacity:0}.shell-nav .nav-pill.on{opacity:1}
.shell-search{position:relative;margin-left:auto;flex:0 1 300px;min-width:0}.shell-search input{width:100%;min-height:40px;padding:8px 66px 8px 38px;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--ink);transition:box-shadow .3s,border-color .3s}.shell-search input:focus{outline:none;border-color:color-mix(in srgb,var(--accent) 60%,var(--line));box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 14%,transparent)}.shell-search svg{position:absolute;left:14px;top:50%;width:16px;height:16px;transform:translateY(-50%);color:var(--muted);pointer-events:none}.shell-search kbd{position:absolute;right:12px;top:50%;transform:translateY(-50%);font:500 10.5px 'DM Sans';color:var(--muted);border:1px solid var(--line);border-radius:6px;padding:2px 6px;pointer-events:none}
.shell-search-results{position:absolute;top:calc(100% + 10px);left:0;right:0;max-height:min(60dvh,440px);overflow:auto;background:var(--surface);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow);padding:6px;z-index:50}.shell-search-results a{display:block;padding:10px 12px;border-radius:12px;color:var(--ink);font-size:13.5px}.shell-search-results a small{display:block;color:var(--muted);font-size:11.5px}.shell-search-results a:hover,.shell-search-results a:focus{background:var(--soft);text-decoration:none}.shell-search-results p{margin:0;padding:10px 12px;color:var(--muted);font-size:13px}
.shell-actions{display:flex;align-items:center;gap:6px}.shell-actions .header-right{display:flex;gap:4px}.appearance-icon{border:1px solid var(--line);background:transparent;color:var(--muted);border-radius:50%;width:38px;height:38px;min-width:38px;display:grid;place-items:center;padding:9px}.appearance-icon:hover{color:var(--ink);background:var(--soft)}.appearance-icon svg{width:19px;height:19px}
#lockStudio{min-height:38px;padding:4px 12px 4px 4px;border:1px solid var(--line);border-radius:999px;background:transparent;font-size:13px;font-weight:500;display:inline-flex;align-items:center;gap:8px;transition:background .3s}#lockStudio:hover{background:var(--soft)}.avatar{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:var(--accent);color:var(--on-accent);font-size:12px;font-weight:700}
.app-utility-links{display:flex;gap:10px;font-size:11px;color:var(--muted);padding-right:6px}.app-utility-links a{color:var(--muted)}
/* ---------- primitives ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:10px 18px;border-radius:999px;border:1px solid var(--line);background:var(--surface);color:var(--ink);font-size:13.5px;font-weight:550;transition:transform var(--dur) var(--ease),background var(--dur) var(--ease),border-color var(--dur) var(--ease),box-shadow var(--dur) var(--ease);white-space:nowrap}.btn:hover{background:var(--soft);text-decoration:none}
.btn-primary{background:linear-gradient(135deg,var(--accent),color-mix(in srgb,var(--accent) 65%,var(--accent-2)));color:var(--on-accent);border-color:color-mix(in srgb,var(--accent) 70%,var(--ink));box-shadow:0 8px 24px -10px var(--accent-glow),inset 0 1px 0 color-mix(in srgb,#fff 25%,transparent)}.btn-primary:hover{background:var(--accent);transform:translateY(-1px);box-shadow:0 0 0 5px color-mix(in srgb,var(--accent) 14%,transparent),0 14px 30px -10px var(--accent-glow)}
.btn-small{min-height:36px;padding:7px 13px;font-size:12.5px}.btn-ghost{border-color:transparent;background:transparent;color:var(--muted)}.btn-ghost:hover{color:var(--ink)}.btn[aria-pressed=true]{border-color:color-mix(in srgb,var(--accent) 60%,var(--line));background:var(--accent-soft);color:var(--ink)}
.chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;border:1px solid var(--line);font-size:11.5px;color:var(--muted);background:var(--surface);white-space:nowrap}.chip b{color:var(--ink);font-weight:600}.chip.core{border-color:color-mix(in srgb,var(--accent) 55%,transparent)}.chip.supp{border-style:dashed}
.eyebrow{font-size:10.5px;letter-spacing:2px;font-weight:650;color:var(--muted);text-transform:uppercase}
em.serif,.serif{font-family:var(--serif);font-style:italic;font-weight:400;color:var(--accent);letter-spacing:-.01em}
/* ---------- views ---------- */
.view{max-width:1280px;margin:0 auto;padding:28px clamp(14px,3vw,30px) 90px}
.view-head{display:flex;align-items:end;justify-content:space-between;gap:24px;flex-wrap:wrap;margin-bottom:26px}.view-head h1{font-size:clamp(30px,4vw,46px);font-weight:600;letter-spacing:-.04em;line-height:1.08;margin:10px 0 8px}.view-head p{color:var(--muted);margin:0;max-width:640px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:24px}
/* ---------- home dashboard ---------- */
.home-banner{position:relative;height:clamp(180px,26vw,300px);border-radius:26px;overflow:hidden;border:1px solid var(--line);background:radial-gradient(ellipse 50% 90% at 10% 100%,color-mix(in srgb,var(--accent-2) 55%,transparent),transparent 70%),radial-gradient(ellipse 60% 100% at 95% 0%,color-mix(in srgb,var(--accent) 45%,transparent),transparent 70%),linear-gradient(120deg,color-mix(in srgb,var(--accent) 22%,var(--surface)),color-mix(in srgb,var(--accent-2) 18%,var(--bg)) 60%,color-mix(in srgb,var(--accent) 30%,var(--surface)));box-shadow:var(--shadow)}.home-banner:after{content:'';position:absolute;inset:0;background:radial-gradient(circle at 50% 50%,color-mix(in srgb,var(--surface) 55%,transparent),transparent 45%);pointer-events:none}
.home-banner svg{position:absolute;inset:0;width:100%;height:100%}.home-banner .cell{fill:none;stroke:color-mix(in srgb,var(--accent) 60%,transparent);stroke-width:1.2}.home-banner .cell.fill{fill:color-mix(in srgb,var(--accent-2) 28%,transparent)}.home-banner .nucleus{fill:color-mix(in srgb,var(--accent) 70%,transparent)}.home-banner .drift{animation:drift 28s ease-in-out infinite alternate}.home-banner .drift.d2{animation-duration:36s;animation-delay:-10s}.home-banner .drift.d3{animation-duration:44s;animation-delay:-20s}
.home-banner h1{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);margin:0;font:400 clamp(30px,5vw,56px)/1 var(--serif);letter-spacing:-.02em;color:var(--ink);text-shadow:0 1px 0 color-mix(in srgb,var(--surface) 60%,transparent);white-space:nowrap}.home-banner h1 em{font-style:italic;color:var(--accent)}
.home-banner .banner-tag{position:absolute;right:18px;top:16px;font-size:11px;letter-spacing:1.6px;text-transform:uppercase;color:var(--muted);background:var(--glass);border:1px solid var(--line);border-radius:999px;padding:5px 11px;backdrop-filter:blur(8px)}
.home-head{display:flex;align-items:end;justify-content:space-between;gap:20px;flex-wrap:wrap;margin:0 0 26px;padding:0 6px}.home-head .home-avatar{display:grid;place-items:center;width:78px;height:78px;margin:-46px 0 10px;border-radius:50%;border:4px solid var(--bg);background:var(--accent);color:var(--on-accent);font:600 30px 'DM Sans';box-shadow:var(--shadow-s)}.home-head h2{margin:0;font-size:clamp(26px,3vw,34px);font-weight:600;letter-spacing:-.04em}.home-head p{margin:4px 0 0;color:var(--muted);font-size:13.5px}.home-head p em{font-family:var(--serif);color:var(--ink)}.home-head .home-actions{display:flex;gap:8px;flex-wrap:wrap}
.home-tiles{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:22px}
.home-tile{display:block;position:relative;border:1px solid var(--line);border-radius:22px;background:var(--surface);overflow:hidden;transition:transform .45s var(--ease),box-shadow .45s var(--ease),border-color .4s;box-shadow:var(--shadow-s)}.home-tile:hover{transform:translateY(-4px);box-shadow:var(--shadow);border-color:color-mix(in srgb,var(--accent) 45%,var(--line))}
.tile-art{display:block;position:relative;height:150px;overflow:hidden;background:linear-gradient(150deg,color-mix(in srgb,var(--accent) 18%,var(--soft)),var(--soft))}.home-tile:nth-child(1) .tile-art{background:linear-gradient(140deg,color-mix(in srgb,var(--accent) 45%,var(--surface)),color-mix(in srgb,var(--accent-2) 55%,var(--surface)))}.home-tile:nth-child(2) .tile-art{background:radial-gradient(circle at 20% 20%,color-mix(in srgb,var(--accent-2) 70%,transparent),transparent 55%),linear-gradient(160deg,color-mix(in srgb,var(--accent) 70%,var(--ink)),color-mix(in srgb,var(--accent) 35%,var(--surface)))}.home-tile:nth-child(3) .tile-art{background:linear-gradient(150deg,color-mix(in srgb,var(--warn) 55%,var(--surface)),color-mix(in srgb,var(--accent-2) 30%,var(--surface)) 60%,color-mix(in srgb,var(--accent) 40%,var(--surface)))}.home-tile:nth-child(4) .tile-art{background:radial-gradient(circle at 80% 20%,color-mix(in srgb,var(--physics-2) 70%,transparent),transparent 50%),linear-gradient(140deg,color-mix(in srgb,var(--physics) 70%,var(--ink)),color-mix(in srgb,var(--maths) 55%,var(--surface)))}.home-tile:nth-child(4) .tile-art .pattern .ring{stroke:color-mix(in srgb,var(--physics-2) 70%,transparent)}.home-tile:nth-child(4) .tile-art .pattern .dot,.home-tile:nth-child(4) .tile-art .pattern .glyph{fill:color-mix(in srgb,var(--physics-2) 85%,#fff)}.tile-art svg.thumb{position:absolute;left:50%;top:50%;width:150%;height:auto;transform:translate(-50%,-44%);transition:transform 1.2s var(--ease)}.home-tile:hover .tile-art svg.thumb{transform:translate(-50%,-44%) scale(1.06)}.tile-art svg.pattern{position:absolute;inset:0;width:100%;height:100%}.tile-art .pattern .ring{fill:none;stroke:color-mix(in srgb,var(--accent-2) 70%,transparent);stroke-width:1.2}.tile-art .pattern .dot{fill:var(--accent-2)}.tile-art .pattern .glyph{font:400 64px var(--serif);fill:color-mix(in srgb,var(--surface) 85%,transparent)}
.tile-art:after{content:'';position:absolute;inset:0;background:linear-gradient(180deg,transparent 30%,color-mix(in srgb,var(--ink) 55%,transparent))}
.tile-art h3{position:absolute;z-index:1;left:0;right:0;bottom:14px;margin:0;text-align:center;font:400 30px/1 var(--serif);letter-spacing:-.01em;color:#fff;text-shadow:0 2px 14px rgba(0,0,0,.45)}
.home-tile-links{display:grid;gap:2px;padding:12px 10px 12px}.home-tile-links a{display:flex;align-items:center;gap:9px;padding:7px 10px;border-radius:10px;font-size:13px;color:var(--ink)}.home-tile-links a:hover{background:var(--soft)}.home-tile-links a i{display:grid;place-items:center;width:20px;height:20px;border-radius:6px;background:var(--accent-soft);color:var(--accent);font-style:normal;font-size:11px}.home-tile-links a small{margin-left:auto;color:var(--muted);font-size:11px}
.home-grid{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(300px,.9fr);gap:16px;margin-bottom:16px}.home-grid-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-bottom:22px}
.home-panel{border:1px solid var(--line);border-radius:22px;background:var(--surface);padding:18px 20px;min-width:0}.home-panel>header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;flex-wrap:wrap}.home-panel h3{margin:0;font-size:15px;font-weight:600;letter-spacing:-.2px;display:flex;align-items:center;gap:8px}.home-panel h3 i{font-style:normal;font-size:14px;color:var(--muted)}.home-panel .panel-tabs{display:flex;gap:2px;padding:3px;border:1px solid var(--line);border-radius:999px}.home-panel .panel-tabs button{min-height:30px;padding:4px 11px;border-radius:999px;font-size:12px;color:var(--muted)}.home-panel .panel-tabs button[aria-pressed=true]{background:var(--soft);color:var(--ink)}
.home-table{display:grid;gap:2px}.home-table .thead,.home-row{display:grid;grid-template-columns:22px minmax(0,1fr) 64px 72px 140px;gap:12px;align-items:center;padding:9px 10px;border-radius:12px;font-size:13px}.home-table .thead{font-size:11px;letter-spacing:1.2px;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--line);border-radius:0;padding-bottom:10px;margin-bottom:4px}.home-row{border:1px solid transparent;transition:background .3s,border-color .3s}.home-row:hover{background:var(--soft)}.home-row .dot{width:12px;height:12px;border-radius:50%;border:2px solid var(--line)}.home-row .dot.part{border-color:var(--accent);background:linear-gradient(90deg,var(--accent) 50%,transparent 50%)}.home-row .dot.done{background:var(--accent);border-color:var(--accent)}.home-row .dot.revisit{background:var(--warn);border-color:var(--warn)}.home-row b{font-weight:550;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.home-row b small{color:var(--muted);font-weight:500;margin-right:8px}.home-row .num{color:var(--muted);font-variant-numeric:tabular-nums}.home-row .bar{display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--muted)}.home-row .bar span{flex:1;height:6px;border-radius:6px;background:var(--soft);overflow:hidden}.home-row .bar span i{display:block;height:100%;width:var(--p,0%);border-radius:6px;background:var(--accent);transition:width 1s var(--ease)}.home-row .badge{font-size:10.5px;color:var(--warn);border:1px solid color-mix(in srgb,var(--warn) 50%,transparent);border-radius:999px;padding:1px 7px;margin-left:6px;white-space:nowrap}
.player{display:grid;gap:12px}.player .player-art{position:relative;height:150px;border-radius:16px;overflow:hidden;background:linear-gradient(150deg,color-mix(in srgb,var(--accent-2) 40%,var(--surface)),color-mix(in srgb,var(--accent) 30%,var(--surface)));border:1px solid var(--line)}.player .player-art svg.thumb{position:absolute;left:50%;top:50%;width:140%;height:auto;transform:translate(-50%,-44%)}.player .player-art svg.pattern{position:absolute;inset:0;width:100%;height:100%}.player .player-art .pattern .ring{fill:none;stroke:color-mix(in srgb,var(--accent) 50%,transparent);stroke-width:1.2}.player .player-art .pattern .dot{fill:var(--accent)}.player .player-art .pattern .glyph{font:400 64px var(--serif);fill:color-mix(in srgb,var(--accent) 70%,transparent)}
.player .player-art .live{position:absolute;left:12px;top:12px;font-size:10.5px;letter-spacing:1.4px;text-transform:uppercase;padding:4px 9px;border-radius:999px;background:var(--glass);border:1px solid var(--line);backdrop-filter:blur(8px);color:var(--ink);display:flex;align-items:center;gap:6px}.player .live i{width:6px;height:6px;border-radius:50%;background:var(--accent);box-shadow:0 0 10px var(--accent);animation:pulse 2.4s ease-in-out infinite}
.player h4{margin:0;font-size:17px;font-weight:600;letter-spacing:-.3px;line-height:1.3}.player p{margin:3px 0 0;font-size:12.5px;color:var(--muted)}
.player .player-bar{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}.player .player-bar span{height:5px;border-radius:5px;background:var(--soft);overflow:hidden}.player .player-bar span i{display:block;height:100%;width:var(--p,0%);background:var(--accent);border-radius:5px;transition:width 1s var(--ease)}
.player .controls{display:flex;align-items:center;justify-content:center;gap:10px}.player .controls a{display:grid;place-items:center;width:44px;height:44px;border-radius:50%;border:1px solid var(--line);color:var(--ink);transition:background .3s,transform .3s var(--ease)}.player .controls a:hover{background:var(--soft);transform:scale(1.06)}.player .controls a.main{width:56px;height:56px;background:var(--accent);color:var(--on-accent);border-color:transparent;box-shadow:0 10px 24px -10px var(--accent-glow)}.player .controls svg{width:18px;height:18px}.player .controls a.main svg{width:22px;height:22px}.player .controls a[aria-disabled=true]{opacity:.35;pointer-events:none}
.home-list{display:grid;gap:3px}.home-list a{display:grid;grid-template-columns:16px minmax(0,1fr) auto;gap:10px;align-items:center;padding:8px 10px;border-radius:10px;font-size:13px}.home-list a:hover{background:var(--soft)}.home-list a .dot{width:9px;height:9px;border-radius:50%;border:2px solid var(--line)}.home-list a .dot.covered{background:var(--accent);border-color:var(--accent)}.home-list a .dot.revisit{background:var(--warn);border-color:var(--warn)}.home-list a span.t{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.home-list a small{color:var(--muted);font-size:11px;white-space:nowrap}.home-list .label{font-size:11px;letter-spacing:1.2px;text-transform:uppercase;color:var(--muted);padding:10px 10px 4px}.home-list .empty{padding:8px 10px;font-size:12.5px;color:var(--muted)}
.week{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}.week div{display:grid;gap:6px;justify-items:center;padding:10px 4px;border-radius:12px;border:1px solid var(--line);font-size:11px;color:var(--muted)}.week div.today{border-color:color-mix(in srgb,var(--accent) 60%,var(--line));background:var(--accent-soft)}.week div b{display:grid;place-items:center;width:30px;height:30px;border-radius:50%;background:var(--soft);font-size:12.5px;color:var(--ink);font-weight:600}.week div.active b{background:var(--accent);color:var(--on-accent)}.week-note{margin:12px 0 0;font-size:12.5px;color:var(--muted)}
.stat-rows{display:grid;gap:12px}.stat-row{display:grid;gap:6px}.stat-row header{display:flex;justify-content:space-between;align-items:baseline;font-size:12.5px;color:var(--muted)}.stat-row header b{font-size:20px;font-weight:600;letter-spacing:-.5px;color:var(--ink)}.stat-row header b small{font-size:12px;color:var(--muted);font-weight:500;margin-left:3px}.stat-row progress{display:block;width:100%;height:7px;border:0;border-radius:7px;overflow:hidden;accent-color:var(--accent);background:var(--soft)}.stat-row progress::-webkit-progress-bar{background:var(--soft)}.stat-row progress::-webkit-progress-value{background:var(--accent);border-radius:7px}
.scope-note{margin-top:6px;padding:16px 20px;border:1px dashed var(--line);border-radius:16px;color:var(--muted);font-size:12.5px;line-height:1.7}
/* legacy chapter view pieces */
.resume-card{display:grid;grid-template-columns:1fr auto;gap:20px;align-items:center;margin-bottom:26px}.resume-card h2{font-size:22px;font-weight:600;letter-spacing:-.6px;margin:6px 0 4px}.resume-card p{color:var(--muted);margin:0;font-size:13.5px}
.chapter-list{display:grid;gap:10px}.chapter-row{display:grid;grid-template-columns:54px 1fr auto;gap:18px;align-items:center;padding:18px 22px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);color:var(--ink);transition:border-color var(--dur) var(--ease),transform var(--dur) var(--ease)}.chapter-row:hover{border-color:color-mix(in srgb,var(--accent) 50%,var(--line));transform:translateY(-2px);text-decoration:none}.chapter-row .num{font-size:26px;font-weight:600;letter-spacing:-1px;color:var(--muted)}.chapter-row h3{margin:0 0 4px;font-size:18px;font-weight:600;letter-spacing:-.4px}.chapter-row p{margin:0;font-size:12.5px;color:var(--muted)}
.lesson-list{display:grid;gap:6px}.lesson-item{display:grid;grid-template-columns:16px 1fr auto;gap:14px;align-items:center;padding:14px 18px;border:1px solid var(--line);border-radius:16px;background:var(--surface);color:var(--ink);transition:border-color var(--dur) var(--ease),transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease)}.lesson-item:hover{border-color:color-mix(in srgb,var(--accent) 55%,var(--line));text-decoration:none;transform:translateY(-2px);box-shadow:var(--shadow-s)}.lesson-item .dot{width:10px;height:10px;border-radius:50%;border:2px solid var(--line)}.lesson-item .dot.covered{background:var(--accent);border-color:var(--accent)}.lesson-item .dot.revisit{background:var(--warn);border-color:var(--warn)}.lesson-item strong{font-weight:550}.lesson-item small{display:block;color:var(--muted);font-size:12px;margin-top:2px}.lesson-item .objs{font-size:11.5px;color:var(--muted);white-space:nowrap}
/* ---------- lesson ---------- */
.lesson-head{margin-bottom:18px}.lesson-head .crumbs{display:flex;gap:8px;align-items:center;font-size:12.5px;color:var(--muted);flex-wrap:wrap}.lesson-head h1{font-size:clamp(28px,3.4vw,42px);font-weight:600;letter-spacing:-.04em;line-height:1.1;margin:10px 0 10px}.lesson-meta{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.lesson-tools{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}
.segmented{position:sticky;top:82px;z-index:30;display:inline-flex;gap:3px;padding:4px;border:1px solid var(--line);border-radius:999px;background:var(--glass);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:var(--shadow-s);margin:12px 0 22px}.segmented a{min-height:40px;padding:8px 20px;border-radius:999px;display:inline-flex;align-items:center;font-size:13.5px;font-weight:550;color:var(--muted);transition:background var(--dur) var(--ease),color var(--dur) var(--ease)}.segmented a[aria-current=page]{background:linear-gradient(135deg,var(--accent),color-mix(in srgb,var(--accent) 65%,var(--accent-2)));color:var(--on-accent);box-shadow:0 6px 18px -8px var(--accent-glow)}.segmented a:hover{text-decoration:none;color:var(--ink)}.segmented a[aria-current=page]:hover{color:var(--on-accent)}
.lesson-grid{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:24px;align-items:start}.lesson-side{position:sticky;top:150px;display:grid;gap:14px}.lesson-side .card{padding:18px 20px}.lesson-side h4{margin:0 0 8px;font-size:11px;letter-spacing:1.6px;text-transform:uppercase;color:var(--muted)}.lesson-side ol{margin:0;padding-left:18px;font-size:13px;color:var(--muted);line-height:1.8}.lesson-side ol a{color:var(--ink)}
.section{margin:0 0 20px;padding:26px 28px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);scroll-margin-top:150px;box-shadow:var(--shadow-s)}.section h2{display:flex;align-items:center;gap:12px;margin:0 0 14px;font-size:21px;font-weight:600;letter-spacing:-.5px}.section h2 .n{display:grid;place-items:center;width:28px;height:28px;border-radius:50%;background:var(--accent-soft);color:var(--accent);font-size:12px;font-weight:650;flex-shrink:0}.section p{line-height:1.75}.section>p:first-of-type{margin-top:0}
.objective-list{list-style:none;margin:0 0 14px;padding:0;display:grid;gap:8px}.objective-list li{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:start;padding:10px 12px;border-radius:12px;background:var(--soft);font-size:14px;line-height:1.55}.objective-list .tier{font-size:10px;letter-spacing:1px;padding:3px 7px;border-radius:6px;background:var(--surface);color:var(--muted);white-space:nowrap;margin-top:2px}.objective-list .tier.s{color:var(--accent);border:1px dashed var(--accent)}.objective-list .id{font-weight:650;color:var(--muted);font-size:12px}
.why{padding:14px 18px;border-left:3px solid var(--accent);background:var(--accent-soft);border-radius:0 14px 14px 0;font-size:14px}
/* figure */
.sheet-frame{position:relative;background:#fcfcfa;border:1px solid var(--line);border-radius:16px;overflow:hidden;box-shadow:var(--shadow-s)}.sheet-frame svg{display:block;width:100%;height:auto;font-family:'DM Sans',system-ui,sans-serif}.sheet-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:12px 0}.sheet-toolbar .spacer{flex:1}.sheet-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}
.fig-part{cursor:pointer;outline:none}.fig-part:hover path,.fig-part:hover circle,.fig-part:hover rect,.fig-part:hover ellipse{filter:brightness(1.07)}.fig-part:focus-visible{outline:none}.fig-part:focus-visible path{stroke:#1e8f7a!important}.fig-part.is-selected path,.fig-part.is-selected ellipse,.fig-part.is-selected circle,.fig-part.is-selected rect{filter:drop-shadow(0 0 3px #1e8f7a) drop-shadow(0 0 1px #1e8f7a)}.fig-callout{cursor:pointer}.fig-callout text{paint-order:stroke;stroke:#fcfcfa;stroke-width:3px;stroke-linejoin:round}
.sheet-info{min-height:52px;margin-top:10px;padding:12px 16px;border-radius:14px;background:var(--soft);font-size:14px;line-height:1.65}.sheet-info b{display:block;margin-bottom:2px}.sheet-info.quiet{color:var(--muted)}
.sheet-large{position:fixed;inset:0;z-index:100;background:var(--bg);display:grid;grid-template-rows:auto 1fr;animation:view-in .3s var(--ease)}.sheet-large .sheet-large-bar{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--line)}.sheet-large .sheet-large-bar .spacer{flex:1}.sheet-large .sheet-large-body{overflow:auto;padding:12px;display:grid;place-items:center}.sheet-large .sheet-large-body svg{width:min(100%,1400px);max-height:none;background:#fcfcfa;border-radius:14px}
.stepper{display:grid;grid-template-columns:auto 1fr auto;gap:14px;align-items:center;margin-top:14px}.stepper .step-text{font-size:14px}.stepper .step-text b{display:block;margin-bottom:3px}.stepper .step-count{font-size:11px;letter-spacing:1.5px;color:var(--muted);text-transform:uppercase}.step-dots{display:flex;gap:6px;margin-top:10px;flex-wrap:wrap}.step-dots button{min-width:34px;min-height:34px;border-radius:50%;border:1px solid var(--line);background:var(--surface);font-size:12px;color:var(--muted);transition:transform .3s var(--ease),background .3s}.step-dots button:hover{transform:scale(1.08)}.step-dots button[aria-current=step]{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}
.controls-row{display:flex;flex-wrap:wrap;gap:12px;margin:10px 0}.controls-row label{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--muted)}.controls-row select{min-height:38px;padding:6px 10px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--ink);font-size:13px}
.mistake{display:grid;grid-template-columns:auto 1fr;gap:14px;padding:18px 20px;border-radius:16px;background:color-mix(in srgb,var(--warn) 12%,var(--surface));border:1px solid color-mix(in srgb,var(--warn) 45%,var(--line))}.mistake .mark{font-size:22px}.mistake p{margin:0;font-size:14.5px;line-height:1.7}
.recall-game{display:grid;gap:12px}.recall-game .prompt{font-size:17px;font-weight:600}.recall-game .feedback{min-height:24px;font-size:14px;color:var(--muted)}.recall-game .feedback.ok{color:var(--ok);font-weight:600}.recall-game .feedback.no{color:var(--danger);font-weight:600}
.question-card{margin-top:14px;padding:20px;border:1px solid var(--line);border-radius:16px;background:var(--surface)}.question-card header{display:flex;justify-content:space-between;gap:12px;align-items:start;flex-wrap:wrap}.question-card h3{margin:0;font-size:16.5px;font-weight:600;line-height:1.5}.question-card .marks{white-space:nowrap;font-size:12px;color:var(--muted);padding-top:3px}.question-card textarea{display:block;width:100%;min-height:120px;margin:12px 0;padding:12px 14px;border:1px solid var(--line);border-radius:14px;background:var(--soft);color:var(--ink);line-height:1.7;resize:vertical;transition:box-shadow .3s,border-color .3s}.question-card textarea:focus,.deeper textarea:focus{outline:none;border-color:color-mix(in srgb,var(--accent) 60%,var(--line));box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 14%,transparent)}.question-card .actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.question-card .status{font-size:13px;color:var(--accent)}
.mark-points{display:grid;gap:10px;margin:14px 0 6px;padding-top:12px;border-top:1px solid var(--line)}.mark-points label{display:grid;grid-template-columns:20px 1fr;gap:12px;align-items:start;font-size:14px;line-height:1.6}.mark-points input{width:18px;height:18px;margin-top:3px;accent-color:var(--ok)}.mark-points label:has(input:checked){color:var(--ok)}.reasoning{font-size:13px;color:var(--muted);line-height:1.7;margin-top:10px}.reasoning b{color:var(--ink)}.errors{margin:8px 0 0;padding-left:18px;font-size:13px;color:var(--muted)}.question-table{overflow:auto;margin:10px 0}.question-table table{border-collapse:collapse;width:100%;font-size:13px}.question-table th,.question-table td{padding:8px 10px;border-bottom:1px solid var(--line);text-align:left}.question-table caption{text-align:left;font-size:11.5px;color:var(--muted);padding-bottom:8px}
.mcq{display:grid;gap:8px;margin-top:12px}.mcq button{text-align:left;padding:12px 16px;border:1px solid var(--line);border-radius:14px;background:var(--soft);font-size:14px;min-height:46px;transition:border-color .3s,transform .3s var(--ease)}.mcq button:hover{border-color:var(--accent);transform:translateX(3px)}.mcq button.right{border-color:var(--ok);background:color-mix(in srgb,var(--ok) 16%,var(--surface));box-shadow:0 0 0 3px color-mix(in srgb,var(--ok) 22%,transparent)}.mcq button.wrong{border-color:var(--danger);background:color-mix(in srgb,var(--danger) 12%,var(--surface));box-shadow:0 0 0 3px color-mix(in srgb,var(--danger) 20%,transparent)}.mcq button.right:after{content:' ✓';color:var(--ok);font-weight:700}.mcq button.wrong:after{content:' ✕';color:var(--danger);font-weight:700}
.status-buttons{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.status-buttons .btn[aria-pressed=true].covered{border-color:var(--accent);background:var(--accent-soft)}.status-buttons .btn[aria-pressed=true].revisit{border-color:var(--warn);background:color-mix(in srgb,var(--warn) 18%,var(--surface))}
.deeper details{border-top:1px solid var(--line);padding:14px 0}.deeper details:first-of-type{border-top:0}.deeper summary{cursor:pointer;font-weight:600;font-size:15px;list-style:none;display:flex;justify-content:space-between;align-items:center;min-height:36px}.deeper summary::-webkit-details-marker{display:none}.deeper summary::after{content:'+';color:var(--muted);font-size:20px;transition:transform .4s var(--ease)}.deeper details[open] summary::after{content:'+';transform:rotate(45deg)}.deeper textarea{display:block;width:100%;min-height:150px;padding:12px 14px;border:1px solid var(--line);border-radius:14px;background:var(--soft);color:var(--ink);line-height:1.7;resize:vertical;margin:8px 0}.deeper .refs{display:grid;gap:8px;font-size:13.5px}.deeper .refs a{word-break:break-word}
.exam-revision{font-size:14.5px;line-height:1.8;max-width:760px}.exam-revision .revision-intro{display:none}.exam-revision h3{font-size:17px;margin:18px 0 8px}.exam-revision ul,.exam-revision ol{padding-left:22px}.exam-revision li{margin:0 0 10px}.revision-table-scroll{overflow:auto;border:1px solid var(--line);border-radius:12px;margin:14px 0}.revision-table-scroll table{border-collapse:collapse;min-width:480px;width:100%;font-size:13px}.revision-table-scroll th,.revision-table-scroll td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--line)}.revision-table-scroll thead{background:var(--soft)}.exam-revision .revision-mistake,.exam-revision .revision-recall{display:none}
.cards-deck{display:grid;gap:10px}.flashcard{display:block;width:100%;min-height:150px;padding:22px;border:1px solid var(--line);border-radius:16px;background:var(--soft);text-align:left;font-size:17px;line-height:1.6;font-weight:500;transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease)}.flashcard:hover{transform:translateY(-2px);box-shadow:var(--shadow-s)}.flashcard small{display:block;font-size:11px;letter-spacing:1.5px;color:var(--muted);margin-bottom:8px}.flashcard.knew{border-color:var(--ok);background:color-mix(in srgb,var(--ok) 14%,var(--surface))}.flashcard.missed{border-color:var(--danger);background:color-mix(in srgb,var(--danger) 12%,var(--surface))}.card-rate .btn.ok[aria-pressed=true]{border-color:var(--ok);background:color-mix(in srgb,var(--ok) 16%,var(--surface));color:var(--ok)}.card-rate .btn.no[aria-pressed=true]{border-color:var(--danger);background:color-mix(in srgb,var(--danger) 14%,var(--surface));color:var(--danger)}.card-score{font-size:12.5px;color:var(--muted);margin-left:auto}
.lesson-nav{display:flex;justify-content:space-between;gap:12px;margin-top:10px;flex-wrap:wrap}
/* explore */
.explore-layout{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:20px;align-items:start}.explore-side{display:grid;gap:14px;position:sticky;top:150px}.parts-list{display:grid;gap:4px;max-height:60dvh;overflow:auto}.parts-list button{display:grid;grid-template-columns:26px 1fr;gap:10px;align-items:center;text-align:left;padding:8px 10px;border-radius:10px;font-size:13.5px}.parts-list button:hover{background:var(--soft)}.parts-list button[aria-pressed=true]{background:var(--accent-soft)}.parts-list .n{display:grid;place-items:center;width:24px;height:24px;border-radius:50%;background:var(--soft);font-size:11px;color:var(--muted)}
.rep-switch{display:flex;flex-wrap:wrap;gap:6px}.three-host{position:relative;min-height:420px;border:1px solid var(--line);border-radius:16px;background:radial-gradient(ellipse at 50% 40%,var(--soft),transparent 70%);overflow:hidden}.three-host canvas{display:block;width:100%;height:100%;touch-action:pan-y;cursor:grab}.three-host .excretion-three{height:520px}.three-tools{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0}.three-note{font-size:12.5px;color:var(--muted);line-height:1.6}.three-note a{color:var(--accent)}
.year-diagram{width:100%;height:auto;background:#fff;border-radius:12px;border:1px solid #dce2e8;padding:10px;color:#202b38}.year-diagram text{font-family:'DM Sans',system-ui,sans-serif;paint-order:stroke;stroke:#fff;stroke-width:3px}
/* papers */
.papers-intro{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:22px}.paper-library,.online-paper-index{font-size:14px}.paper-heading h3{margin:6px 0 8px;font-size:22px;letter-spacing:-.6px}.paper-heading p{color:var(--muted);margin:0}.paper-filters,.year-practice-modes,.paper-reader-tools{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:14px 0}.paper-filters label{display:grid;gap:4px;font-size:12px;color:var(--muted)}.paper-library select,.paper-library input,.online-paper-index select{min-height:40px;padding:7px 10px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--ink);font-size:13px;max-width:100%}.year-practice-modes button,.paper-reader-tools button,.paper-library .secondary,.online-reference a,.paper-heading a{display:inline-flex;align-items:center;min-height:38px;padding:7px 12px;border:1px solid var(--line);border-radius:999px;background:var(--surface);font-size:12.5px;color:var(--ink)}.year-practice-modes [aria-pressed=true]{border-color:var(--accent);background:var(--accent-soft)}.online-results{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}.online-reference{padding:18px;border:1px solid var(--line);border-radius:16px;background:var(--surface);transition:transform .4s var(--ease),box-shadow .4s}.online-reference:hover{transform:translateY(-2px);box-shadow:var(--shadow-s)}.online-reference h4{margin:0 0 6px;font-size:16px}.online-reference p{margin:0 0 6px;font-size:12.5px;color:var(--muted)}.online-tags{display:flex;flex-wrap:wrap;gap:5px}.online-tags span{font-size:10.5px;padding:2px 7px;border:1px solid var(--line);border-radius:20px}.online-reference>div{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.online-count,.paper-status,.year-note,.paper-empty,.paper-save-status,.paper-render-status{font-size:12.5px;color:var(--muted)}.paper-import{padding:16px;border:1px dashed var(--line);border-radius:16px;margin:12px 0}.paper-import summary{cursor:pointer;font-weight:600}.paper-form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;margin:12px 0}.paper-list{display:grid;gap:8px;margin:14px 0}.paper-item{text-align:left;justify-content:flex-start}.paper-page{max-width:100%;overflow:auto;max-height:75vh;background:var(--soft);border-radius:12px;padding:10px}.paper-page canvas{display:block;margin:auto;background:#fff}.paper-answer{display:block;width:100%;min-height:120px;padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--soft);color:var(--ink);margin-top:8px}.paper-answer-label{display:block;margin-top:14px;font-size:13px;color:var(--muted)}.paper-reader{margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}
.bank-list{display:grid;gap:10px}.bank-list a{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:center;padding:14px 18px;border:1px solid var(--line);border-radius:16px;background:var(--surface);color:var(--ink);transition:transform .4s var(--ease),border-color .3s}.bank-list a:hover{border-color:var(--accent);text-decoration:none;transform:translateY(-2px)}.bank-list small{display:block;color:var(--muted);font-size:12px;margin-top:3px}
/* toast, loading */
.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%,20px);opacity:0;padding:12px 18px;border-radius:999px;background:var(--ink);color:var(--bg);font-size:13.5px;box-shadow:var(--shadow);transition:opacity .35s,transform .45s var(--ease);z-index:120;pointer-events:none}.toast.visible{opacity:1;transform:translate(-50%,0)}
.loading-row{display:grid;place-items:center;min-height:200px;color:var(--muted)}
/* ---------- motion ---------- */
@keyframes view-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@keyframes drift{to{transform:translate(30px,-18px) rotate(8deg)}}@keyframes pulse{50%{opacity:.3}}
html[data-vt=route]::view-transition-old(root){animation:vt-out .22s ease both}html[data-vt=route]::view-transition-new(root){animation:vt-in .34s cubic-bezier(.2,.75,.2,1) both}@keyframes vt-out{to{opacity:0;transform:translateY(-6px)}}@keyframes vt-in{from{opacity:0;transform:translateY(10px)}}
html[data-motion=reduced] .study-body *,html[data-motion=reduced] .study-body *::before,html[data-motion=reduced] .study-body *::after{animation:none!important;transition:none!important}@media(prefers-reduced-motion:reduce){.study-body *,.study-body *::before,.study-body *::after{animation:none!important;transition:none!important}}
html[data-reading=large] .section p,html[data-reading=large] .objective-list li,html[data-reading=large] .question-card h3,html[data-reading=large] .mark-points label,html[data-reading=large] .exam-revision{font-size:17px;line-height:1.8}
/* ---------- responsive ---------- */
@media(max-width:1180px){.home-tiles{grid-template-columns:repeat(2,minmax(0,1fr))}.home-grid{grid-template-columns:1fr}.home-grid-3{grid-template-columns:1fr 1fr}}
@media(max-width:1100px){.shell-search kbd{display:none}.shell-search input{padding-right:14px}.lesson-grid,.explore-layout{grid-template-columns:1fr}.lesson-side,.explore-side{position:static}.shell-search{flex-basis:220px}}
@media(max-width:860px){.shell-header{top:8px;height:auto;flex-wrap:wrap;padding:8px 10px;gap:8px;border-radius:26px;width:calc(100% - 16px);margin-top:8px}.shell-brand small{display:none}.shell-nav{order:3;width:100%;justify-content:space-between}.shell-nav a,.shell-nav button{flex:1;justify-content:center;padding:8px 6px;font-size:12.5px}.shell-search{order:2;flex:1 1 140px}.shell-search kbd{display:none}.shell-actions{margin-left:auto}#lockStudio span.txt{display:none}#lockStudio{padding:4px}.app-utility-links{display:none}
 .home-head .home-avatar{width:64px;height:64px;font-size:24px;margin-top:-40px}.home-banner h1{font-size:clamp(26px,7vw,40px);white-space:normal;text-align:center;width:90%}.home-grid-3{grid-template-columns:1fr}.home-table .thead{display:none}.home-row{grid-template-columns:18px minmax(0,1fr) 110px}.home-row .num{display:none}
 .resume-card{grid-template-columns:1fr}.chapter-row{grid-template-columns:40px 1fr;gap:12px;padding:16px}.chapter-row .num{font-size:20px}.segmented{top:0;width:100%;display:flex}.segmented a{flex:1;justify-content:center;padding:8px 6px}.section{padding:20px 18px;scroll-margin-top:90px}.lesson-item{grid-template-columns:14px 1fr}.lesson-item .objs{grid-column:2;white-space:normal}.papers-intro{grid-template-columns:1fr}.stepper{grid-template-columns:1fr;gap:10px}.stepper .btn{width:100%}.view{padding-bottom:70px}}
@media(max-width:540px){.home-tiles{grid-template-columns:1fr 1fr;gap:10px}.tile-art{height:110px}.tile-art h3{font-size:22px}.home-tile-links a{font-size:12px;padding:6px 8px}.home-tile-links a small{display:none}.home-panel{padding:16px}.week{gap:4px}.week div{padding:8px 2px}.week div b{width:26px;height:26px}.view-head h1{font-size:28px}.lesson-head h1{font-size:26px}.sheet-toolbar .btn-small{padding:7px 9px;font-size:12px}.question-card{padding:16px}.mistake{grid-template-columns:1fr}}
@media print{.shell-header,.segmented,.lesson-tools,.sheet-toolbar,.lesson-nav,.status-buttons,.lesson-side{display:none!important}.view{padding:0}.section{break-inside:avoid;border:0;padding:0 0 16px}body.study-body{background:#fff;color:#111}}
/* ---------- settings + appearance dialogs (markup from settings.js and theme.js) ---------- */
.study-body dialog{border:1px solid var(--line);border-radius:24px;background:var(--surface);color:var(--ink);padding:30px;box-shadow:var(--shadow)}.study-body dialog::backdrop{background:rgba(10,12,16,.45);backdrop-filter:blur(8px)}.study-body dialog h2{font-size:26px;letter-spacing:-.8px;margin:12px 0}.study-body dialog p{color:var(--muted)}.study-body .modal-close{position:absolute;right:16px;top:14px;width:36px;height:36px;border:1px solid var(--line);border-radius:50%;background:transparent;color:var(--ink);font-size:22px;display:grid;place-items:center}
.study-body .primary,.study-body .secondary{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:42px;padding:9px 16px;border-radius:999px;border:1px solid var(--line);background:var(--surface);color:var(--ink);font-size:13.5px;font-weight:550;text-decoration:none}.study-body .primary{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}
.settings-dialog{width:min(880px,calc(100vw - 32px));max-width:880px;max-height:90dvh;overflow:auto}.settings-intro{font-size:13px;margin:0 0 24px}.settings-layout{display:grid;grid-template-columns:168px minmax(0,1fr);gap:30px}.settings-tabs{display:flex;flex-direction:column;gap:6px;border-right:1px solid var(--line);padding-right:16px}.settings-tabs button{text-align:left;min-height:42px;padding:9px 12px;border-radius:12px;color:var(--muted);font-size:13.5px}.settings-tabs [aria-selected=true]{background:var(--soft);color:var(--ink)}.settings-content{min-width:0;min-height:320px}.settings-content h3{margin:0 0 6px;font-size:20px;letter-spacing:-.4px}.settings-note{font-size:12px;line-height:1.7}.settings-row{padding:18px 0;border-top:1px solid var(--line);display:flex;gap:16px;align-items:center}.settings-row h4{margin:0 0 4px;font-size:14px}.settings-row p{margin:0;font-size:13px}.settings-connected{font-size:11px;white-space:nowrap;border:1px solid var(--line);border-radius:30px;padding:5px 10px;color:var(--ink)}.settings-profile{display:flex;align-items:center;gap:16px;margin-bottom:20px}.settings-avatar{display:grid;place-items:center;width:56px;height:56px;border:1px solid var(--line);border-radius:50%;background:var(--soft);font-size:24px}.settings-name{margin:0;font-size:20px}.settings-email{margin:3px 0;overflow-wrap:anywhere}.settings-role{font-size:11px;color:var(--muted)}.settings-text-link{display:block;font-size:13px;margin:16px 0;text-decoration:underline;text-underline-offset:4px}.settings-admin{display:inline-flex;margin:6px 0 16px}.settings-account-actions{display:flex;gap:10px;flex-wrap:wrap;margin:16px 0}.settings-preference{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:18px 0;border-bottom:1px solid var(--line);cursor:pointer;font-size:14px}.settings-preference small{display:block;color:var(--muted);font-size:12px;margin-top:2px}.settings-preference select{min-height:38px;padding:6px 10px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--ink)}.settings-preference input[type=checkbox]{width:20px;height:20px;accent-color:var(--accent)}.settings-status{font-size:12px;color:var(--muted);min-height:18px;margin:16px 0 0}
.appearance-palettes{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin:18px 0}.appearance-palettes .palette-group{grid-column:1/-1;margin:8px 0 0;font-size:11px;letter-spacing:1.6px;text-transform:uppercase;color:var(--muted)}.appearance-palettes button{position:relative;display:flex;flex-direction:column;gap:6px;padding:8px;border-radius:16px;border:1px solid var(--line);background:var(--surface);color:var(--ink);text-align:left;font-size:12.5px;transition:transform .3s var(--ease),border-color .3s}.appearance-palettes button:hover{transform:translateY(-2px)}.appearance-palettes button[aria-pressed=true]{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.appearance-palettes .palette-name{font-weight:600}.appearance-palettes small{font-size:11px;color:var(--muted);line-height:1.4}
.palette-sample{position:relative;width:100%;height:58px;border-radius:11px;background:var(--sample);border:1px solid color-mix(in srgb,var(--sample-ink) 15%,transparent);display:flex;flex-direction:column;justify-content:center;gap:6px;padding:10px 10px 10px 34px;overflow:hidden}.palette-sample i{position:absolute;left:10px;top:50%;width:18px;height:18px;border-radius:50%;background:linear-gradient(135deg,var(--sample-accent),var(--sample-accent2,var(--sample-accent)));transform:translateY(-50%);box-shadow:0 0 12px var(--sample-accent)}.palette-sample span{width:70%;height:5px;border-radius:4px;background:color-mix(in srgb,var(--sample-ink) 35%,transparent)}.palette-sample span+span{width:45%;opacity:.6}.palette-check{position:absolute;top:8px;right:9px;display:grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--accent);color:var(--on-accent);font-size:11px;opacity:0;transform:scale(.6);transition:opacity .3s,transform .3s var(--ease)}.appearance-palettes [aria-pressed=true] .palette-check{opacity:1;transform:scale(1)}#appearanceStatus{font-size:12px;color:var(--muted)}
@media(max-width:760px){.settings-layout{grid-template-columns:1fr;gap:18px}.settings-tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border-right:0;border-bottom:1px solid var(--line);padding:0 0 10px}.settings-tabs button{text-align:center;padding:8px 6px;font-size:12.5px}.study-body dialog{padding:24px 18px}.appearance-palettes{grid-template-columns:repeat(2,minmax(0,1fr))}}
/* narrow screens: long figure titles may wrap; grid children never force the page wider */
.sheet-tabs .btn,.rep-switch .btn,.status-buttons .btn{white-space:normal;text-align:left;line-height:1.3}.lesson-grid>*,.explore-layout>*,.section,.sheet-frame,.view,.home-grid>*,.home-grid-3>*,.home-tiles>*{min-width:0}.question-card header h3{overflow-wrap:anywhere}
.paper-filters label{flex:1 1 150px;min-width:0;max-width:100%}.paper-filters select,.paper-filters input,.online-paper-index select,.online-paper-index .online-point{width:100%;max-width:100%;min-width:0}.paper-form-grid label{min-width:0}
/* access gate on the light default */
#accessGate .access-card h1{letter-spacing:-.04em}#accessGate .google-signin{border-radius:999px;box-shadow:0 10px 30px -12px var(--site-accent)}#accessGate .access-orbit b{font-family:var(--serif);font-style:italic}

/* ---------- physics page ---------- */
.physics-banner{background:radial-gradient(ellipse 50% 90% at 10% 100%,color-mix(in srgb,var(--physics-2) 55%,transparent),transparent 70%),radial-gradient(ellipse 60% 100% at 95% 0%,color-mix(in srgb,var(--maths) 40%,transparent),transparent 70%),linear-gradient(120deg,color-mix(in srgb,var(--physics) 25%,var(--surface)),color-mix(in srgb,var(--physics-2) 18%,var(--bg)) 60%,color-mix(in srgb,var(--physics) 30%,var(--surface)))}.physics-banner .wire{fill:none;stroke:color-mix(in srgb,var(--physics) 70%,transparent);stroke-width:3;stroke-linecap:round}.physics-banner .node{fill:var(--physics-2);stroke:var(--surface);stroke-width:2}.physics-banner .comp{fill:color-mix(in srgb,var(--physics-2) 40%,var(--surface));stroke:var(--physics);stroke-width:2}
.home.physics .home-tile .tile-art{background:radial-gradient(circle at 80% 20%,color-mix(in srgb,var(--physics-2) 60%,transparent),transparent 50%),linear-gradient(140deg,color-mix(in srgb,var(--physics) 65%,var(--ink)),color-mix(in srgb,var(--physics-2) 45%,var(--surface)))}.home.physics .home-tile:nth-child(2) .tile-art{background:linear-gradient(150deg,color-mix(in srgb,var(--physics-2) 70%,var(--surface)),color-mix(in srgb,var(--physics) 60%,var(--surface)))}.home.physics .home-tile:nth-child(3) .tile-art{background:linear-gradient(150deg,color-mix(in srgb,var(--warn) 50%,var(--surface)),color-mix(in srgb,var(--physics-2) 40%,var(--surface)))}.home.physics .home-tile:nth-child(4) .tile-art{background:linear-gradient(150deg,color-mix(in srgb,var(--maths) 55%,var(--surface)),color-mix(in srgb,var(--physics) 45%,var(--surface)))}
.pattern.circuit .wire{fill:none;stroke:color-mix(in srgb,var(--surface) 70%,transparent);stroke-width:1.6;stroke-linecap:round}.pattern.circuit .node{fill:var(--surface)}
.lab-frame{position:relative;border:1px solid var(--line);border-radius:16px;overflow:hidden;background:var(--soft);height:min(78vh,860px)}.lab-frame iframe{display:block;width:100%;height:100%;border:0;background:var(--surface)}
.tracker{display:grid;gap:6px}.tracker-row{display:grid;grid-template-columns:22px minmax(0,1fr) auto;gap:12px;align-items:center;padding:10px 12px;border:1px solid var(--line);border-radius:14px;cursor:pointer;transition:background .3s,border-color .3s}.tracker-row:hover{background:var(--soft)}.tracker-row.done{border-color:color-mix(in srgb,var(--ok) 50%,var(--line));background:color-mix(in srgb,var(--ok) 8%,var(--surface))}.tracker-row input{width:18px;height:18px;accent-color:var(--ok)}.tracker-row .t b{display:block;font-weight:550;font-size:13.5px}.tracker-row .t small{color:var(--muted);font-size:11.5px}
.physics-article h4{margin:8px 0 10px;font-size:18px;letter-spacing:-.3px}.physics-article ul{margin:0;padding-left:18px;font-size:14px;line-height:1.7}.physics-article li{margin-bottom:8px}.recall-box .recall-q{font-weight:600;font-size:15px;margin:0 0 10px}.recall-box textarea{display:block;width:100%;min-height:110px;padding:12px 14px;border:1px solid var(--line);border-radius:14px;background:var(--soft);color:var(--ink);line-height:1.7;resize:vertical}.recall-box details{margin-top:10px;font-size:14px}.recall-box summary{cursor:pointer;font-weight:600}
/* ---------- focus timer ---------- */
#focusOpenBtn{gap:6px}.focus-pill{display:inline-flex;align-items:center;gap:7px;min-height:36px;padding:6px 12px;border-radius:999px;border:1px solid color-mix(in srgb,var(--ok) 55%,var(--line));background:color-mix(in srgb,var(--ok) 14%,var(--surface));font-size:12.5px;font-weight:600;font-variant-numeric:tabular-nums}.focus-pill i{width:8px;height:8px;border-radius:50%;background:var(--ok);box-shadow:0 0 10px var(--ok);animation:pulse 2s ease-in-out infinite}.focus-pill.paused i{background:var(--warn);box-shadow:none;animation:none}
.focus-panel{position:fixed;right:18px;bottom:18px;z-index:90;width:min(340px,calc(100vw - 36px));padding:18px 20px 20px;border:1px solid var(--line);border-radius:22px;background:var(--surface);box-shadow:var(--shadow)}.focus-panel header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.focus-panel h3{margin:0;font-size:16px}.focus-panel label{display:grid;gap:5px;font-size:12.5px;color:var(--muted);margin-bottom:10px}.focus-panel input,.focus-panel select{min-height:40px;padding:8px 12px;border:1px solid var(--line);border-radius:12px;background:var(--soft);color:var(--ink);font-size:14px}.focus-panel .focus-start{width:100%;margin-top:4px}.focus-today{margin:10px 0 0;font-size:12.5px;color:var(--muted)}
.focus-ring{--p:0;position:relative;width:150px;height:150px;margin:6px auto 10px;border-radius:50%;background:conic-gradient(var(--accent) calc(var(--p)*1turn),var(--soft) 0);display:grid;place-items:center}.focus-ring:before{content:'';position:absolute;inset:10px;border-radius:50%;background:var(--surface)}.focus-ring output{position:relative;font-size:32px;font-weight:600;letter-spacing:-1px;font-variant-numeric:tabular-nums}.focus-topic{text-align:center;margin:0 0 12px;font-size:14px}.focus-live .status-buttons{justify-content:center}
/* ---------- guided tour ---------- */
.tour{position:fixed;inset:0;z-index:150}.tour-spot{position:fixed;border-radius:18px;box-shadow:0 0 0 9999px rgba(10,12,16,.55),0 0 0 3px var(--accent);transition:left .45s var(--ease),top .45s var(--ease),width .45s var(--ease),height .45s var(--ease);pointer-events:none}.tour-card{position:fixed;width:min(340px,calc(100vw - 24px));padding:18px 20px;border:1px solid var(--line);border-radius:20px;background:var(--surface);color:var(--ink);box-shadow:var(--shadow)}.tour-count{margin:0 0 6px;font-size:11px;letter-spacing:1.6px;text-transform:uppercase;color:var(--muted)}.tour-title{margin:0 0 6px;font-size:18px;letter-spacing:-.3px}.tour-text{margin:0 0 14px;font-size:14px;line-height:1.6;color:var(--muted)}
@media(max-width:860px){.lab-frame{height:70vh}#focusOpenBtn .txt{display:none}.focus-panel{right:10px;bottom:10px;left:10px;width:auto}}

/* ---------- 3D stage: labels, leaders, explainer pop-up, section slider ---------- */
.excretion-three{position:relative;width:100%;height:100%;min-height:420px}.excretion-three canvas{position:absolute;inset:0;width:100%!important;height:100%!important}
.excretion-three-labels{position:absolute;inset:0;pointer-events:none;overflow:hidden}.excretion-three-leaders{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.excretion-three-leaders line{stroke:color-mix(in srgb,var(--ink) 55%,transparent);stroke-width:1.2}
.excretion-three-labels button{position:absolute;transform:translate(-50%,-50%);pointer-events:auto;min-height:28px;padding:5px 11px;border:1px solid var(--line);border-radius:999px;background:var(--glass);backdrop-filter:blur(8px);color:var(--ink);font-size:12px;font-weight:550;white-space:nowrap;box-shadow:var(--shadow-s);transition:background .25s,border-color .25s,transform .25s var(--ease)}.excretion-three-labels button:hover{background:var(--surface);border-color:var(--accent)}.excretion-three-labels button[aria-pressed=true]{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}
.three-popup{position:absolute;z-index:3;width:min(280px,70%);padding:14px 16px 14px;border:1px solid var(--line);border-radius:16px;background:var(--surface);color:var(--ink);box-shadow:var(--shadow);pointer-events:auto;animation:view-in .25s var(--ease)}.three-popup:before{content:'';position:absolute;left:var(--ax,20px);top:var(--ay,100%);width:8px;height:8px;margin:-4px 0 0 -4px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 30%,transparent)}.three-popup h4{margin:0 0 6px;font-size:15px;letter-spacing:-.2px;padding-right:28px}.three-popup-kicker{margin:0 0 4px;font-size:10px;letter-spacing:1.6px;text-transform:uppercase;color:var(--muted)}.three-popup-text{margin:0;font-size:13px;line-height:1.6;color:var(--muted)}.three-popup-close{position:absolute;right:8px;top:8px;width:28px;height:28px;border-radius:50%;border:1px solid var(--line);background:transparent;color:var(--ink);font-size:16px;display:grid;place-items:center}
.three-slider{display:inline-flex;align-items:center;gap:10px;font-size:12.5px;color:var(--muted);padding:0 6px}.three-slider input{width:150px;accent-color:var(--accent)}
.three-host{min-height:460px;background:radial-gradient(ellipse at 50% 40%,color-mix(in srgb,var(--accent) 10%,var(--soft)),var(--surface) 72%)}
