:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#f4f5f7;--ink:#1c1e21;--header:#2b3a4a;--tabs:#1f2c3a;--primary:#2b6cb0;--primary-hover:#245a94;--primary-text:#2b6cb0;--muted:#6b7280;--card:#fff;--border:#dde3ea;--radius:12px;--shadow:0 1px 3px #00000014;--surface-2:#eef2f7;--surface-3:#f8fafc;--surface-hover:#f5f7fa;--surface-sel:#ebf3fb;--border-subtle:#eee;--border-2:#cbd5e0;--ink-2:#4a5568;--ink-3:#98a2ae;--on-accent:#fff;--on-accent-muted:#b8c4d0;--success:#237a23;--success-border:#2f9e44;--success-bg:#e6f6e6;--danger:#b02929;--danger-border:#e03131;--danger-strong:#e03131;--danger-bg:#fde4e4;--danger-bg-soft:#fdf3f3;--danger-border-soft:#f3c2c2;--warn:#976d00;--warn-bg:#fff4db;--online:#2fae5f;--tint-bg:#f0f6ff;--tint-border:#c9dcff;--canvas-bg:#fff;--plot-bg:#fff;--plot-grid:#e4e9f0;--plot-axis:#8a94a6;--plot-you:#2b6fe3;--plot-ai:#d3453d;--shadow-2:0 2px 8px #0000001a;--shadow-3:0 2px 6px #00000024;--shadow-4:0 6px 24px #0000002e;--shadow-hover:0 6px 18px #1e32501f}[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#0f1419;--ink:#e4e8ee;--header:#151c25;--tabs:#10161d;--primary:#3b7cc0;--primary-hover:#4a8bd0;--primary-text:#6aa9ea;--muted:#8b96a5;--card:#1a212a;--border:#2a3441;--shadow:0 1px 3px #00000080;--surface-2:#232c37;--surface-3:#161d25;--surface-hover:#202832;--surface-sel:#1c2f47;--border-subtle:#232c37;--border-2:#3a4759;--ink-2:#b0bac7;--ink-3:#7d8794;--on-accent:#fff;--on-accent-muted:#9fb0c2;--success:#6fce7f;--success-border:#3f9f56;--success-bg:#16301d;--danger:#f0908f;--danger-border:#c9554f;--danger-strong:#ff7a72;--danger-bg:#3a1d1d;--danger-bg-soft:#2a1616;--danger-border-soft:#6b3230;--warn:#e2b341;--warn-bg:#332a12;--online:#4ed07f;--tint-bg:#17283c;--tint-border:#2c4a6b;--canvas-bg:#1b232d;--plot-bg:#121820;--plot-grid:#263140;--plot-axis:#6b7887;--plot-you:#6ba4ff;--plot-ai:#ff7a6e;--shadow-2:0 2px 8px #00000080;--shadow-3:0 2px 6px #00000073;--shadow-4:0 6px 24px #0000008c;--shadow-hover:0 6px 18px #00000080}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--ink);font-family:-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;line-height:1.55;transition:background-color .2s,color .2s}@media (prefers-reduced-motion:reduce){body{transition:none}}a{color:var(--primary-text)}code{background:var(--surface-2);border-radius:4px;padding:1px 5px;font-family:ui-monospace,Consolas,monospace;font-size:.9em}.container{width:100%;max-width:1240px;margin:0 auto;padding:24px 20px 80px}header.top{background:var(--header);color:var(--on-accent)}header.top .container{padding-top:18px;padding-bottom:18px}header.top h1{font-size:20px}header.top p{opacity:.75;font-size:13px}nav.tabs{background:var(--tabs);gap:2px;padding:0 20px;display:flex}nav.tabs a{color:var(--on-accent-muted);border-bottom:3px solid #0000;align-items:center;gap:6px;padding:10px 14px;font-size:14px;text-decoration:none;display:inline-flex;position:relative}nav.tabs a.active{color:var(--on-accent);border-bottom-color:var(--primary)}.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);margin-top:16px;padding:20px 22px}.card h2{margin-bottom:10px;font-size:16px}.muted{color:var(--muted);font-size:13px}.grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;display:grid}.bank{border:1px solid var(--border);background:var(--card);border-radius:10px;padding:12px 14px}.bank .name{font-size:14.5px;font-weight:600}.bank .meta{color:var(--muted);margin-top:4px;font-size:12.5px}.pill{background:var(--surface-2);color:var(--ink-2);border-radius:20px;margin-left:6px;padding:2px 8px;font-size:11px;display:inline-block}.pill.ready{background:var(--success-bg);color:var(--success)}.pill.todo{background:var(--warn-bg);color:var(--warn)}.status{font-size:13px}.status.ok{color:var(--success)}.status.err{color:var(--danger)}button.btn{background:var(--primary);color:var(--on-accent);cursor:pointer;border:none;border-radius:8px;padding:9px 18px;font-size:14px}button.btn:hover{background:var(--primary-hover)}.math-block{margin:8px 0;display:block;overflow-x:auto}.user-area{color:var(--on-accent-muted);align-items:center;gap:12px;margin-left:auto;font-size:13px;display:flex}.user-name{opacity:.85}.link{color:var(--on-accent-muted);font:inherit;cursor:pointer;background:0 0;border:none;align-items:center;gap:5px;padding:0;text-decoration:none;display:inline-flex}.link:hover{color:var(--on-accent)}.lang-toggle{align-items:center;gap:2px;margin-left:auto;font-size:12px;display:flex}.lang-toggle span{color:var(--on-accent-muted);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;padding:3px 8px}.lang-toggle span.on{background:var(--primary);color:var(--on-accent)}.theme-toggle{width:26px;height:26px;color:var(--on-accent-muted);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;margin-left:8px;padding:4px;transition:background .15s,color .15s;display:inline-flex}.theme-toggle:hover{color:var(--on-accent);background:#ffffff24}.theme-toggle:focus-visible{outline:2px solid var(--primary);outline-offset:1px}.auth-box{max-width:420px;margin:40px auto 0}.auth-tabs{gap:4px;margin-top:14px;display:flex}.auth-tab{text-align:center;cursor:pointer;color:var(--ink-2);background:var(--surface-2);border-radius:8px;flex:1;padding:8px;font-size:14px}.auth-tab.active{background:var(--primary);color:var(--on-accent)}.auth-form{flex-direction:column;gap:6px;margin-top:14px;display:flex}.auth-form label{color:var(--ink-2);font-size:13px}.auth-form input{border:1.5px solid var(--border);border-radius:8px;padding:9px 12px;font-size:15px}.auth-form .btn{margin-top:10px}.auth-msg{min-height:18px;margin-top:10px;font-size:13.5px}.auth-msg.err{color:var(--danger)}.card.compact{margin-top:10px;padding:12px 18px}.section-title{color:var(--ink-2);align-items:center;gap:8px;margin:20px 0 8px;font-size:16px;display:flex}.gen-grid{grid-template-columns:1fr 1fr;gap:0 16px;display:grid}@media (width<=720px){.gen-grid{grid-template-columns:1fr}}.test-item{cursor:pointer;justify-content:space-between;align-items:center;display:flex}.test-item:hover{border-color:var(--border-2)}.test-item h3{font-size:16px}.test-item .meta{color:var(--ink-2);margin-top:4px;font-size:13px}.back{cursor:pointer;color:var(--primary-text)}.disclaimer{color:var(--ink-2);font-size:13px;line-height:1.6}table.stats{border-collapse:collapse;width:100%}table.stats th,table.stats td{text-align:left;border-bottom:1px solid var(--border);padding:6px 8px;font-size:14px}table.stats th{color:var(--ink-2);width:140px;font-weight:600}.btn.secondary{background:var(--surface-2);color:var(--ink-2)}.sticky-bar{z-index:10;background:var(--card);border-radius:var(--radius);box-shadow:0 2px 8px var(--shadow-2);justify-content:space-between;align-items:center;margin-top:16px;padding:12px 18px;display:flex;position:sticky;top:0}.timer{font-variant-numeric:tabular-nums;font-size:16px;font-weight:700}.timer.low{color:var(--danger-strong)}.progress{color:var(--ink-2);font-size:13px}.score{font-size:22px;font-weight:800}.saved-note{color:var(--ink-2);font-size:12.5px}.qhead{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:6px;display:flex}.qnum{font-size:16px;font-weight:700}.badge{background:var(--surface-2);color:var(--ink-2);border-radius:20px;padding:3px 10px;font-size:11.5px}.diff{border-radius:20px;padding:3px 10px;font-size:11.5px}.diff.easy{background:var(--success-bg);color:var(--success)}.diff.mid{background:var(--warn-bg);color:var(--warn)}.diff.hard{background:var(--danger-bg);color:var(--danger)}.qtext{margin:10px 0 12px;font-size:15.5px}.choices{flex-direction:column;gap:8px;display:flex}.choice{border:1.5px solid var(--border);cursor:pointer;background:var(--card);border-radius:8px;align-items:baseline;gap:10px;padding:8px 12px;font-size:15px;display:flex}.choice:hover{border-color:var(--primary)}.choice.selected{border-color:var(--primary);background:var(--surface-sel)}.choice.correct{border-color:var(--success-border);background:var(--success-bg)}.choice.wrong{border-color:var(--danger-border);background:var(--danger-bg)}.choice .letter{min-width:18px;font-weight:700}.int-input{border:1.5px solid var(--border);font-variant-numeric:tabular-nums;border-radius:8px;width:140px;padding:8px 12px;font-size:16px}.int-input.correct{border-color:var(--success-border);background:var(--success-bg)}.int-input.wrong{border-color:var(--danger-border);background:var(--danger-bg)}.solution{background:var(--surface-3);border-left:3px solid var(--primary);border-radius:6px;margin-top:12px;padding:12px 14px;font-size:14.5px}.meta{color:var(--ink-2);font-size:13px}.auth-msg.ok{color:var(--success)}.btn.sm{padding:4px 10px;font-size:12px}.btn.ghost{background:var(--surface-2);color:var(--ink-2)}.pct-bar{background:var(--surface-2);vertical-align:middle;border-radius:4px;width:120px;height:8px;display:inline-block}.pct-bar>div{background:var(--primary);border-radius:4px;height:8px}.fr-layout{grid-template-columns:320px 1fr;align-items:start;gap:16px;display:grid}@media (width<=800px){.fr-layout{grid-template-columns:1fr}}.fr-add{gap:8px;display:flex}.fr-add input{flex:1}.fr-req{border-top:1px solid var(--border-subtle);justify-content:space-between;align-items:center;padding:6px 0;display:flex}.fr-item{border-top:1px solid var(--border-subtle);cursor:pointer;border-radius:6px;align-items:center;gap:8px;padding:8px 6px;display:flex}.fr-item:hover{background:var(--surface-hover)}.fr-item.active{background:var(--surface-sel)}.fr-name{text-overflow:ellipsis;flex:1;font-size:14px;overflow:hidden}.fr-status{color:var(--ink-3);font-size:12px}.fr-x{color:var(--ink-3);padding:0 4px;display:inline-flex}.fr-x:hover{color:var(--danger)}.dot{background:var(--ink-3);border-radius:50%;flex:none;width:9px;height:9px;display:inline-block}.dot.on{background:var(--online)}.chat-card{flex-direction:column;min-height:420px;display:flex}.chat-head{border-bottom:1px solid var(--border-subtle);align-items:center;gap:8px;padding-bottom:8px;display:flex}.chat-msgs{flex:1;min-height:260px;max-height:55vh;padding:10px 2px;overflow-y:auto}.chat-row{margin:4px 0;display:flex}.chat-row.mine{justify-content:flex-end}.bubble{background:var(--surface-2);white-space:pre-wrap;word-break:break-word;border-radius:12px;max-width:70%;padding:7px 11px;font-size:14px}.chat-row.mine .bubble{background:var(--primary);color:var(--on-accent)}.chat-input{border-top:1px solid var(--border-subtle);gap:8px;padding-top:8px;display:flex}.chat-input input{flex:1}.pk-form{flex-wrap:wrap;gap:8px;margin-bottom:6px;display:flex}.pk-form select{min-width:130px}.cl-join-box{background:var(--tint-bg);border:1.5px solid var(--tint-border);border-radius:12px;margin-bottom:6px;padding:14px 16px}.cl-code{background:var(--surface-2);letter-spacing:1px;border-radius:8px;padding:4px 12px;font-family:ui-monospace,Menlo,monospace;font-size:18px;font-weight:800}.cl-students{flex-wrap:wrap;gap:6px;margin:8px 0;display:flex}.cl-student{background:var(--surface-2);border-radius:16px;align-items:center;gap:5px;padding:3px 10px;font-size:13px;display:flex}.cl-reports{border-collapse:collapse;width:100%;margin-top:8px;font-size:13.5px}.cl-reports th,.cl-reports td{text-align:left;border-bottom:1px solid var(--border-subtle);padding:6px 8px}.cl-reports th{color:var(--ink-2);font-size:12px;font-weight:600}.pk-mode-tabs{border:1.5px solid var(--border-2);border-radius:10px;gap:0;max-width:340px;margin-bottom:10px;display:flex;overflow:hidden}.pk-mode-tab{text-align:center;cursor:pointer;background:var(--card);color:var(--ink-2);flex:1;justify-content:center;align-items:center;gap:6px;padding:7px 10px;font-size:14px;font-weight:700;display:inline-flex}.pk-mode-tab.on{background:var(--tabs);color:var(--on-accent)}.race-friends{flex-wrap:wrap;gap:6px;max-height:120px;margin-bottom:8px;display:flex;overflow-y:auto}.race-friend{border:1px solid var(--border-2);cursor:pointer;background:var(--card);border-radius:18px;align-items:center;gap:6px;padding:4px 10px;font-size:13px;display:flex}.race-friend:has(input:checked){background:var(--surface-sel);border-color:var(--primary)}.pk-stand-row{border-top:1px dashed var(--border-subtle);justify-content:space-between;align-items:baseline;gap:10px;padding:3px 0;font-size:14px;display:flex}.pk-stand-row:first-child{border-top:none}.pk-row small{color:var(--ink-2)}.pk-muted{color:var(--ink-3);align-items:center;gap:4px;font-size:13px;display:inline-flex}.pk-won{color:var(--success)}.pk-lost{color:var(--danger)}.wb-layout{grid-template-columns:310px 1fr;align-items:start;gap:16px;display:grid}@media (width<=800px){.wb-layout{grid-template-columns:1fr}}.wb-tools{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:10px;display:flex}.wb-tool{border:1px solid var(--border-2);background:var(--card);cursor:pointer;border-radius:8px;align-items:center;gap:5px;padding:5px 10px;font-size:13px;display:inline-flex}.wb-tool:hover{border-color:var(--primary)}.wb-tool.on{background:var(--primary);color:var(--on-accent);border-color:var(--primary)}.wb-color{border:2px solid var(--card);width:20px;height:20px;box-shadow:0 0 0 1px var(--border-2);cursor:pointer;border-radius:50%;flex:none}.wb-color.on{box-shadow:0 0 0 2px var(--ink)}.wb-sel-row{flex-direction:column;gap:6px;margin-bottom:4px;display:flex}.wb-grp-row{border:1.5px solid var(--border);border-radius:8px;gap:0;margin-bottom:6px;display:flex;overflow:hidden}.wb-grp{background:var(--surface-2);color:var(--ink-2);cursor:pointer;border:none;flex:1;padding:6px 0;font-size:13px;font-weight:600}.wb-grp.on{background:var(--card);color:var(--ink);box-shadow:inset 0 -2px 0 var(--primary-text)}.wb-sel-row select,.wb-search{border:1.5px solid var(--border);background:var(--card);border-radius:8px;width:100%;padding:6px 8px;font-size:13px}.wb-items{flex-direction:column;gap:8px;max-height:48vh;padding:4px 2px 4px 0;display:flex;overflow-y:auto}.wb-item{border:1px solid var(--border);cursor:pointer;background:var(--card);text-align:left;overflow-wrap:anywhere;border-radius:8px;align-items:baseline;gap:6px;padding:6px 9px;font-size:13.5px;line-height:1.9;display:flex}.wb-item:hover{border-color:var(--primary);background:var(--surface-sel)}.wb-item .wb-tag{color:var(--ink-3);background:var(--surface-2);border-radius:4px;flex:none;align-self:center;padding:0 4px;font-size:10px}.wb-custom-btn{justify-content:center;align-items:center;gap:5px;width:100%;margin-top:10px;display:inline-flex}.wb-board-wrap{height:calc(100vh - 235px);min-height:460px;padding:0;position:relative;overflow:hidden}.wb-canvas{background:var(--canvas-bg);touch-action:none;cursor:crosshair;border-radius:12px;width:100%;height:100%;position:absolute;inset:0}.wb-note{cursor:grab;background:var(--card);border:1px solid var(--border-2);box-shadow:0 2px 6px var(--shadow-3);-webkit-user-select:none;user-select:none;touch-action:none;border-radius:8px;padding:5px 10px;position:absolute}.wb-note:active{cursor:grabbing}.wb-del,.wb-edit{width:18px;height:18px;color:var(--on-accent);text-align:center;cursor:pointer;border-radius:50%;justify-content:center;align-items:center;display:none;position:absolute}.wb-del{background:var(--danger-border);top:-8px;right:-8px}.wb-edit{background:var(--primary);top:-8px;left:-8px}.wb-note:hover .wb-del,.wb-note:hover .wb-edit{display:flex}.wb-editor{z-index:5000;background:var(--card);border:1.5px solid var(--border-2);box-shadow:0 6px 24px var(--shadow-4);border-radius:10px;padding:10px 12px;position:absolute;top:8px;left:8px;right:8px}.wb-ed-row{align-items:flex-start;gap:10px;display:flex}.wb-ed-tex{border:1.5px solid var(--border);resize:vertical;border-radius:8px;flex:1;min-width:0;padding:8px 10px;font-family:ui-monospace,Menlo,monospace;font-size:14px}.wb-ed-prev{border:1px dashed var(--border-subtle);background:var(--surface-3);border-radius:8px;flex:1;align-items:center;gap:5px;min-width:0;min-height:42px;max-height:130px;padding:8px 10px;font-size:15px;display:flex;overflow:auto}.wb-ed-prev.err{color:var(--danger);border-color:var(--danger-border-soft);background:var(--danger-bg-soft);font-size:12.5px}.wb-ed-prev.plain{white-space:pre-wrap;font-family:inherit;font-size:14.5px}.wb-ed-btns{flex-wrap:wrap;align-items:center;gap:6px;margin-top:8px;display:flex}.wb-kb{border-top:1px solid var(--border-subtle);margin-top:8px;padding-top:8px}.wb-kb.hidden{display:none}.wb-kb-tabs{flex-wrap:wrap;gap:4px;margin-bottom:6px;display:flex}.wb-kb-tab{border:1px solid var(--border-2);background:var(--card);cursor:pointer;border-radius:14px;padding:3px 10px;font-size:12px}.wb-kb-tab.on{background:var(--primary);color:var(--on-accent);border-color:var(--primary)}.wb-kb-keys{flex-wrap:wrap;gap:4px;max-height:128px;display:flex;overflow-y:auto}.wb-key{border:1px solid var(--border);background:var(--card);cursor:pointer;border-radius:6px;min-width:30px;padding:4px 7px;font-family:ui-monospace,Menlo,monospace;font-size:13px}.wb-key:hover{background:var(--surface-sel);border-color:var(--primary)}.game-list{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px;display:grid}.game-card{cursor:pointer;transition:transform .12s,box-shadow .12s}.game-card:hover{box-shadow:0 6px 18px var(--shadow-hover);transform:translateY(-2px)}.game-card h3{align-items:center;gap:8px;display:flex}.gw-wrap{flex-wrap:wrap;align-items:flex-start;gap:18px;display:flex}.gw-canvas-box{border:1.5px solid var(--border-2);background:var(--plot-bg);border-radius:8px}.gw-ctl{min-width:230px;max-width:280px}.gw-ctl label{color:var(--ink-2);margin:8px 0 2px;font-size:13px;display:block}.gw-input{border:1.5px solid var(--border-2);border-radius:8px;width:100%;padding:9px 10px;font-family:ui-monospace,Menlo,monospace;font-size:16px}.ws-upload{flex-wrap:wrap;align-items:center;gap:12px;margin:12px 0;display:flex}.ws-example{white-space:pre-wrap;background:#f4f6fa;border:1px solid #e0e6ef;border-radius:8px;padding:12px;font-size:13px;overflow-x:auto}.ws-head{flex-wrap:wrap;gap:10px;margin-bottom:10px;display:flex}.ws-questions{margin:14px 0 0;padding-left:24px}.ws-q{break-inside:avoid;margin:14px 0}.ws-q-text{font-size:15.5px}.ws-choices{margin:6px 0 0;padding-left:24px}.ws-choices li{margin:3px 0}.ws-ans{color:#2e7d4f;margin:6px 0 0;font-size:14px}.ws-mine{margin:0;padding:0;list-style:none}.ws-mine li{margin:6px 0}.ws-link{color:#2f6fd0;cursor:pointer;background:0 0;border:none;padding:0;font-size:14px}.ws-link:hover{text-decoration:underline}@media print{header.top,nav.tabs,.no-print,.btn{display:none!important}.card{box-shadow:none;border:none}.ws-q{break-inside:avoid}}.dr-levels{flex-wrap:wrap;gap:8px;display:flex}.dr-run{text-align:center;max-width:560px;margin:0 auto}.dr-meta{color:#666;justify-content:space-between;margin-bottom:14px;font-size:13px;display:flex}.dr-q{min-height:48px;margin:22px 0;font-size:26px}.dr-fb{min-height:32px;margin-bottom:8px;font-size:16px}.dr-ok{color:#2e9e5b}.dr-bad{color:#d05555}.dr-input{text-align:center;border:2px solid #cdd5e0;border-radius:10px;width:220px;padding:10px;font-size:22px}.dr-exit{margin-top:16px}.dr-summary{text-align:center;max-width:480px;margin:0 auto}.dr-emoji{margin:14px 0 4px;font-size:52px}.dr-scoreline{margin:4px 0;font-size:22px}.dr-newbest{color:#c98a1b;margin:8px 0;font-weight:600}.dr-actions{justify-content:center;gap:10px;margin-top:16px;display:flex}.ws-file-input{opacity:0;clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}.ws-drop{border:2px dashed #0000;transition:border-color .15s,background .15s;position:relative}.ws-drop.over{border-color:var(--accent,#2f6fd0);background:#2f6fd00f}.ws-upload{align-items:center}
