:root{--bg:#0c0e11;--s1:#13161b;--s2:#1a1e25;--bd:#252a33;--tx:#e4e7ec;--mu:#8a93a2;--ac:#a78bfa;--ac2:#7c5cf0;--ok:#4ade80;--bad:#f87171;--warn:#fbbf24;--code:#0a0c0f;--r:10px;--mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--tx);font:15px/1.6 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;-webkit-font-smoothing:antialiased}
a{color:var(--ac);text-decoration:none}a:hover{text-decoration:underline}
.nav{position:fixed;inset:0 auto 0 0;width:220px;background:var(--s1);border-right:1px solid var(--bd);padding:18px 12px;display:flex;flex-direction:column;gap:2px;overflow:auto;z-index:20}
.brand-lg{font-weight:650;font-size:15px;padding:4px 10px 16px;line-height:1.3}
.brand-lg span{display:block;font-weight:400;color:var(--mu);font-size:12px}
.nav a{color:var(--mu);padding:8px 10px;border-radius:8px;font-size:14px}
.nav a:hover{background:var(--s2);color:var(--tx);text-decoration:none}
.nav a.on{background:var(--s2);color:var(--tx);box-shadow:inset 2px 0 0 var(--ac)}
main{margin-left:220px;padding:32px clamp(16px,4vw,48px) 80px;max-width:1000px;outline:none}
.topbar{display:none}
h1{font-size:26px;margin:0 0 6px;letter-spacing:-.01em}
h2{font-size:18px;margin:28px 0 10px}
h3{font-size:15px;margin:18px 0 8px}
.sub{color:var(--mu);margin:0 0 22px}
.muted{color:var(--mu)}.small{font-size:12.5px}
.card{background:var(--s1);border:1px solid var(--bd);border-radius:var(--r);padding:16px 18px;margin:12px 0}
.grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(190px,1fr))}
.stat{background:var(--s1);border:1px solid var(--bd);border-radius:var(--r);padding:14px 16px}
.stat b{display:block;font-size:24px;font-weight:650;letter-spacing:-.02em}
.stat span{color:var(--mu);font-size:12.5px}
.bar{height:6px;border-radius:4px;background:var(--s2);overflow:hidden}
.bar i{display:block;height:100%;background:var(--ac);border-radius:4px;transition:width .3s}
.bar.ok i{background:var(--ok)}.bar.bad i{background:var(--bad)}.bar.warn i{background:var(--warn)}
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.row.sp{justify-content:space-between}
.btn{background:var(--s2);color:var(--tx);border:1px solid var(--bd);border-radius:8px;padding:8px 14px;font:inherit;font-size:14px;cursor:pointer}
.btn:hover{border-color:#3a4150;background:#20252d}
.btn.pri{background:var(--ac2);border-color:var(--ac2);color:#fff}.btn.pri:hover{background:#6d4ee0}
.btn.ok{border-color:#1f6b3d;color:var(--ok)}.btn.bad{border-color:#7a2d2d;color:var(--bad)}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn.sm{padding:4px 10px;font-size:12.5px}
.icon-btn{background:none;border:0;color:var(--tx);font-size:20px;cursor:pointer}
select,input[type=text],input[type=number],textarea{background:var(--s2);color:var(--tx);border:1px solid var(--bd);border-radius:8px;padding:8px 10px;font:inherit;font-size:14px}
textarea{width:100%;font-family:var(--mono);font-size:13px;line-height:1.5;resize:vertical;min-height:140px;background:var(--code);tab-size:2}
label{font-size:13px;color:var(--mu)}
.tag{display:inline-block;font-size:11.5px;padding:1px 8px;border-radius:99px;background:var(--s2);border:1px solid var(--bd);color:var(--mu);font-family:var(--mono)}
.tag.ok{color:var(--ok);border-color:#1f6b3d}.tag.bad{color:var(--bad);border-color:#7a2d2d}.tag.warn{color:var(--warn);border-color:#6b5a1f}
code{font-family:var(--mono);font-size:.88em;background:var(--s2);padding:1px 6px;border-radius:5px;color:#d6ccff}
pre{margin:10px 0;background:var(--code);border:1px solid var(--bd);border-radius:8px;padding:12px 14px;overflow:auto;font:13px/1.55 var(--mono);color:#d5d9e0;position:relative;white-space:pre}
pre code{background:none;padding:0;color:inherit;font-size:inherit}
.cp{position:absolute;top:6px;right:6px}
.codehead{display:flex;justify-content:space-between;align-items:center;margin:14px 0 -6px;font:12px var(--mono);color:var(--mu)}
ul.pts{padding-left:20px;margin:8px 0}ul.pts li{margin:6px 0}
.dom{margin:22px 0 6px;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--mu)}
.item{display:flex;gap:12px;align-items:center;padding:10px 12px;border:1px solid var(--bd);border-radius:8px;margin:6px 0;background:var(--s1);color:var(--tx)}
.item:hover{border-color:#3a4150;text-decoration:none}
.chk{width:18px;height:18px;border:1.5px solid var(--bd);border-radius:50%;flex:none;display:grid;place-items:center;font-size:11px;color:#000}
.chk.on{background:var(--ok);border-color:var(--ok)}
.id{font:12px var(--mono);color:var(--ac);min-width:26px}
.flip{perspective:1000px;margin:16px 0}
.fc{min-height:240px;display:grid;place-items:center;text-align:center;padding:28px;background:var(--s1);border:1px solid var(--bd);border-radius:14px;cursor:pointer;user-select:none;font-size:19px;line-height:1.5}
.fc.back{background:#171428;border-color:#3b2f73;font-size:17px}
.fc small{display:block;color:var(--mu);font-size:12px;margin-top:14px}
.opt{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border:1px solid var(--bd);border-radius:8px;margin:7px 0;cursor:pointer;background:var(--s1)}
.opt:hover{border-color:#3a4150}
.opt input{margin-top:4px;accent-color:var(--ac2)}
.opt.sel{border-color:var(--ac)}
.opt.right{border-color:var(--ok);background:#0f2318}
.opt.wrong{border-color:var(--bad);background:#2a1414}
.exp{border-left:3px solid var(--ac);background:var(--s1);padding:10px 14px;border-radius:0 8px 8px 0;margin:12px 0}
.qtext{font-size:16.5px;margin:6px 0 12px;white-space:pre-line}
.qtext pre{white-space:pre}
.nums{display:flex;flex-wrap:wrap;gap:5px;margin:10px 0}
.nums button{width:34px;height:30px;border-radius:6px;border:1px solid var(--bd);background:var(--s1);color:var(--mu);cursor:pointer;font-size:12.5px}
.nums button.ans{background:#241d44;color:#fff;border-color:#4a3d8f}
.nums button.cur{outline:2px solid var(--ac)}
.nums button.flag{box-shadow:inset 0 -3px 0 var(--warn)}
.timer{font:600 22px var(--mono);letter-spacing:.02em}
.timer.low{color:var(--bad)}
.term{background:var(--code);border:1px solid var(--bd);border-radius:10px;font:13px/1.55 var(--mono);padding:12px 14px;max-height:380px;overflow:auto}
.term .o{color:#9aa3b2;white-space:pre-wrap;margin:2px 0 8px}
.term .c{color:#e4e7ec}.term .c:before{content:attr(data-ps);color:var(--ac)}
.term .e{color:var(--bad);white-space:pre-wrap}
.term .g{color:var(--ok)}
.term input{background:none;border:0;outline:0;color:#fff;font:inherit;width:calc(100% - 3ch);padding:0}
.tline{display:flex;gap:1ch;color:var(--ac)}
.simtask{border:1px solid var(--bd);border-radius:8px;padding:10px 12px;margin:8px 0;background:var(--s1)}
.simtask.done{border-color:#1f6b3d}
ol.steps{padding-left:22px}ol.steps li{margin:7px 0}
details{margin:10px 0}summary{cursor:pointer;color:var(--ac)}
table{border-collapse:collapse;width:100%;font-size:13.5px}
td,th{border-bottom:1px solid var(--bd);padding:6px 8px;text-align:left;vertical-align:top}
td:first-child{font-family:var(--mono);font-size:12.5px;white-space:nowrap;color:#d6ccff}
.cheat{columns:2;column-gap:20px}
.cheat .blk{break-inside:avoid;margin-bottom:14px;background:var(--s1);border:1px solid var(--bd);border-radius:8px;padding:6px 12px}
.cheat h3{margin:8px 0 4px;color:var(--ac)}
.toast{position:fixed;bottom:18px;left:50%;transform:translateX(-50%) translateY(20px);background:var(--s2);border:1px solid var(--bd);padding:8px 16px;border-radius:8px;opacity:0;pointer-events:none;transition:.25s;z-index:99}
.toast.show{opacity:1;transform:translateX(-50%)}
.hide{display:none!important}
@media(max-width:820px){
  .topbar{display:flex;gap:12px;align-items:center;position:sticky;top:0;background:var(--s1);border-bottom:1px solid var(--bd);padding:8px 14px;z-index:15}
  .brand{font-weight:650}
  .nav{transform:translateX(-100%);transition:transform .2s;width:240px}
  .nav.open{transform:none;box-shadow:0 0 40px #000}
  main{margin-left:0;padding-top:20px}
  .cheat{columns:1}
}
@media print{
  body{background:#fff;color:#000;font-size:10pt}
  .nav,.topbar,.noprint,.toast,.cp{display:none!important}
  main{margin:0;padding:0;max-width:none}
  .cheat{columns:2;column-gap:12px}
  .cheat .blk{background:#fff;border:1px solid #bbb}
  .cheat h3{color:#000}td,th{border-color:#ddd;padding:2px 4px}td:first-child{color:#000}
  code{background:#eee;color:#000}h1{font-size:16pt}
  .sub{color:#333}.muted{color:#333}
}
@media(max-width:820px){.grid{grid-template-columns:repeat(2,1fr)}}
