:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#f7f7f5;--bg-elev:#fff;--bg-soft:#f0f0ec;--bg-hover:#ebebe6;--text:#1c1d21;--text-soft:#43454d;--muted:#6a6d76;--line:#e2e2dc;--line-strong:#cfcfc7;--accent:#4f46e5;--accent-strong:#4338ca;--accent-soft:#eef0ff;--accent-contrast:#fff;--good:#15803d;--good-soft:#e7f6ec;--warn:#b45309;--warn-soft:#fdf3e2;--bad:#b91c1c;--bad-soft:#fdecec;--mark:#fde68a;--shadow-sm:0 1px 2px #1011140d;--shadow:0 1px 2px #1011140a, 0 6px 20px #1011140f;--shadow-lg:0 12px 40px #1011142e;--radius:12px;--radius-sm:8px;--side-w:288px;--top-h:60px;--font:ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji";--mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--ease:cubic-bezier(.2, .8, .2, 1)}[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#0f1115;--bg-elev:#171a21;--bg-soft:#1d2129;--bg-hover:#242933;--text:#e8e9ed;--text-soft:#c4c7cf;--muted:#9095a1;--line:#2a2f39;--line-strong:#3a404c;--accent:#8b8cff;--accent-strong:#a5a6ff;--accent-soft:#23244a;--accent-contrast:#0f1115;--good:#4ade80;--good-soft:#13291c;--warn:#fbbf24;--warn-soft:#2d230f;--bad:#f87171;--bad-soft:#301617;--mark:#5b4a12;--shadow-sm:0 1px 2px #0000004d;--shadow:0 1px 2px #0000004d, 0 8px 24px #00000040;--shadow-lg:0 16px 48px #00000080}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-padding-top:calc(var(--top-h) + 16px)}body{font-family:var(--font);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;margin:0;font-size:16px;line-height:1.55}body.no-scroll{overflow:hidden}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}img,svg{max-width:100%}button,input,select,textarea{font:inherit;color:inherit}h1,h2,h3,h4{letter-spacing:-.01em;margin:0 0 .5em;line-height:1.25}h1{letter-spacing:-.02em;font-size:clamp(1.7rem,3vw,2.25rem)}h2{font-size:1.25rem}p{margin:0 0 .75em}code,kbd,pre{font-family:var(--mono)}kbd{border:1px solid var(--line-strong);background:var(--bg-elev);color:var(--text-soft);border-bottom-width:2px;border-radius:5px;padding:.05em .4em;font-size:.75em;line-height:1.4;display:inline-block}mark{background:var(--mark);color:inherit;border-radius:3px;padding:0 1px}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{z-index:100;background:var(--accent);color:var(--accent-contrast);border-radius:8px;padding:8px 14px;position:absolute;top:-48px;left:12px}.skip-link:focus{top:12px}.muted{color:var(--muted)}.small{font-size:.875rem}.good{color:var(--good);align-items:center;gap:6px;display:inline-flex}.bad{color:var(--bad)}.eyebrow{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:0 0 .4em;font-size:.72rem;font-weight:700}.lead{color:var(--text-soft);max-width:68ch;font-size:1.05rem}.row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.row-between{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.card{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm)}.pad{padding:20px}.btn{border:1px solid var(--line-strong);background:var(--bg-elev);min-height:38px;color:var(--text);cursor:pointer;transition:background .15s var(--ease), border-color .15s var(--ease), transform .1s;border-radius:9px;align-items:center;gap:8px;padding:7px 14px;font-size:.92rem;font-weight:600;display:inline-flex;text-decoration:none!important}.btn:hover:not(:disabled){background:var(--bg-hover)}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn svg{flex:none;width:16px;height:16px}.btn-sm{min-height:32px;padding:4px 10px;font-size:.85rem}.btn-lg{min-height:46px;padding:10px 18px;font-size:1rem}.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-contrast)}.btn-primary:hover:not(:disabled){background:var(--accent-strong);border-color:var(--accent-strong)}.btn-good{border-color:var(--good);color:var(--good);background:var(--good-soft)}.btn-good:hover:not(:disabled){background:var(--good-soft);filter:brightness(.97)}.btn-warn{border-color:var(--warn);color:var(--warn);background:var(--warn-soft)}.btn-bad,.btn-danger{border-color:var(--bad);color:var(--bad);background:var(--bad-soft)}.btn-accent{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.btn.suggested{box-shadow:0 0 0 3px var(--accent-soft)}.icon-btn{width:38px;height:38px;color:var(--text-soft);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:9px;place-items:center;display:inline-grid}.icon-btn:hover{background:var(--bg-hover);color:var(--text)}.link-btn{color:var(--accent);cursor:pointer;font-size:inherit;background:0 0;border:0;padding:0}.chips{flex-wrap:wrap;gap:8px;display:flex}.chip{border:1px solid var(--line);background:var(--bg-soft);color:var(--text-soft);white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:3px 10px;font-size:.8rem;font-weight:600;display:inline-flex}.chip small{color:var(--muted);font-weight:500}.chip-link:hover{border-color:var(--accent);text-decoration:none}.chip-good{background:var(--good-soft);color:var(--good);border-color:#0000}.chip-warn{background:var(--warn-soft);color:var(--warn);border-color:#0000}.chip-bad{background:var(--bad-soft);color:var(--bad);border-color:#0000}.chip-accent{background:var(--accent-soft);color:var(--accent);border-color:#0000}.chip-toggle{cursor:pointer;padding:6px 12px;font-size:.85rem}.chip-toggle:hover{border-color:var(--line-strong)}.chip-toggle.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.badge{background:var(--accent);min-width:20px;height:20px;color:var(--accent-contrast);border-radius:999px;place-items:center;margin-left:auto;padding:0 6px;font-size:.72rem;font-weight:700;display:inline-grid}.top-link .badge{margin-left:6px}.segmented{border:1px solid var(--line-strong);border-radius:10px;display:inline-flex;overflow:hidden}.segmented button{background:var(--bg-elev);cursor:pointer;border:0;border-right:1px solid var(--line);padding:7px 14px;font-size:.9rem;font-weight:600}.segmented button:last-child{border-right:0}.segmented button.on{background:var(--accent);color:var(--accent-contrast)}.switch{cursor:pointer;color:var(--text-soft);align-items:center;gap:8px;font-size:.9rem;display:inline-flex}.switch input{width:18px;height:18px;accent-color:var(--accent)}.bar{background:var(--bg-soft);border-radius:99px;height:6px;display:block;overflow:hidden}.bar>span{border-radius:inherit;background:var(--accent);height:100%;transition:width .4s var(--ease);display:block}.ring{flex:none;place-items:center;display:inline-grid;position:relative}.ring svg circle{transition:stroke-dashoffset .5s var(--ease)}.ring-text{font-size:.8rem;font-weight:800;position:absolute}.ring[style*="84px"] .ring-text,.ring[style*="96px"] .ring-text{font-size:1.15rem}.ring[style*="110px"] .ring-text{font-size:1.35rem}.shell{min-height:100vh;display:flex}.sidebar{height:100vh;width:var(--side-w);border-right:1px solid var(--line);background:var(--bg-elev);overscroll-behavior:contain;scrollbar-width:thin;flex:none;position:sticky;top:0;overflow-y:auto}.sidebar-inner{flex-direction:column;min-height:100%;padding:14px 12px 0;display:flex}.drawer-close{display:none}.brand{color:var(--text);align-items:center;gap:10px;padding:6px 8px 14px;display:flex;text-decoration:none!important}.brand strong{letter-spacing:-.01em;font-size:1.08rem;display:block}.brand small{color:var(--muted);font-size:.72rem;display:block}.side-section{border-bottom:1px solid var(--line);gap:2px;padding-bottom:12px;display:grid}.side-link{color:var(--text-soft);border-radius:8px;align-items:center;gap:10px;padding:7px 10px;font-size:.92rem;font-weight:550;display:flex;text-decoration:none!important}.side-link svg{width:17px;height:17px;color:var(--muted)}.side-link:hover{background:var(--bg-hover);color:var(--text)}.side-link.active{background:var(--accent-soft);color:var(--accent)}.side-link.active svg{color:var(--accent)}.side-topics{flex:1;padding:8px 0 12px}.side-group-label{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:12px 10px 4px;font-size:.7rem;font-weight:700}.side-topics ul{margin:0;padding:0;list-style:none}.side-topic{color:var(--text-soft);border-radius:8px;align-items:center;gap:9px;padding:6px 10px;font-size:.9rem;display:flex;text-decoration:none!important}.side-topic:hover{background:var(--bg-hover);color:var(--text)}.side-topic.open{color:var(--text);background:var(--bg-soft);box-shadow:inset 3px 0 0 var(--topic);font-weight:650}.side-topic .emoji{text-align:center;width:20px}.side-topic-title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.side-pct{color:var(--muted);font-variant-numeric:tabular-nums;font-size:.72rem}.side-pages{border-left:1px solid var(--line);margin:2px 0 6px 20px!important;padding-left:10px!important}.side-page{color:var(--text-soft);border-radius:6px;align-items:flex-start;gap:8px;padding:5px 8px;font-size:.84rem;line-height:1.35;display:flex;text-decoration:none!important}.side-page:hover{background:var(--bg-hover);color:var(--text)}.side-page.active{color:var(--accent);background:var(--accent-soft);font-weight:600}.read-dot{border:1.5px solid var(--line-strong);color:#fff;border-radius:50%;flex:none;place-items:center;width:15px;height:15px;margin-top:2px;display:inline-grid}.read-dot.read{background:var(--good);border-color:var(--good)}.side-foot{padding:12px 10px 14px;border-top:1px solid var(--line);background:var(--bg-elev);color:var(--muted);gap:8px;margin:0 -12px;padding-inline:22px;font-size:.8rem;display:grid;position:sticky;bottom:0}.side-foot-row{justify-content:space-between;align-items:center;display:flex}.streak{color:var(--warn);align-items:center;gap:4px;font-weight:700;display:inline-flex}.main-col{flex-direction:column;flex:1;min-width:0;display:flex}.topbar{z-index:20;height:var(--top-h);background:color-mix(in srgb, var(--bg) 86%, transparent);-webkit-backdrop-filter:saturate(1.4)blur(10px);backdrop-filter:saturate(1.4)blur(10px);border-bottom:1px solid var(--line);align-items:center;gap:10px;padding:0 20px;display:flex;position:sticky;top:0}.menu-btn,.topbar-brand{display:none}.topbar-brand{color:var(--text);align-items:center;gap:8px;text-decoration:none!important}.search-trigger{border:1px solid var(--line);background:var(--bg-elev);max-width:460px;height:38px;color:var(--muted);cursor:pointer;text-align:left;border-radius:10px;flex:1;align-items:center;gap:10px;padding:0 12px;display:flex}.search-trigger:hover{border-color:var(--line-strong)}.search-trigger span{white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:.9rem;overflow:hidden}.topbar-nav{gap:2px;margin-left:auto;display:flex}.top-link{color:var(--text-soft);border-radius:8px;align-items:center;padding:7px 12px;font-size:.9rem;font-weight:600;display:inline-flex;text-decoration:none!important}.top-link:hover{background:var(--bg-hover);color:var(--text)}.top-link.active{color:var(--accent);background:var(--accent-soft)}main{outline:none;flex:1;padding:28px clamp(16px,3vw,40px) 56px}.site-foot{border-top:1px solid var(--line);color:var(--muted);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;padding:18px clamp(16px,3vw,40px);font-size:.8rem;display:flex}.site-foot-end{flex-wrap:wrap;align-items:center;gap:8px 16px;display:flex}.credit-pill{border:1px solid color-mix(in srgb, var(--text) 15%, transparent);background:color-mix(in srgb, var(--text) 4%, transparent);font-family:var(--mono);letter-spacing:.025em;color:var(--muted);border-radius:999px;align-items:center;gap:8px;padding:6px 12px 6px 6px;font-size:11px;text-decoration:none;transition:color .3s,border-color .3s,background-color .3s;display:inline-flex}.credit-pill:hover,.credit-pill:focus-visible{color:var(--text);border-color:color-mix(in srgb, var(--accent) 45%, transparent);background:color-mix(in srgb, var(--accent) 10%, transparent);text-decoration:none}.credit-pill:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.credit-pill-icon{background:var(--accent);width:24px;height:24px;color:var(--accent-contrast);border-radius:50%;justify-content:center;align-items:center;display:inline-flex}.credit-pill-name{color:var(--text);font-weight:600}.credit-pill-bracket{color:var(--accent)}.credit-pill-cursor{background:var(--accent);width:2px;height:14px;display:inline-block}.credit-pill-arrow{opacity:.4;transition:opacity .3s,transform .3s}.credit-pill:hover .credit-pill-arrow,.credit-pill:focus-visible .credit-pill-arrow{opacity:1;transform:translate(2px,-2px)}@media (prefers-reduced-motion:no-preference){.credit-pill-cursor{animation:2s cubic-bezier(.4,0,.6,1) infinite credit-blink}}@keyframes credit-blink{50%{opacity:.5}}@media (width<=640px){.site-foot{text-align:center;flex-direction:column;align-items:center}.site-foot-end{justify-content:center}}.drawer-backdrop{z-index:39;background:#00000073;position:fixed;inset:0}.page-loading{color:var(--muted);align-items:center;gap:10px;padding:40px 0;display:flex}.spinner{border:2px solid var(--line-strong);border-top-color:var(--accent);border-radius:50%;width:18px;height:18px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.empty-state{text-align:center;justify-items:center;gap:4px;max-width:520px;margin:10vh auto;display:grid}.page{gap:22px;max-width:1100px;margin:0 auto;display:grid}.page.narrow{max-width:780px}.page-head h1{margin-bottom:.3em}.crumbs{color:var(--muted);flex-wrap:wrap;gap:8px;margin-bottom:14px;font-size:.85rem;display:flex}.crumbs a{color:var(--muted)}.crumbs a:hover{color:var(--text)}.home{gap:34px;max-width:1180px;margin:0 auto;display:grid}.hero{grid-template-columns:minmax(0,1.35fr) minmax(300px,1fr);align-items:start;gap:28px;display:grid}.hero h1{margin-bottom:.35em;font-size:clamp(2rem,4.4vw,3rem);line-height:1.08}.hero-stats{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;max-width:520px;margin:26px 0 0;display:grid}.hero-stats div{background:var(--bg-elev);border:1px solid var(--line);border-radius:10px;padding:10px 12px}.hero-stats dt{color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-size:.72rem;font-weight:700}.hero-stats dd{margin:0;font-size:1.3rem;font-weight:800}.today{gap:12px;padding:20px;display:grid}.today-head{align-items:center;gap:14px;display:flex}.today-head p{margin:0}.today-line{align-items:center;gap:6px;font-weight:650;display:flex}.today-due{background:var(--bg-soft);color:var(--text);border-radius:10px;align-items:center;gap:10px;padding:12px 14px;font-weight:600;display:flex;text-decoration:none!important}.today-due span{flex:1}.today-due.has-due{background:var(--accent-soft);color:var(--accent)}.suggest-list{counter-reset:s;gap:8px;margin:0;padding:0;list-style:none;display:grid}.suggest-list li{counter-increment:s}.suggest-list a{border:1px solid var(--line);color:var(--text);border-radius:10px;grid-template-columns:26px 1fr;column-gap:8px;padding:10px 12px;display:grid;text-decoration:none!important}.suggest-list a:before{content:counter(s);background:var(--accent-soft);width:24px;height:24px;color:var(--accent);border-radius:50%;grid-row:span 2;place-items:center;font-size:.8rem;font-weight:800;display:grid}.suggest-list a:hover{border-color:var(--accent)}.suggest-list strong{font-size:.92rem}.suggest-list small{color:var(--muted);font-size:.8rem}.feature-row{grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;display:grid}.feature{color:var(--text);transition:border-color .15s, transform .15s var(--ease), box-shadow .15s;gap:6px;padding:18px;display:grid;text-decoration:none!important}.feature svg{width:22px;height:22px;color:var(--accent)}.feature span{color:var(--muted);font-size:.88rem}.feature:hover{border-color:var(--accent);box-shadow:var(--shadow);transform:translateY(-2px)}.group-head{flex-wrap:wrap;align-items:baseline;gap:12px;margin-bottom:12px;display:flex}.group-head h2{margin:0}.topic-grid{grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px;display:grid}.topic-card{color:var(--text);border-top:3px solid var(--topic);transition:transform .15s var(--ease), box-shadow .15s;gap:10px;padding:16px;display:grid;text-decoration:none!important}.topic-card:hover{box-shadow:var(--shadow);transform:translateY(-2px)}.topic-card p{color:var(--muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;font-size:.88rem;display:-webkit-box;overflow:hidden}.topic-card-head{align-items:center;gap:10px;display:flex}.topic-card-head strong{display:block}.topic-card-head small{color:var(--muted);font-size:.78rem}.topic-pct{color:var(--topic);margin-left:auto;font-size:.85rem;font-weight:800}.topic-card-meta{color:var(--muted);flex-wrap:wrap;gap:4px 12px;font-size:.78rem;display:flex}.topic-emoji{background:color-mix(in srgb, var(--topic,var(--accent)) 14%, transparent);border-radius:10px;flex:none;place-items:center;width:38px;height:38px;font-size:1.25rem;display:grid}.topic-emoji.lg{border-radius:16px;width:64px;height:64px;font-size:2rem}.topic-emoji .topic-logo{object-fit:contain;width:26px;height:26px}.topic-emoji.lg .topic-logo{width:46px;height:46px}.side-topic .emoji .topic-logo{object-fit:contain;vertical-align:-4px;width:18px;height:18px}.ai-logo{object-fit:contain;flex:none;width:40px;height:40px}.topic-logo-dark,[data-theme=dark] .topic-logo-light.has-dark{display:none}[data-theme=dark] .topic-logo-dark{display:inline-block}[data-theme=dark] img[data-logo=nextjs]{filter:invert()}.topic{gap:26px;max-width:980px;margin:0 auto;display:grid}.topic-hero{border-top:4px solid var(--topic);grid-template-columns:1fr auto;gap:24px;padding:24px;display:grid}.topic-hero-main{align-items:flex-start;gap:18px;display:flex}.topic-hero h1{margin-bottom:.2em}.topic-hero-stats{justify-items:center;gap:12px;min-width:200px;display:grid}.topic-hero-stats dl,.overall dl{grid-template-columns:1fr 1fr;gap:10px 18px;margin:0;display:grid}.topic-hero-stats dt,.overall dt{color:var(--muted);text-transform:uppercase;letter-spacing:.05em;font-size:.72rem;font-weight:700}.topic-hero-stats dd,.overall dd{margin:0;font-size:1.05rem;font-weight:800}.topic-section h2{margin-bottom:2px}.page-list{margin:10px 0 0;padding:0;list-style:none;overflow:hidden}.page-list li+li{border-top:1px solid var(--line)}.page-row{color:var(--text);align-items:center;gap:12px;padding:13px 16px;display:flex;text-decoration:none!important}a.page-row:hover,.page-row:hover{background:var(--bg-soft)}.page-row-main{min-width:0;color:var(--text);flex:1;gap:2px;display:grid;text-decoration:none!important}.page-row-main small{color:var(--muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:.84rem;display:-webkit-box;overflow:hidden}.page-row-meta{color:var(--muted);white-space:nowrap;flex:none;font-size:.8rem}.page-row.read strong{color:var(--text-soft)}.quiz-list{gap:18px;margin:0 0 16px;padding:0;list-style:none;display:grid}.quiz-q fieldset{border:0;margin:0;padding:0}.quiz-q legend{margin-bottom:8px;font-weight:650}.quiz-n{color:var(--muted)}.options{gap:8px;margin:12px 0;display:grid}.option{text-align:left;border:1px solid var(--line-strong);background:var(--bg-elev);cursor:pointer;border-radius:10px;align-items:center;gap:10px;width:100%;padding:10px 14px;font-size:.95rem;display:flex}.option input{accent-color:var(--accent)}.option:hover:not(:disabled){border-color:var(--accent)}.option.chosen{border-color:var(--accent);background:var(--accent-soft)}.option.correct{border-color:var(--good);background:var(--good-soft);color:var(--good);font-weight:600}.option.wrong{border-color:var(--bad);background:var(--bad-soft);color:var(--bad)}.option:disabled{cursor:default}.explain{border-left:3px solid var(--accent);background:var(--accent-soft);border-radius:0 8px 8px 0;margin-top:8px;padding:10px 14px;font-size:.92rem}.problems{gap:14px;display:grid}.problem{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);padding:18px}.problem.done{border-color:color-mix(in srgb, var(--good) 45%, var(--line))}.problem header{justify-content:space-between;align-items:center;gap:10px;display:flex}.problem h3{margin:0;font-size:1.02rem}.hints{gap:6px;padding-left:0;list-style:none;display:grid}.hints li{background:var(--warn-soft);border-radius:8px;padding:8px 12px;font-size:.9rem}.diff-easy{color:var(--good)}.diff-medium{color:var(--warn)}.diff-hard{color:var(--bad)}.fc-stats{grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;display:grid}.stat{padding:14px 16px;display:grid}.stat strong{font-size:1.6rem;font-weight:800;line-height:1.1}.stat span{color:var(--muted);font-size:.82rem}.deck-settings{gap:16px;display:grid}.deck-settings h2{margin:0}.field{gap:8px;display:grid}.field-row{flex-wrap:wrap;gap:24px;display:flex}.field-label{font-size:.9rem;font-weight:650}.field input[type=range]{max-width:360px;accent-color:var(--accent)}.success-banner{background:var(--good-soft);color:var(--good);border-color:#0000;font-weight:600}.fc-session{gap:14px;display:grid}.fc-progress{color:var(--muted);align-items:center;gap:8px;font-size:.88rem;display:flex}.fc-progress span:first-child{margin-right:auto}.flashcard{align-content:start;gap:14px;min-height:280px;padding:clamp(20px,4vw,36px);display:grid}.fc-ctx{color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin:0;font-size:.8rem;font-weight:650}.fc-q,.mock-q h2{margin:0;font-size:clamp(1.25rem,2.4vw,1.6rem)}.fc-show{justify-self:start;margin-top:12px}.fc-show kbd{color:inherit;opacity:.8;background:0 0;border-color:currentColor}.fc-answer{border-top:1px dashed var(--line-strong);color:var(--text-soft);animation:fade .2s var(--ease);padding-top:14px;font-size:1rem;line-height:1.65}.fc-takeaway{background:var(--bg-soft);border-radius:8px;padding:10px 12px}@keyframes fade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.fc-grades{grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;display:grid}.fc-grades .btn{flex-direction:column;justify-content:center;gap:2px;min-height:58px}.fc-grades small{opacity:.85;font-size:.75rem;font-weight:500}.mock-setup{gap:18px;display:grid}.mock-setup h2{margin:0}.mock-bar{top:calc(var(--top-h) + 8px);z-index:5;background:var(--bg-elev);border:1px solid var(--line);box-shadow:var(--shadow-sm);border-radius:12px;grid-template-columns:auto 1fr auto auto;align-items:center;gap:14px;padding:10px 14px;font-size:.9rem;font-weight:600;display:grid;position:sticky}.timer{font-variant-numeric:tabular-nums;align-items:center;gap:6px;font-size:1.05rem;display:inline-flex}.timer.urgent{color:var(--bad);animation:1s ease-in-out infinite pulse}@keyframes pulse{50%{opacity:.55}}.mock-q{border-top:4px solid var(--topic,var(--accent));gap:14px;display:grid}.self-grade{gap:8px}.summary-head{flex-wrap:wrap;align-items:center;gap:24px;display:flex}.summary-head h2{margin:0 0 4px;font-size:1.5rem}.mock-summary{gap:18px;display:grid}.score-rows{gap:12px;margin:0;padding:0;list-style:none;display:grid}.score-rows li{grid-template-columns:minmax(140px,1fr) 2fr 48px;align-items:center;gap:14px;display:grid}.score-rows strong{text-align:right}.weak-areas ul,.missed{gap:10px;margin:0;padding:0;list-style:none;display:grid}.weak-areas li{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.missed li{align-items:baseline;gap:10px;display:flex}.history{border-collapse:collapse;width:100%;font-size:.9rem}.history th,.history td{text-align:left;border-bottom:1px solid var(--line);padding:8px 10px}.history th{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-size:.78rem;font-weight:650}.skills-top{grid-template-columns:minmax(0,1.3fr) minmax(280px,1fr);gap:18px;display:grid}.skills-side{align-content:start;gap:18px;display:grid}.radar-card h2{margin-bottom:0}.radar{width:100%;height:auto;display:block}.radar-ring{fill:none;stroke:var(--line)}.radar-axis{stroke:var(--line)}.radar-area{fill:color-mix(in srgb, var(--accent) 22%, transparent);stroke:var(--accent);stroke-width:2px;stroke-linejoin:round}.radar-dot{fill:var(--accent)}.radar-label{fill:var(--text-soft);font-size:12.5px;font-weight:650}.radar-value{fill:var(--accent);font-weight:800}.overall{align-items:center;gap:20px;display:flex}.legend{flex-wrap:wrap;gap:10px;font-size:.78rem;display:flex}.lv{color:var(--muted);align-items:center;gap:6px;display:inline-flex}.lv:before{content:"";background:var(--lv);border-radius:3px;width:10px;height:10px}.lv-none{--lv:var(--line-strong)}.lv-learning{--lv:#f59e0b}.lv-practising{--lv:#3b82f6}.lv-strong{--lv:#16a34a}.road{gap:18px;margin:14px 0 0;padding:0;list-style:none;display:grid;position:relative}.road-stage{padding-left:46px;position:relative}.road-stage:before{content:"";background:var(--line);width:2px;position:absolute;top:34px;bottom:-18px;left:16px}.road-stage:last-child:before{display:none}.road-stage-head{align-items:center;gap:12px;margin-bottom:10px;display:flex}.road-stage-head>div{display:grid}.road-num{background:var(--accent);width:34px;height:34px;color:var(--accent-contrast);border-radius:50%;place-items:center;font-weight:800;display:grid;position:absolute;top:0;left:0}.road-pct{color:var(--accent);margin-left:auto;font-weight:800}.road-topics{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px;display:grid}.skill-tile{border:1px solid var(--line);border-left:4px solid var(--lv);background:var(--bg-elev);color:var(--text);transition:box-shadow .15s, transform .15s var(--ease);border-radius:12px;gap:10px;padding:12px 14px;display:grid;text-decoration:none!important}.skill-tile:hover{box-shadow:var(--shadow);transform:translateY(-1px)}.skill-tile.lv-strong{background:color-mix(in srgb, #16a34a 7%, var(--bg-elev))}.skill-tile.lv-practising{background:color-mix(in srgb, #3b82f6 6%, var(--bg-elev))}.skill-tile.lv-learning{background:color-mix(in srgb, #f59e0b 6%, var(--bg-elev))}.skill-head{align-items:center;gap:8px;display:flex}.skill-head strong{flex:1;font-size:.92rem}.skill-pct{font-size:.85rem;font-weight:800}.skill-bars{gap:6px;display:grid}.skill-bars>span{gap:2px;display:grid}.skill-bars small{color:var(--muted);font-size:.72rem}.skill-level{color:var(--muted);align-items:center;gap:4px;font-size:.75rem;font-weight:700;display:inline-flex}.data-tools h2{margin-bottom:4px}.modal-overlay{z-index:60;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#0a0a0e80;place-items:center;padding:16px;animation:.15s fade;display:grid;position:fixed;inset:0}.modal-dialog{background:var(--bg-elev);border:1px solid var(--line);width:min(480px,100%);box-shadow:var(--shadow-lg);border-radius:14px;padding:22px}.modal-actions{justify-content:flex-end;gap:10px;margin-top:18px;display:flex}.kbd-table{border-collapse:collapse;width:100%;font-size:.92rem}.kbd-table td{border-bottom:1px solid var(--line);padding:7px 4px}.kbd-table td:first-child{width:42%}.palette-overlay{place-items:start center;padding-top:10vh}.palette{background:var(--bg-elev);border:1px solid var(--line);width:min(680px,100%);max-height:72vh;box-shadow:var(--shadow-lg);border-radius:14px;flex-direction:column;display:flex;overflow:hidden}.palette-input{border-bottom:1px solid var(--line);color:var(--muted);align-items:center;gap:10px;padding:12px 16px;display:flex}.palette-input input{color:var(--text);background:0 0;border:0;outline:none;flex:1;padding:4px 0;font-size:1.05rem}.palette-results{margin:0;padding:6px;list-style:none;overflow-y:auto}.palette-item{cursor:pointer;border-radius:9px;align-items:flex-start;gap:12px;padding:10px 12px;display:flex}.palette-item.active{background:var(--accent-soft)}.palette-kind{text-transform:uppercase;letter-spacing:.05em;width:58px;color:var(--muted);flex:none;margin-top:2px;font-size:.68rem;font-weight:700}.palette-item.active .palette-kind{color:var(--accent)}.palette-main{gap:2px;min-width:0;display:grid}.palette-main strong{font-size:.95rem}.palette-main small{color:var(--muted);font-size:.78rem}.palette-snippet{color:var(--text-soft);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:.82rem;display:-webkit-box;overflow:hidden}.palette-empty{text-align:center;color:var(--muted);padding:24px}.palette-foot{border-top:1px solid var(--line);color:var(--muted);flex-wrap:wrap;gap:16px;padding:9px 16px;font-size:.75rem;display:flex}.palette-foot kbd{margin-right:3px}@media (width<=1100px){.feature-row{grid-template-columns:repeat(2,minmax(0,1fr))}.hero,.skills-top{grid-template-columns:1fr}.fc-stats{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width<=960px){.sidebar{z-index:40;visibility:hidden;transition:transform .22s var(--ease), visibility .22s;box-shadow:var(--shadow-lg);width:min(86vw,320px);position:fixed;top:0;left:0;transform:translate(-102%)}.sidebar.open{visibility:visible;transform:none}.drawer-close{z-index:2;display:inline-grid;position:absolute;top:10px;right:8px}.menu-btn{display:inline-grid}.topbar{gap:6px;padding:0 10px}.topbar-brand{display:inline-flex}.topbar-nav{display:none}.search-trigger{background:0 0;border-color:#0000;justify-content:center;max-width:44px;margin-left:auto;padding:0}.search-trigger span,.search-trigger kbd,.hide-sm{display:none}.topic-hero{grid-template-columns:1fr}.topic-hero-stats{grid-template-columns:auto 1fr;place-items:center start;display:grid}}@media (width<=640px){main{padding-top:20px}.feature-row{grid-template-columns:1fr}.hero-stats,.fc-stats,.fc-grades{grid-template-columns:repeat(2,minmax(0,1fr))}.topic-hero-main{flex-direction:column}.mock-bar{grid-template-columns:1fr auto}.mock-bar .bar{grid-area:2/1/auto/-1}.score-rows li{grid-template-columns:1fr 48px}.score-rows li .bar{grid-column:1/-1}.overall{flex-direction:column;align-items:flex-start}.road-stage{padding-left:0}.road-stage:before,.road-num,.history td:nth-child(4),.history th:nth-child(4){display:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important}}@media print{.sidebar,.topbar,.site-foot,.reader-aside,.reader-foot,.read-progress,.toc-mobile{display:none!important}main{padding:0}}.daily-card{margin:18px 0}.daily-card h2{margin:2px 0 4px;font-size:1.25rem}.daily-card p{margin:0 0 12px}.plan-schedule{flex-direction:column;gap:12px;margin-top:20px;display:flex}.plan-days{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));gap:12px;margin:0;padding:0;list-style:none;display:grid}.plan-day h3{margin:0;font-size:1rem}.plan-items{flex-direction:column;gap:8px;margin:10px 0 0;padding:0;list-style:none;display:flex}.plan-items li{align-items:center;gap:8px;font-size:.92rem;display:flex}.plan-items li label{cursor:pointer;flex:1;align-items:center;gap:8px;min-width:0;display:flex}.plan-items li.done a{color:var(--muted);text-decoration:line-through}.plan-items input[type=checkbox]{width:18px;height:18px;accent-color:var(--accent);flex:none}.badge-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,180px),1fr));gap:10px;margin:12px 0 0;padding:0;list-style:none;display:grid}.badge-item{border:1px solid var(--line);border-radius:10px;flex-direction:column;gap:2px;padding:12px;display:flex}.badge-item small{color:var(--muted)}.badge-item.locked{opacity:.55}.badge-item.locked .badge-emoji{filter:grayscale()}.badge-emoji{font-size:1.5rem}.share-card{flex-direction:column;gap:12px;margin-top:12px;display:flex}.share-canvas{border:1px solid var(--line);border-radius:12px;width:100%;max-width:600px;height:auto}@media print{.daily-card .row,.share-card .row,.plan-schedule .banner{display:none!important}}mark.hl{cursor:pointer;border-radius:3px;padding:0 1px}mark.hl-yellow{color:#422006;background:#fef08a}mark.hl-green{color:#052e16;background:#bbf7d0}mark.hl-blue{color:#172554;background:#bfdbfe}mark.hl-pink{color:#500724;background:#fbcfe8}.sel-pop{z-index:60;position:fixed}.sel-toolbar{background:var(--bg-elev);border:1px solid var(--line);border-radius:10px;align-items:center;gap:6px;padding:6px 8px;display:flex;box-shadow:0 8px 24px #0000002e}.sel-pop [role=dialog]{background:var(--bg-elev);border:1px solid var(--line);border-radius:12px;width:min(320px,100vw - 16px);padding:12px;box-shadow:0 12px 32px #00000038}.hl-colors{gap:8px;margin-bottom:8px;display:flex}.hl-dot{cursor:pointer;border:2px solid #0000;border-radius:50%;width:22px;height:22px;padding:0}.hl-dot.hl-yellow{background:#facc15}.hl-dot.hl-green{background:#4ade80}.hl-dot.hl-blue{background:#60a5fa}.hl-dot.hl-pink{background:#f472b6}.hl-dot.on{border-color:var(--text)}.hl-quote{border-left:3px solid var(--accent);background:var(--bg-soft);border-radius:0 8px 8px 0;max-height:120px;margin:0 0 8px;padding:6px 10px;font-size:.88rem;overflow:auto}.sel-pop textarea{resize:vertical;width:100%}.notes-list{flex-direction:column;gap:12px;margin:16px 0 0;padding:0;list-style:none;display:flex}.note-head{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.note-head .hl-dot{cursor:default}.note-item blockquote{margin:10px 0}.gen-dialog{width:min(640px,100vw - 32px);max-height:min(85vh,900px);overflow:auto}.gen-preview ol{counter-reset:gen;flex-direction:column;gap:12px;margin:12px 0;padding:0;list-style:none;display:flex}.gen-opt{align-items:center;gap:8px;margin-top:6px;display:flex}.gen-opt input[type=text]{flex:1}@media print{.sel-pop,.gen-dialog{display:none!important}mark.hl{border:1px solid #999}}.viz{flex-direction:column;gap:14px;display:flex}.viz-svg{border:1px solid var(--line);background:var(--bg-elev);border-radius:12px;width:100%;height:auto}.viz-num{fill:var(--text);font-family:inherit;font-size:13px;font-weight:600}.viz-sub{fill:var(--muted);font-family:inherit;font-size:11px}.viz-edge,.viz-node{cursor:pointer}.viz-edge:focus-visible,.viz-node:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.viz-controls{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.viz-speed{color:var(--muted);align-items:center;gap:6px;font-size:.85rem;display:inline-flex}.viz-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:14px;display:grid}@media (width<=760px){.viz-grid{grid-template-columns:1fr}}.viz-pseudo{margin:0}.viz-pseudo pre{background:var(--bg-soft);border-radius:10px;margin:6px 0 0;padding:12px;font-size:.85rem;overflow-x:auto}.viz-pseudo code{border-radius:6px;padding:1px 8px;display:block}.viz-pseudo code.on{background:var(--accent-soft);color:var(--text);font-weight:700}.viz-counters{color:var(--muted);flex-wrap:wrap;gap:16px;font-size:.9rem;display:flex}.viz-counters strong{color:var(--text);margin-right:4px;font-size:1.2rem}.viz-note{margin:8px 0 0}.el-grid{grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:14px;display:grid}@media (width<=760px){.el-grid{grid-template-columns:1fr}}.el-lanes{gap:10px;display:grid}.el-lane ul{flex-wrap:wrap;gap:6px;margin:4px 0 0;padding:0;list-style:none;display:flex}.el-chip{border-radius:999px;padding:4px 10px;font-family:ui-monospace,monospace;font-size:.82rem}.tone-stack{background:var(--accent-soft)}.tone-micro{background:var(--good-soft);color:var(--good)}.tone-macro{background:var(--warn-soft);color:var(--warn)}.el-log{border:1px solid var(--line);background:var(--bg-soft);border-radius:10px;padding:10px 14px}.el-log ol{margin:4px 0 0;padding-left:20px;font-family:ui-monospace,monospace;font-size:.85rem}.viz-embed{margin:1.4em 0}@media print{.viz-controls,.viz-embed{display:none!important}}.segmented.tabs{margin:0 0 16px}.design-workspace{flex-direction:column;gap:14px;display:flex}.design-workspace textarea{resize:vertical;width:100%;font-family:inherit}.rubric-dim{margin-bottom:12px}.rubric-dim h3{margin:0 0 8px}.rubric-points{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.rubric-points label{cursor:pointer;align-items:flex-start;gap:8px;display:flex}.rubric-points input[type=checkbox]{width:18px;height:18px;accent-color:var(--accent);flex:none;margin-top:2px}.mock-code-result{margin-bottom:14px}.mock-code-result:last-child{margin-bottom:0}.mock-code-block{background:var(--bg-soft);border-radius:8px;max-height:280px;padding:12px;font-size:.82rem;overflow:auto}.pre-wrap{white-space:pre-wrap}.ai-feedback{margin-top:12px}.net-banner{z-index:50;text-align:center;background:var(--warn-soft);color:var(--warn);margin:0;padding:8px 16px;font-size:.88rem;position:sticky;bottom:0}.update-toast{z-index:70;background:var(--bg-elev);border:1px solid var(--line);border-radius:12px;align-items:center;gap:10px;padding:10px 14px;font-size:.9rem;display:flex;position:fixed;bottom:16px;left:50%;transform:translate(-50%);box-shadow:0 12px 32px #00000038}@media print{.net-banner,.update-toast{display:none!important}}.credit-roadmap{color:var(--muted);align-items:center;gap:4px;text-decoration:none;display:inline-flex}.credit-roadmap strong{color:var(--text);font-weight:600}.credit-roadmap:hover strong{text-decoration:underline}.page-head{margin:8px 0 24px}.page-head h1{margin:4px 0 8px}.track-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr));gap:14px;display:grid}.track-card{color:inherit;border-top:3px solid var(--topic);flex-direction:column;gap:8px;padding:16px;text-decoration:none;display:flex}.track-card:hover{border-color:var(--topic)}.track-card p{color:var(--muted);margin:0;font-size:.9rem}.track-card-head{align-items:center;gap:12px;display:flex}.track-card-head>div{flex-direction:column;flex:1;min-width:0;display:flex}.track-card-head small{color:var(--muted)}.track-strip{flex-wrap:wrap;gap:8px;display:flex}.track-chip{border:1px solid var(--line);min-height:40px;color:inherit;border-radius:999px;align-items:center;gap:6px;padding:6px 12px;font-size:.9rem;text-decoration:none;display:inline-flex}.track-chip:hover{border-color:var(--topic)}.track-chip small{color:var(--topic);font-weight:600}.track-source{margin-top:10px}.track-stages{flex-direction:column;gap:10px;margin:20px 0;padding:0;list-style:none;display:flex;position:relative}.track-stage{border:1px solid var(--line);background:var(--surface,transparent);border-radius:12px}.track-stage-head{width:100%;min-height:56px;color:inherit;text-align:left;cursor:pointer;font:inherit;background:0 0;border:0;align-items:center;gap:12px;padding:12px 14px;display:flex}.track-stage-title{flex-direction:column;flex:1;min-width:0;display:flex}.track-stage-title small{color:var(--muted)}.track-stage-n{border:2px solid var(--topic);width:30px;height:30px;color:var(--topic);border-radius:50%;flex:none;place-items:center;font-size:.85rem;font-weight:700;display:grid}.track-stage.done .track-stage-n{background:var(--topic);color:#fff}.track-items{flex-direction:column;gap:2px;margin:0;padding:0 10px 10px 52px;list-style:none;display:flex}.track-quiz{margin-top:24px;padding:18px}@media (width<=640px){.track-items{padding-left:10px}.track-stage-head{padding:10px}}.diagram{border:1px solid var(--line);text-align:center;border-radius:12px;margin:1.4em 0;padding:16px;overflow-x:auto}.diagram svg{max-width:100%;height:auto}.diagram-loading{color:var(--muted);padding:24px;font-size:.85rem}.site-foot{grid-template-columns:1fr auto 1fr;align-items:center;gap:10px 16px;display:grid}.site-foot-left{justify-self:start}.site-foot-center{text-align:center;justify-self:center}.site-foot-right{justify-self:end;display:flex}@media (width<=760px){.site-foot{text-align:center;grid-template-columns:1fr;justify-items:center}.site-foot-left,.site-foot-center,.site-foot-right{justify-self:center}}@media (width<=640px){.diagram{text-align:left}.diagram svg{width:640px;max-width:none}}.reader{grid-template-columns:minmax(0,1fr) 240px;gap:40px;max-width:1160px;margin:0 auto;display:grid}.reader-main{min-width:0;max-width:800px}.reader-aside{position:relative}.reader-aside .toc{top:calc(var(--top-h) + 24px);max-height:calc(100vh - var(--top-h) - 48px);scrollbar-width:thin;position:sticky;overflow-y:auto}.read-progress{z-index:30;pointer-events:none;height:3px;position:fixed;top:0;left:0;right:0}.read-progress span{background:var(--accent);height:100%;transition:width .1s linear;display:block}.reader-head{border-bottom:1px solid var(--line);margin-bottom:26px;padding-bottom:18px}.reader-head h1{margin-bottom:.35em;font-size:clamp(1.75rem,3.4vw,2.5rem)}.reader-meta{color:var(--muted);flex-wrap:wrap;align-items:center;gap:6px 16px;margin-bottom:14px;font-size:.88rem;display:flex}.toc-title{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:0 0 8px;font-size:.72rem;font-weight:700}.toc ol{border-left:1px solid var(--line);margin:0;padding:0;list-style:none}.toc li a{color:var(--muted);border-left:2px solid #0000;margin-left:-1px;padding:4px 10px;font-size:.83rem;line-height:1.4;text-decoration:none;display:block}.toc li.depth-3 a{padding-left:22px;font-size:.8rem}.toc li a:hover{color:var(--text)}.toc li.active a{color:var(--accent);border-left-color:var(--accent);font-weight:600}.toc-mobile{border:1px solid var(--line);background:var(--bg-elev);border-radius:10px;margin:-10px 0 22px;display:none}.toc-mobile summary{cursor:pointer;padding:10px 14px;font-size:.9rem;font-weight:650}.toc-mobile .toc{max-height:50vh;padding:0 14px 12px;overflow-y:auto}.toc-mobile .toc-title{display:none}.reader-foot{border-top:1px solid var(--line);gap:22px;margin-top:48px;padding-top:24px;display:grid}.pager{grid-template-columns:1fr 1fr;gap:14px;display:grid}.pager-link{border:1px solid var(--line);background:var(--bg-elev);color:var(--text);border-radius:12px;gap:4px;padding:14px 16px;display:grid;text-decoration:none!important}.pager-link:hover{border-color:var(--accent)}.pager-link small{color:var(--muted);align-items:center;gap:4px;font-size:.78rem;display:inline-flex}.pager-link span{font-weight:650}.pager-link.next{text-align:right;justify-items:end}.reader-skeleton{gap:14px;max-width:760px;margin:0 auto;display:grid}.sk{background:linear-gradient(90deg, var(--bg-soft), var(--bg-hover), var(--bg-soft));background-size:200% 100%;border-radius:6px;height:16px;animation:1.2s infinite shimmer}.sk-title{width:60%;height:36px}.sk-short{width:40%}@keyframes shimmer{to{background-position:-200% 0}}.qa-list{gap:16px;display:grid}.qa{border:1px solid var(--line);background:var(--bg-elev);border-radius:12px;padding:20px 22px}.qa-q{align-items:baseline;gap:10px;margin:0 0 10px;font-size:1.12rem;display:flex}.qa-n{color:var(--topic,var(--accent));background:color-mix(in srgb, var(--topic,var(--accent)) 14%, transparent);border-radius:6px;flex:none;padding:2px 8px;font-size:.75rem;font-weight:800}.qa-label{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0 0 4px;font-size:.72rem;font-weight:800}.qa-extra,.qa-takeaway{margin-top:14px}.qa-takeaway{background:var(--good-soft);border-radius:10px;padding:12px 14px}.qa-takeaway .qa-label{color:var(--good)}.qa .prose{font-size:1rem}.reveal-btn{color:var(--muted);border-style:dashed}.prose{color:var(--text-soft);overflow-wrap:break-word;font-size:1.04rem;line-height:1.75}.prose>:first-child{margin-top:0}.prose h1,.prose h2,.prose h3,.prose h4{color:var(--text);scroll-margin-top:calc(var(--top-h) + 16px);position:relative}.prose h1{margin:1.6em 0 .6em;font-size:1.8rem}.prose h2{border-bottom:1px solid var(--line);margin:2.1em 0 .6em;padding-bottom:.3em;font-size:1.45rem}.prose h3{margin:1.7em 0 .5em;font-size:1.17rem}.prose h4{margin:1.4em 0 .4em;font-size:1.02rem}.prose .anchor,.qa-q .anchor{color:var(--muted);opacity:0;margin-left:8px;font-weight:400;text-decoration:none;transition:opacity .15s}.prose h2:hover .anchor,.prose h3:hover .anchor,.prose h4:hover .anchor,.qa-q:hover .anchor,.anchor:focus{opacity:1}.prose p,.prose ul,.prose ol{margin:0 0 1.05em}.prose ul,.prose ol{padding-left:1.4em}.prose li,.prose li>p{margin:.3em 0}.prose li::marker{color:var(--muted)}.prose strong{color:var(--text);font-weight:650}.prose a{text-decoration:underline;-webkit-text-decoration-color:color-mix(in srgb, var(--accent) 40%, transparent);text-decoration-color:color-mix(in srgb, var(--accent) 40%, transparent);text-underline-offset:2px}.prose hr{border:0;border-top:1px solid var(--line);margin:2.2em 0}.prose img{border-radius:10px}.prose :not(pre)>code{background:var(--bg-soft);border:1px solid var(--line);color:var(--text);border-radius:5px;padding:.12em .38em;font-size:.86em}.prose blockquote{border-left:3px solid var(--line-strong);background:var(--bg-soft);color:var(--text-soft);border-radius:0 10px 10px 0;margin:1.3em 0;padding:10px 16px}.prose blockquote>:last-child{margin-bottom:0}.prose .callout-interview{border-left-color:var(--accent);background:var(--accent-soft)}.callout-label{text-transform:uppercase;letter-spacing:.06em;color:var(--accent);margin-bottom:4px;font-size:.72rem;font-weight:800;display:inline-block}.table-wrap{border:1px solid var(--line);border-radius:10px;margin:1.3em 0;overflow-x:auto}.prose table{border-collapse:collapse;width:100%;font-size:.92rem;line-height:1.5}.prose th,.prose td{text-align:left;vertical-align:top;border-bottom:1px solid var(--line);padding:9px 12px}.prose th{background:var(--bg-soft);color:var(--text);white-space:nowrap;font-weight:650}.prose tr:last-child td{border-bottom:0}.prose input[type=checkbox]{accent-color:var(--accent);margin-right:6px}.code-block{margin:1.2em 0;position:relative}.prose pre{background:var(--code-bg);border:1px solid var(--line);tab-size:2;border-radius:10px;margin:0;padding:16px 18px;font-size:.86rem;line-height:1.6;overflow-x:auto}.prose pre code{font-size:inherit;color:var(--code-text);background:0 0;border:0;padding:0}.copy-btn{z-index:1;border:1px solid var(--line);background:var(--bg-elev);color:var(--muted);cursor:pointer;opacity:0;border-radius:6px;padding:3px 9px;font-size:.72rem;font-weight:650;transition:opacity .15s;position:absolute;top:8px;right:8px}.code-block:hover .copy-btn,.copy-btn:focus{opacity:1}:root{--code-bg:#f6f8fa;--code-text:#1f2328;--hl-kw:#cf222e;--hl-str:#0a3069;--hl-num:#0550ae;--hl-com:#6e7781;--hl-fn:#8250df;--hl-type:#953800;--hl-attr:#0550ae;--hl-tag:#116329}[data-theme=dark]{--code-bg:#12151b;--code-text:#e6edf3;--hl-kw:#ff7b72;--hl-str:#a5d6ff;--hl-num:#79c0ff;--hl-com:#8b949e;--hl-fn:#d2a8ff;--hl-type:#ffa657;--hl-attr:#79c0ff;--hl-tag:#7ee787}.hljs-keyword,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-template-tag,.hljs-template-variable,.hljs-type.hljs-variable{color:var(--hl-kw)}.hljs-string,.hljs-regexp,.hljs-meta .hljs-string{color:var(--hl-str)}.hljs-number,.hljs-literal,.hljs-variable,.hljs-built_in,.hljs-symbol{color:var(--hl-num)}.hljs-comment,.hljs-quote{color:var(--hl-com);font-style:italic}.hljs-title,.hljs-title.function_,.hljs-section{color:var(--hl-fn)}.hljs-type,.hljs-title.class_,.hljs-class .hljs-title,.hljs-params{color:var(--hl-type)}.hljs-attr,.hljs-attribute,.hljs-property,.hljs-selector-class,.hljs-selector-id{color:var(--hl-attr)}.hljs-name,.hljs-tag,.hljs-selector-pseudo{color:var(--hl-tag)}.hljs-meta{color:var(--hl-com)}.hljs-addition{color:var(--hl-tag);background:color-mix(in srgb, var(--hl-tag) 12%, transparent)}.hljs-deletion{color:var(--hl-kw);background:color-mix(in srgb, var(--hl-kw) 12%, transparent)}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}@media (width<=1200px){.reader{grid-template-columns:minmax(0,1fr)}.reader-main{width:100%;margin:0 auto}.reader-aside{display:none}.toc-mobile{display:block}}@media (width<=640px){.prose{font-size:1rem;line-height:1.7}.prose h2{font-size:1.28rem}.pager{grid-template-columns:1fr}.qa{padding:16px}.prose pre{border-radius:8px;padding:14px;font-size:.8rem}.copy-btn{opacity:1}}.tools-page{gap:20px}.tools-search{border:1px solid var(--line-strong);background:var(--bg-elev);border-radius:10px;align-items:center;gap:10px;padding:10px 14px;display:flex}.tools-search svg{width:18px;height:18px;color:var(--muted);flex:none}.tools-search input{background:0 0;border:0;outline:none;flex:1;min-width:0;font-size:1rem}.tools-grid{grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px;display:grid}.tool-card{padding:0;display:grid;overflow:hidden}.tool-card-main{color:var(--text);gap:6px;padding:16px 16px 10px;display:grid;text-decoration:none!important}.tool-card-main span{color:var(--muted);font-size:.88rem}.tool-card-main:hover strong{color:var(--accent)}.tool-card-foot{justify-content:space-between;align-items:center;padding:6px 10px 10px 16px;display:flex}.star-btn{color:var(--muted)}.star-btn.on{color:var(--warn)}.star-btn.on svg{fill:currentColor}.chip-link{color:var(--text);align-items:center;gap:6px;display:inline-flex;text-decoration:none!important}.tool-page{max-width:1180px}.tool-privacy{color:var(--muted);align-items:center;gap:6px;margin:0;font-size:.82rem;display:inline-flex}.tool-workspace{gap:16px;display:grid}.tool-related{gap:12px;display:grid}.star-toggle.on{border-color:var(--warn);color:var(--warn);background:var(--warn-soft)}.star-toggle.on svg{fill:currentColor}.tool-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start;gap:16px;display:grid}.tool-field{gap:6px;font-size:.9rem;display:grid}.tool-label{font-size:.85rem;font-weight:650}.tool-input,.tool-field select,.tool-field input[type=number],.tool-field input[type=text]{border:1px solid var(--line-strong);background:var(--bg);width:100%;color:var(--text);border-radius:9px;padding:9px 12px}.tool-field input[type=number]{max-width:110px}.tool-input:focus,.tool-field select:focus{outline:2px solid var(--accent);outline-offset:1px;border-color:var(--accent)}textarea.tool-input{resize:vertical;min-height:120px;line-height:1.5}.mono{font-family:var(--mono);font-size:.85rem}.tool-actions{align-items:flex-end;gap:10px;margin:10px 0}.tool-actions .tool-field{min-width:130px}.tool-tabs{flex-wrap:wrap;gap:6px;margin-bottom:12px;display:flex}.tool-tab{border:1px solid var(--line-strong);background:var(--bg-elev);cursor:pointer;border-radius:999px;padding:6px 14px;font-size:.85rem;font-weight:600}.tool-tab:hover{border-color:var(--accent)}.tool-tab.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.tool-stats{flex-wrap:wrap;gap:10px 22px;margin:0 0 10px;padding:0;display:flex}.tool-stat{gap:0;min-width:0;display:grid}.tool-stat dt{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-size:.7rem;font-weight:700}.tool-stat dd{overflow-wrap:anywhere;margin:0;font-weight:650}.tool-output{border:1px solid var(--line);background:var(--bg-soft);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:10px;max-height:480px;margin:0;padding:14px;font-size:.85rem;line-height:1.55;overflow:auto}.tool-output.mono{font-family:var(--mono)}.tool-outputbar{flex-wrap:wrap;gap:8px;margin:10px 0 8px;display:flex}.tool-error{color:var(--bad);background:var(--bad-soft);border-radius:8px;padding:10px 12px;font-size:.9rem}.tool-h{margin:18px 0 8px;font-size:.95rem}.tool-empty{color:var(--muted);margin:0}.tool-list{gap:8px;margin:0;padding:0;list-style:none;display:grid}.tool-hashrow{border:1px solid var(--line);background:var(--bg-elev);border-radius:10px;grid-template-columns:150px minmax(0,1fr) auto;align-items:center;gap:12px;padding:10px 12px;display:grid}.tool-hashrow strong{font-size:.85rem}.tool-hashrow code{overflow-wrap:anywhere;font-size:.8rem}.tool-values{gap:8px;margin:12px 0 0;padding:0;list-style:none;display:grid}.tool-values li{border:1px solid var(--line);background:var(--bg-elev);border-radius:10px;align-items:center;gap:12px;padding:8px 8px 8px 14px;display:flex}.tool-values code{overflow-wrap:anywhere;flex:1;font-size:.85rem}.tool-issues{gap:6px;margin:0;padding-left:20px;display:grid}.tool-issues code{font-size:.82rem}.tool-table{border-collapse:collapse;width:100%;font-size:.88rem}.tool-table th,.tool-table td{text-align:left;border-bottom:1px solid var(--line);vertical-align:top;padding:8px 10px}.tool-table th{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-size:.75rem}.tool-table .chip{margin:0 4px 4px 0}.tool-preview{max-height:560px;padding:18px;overflow:auto}.check{cursor:pointer;align-items:center;gap:6px;font-size:.86rem;font-weight:550;display:inline-flex}.check input{accent-color:var(--accent);width:16px;height:16px}.diff-view{border:1px solid var(--line);border-radius:10px;max-height:480px;font-size:.82rem;overflow:auto}.diff-row{grid-template-columns:28px minmax(0,1fr);gap:8px;padding:3px 12px 3px 0;display:grid}.diff-row>span{text-align:center;color:var(--muted);-webkit-user-select:none;user-select:none}.diff-row code{font-family:var(--mono);white-space:pre-wrap;overflow-wrap:anywhere}.diff-same{color:var(--muted)}.diff-del{background:var(--bad-soft)}.diff-add{background:var(--good-soft)}.diff-del mark,.diff-add mark{border-radius:2px}.color-strip{grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:8px;margin:12px 0 4px;display:grid}.color-swatch{border:1px solid var(--line-strong);cursor:pointer;font-family:var(--mono);color:#fff;text-shadow:0 1px 2px #0009;text-align:left;border-radius:10px;padding:26px 8px 8px;font-size:.72rem}.color-demo{border:1px solid var(--line-strong);border-radius:10px;padding:18px;font-size:1.05rem}input[type=color]{border:1px solid var(--line-strong);background:var(--bg-elev);cursor:pointer;border-radius:8px;width:44px;height:36px;padding:2px}.token-bar{background:var(--bg-hover);vertical-align:middle;border-radius:999px;width:120px;height:8px;margin-right:8px;display:inline-block;overflow:hidden}.token-bar span{background:var(--accent);border-radius:999px;height:100%;display:block}.tool-table input[type=number]{border:1px solid var(--line-strong);background:var(--bg);border-radius:7px;width:110px;padding:5px 8px}.mock-field{border:1px solid var(--line);background:var(--bg-elev);border-radius:10px;grid-template-columns:1fr 1fr 1fr auto;align-items:end;gap:12px;padding:10px 12px;display:grid}@media (width<=900px){.mock-field{grid-template-columns:1fr 1fr}}.qr-grid{grid-template-columns:minmax(0,1.2fr) minmax(240px,1fr);align-items:start;gap:16px;display:grid}.qr-preview{place-items:center;min-height:300px;padding:20px;display:grid}.qr-preview canvas{border-radius:8px;max-width:100%;height:auto}.uni-grid{flex-wrap:wrap;gap:6px;display:flex}.uni-char{border:1px solid var(--line);background:var(--bg-elev);border-radius:8px;justify-items:center;gap:2px;min-width:56px;padding:6px 4px;display:grid}.uni-char strong{font-size:1rem;line-height:1.2}.uni-char small{font-family:var(--mono);color:var(--muted);font-size:.65rem}.uni-char.special{border-color:var(--warn);background:var(--warn-soft)}.uni-char.special small{color:var(--warn)}@media (width<=900px){.qr-grid,.tool-grid{grid-template-columns:1fr}.tool-hashrow{grid-template-columns:1fr;gap:6px}}.ai-panel{background:var(--bg-elev);border:1px solid var(--line);width:min(680px,100vw - 32px);max-height:min(82vh,760px);box-shadow:var(--shadow-lg);border-radius:14px;flex-direction:column;display:flex;overflow:hidden}.ai-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:flex-start;gap:12px;padding:14px 16px;display:flex}.ai-head p{margin:0}.ai-settings{gap:10px;padding:16px;display:grid;overflow-y:auto}.ai-settings p{margin:0}.ai-actions{flex-wrap:wrap;gap:8px;padding:12px 16px 0;display:flex}.ai-actions .chip-toggle:disabled{opacity:.5;cursor:not-allowed}.ai-msgs{flex:1;align-content:start;gap:10px;padding:12px 16px;display:grid;overflow-y:auto}.ai-msg{border-radius:10px;max-width:100%;padding:10px 12px;font-size:.9rem}.ai-msg p{margin:0 0 .5em}.ai-msg p:last-child{margin-bottom:0}.ai-user{background:var(--accent-soft);color:var(--text);justify-self:end;max-width:85%}.ai-assistant{background:var(--bg-soft);justify-self:stretch}.ai-md{font-size:.88rem}.ai-md pre{max-width:100%;overflow-x:auto}.ai-input{border-top:1px solid var(--line);gap:8px;padding:12px 16px;display:flex}.ai-input input{border:1px solid var(--line-strong);background:var(--bg);border-radius:9px;flex:1;min-width:0;padding:9px 12px}.ai-meter{background:var(--bg-soft);height:4px}.ai-meter span{background:var(--accent);height:100%;transition:width .3s;display:block}.mock-answerbox{gap:8px;margin:12px 0;display:grid}.mock-answerbox textarea{resize:vertical;border:1px solid var(--line-strong);background:var(--bg);border-radius:9px;width:100%;min-height:90px;padding:10px 12px}.ai-feedback{background:var(--accent-soft);border-radius:10px;margin:12px 0;padding:12px 14px;font-size:.9rem}.ai-feedback p{margin:0 0 .5em}.ai-feedback p:last-child{margin-bottom:0}.ai-score{margin-right:8px;font-weight:800;display:inline-block}.arena-bar{background:var(--bg-elev);border:1px solid var(--line);border-radius:10px;justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px;padding:10px 14px;font-weight:700;display:flex}.arena-score{color:var(--accent);font-variant-numeric:tabular-nums;align-items:center;gap:6px;display:inline-flex}.arena-score svg{width:18px;height:18px}.arena-lives{letter-spacing:2px}.arena-timerbar{background:var(--bg-soft);border-radius:999px;height:6px;margin-bottom:14px;overflow:hidden}.arena-timerbar span{background:var(--accent);height:100%;transition:width .1s linear;display:block}.arena-timerbar span.urgent{background:var(--bad)}.arena-q{border-top:3px solid var(--accent)}.option.dim{opacity:.45}.timer.urgent{color:var(--bad);font-weight:800}.practice-hero{border-top:3px solid var(--topic,var(--accent));flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;display:flex}.practice-hero h1{margin-bottom:.25em}.practice-hero .lead{margin:0}.practice-filters{grid-template-columns:2fr 1fr 1fr 1fr 1fr 1fr;gap:12px;margin:16px 0;display:grid}.practice-filters .field{flex-direction:column;gap:4px;min-width:0;margin:0;display:flex}.practice-filters input,.practice-filters select{border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--bg);width:100%;min-width:0;max-width:100%;min-height:38px;padding:6px 10px}.challenge-list{flex-direction:column;gap:8px;margin:8px 0 0;padding:0;list-style:none;display:flex}.challenge-row{color:inherit;justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;display:flex}.challenge-row:hover{border-color:var(--accent);text-decoration:none}.challenge-main{flex-direction:column;gap:2px;min-width:0;display:flex}.challenge-main small{display:block}.challenge-chips{flex:none;align-items:center;gap:8px;display:flex}.challenge-chips svg{width:18px;height:18px;color:var(--muted)}.practice-head{margin-bottom:12px}.practice-head h1{margin-bottom:.3em}.practice-solved{border-top:3px solid var(--good)}.practice-solved .next-up{margin:.5em 0 0}.practice-solved svg{vertical-align:-2px;width:16px;height:16px}.workspace-grid{grid-template-columns:minmax(0,5fr) minmax(0,6fr);align-items:start;gap:16px;display:grid}.practice-left{overflow:hidden}.practice-right{flex-direction:column;gap:12px;min-width:0;display:flex}.ptabs{border-bottom:1px solid var(--line);gap:2px;padding:8px 8px 0;display:flex;overflow-x:auto}.ptabs button{appearance:none;color:var(--muted);cursor:pointer;white-space:nowrap;background:0 0;border:0;border-bottom:2px solid #0000;padding:8px 14px;font-weight:600}.ptabs button:hover{color:var(--text)}.ptabs button.active{color:var(--text);border-bottom-color:var(--accent)}.ppanel{padding:16px 18px 20px}.ppanel h2{margin-top:1.25em}.ppanel h2:first-child{margin-top:0}.test-preview{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.test-preview li{background:var(--bg-soft);border:1px solid var(--line);border-radius:var(--radius-sm);padding:8px 12px;overflow-x:auto}.learn-links{padding-left:1.25em}.hints-list{flex-direction:column;gap:12px;padding-left:1.25em;display:flex}.hints-list .prose{margin:0}.locked{background:var(--bg-soft);border:1px dashed var(--line-strong);border-radius:var(--radius-sm);padding:16px}.code-editor{border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--bg-elev);overflow:hidden}.code-editor .cm-editor{font-size:.9rem}.code-editor .cm-scroller{max-height:480px}.code-editor .cm-content{font-family:var(--mono);caret-color:var(--accent)}.code-editor .cm-gutters{background:var(--bg-soft);color:var(--muted);border-right:1px solid var(--line)}.code-editor .cm-activeLine,.code-editor .cm-activeLineGutter{background:var(--accent-soft)}.code-editor.cm-focused,.code-editor:focus-within{outline:2px solid var(--accent);outline-offset:1px}[data-theme=dark] .code-editor .cm-content{filter:none}.lang-row,.run-row{gap:8px}.run-row .muted{margin-left:auto}.results{flex-direction:column;gap:10px;display:flex}.results-summary{align-items:center;gap:10px;margin:0;display:flex}.banner{border-radius:var(--radius-sm);margin:0;padding:10px 14px;font-weight:600}.banner-bad{background:var(--bad-soft);color:var(--bad)}.banner-warn{background:var(--warn-soft);color:var(--warn);font-weight:500}.cases{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.case{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg-elev);padding:10px 12px}.case.pass{border-left:3px solid var(--good)}.case.fail{border-left:3px solid var(--bad)}.case-head{align-items:center;gap:8px;margin:0;display:flex}.case-io{grid-template-columns:1fr 1fr;gap:8px;margin-top:8px;display:grid}.case-io p{margin:0 0 2px}.case-io pre{background:var(--bg-soft);border:1px solid var(--line);border-radius:var(--radius-sm);margin:0;padding:8px;font-size:.82rem;overflow-x:auto}.case-error{color:var(--bad);overflow-wrap:anywhere;margin:8px 0 0}.stdout summary{cursor:pointer;font-weight:600}.stdout pre{background:var(--bg-soft);border:1px solid var(--line);border-radius:var(--radius-sm);max-height:240px;margin:8px 0 0;padding:10px 12px;font-size:.82rem;overflow-x:auto}.practice-coach h2{margin:0;font-size:1.1rem}.coach-msgs{max-height:380px;overflow-y:auto}@media (width<=1100px){.practice-filters{grid-template-columns:1fr 1fr 1fr}}@media (width<=940px){.workspace-grid,.case-io{grid-template-columns:1fr}}@media (width<=680px){.practice-filters{grid-template-columns:1fr 1fr}.challenge-row{flex-direction:column;align-items:flex-start}.run-row .muted{margin-left:0}}@media print{.practice-right .code-editor,.run-row,.ptabs{display:none}.workspace-grid{grid-template-columns:1fr}.challenge-row{break-inside:avoid}}
