:root{--bg:#f6f7f9;--card:#fff;--ink:#1c1d1f;--mute:#6a6f73;--line:#d9dde1;--acc:#5624d0;--acc2:#efe9fc;--ok:#1e7b47;--okbg:#e5f4ec;--bad:#b32d0f;--badbg:#fbeae5;--warn:#b4690e;--h0:#ebedf0;--h1:#c6b4f2;--h2:#9c7deb;--h3:#7350de;--h4:#4b1fb8}
@media (prefers-color-scheme:dark){:root{--bg:#14151a;--card:#1d1f25;--ink:#e8e9ea;--mute:#9aa0a6;--line:#33363d;--acc:#a98bf5;--acc2:#2a2340;--ok:#5fcf8f;--okbg:#16301f;--bad:#f08a6f;--badbg:#3a1d16;--warn:#e8a54b;--h0:#26282e;--h1:#3b2f63;--h2:#5a46a0;--h3:#7b62d6;--h4:#a98bf5}}
*{box-sizing:border-box}
body{margin:0;font:16px/1.55 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Hiragino Sans",sans-serif;background:var(--bg);color:var(--ink)}
a{color:var(--acc)}
header{background:var(--card);border-bottom:1px solid var(--line);padding:10px 20px;display:flex;align-items:center;gap:14px;position:sticky;top:0;z-index:5}
header h1{font-size:17px;margin:0;cursor:pointer;white-space:nowrap}
header nav{display:flex;gap:4px;overflow-x:auto}
header nav a{padding:5px 10px;border-radius:6px;text-decoration:none;color:var(--ink);font-size:14px;white-space:nowrap}
header nav a.on{background:var(--acc2);color:var(--acc);font-weight:600}
.sp{flex:1}
main{max-width:1000px;margin:0 auto;padding:20px}
.card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:18px 20px;margin-bottom:14px}
.card h2{margin:0 0 6px;font-size:19px}.card h3{margin:0 0 10px;font-size:16px}
button,.btn{font:inherit;cursor:pointer;border-radius:6px;border:1px solid var(--ink);background:var(--card);color:var(--ink);padding:7px 14px;font-weight:600;text-decoration:none;display:inline-block}
button.pri,.btn.pri{background:var(--acc);border-color:var(--acc);color:#fff}
button:disabled{opacity:.4;cursor:default}
button.link{border:none;background:none;color:var(--acc);padding:4px 6px;font-weight:500}
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.mute{color:var(--mute);font-size:14px}
.grid2{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
.stat b{font-size:26px;display:block;line-height:1.2}.stat span{color:var(--mute);font-size:13px}
.track{cursor:pointer;transition:border-color .15s}.track:hover{border-color:var(--acc)}
.track .ic{font-size:28px}
.set{display:flex;gap:14px;align-items:flex-start;padding:14px 0;border-bottom:1px solid var(--line)}
.set:last-child{border-bottom:none}
.chk{width:22px;height:22px;border:2px solid var(--mute);border-radius:3px;flex:none;margin-top:3px;display:grid;place-items:center;font-size:13px;color:#fff}
.chk.on{background:var(--acc);border-color:var(--acc)}
.set .t{flex:1}
.tag{display:inline-block;font-size:12px;padding:1px 7px;border-radius:10px;background:var(--acc2);color:var(--acc);font-weight:600;margin-right:6px}
.stem{font-size:17px;margin:4px 0 16px}
.opt{display:flex;gap:12px;align-items:flex-start;border:1px solid var(--line);border-radius:6px;padding:11px 14px;margin:8px 0;cursor:pointer}
.opt:hover{border-color:var(--ink)}
.opt .l{font-weight:700;width:18px;flex:none}
.opt.sel{border-color:var(--acc);background:var(--acc2)}
.opt.right{border-color:var(--ok);background:var(--okbg)}
.opt.wrong{border-color:var(--bad);background:var(--badbg)}
.opt.lock{cursor:default}
.badge{font-size:12px;font-weight:700;margin-left:auto;white-space:nowrap}
.why{border-left:4px solid var(--acc);background:var(--acc2);padding:10px 14px;border-radius:4px;margin-top:12px}
.why.ok{border-color:var(--ok);background:var(--okbg)}.why.bad{border-color:var(--bad);background:var(--badbg)}
.qgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(36px,1fr));gap:6px}
.qgrid button{padding:5px 0;font-size:13px;border-color:var(--line);font-weight:500}
.qgrid .ans{background:var(--acc2);border-color:var(--acc)}
.qgrid .cur{outline:2px solid var(--ink)}
.qgrid .flag{border-color:var(--warn);border-width:2px}
.qgrid .g-ok{background:var(--okbg);border-color:var(--ok)}.qgrid .g-bad{background:var(--badbg);border-color:var(--bad)}
.timer{font-variant-numeric:tabular-nums;font-weight:700}.timer.low{color:var(--bad)}
.big{font-size:44px;font-weight:800;margin:0}
.pass{color:var(--ok)}.fail{color:var(--bad)}
table{border-collapse:collapse;width:100%;font-size:14px}
td,th{text-align:left;padding:6px 8px;border-bottom:1px solid var(--line)}
th{color:var(--mute);font-weight:600}
.bar{height:8px;background:var(--line);border-radius:4px;overflow:hidden;min-width:60px}
.bar i{display:block;height:100%;background:var(--acc)}
input[type=text],input[type=number],select{font:inherit;padding:7px 10px;border:1px solid var(--line);border-radius:6px;background:var(--card);color:var(--ink)}
input.reason{width:100%;margin-top:6px}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:6px;overflow:hidden}
.seg button{border:none;border-radius:0;font-weight:500}
.seg button.on{background:var(--acc);color:#fff}
code{background:var(--acc2);padding:0 4px;border-radius:3px;font-size:.92em}
.kbd{font-size:12px;color:var(--mute)}
.layout{display:grid;grid-template-columns:1fr 230px;gap:14px}
@media (max-width:760px){.layout{grid-template-columns:1fr}}
.heat{display:grid;grid-auto-flow:column;grid-template-rows:repeat(7,12px);grid-auto-columns:12px;justify-content:start;gap:3px;overflow-x:auto}
.heat i{width:12px;height:12px;border-radius:2px;background:var(--h0)}
.toast{position:fixed;right:20px;bottom:20px;z-index:9;max-width:360px;box-shadow:0 6px 24px #0003}
.lesson{margin-top:12px;border:1px solid var(--line);border-radius:8px;background:var(--bg)}
.lesson summary{cursor:pointer;padding:10px 14px;font-weight:600}
.lesson-body{padding:0 16px 12px;font-size:15px;max-height:60vh;overflow:auto}
.lesson-body h3,.lesson-body h4,.lesson-body h5{margin:14px 0 6px}
.lesson-body table{margin:8px 0}.lesson-body blockquote{margin:8px 0;padding:4px 12px;border-left:3px solid var(--line);color:var(--mute)}
pre.code{background:var(--card);border:1px solid var(--line);border-radius:6px;padding:10px;overflow:auto;font-size:13px;white-space:pre}
