:root{--bg:#f6f7fb;--panel:#fff;--ink:#14161c;--ink-soft:#5a6070;--line:#e2e5ee;--accent:#2f5bd6;--accent-soft:#eaf0ff;--good:#157a4a;--good-soft:#e6f6ed;--bad:#b4293b;--bad-soft:#fdecee;--warn:#8a5a00;--warn-soft:#fdf3e0;--radius:12px;--shadow:0 1px 2px #1014280f, 0 8px 24px #1014280d}@media (prefers-color-scheme:dark){:root{--bg:#101219;--panel:#191c26;--ink:#eef0f6;--ink-soft:#a2a9bb;--line:#2b303e;--accent:#7ea0ff;--accent-soft:#1d2540;--good:#63d29a;--good-soft:#12291f;--bad:#ff8a95;--bad-soft:#2c161b;--warn:#e5b768;--warn-soft:#2b2314;--shadow:0 1px 2px #0006, 0 8px 24px #0000004d}}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--ink);-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:17px;line-height:1.5}a{color:var(--accent)}button{font:inherit;color:inherit}.shell{max-width:860px;margin:0 auto;padding:20px 18px 64px}.topbar{border-bottom:1px solid var(--line);background:var(--panel);flex-wrap:wrap;align-items:center;gap:14px;padding:12px 18px;display:flex}.topbar .brand{letter-spacing:-.01em;color:var(--ink);font-weight:700;text-decoration:none}.stage-switch{background:var(--bg);border:1px solid var(--line);border-radius:99px;gap:2px;padding:2px;display:flex}.stage-switch-option{appearance:none;color:var(--ink-soft);cursor:pointer;background:0 0;border:none;border-radius:99px;padding:5px 12px;font-size:13px;font-weight:600}.stage-switch-option.active{background:var(--accent);color:#fff}.topbar nav{flex-wrap:wrap;gap:4px;margin-left:auto;display:flex}.topbar nav a{color:var(--ink-soft);border-radius:8px;padding:6px 11px;font-size:15px;text-decoration:none}.topbar nav a:hover{background:var(--accent-soft);color:var(--accent)}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px}.card+.card{margin-top:16px}h1{letter-spacing:-.02em;margin:0 0 6px;font-size:27px}h2{letter-spacing:-.01em;margin:0 0 10px;font-size:19px}h3{margin:0 0 6px;font-size:16px}.muted{color:var(--ink-soft)}.small{font-size:14px}.row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.spread{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.btn{appearance:none;border:1px solid var(--line);background:var(--panel);cursor:pointer;border-radius:10px;align-items:center;gap:8px;padding:11px 16px;font-weight:550;text-decoration:none;transition:background .12s,border-color .12s,transform 50ms;display:inline-flex}.btn:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover:not(:disabled){color:#fff;filter:brightness(1.08)}.btn.big{padding:14px 22px;font-size:18px}.btn.ghost{color:var(--ink-soft);background:0 0;border-color:#0000}.progress-track{background:var(--line);border-radius:99px;height:8px;overflow:hidden}.progress-fill{background:var(--accent);border-radius:99px;height:100%;transition:width .25s}.qmeta{color:var(--ink-soft);flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px;font-size:13px;display:flex}.pill{border:1px solid var(--line);white-space:nowrap;border-radius:99px;padding:3px 10px;font-size:13px}.pill.retry{background:var(--warn-soft);color:var(--warn);border-color:#0000}.pill.level{background:var(--accent-soft);color:var(--accent);border-color:#0000}.prompt{letter-spacing:-.01em;white-space:pre-wrap;margin:4px 0 18px;font-size:26px;line-height:1.35}.q-svg{max-width:100%;height:auto;margin:6px 0 18px;display:block}.q-svg .grid{stroke:var(--line);stroke-width:1px}.q-svg .axis{stroke:var(--ink-soft);stroke-width:2px}.q-svg .tick,.q-svg .dim,.q-svg .ptlabel,.q-svg .title{fill:var(--ink-soft);text-anchor:middle;font-family:inherit;font-size:13px}.q-svg .title,.q-svg .dim,.q-svg .ptlabel{fill:var(--ink);font-weight:600}.q-svg .end{text-anchor:end}.q-svg .start{text-anchor:start}.q-svg .unknown{fill:var(--accent);text-anchor:middle;font-family:inherit;font-size:17px;font-weight:700}.q-svg .pt{fill:var(--accent)}.q-svg .pt-hollow{fill:var(--panel);stroke:var(--accent);stroke-width:2px}.q-svg .series{fill:none;stroke:var(--accent);stroke-width:2.5px;stroke-linejoin:round}.q-svg .shape{fill:var(--accent-soft);stroke:var(--accent);stroke-width:2px}.q-svg .shape-top{fill:var(--accent-soft);stroke:var(--accent);stroke-width:2px;opacity:.75}.q-svg .shape-fill{fill:var(--accent-soft);stroke:none}.q-svg .clock-face{fill:var(--panel);stroke:var(--ink-soft);stroke-width:2px}.q-svg .hand-hour{stroke:var(--ink);stroke-width:4px;stroke-linecap:round}.q-svg .hand-minute{stroke:var(--accent);stroke-width:2.5px;stroke-linecap:round}.q-svg .shape-side{fill:var(--accent-soft);stroke:var(--accent);stroke-width:2px;opacity:.5}.q-svg .frame{fill:none;stroke:var(--ink-soft);stroke-width:2px}.calculator{border:1px solid var(--line);border-radius:var(--radius);background:var(--bg);max-width:260px;margin:4px 0 18px;padding:10px}.calc-display{background:var(--panel);border:1px solid var(--line);text-align:right;white-space:nowrap;border-radius:8px;margin-bottom:8px;padding:10px 12px;font-size:22px;font-weight:600;overflow-x:auto}.calc-grid{grid-template-columns:repeat(4,1fr);gap:6px;display:grid}.calc-grid button{appearance:none;border:1px solid var(--line);background:var(--panel);color:var(--ink);cursor:pointer;border-radius:8px;padding:10px 0;font-size:16px;font-weight:600;transition:background .12s,border-color .12s,transform 50ms}.calc-grid button:hover{border-color:var(--accent);color:var(--accent)}.calc-grid button:active{transform:translateY(1px)}.calc-grid .calc-op{background:var(--accent-soft);color:var(--accent)}.calc-grid .calc-fn{color:var(--ink-soft);font-size:14px}.calc-grid .calc-eq{background:var(--accent);border-color:var(--accent);color:#fff}.calc-extras{margin-top:6px}.calc-final-row{grid-template-columns:repeat(3,1fr);margin-top:6px}.qtable{border-collapse:collapse;margin:4px 0 18px;font-size:16px}.qtable th,.qtable td{border:1px solid var(--line);text-align:left;padding:7px 14px}.qtable th{background:var(--accent-soft);color:var(--accent);font-weight:600}.answer-row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}input[type=text].answer{border:2px solid var(--line);background:var(--bg);min-width:0;color:var(--ink);border-radius:10px;flex:220px;padding:12px 14px;font-size:24px}input[type=text].answer:focus{border-color:var(--accent);outline:none}input[type=text].answer.right{border-color:var(--good)}input[type=text].answer.wrong{border-color:var(--bad)}.unit{color:var(--ink-soft);font-size:20px}.choices{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;display:grid}.choice{appearance:none;border:2px solid var(--line);background:var(--panel);cursor:pointer;text-align:center;border-radius:10px;padding:16px;font-size:20px;transition:border-color .12s,background .12s}.choice:hover:not(:disabled){border-color:var(--accent)}.choice.selected{border-color:var(--accent);background:var(--accent-soft)}.choice.right{border-color:var(--good);background:var(--good-soft)}.choice.wrong{border-color:var(--bad);background:var(--bad-soft)}.choice:disabled{cursor:default}.feedback{border:1px solid #0000;border-radius:10px;margin-top:16px;padding:14px 16px}.feedback.right{background:var(--good-soft);border-color:var(--good)}.feedback.wrong{background:var(--bad-soft);border-color:var(--bad)}.feedback h3{margin:0 0 4px;font-size:17px}.feedback.right h3{color:var(--good)}.feedback.wrong h3{color:var(--bad)}.feedback .working{white-space:pre-wrap;margin:8px 0 0;font-size:15.5px;line-height:1.55}.hint{background:var(--warn-soft);border-left:3px solid var(--warn);border-radius:0 8px 8px 0;margin:12px 0 0;padding:10px 14px;font-size:15.5px}.pad-wrap{border:1px dashed var(--line);border-radius:10px;margin-top:18px;padding:10px}.pad-canvas{background:var(--panel);touch-action:none;cursor:crosshair;border:1px solid var(--line);border-radius:8px;width:100%;height:260px;display:block}.strand+.strand{margin-top:26px}.strand-head{border-bottom:2px solid var(--line);align-items:baseline;gap:10px;margin-bottom:10px;padding-bottom:6px;display:flex}.strand-head .n{font-variant-numeric:tabular-nums;color:var(--accent);font-weight:700}.topic-block{border-bottom:1px solid var(--line)}.topic-block:last-child{border-bottom:none}.topic{flex-wrap:wrap;align-items:flex-start;gap:12px;padding:11px 0;display:flex}.topic-actions{flex:none;gap:8px;margin-left:auto;display:flex}.topic-intro{padding:0 0 14px 34px}.topic-intro p{margin:0 0 8px}.topic-intro-example{background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:10px 12px}.topic-intro-label{text-transform:uppercase;letter-spacing:.03em;color:var(--ink-soft);margin-bottom:5px;font-size:12px;font-weight:600}.topic-intro-problem{white-space:pre-wrap;font-weight:600}.topic .body{flex:180px;min-width:0}.topic .title{font-weight:600}.topic input[type=checkbox]{width:22px;height:22px;accent-color:var(--accent);flex:none;margin-top:2px}.bar{background:var(--line);border-radius:99px;max-width:260px;height:6px;margin-top:7px;overflow:hidden}.bar>span{background:var(--accent);height:100%;display:block}.bar.mastered>span{background:var(--good)}.bar.weak>span{background:var(--bad)}.zone-grid{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:12px;margin-top:16px;display:grid}.zone{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);color:inherit;flex-direction:column;gap:6px;padding:16px 18px;text-decoration:none;transition:border-color .12s,transform 60ms;display:flex}.zone:hover{border-color:var(--accent);transform:translateY(-1px)}.zone-title{letter-spacing:-.01em;font-size:19px;font-weight:650}.zone-blurb{color:var(--ink-soft);flex:1;font-size:14.5px}.zone-foot{color:var(--accent);font-variant-numeric:tabular-nums;font-size:13px}.streak-row{font-variant-numeric:tabular-nums;flex-wrap:wrap;align-items:baseline;gap:18px;display:flex}.streak-row .big{letter-spacing:-.02em;font-size:26px;font-weight:700}.streak-row .big.hot{color:var(--good)}.clock{letter-spacing:-.03em;font-variant-numeric:tabular-nums;color:var(--accent);margin-bottom:10px;font-size:46px;font-weight:800;line-height:1}.clock.low{color:var(--bad)}.progress-fill.low{background:var(--bad)}.sprint-result{text-align:center}.sprint-score{letter-spacing:-.04em;color:var(--accent);font-variant-numeric:tabular-nums;font-size:72px;font-weight:800;line-height:1.05}.sprint-result .row{justify-content:center}.best-flag{background:var(--good-soft);color:var(--good);border-radius:99px;margin-top:6px;padding:6px 16px;font-weight:650;display:inline-block}.correction{background:var(--bad-soft);color:var(--bad);border-radius:10px;margin:14px 0 0;padding:12px 16px;font-size:18px}.year-tag{letter-spacing:.04em;border:1px solid var(--line);color:var(--ink-soft);white-space:nowrap;border-radius:5px;padding:1px 6px;font-size:11.5px;font-weight:700}.year-tag.grounding{background:var(--warn-soft);color:var(--warn);border-color:#0000}.tier-tag{letter-spacing:.04em;border:1px solid var(--line);color:var(--ink-soft);white-space:nowrap;border-radius:5px;padding:1px 6px;font-size:11.5px;font-weight:700}.tier-tag.higher{color:#7c3aed;background:#f0e6ff;border-color:#0000}@media (prefers-color-scheme:dark){.tier-tag.higher{color:#c4a6ff;background:#2c1f47}}.stat-grid{grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:12px;display:grid}.stat{border:1px solid var(--line);border-radius:10px;padding:12px 14px}.stat .value{letter-spacing:-.02em;font-variant-numeric:tabular-nums;font-size:27px;font-weight:700}.stat .label{color:var(--ink-soft);font-size:13px}.review{border-left:3px solid var(--bad);margin:12px 0;padding:10px 0 10px 14px}.review.ok{border-left-color:var(--good)}.review .q{white-space:pre-wrap;font-weight:600}label.setting{align-items:center;gap:10px;padding:8px 0;display:flex}label.setting input[type=number]{width:90px;font:inherit;border:1px solid var(--line);background:var(--bg);color:var(--ink);border-radius:8px;padding:7px 10px}label.setting input[type=checkbox]{width:20px;height:20px;accent-color:var(--accent)}@media (max-width:560px){.prompt{font-size:22px}.shell{padding:14px 12px 56px}}
