@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff) format("woff")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/jetbrains-mono-latin-700-normal-BYuf6tUa.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-700-normal-D3wTyLJW.woff) format("woff")}@font-face{font-family:Atkinson Hyperlegible;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/atkinson-hyperlegible-latin-400-normal-BrHNak5F.woff2) format("woff2"),url(/assets/atkinson-hyperlegible-latin-400-normal-BbWidj28.woff) format("woff")}@font-face{font-family:Atkinson Hyperlegible;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/atkinson-hyperlegible-latin-700-normal-GZI4o3u0.woff2) format("woff2"),url(/assets/atkinson-hyperlegible-latin-700-normal-BK6Glc0m.woff) format("woff")}:root,[data-theme=dark]{--bg:#111713;--surface:#192220;--raised:#233029;--line:#2d3b34;--text:#ecead9;--dim:#8da094;--accent:#f2cf66;--accent-ink:#1b1d10;--good:#7bd39a;--bad:#f28b7a;--editor-bg:#151d19;--gutter-bg:#121915;--select:#2f4a3d;--shadow:0 10px 30px rgba(0,0,0,.45);color-scheme:dark;--mono:"JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;--sans:"Atkinson Hyperlegible", system-ui, sans-serif}[data-theme=light]{--bg:#f4f1e7;--surface:#fffdf7;--raised:#ebe6d6;--line:#d6cfb8;--text:#1d2a23;--dim:#58675d;--accent:#1d6b47;--accent-ink:#ffffff;--good:#17814a;--bad:#c0392b;--editor-bg:#fffdf7;--gutter-bg:#f1ede0;--select:#cfe6d8;--shadow:0 10px 30px rgba(60,50,20,.18);color-scheme:light}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{margin:0;height:100%;overflow:hidden;background:var(--bg);color:var(--text);font-family:var(--sans)}button{font-family:inherit;cursor:pointer}button:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.dim{color:var(--dim)}.small{font-size:12px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:40px;padding:0 14px;background:var(--raised);color:var(--text);border:1px solid var(--line);border-radius:10px;font-size:14px;font-weight:700;white-space:nowrap}.btn:disabled{opacity:.5;cursor:default}.btn.pri{background:var(--accent);color:var(--accent-ink);border-color:transparent;box-shadow:0 2px 10px color-mix(in srgb,var(--accent) 35%,transparent)}.btn.hot{border-color:var(--accent);color:var(--accent)}.btn.wide{width:100%;min-height:46px;font-size:16px}.icon{display:inline-grid;place-items:center;width:40px;height:40px;background:transparent;color:var(--text);border:1px solid transparent;border-radius:10px}.icon:hover{background:var(--raised)}.app{position:fixed;left:0;right:0;top:var(--vt, 0px);height:var(--vh, 100dvh);display:flex;flex-direction:column;padding-bottom:env(safe-area-inset-bottom)}.top{display:flex;align-items:center;gap:6px;padding:6px 8px 6px 10px;background:var(--surface);border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:10px;flex:1;min-width:0}.logo{display:grid;place-items:center;width:36px;height:36px;border-radius:10px;background:var(--accent);color:var(--accent-ink);font:700 14px var(--mono);flex:none}.logo.big{width:52px;height:52px;font-size:20px;border-radius:14px}.who{display:flex;flex-direction:column;line-height:1.15;min-width:0}.who b{font:700 16px var(--mono);letter-spacing:.08em}.who small{color:var(--dim);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dot{width:10px;height:10px;border-radius:50%;background:var(--accent);flex:none;margin:0 4px}.dot.ok{background:var(--good)}.dot.off{background:var(--bad)}.scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:8}.menu{position:absolute;right:8px;top:54px;z-index:9;min-width:230px;background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);padding:6px;display:flex;flex-direction:column}.menu button{display:flex;align-items:center;gap:10px;padding:12px;background:none;border:0;border-radius:8px;color:var(--text);font-size:15px;text-align:left}.menu button:hover{background:var(--raised)}.editor{flex:1 1 0;min-height:90px;overflow:hidden}.panel{flex:0 0 30%;max-height:40%;min-height:84px;display:flex;flex-direction:column;background:var(--surface);border-top:1px solid var(--line)}.seg{display:flex;align-items:center;gap:4px;padding:6px 8px}.seg button{display:inline-flex;align-items:center;gap:6px;padding:7px 16px;background:transparent;border:0;border-radius:999px;color:var(--dim);font-size:14px;font-weight:700}.seg button.on{background:var(--raised);color:var(--text)}.seg i{width:8px;height:8px;border-radius:50%;background:var(--good)}.seg i.bad{background:var(--bad)}.ms{margin-left:auto;color:var(--dim);font-size:12px;padding-right:6px}textarea,pre{flex:1;margin:0;padding:10px 14px;border:0;resize:none;background:transparent;color:var(--text);font:14px/1.55 var(--mono);overflow:auto;white-space:pre-wrap;outline:none}pre.err{color:var(--bad)}.keys{display:flex;gap:6px;padding:7px 6px;overflow-x:auto;background:var(--surface);border-top:1px solid var(--line);scrollbar-width:none}.keys button{flex:0 0 auto;min-width:44px;height:42px;padding:0 12px;background:var(--raised);color:var(--text);border:1px solid var(--line);border-radius:9px;font:700 16px var(--mono)}.keys button:active{background:var(--accent);color:var(--accent-ink)}.banner{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 10px;background:color-mix(in srgb,var(--accent) 16%,var(--surface));border-bottom:1px solid var(--line);font-size:14px}.banner span{flex:1 1 140px}.banner .btn{min-height:36px}.toast{position:fixed;bottom:70px;left:50%;transform:translate(-50%);background:var(--accent);color:var(--accent-ink);padding:10px 18px;border-radius:10px;font-weight:700;z-index:30;max-width:90vw;text-align:center;box-shadow:var(--shadow)}.page{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;padding:16px;background:radial-gradient(900px 500px at 50% -10%,color-mix(in srgb,var(--accent) 14%,transparent),transparent),var(--bg)}.card{max-width:390px;margin:7vh auto 0;display:flex;flex-direction:column;gap:12px;padding:24px;background:var(--surface);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow)}.card h1{margin:0;font-size:28px}.card p{margin:0}label{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--dim)}input{background:var(--bg);border:1px solid var(--line);border-radius:10px;color:var(--text);padding:13px;font:17px var(--sans)}input.code{font:700 24px var(--mono);letter-spacing:.3em;text-transform:uppercase;text-align:center}.msg{color:var(--bad);font-size:14px}.card a{text-align:center;color:var(--dim)}.dash{position:fixed;top:0;right:0;bottom:0;left:0;display:grid;grid-template-columns:260px minmax(0,1fr) 340px;background:var(--bg)}.side{display:flex;flex-direction:column;gap:10px;padding:12px;background:var(--surface);border-right:1px solid var(--line);overflow:auto}.roomcode{position:relative;text-align:left;background:var(--raised);border:1px solid var(--line);border-radius:14px;padding:12px 14px;color:var(--text);display:flex;flex-direction:column;gap:2px}.roomcode b{font:700 32px var(--mono);letter-spacing:.14em;color:var(--accent)}.roomcode svg{position:absolute;right:12px;bottom:14px;color:var(--dim)}.sidehead{padding:4px 4px 0;text-transform:uppercase;letter-spacing:.08em}.list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px;flex:1;overflow:auto}.list li{display:flex;align-items:center;gap:8px;padding:10px 12px;border-radius:10px;background:transparent;cursor:pointer;border:1px solid transparent}.list li:hover{background:var(--raised)}.list li.sel{background:var(--raised);border-color:var(--accent)}.list li.empty{cursor:default}.st{width:11px;height:11px;border-radius:50%;flex:none;background:#6f8179}.st.success{background:var(--good)}.st.error{background:var(--bad)}.st.running{background:var(--accent);animation:pulse 1s infinite}@keyframes pulse{50%{opacity:.35}}.main{display:flex;flex-direction:column;min-width:0;min-height:0}.tools{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--surface);border-bottom:1px solid var(--line);flex-wrap:wrap}.grow{flex:1}.io{display:flex;flex-direction:column;gap:6px;padding:12px;background:var(--surface);border-left:1px solid var(--line);min-height:0}.io textarea{flex:0 0 22%;background:var(--bg);border:1px solid var(--line);border-radius:10px}.io pre{flex:1;background:var(--bg);border-radius:10px;border:1px solid var(--line);min-height:0}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:20;background:#0000008c;display:grid;place-items:center;padding:16px}.sheet{width:min(560px,100%);max-height:86vh;display:flex;flex-direction:column;gap:10px;background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:16px;box-shadow:var(--shadow)}.sheethead{display:flex;align-items:center;justify-content:space-between}.sheethead h2{margin:0;font-size:20px}.sheetbody{overflow:auto;display:flex;flex-direction:column;gap:6px}.sheetbody h3{margin:12px 0 6px;font-size:12px;color:var(--dim);text-transform:uppercase;letter-spacing:.08em}.item{display:block;width:100%;text-align:left;padding:12px;margin-bottom:4px;background:var(--raised);border:1px solid var(--line);border-radius:10px;color:var(--text);font-size:15px}.item:hover{border-color:var(--accent)}.qr{position:fixed;top:0;right:0;bottom:0;left:0;z-index:25;background:#fff;color:#111;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;cursor:pointer}.qr img{width:min(68vh,90vw);height:min(68vh,90vw);image-rendering:pixelated}.qrcode{font:800 12vh/1 var(--mono);letter-spacing:.15em}.qr p{margin:0;font-size:3vh;color:#444}@media (max-width: 900px){.dash{grid-template-columns:1fr;grid-template-rows:auto 1fr 40%}.side{flex-direction:row;overflow-x:auto;border-right:0;border-bottom:1px solid var(--line)}.list{flex-direction:row}}.icon.on{background:var(--accent);color:var(--accent-ink)}.chip{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:999px;background:var(--raised);border:1px solid var(--line);font:700 12px var(--mono);color:var(--text)}.chip.good{background:color-mix(in srgb,var(--good) 22%,var(--raised));border-color:var(--good)}.chip.timer.warn{border-color:var(--accent);color:var(--accent)}.chip.timer.end{background:var(--bad);border-color:var(--bad);color:#fff}.chip.timer.big{font-size:16px;padding:6px 12px}.lockbar{background:color-mix(in srgb,var(--bad) 18%,var(--surface))}.lockbar span{flex:1}.keys button:disabled{opacity:.4}.panel.big{flex:0 0 58%;max-height:65%}.soal{flex:1;overflow:auto;padding:4px 14px 14px;display:flex;flex-direction:column;gap:8px}.soal h3{margin:4px 0 0;font-size:17px}.desc{margin:0;white-space:pre-wrap;font-size:14px;line-height:1.5}.sample{display:grid;grid-template-columns:1fr 1fr;gap:8px}.soal pre{flex:none;background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:8px 10px;margin:4px 0 0;font-size:13px}.row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.row .btn{flex:1 1 140px}.cases{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}.cases li{padding:6px 10px;border-radius:8px;background:var(--bg);border:1px solid var(--line);font-size:14px}.cases li.ok b{color:var(--good)}.cases li.bad b{color:var(--bad)}.cases li.sum{font-weight:700;background:transparent;border:0;padding:2px 0}.list .hand{display:grid;place-items:center;width:28px;height:28px;border-radius:8px;border:0;background:var(--accent);color:var(--accent-ink);animation:pulse 1.2s infinite}.list li .grow{flex:1}.ctl{display:grid;grid-template-columns:1fr 1fr;gap:6px}.ctl .btn{padding:0 8px;font-size:13px}.ctl .span2{grid-column:span 2}.chips{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.notice{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 12px;border:1px solid var(--accent);border-radius:10px}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.stats div{display:flex;flex-direction:column;align-items:center;padding:10px 4px;background:var(--raised);border-radius:10px}.stats b{font:700 24px var(--mono)}.stats span{font-size:12px;color:var(--dim)}table{width:100%;border-collapse:collapse;font-size:14px}th,td{text-align:left;padding:8px 6px;border-bottom:1px solid var(--line)}th{color:var(--dim);font-size:12px;text-transform:uppercase;letter-spacing:.06em}.sheet input[type=number]{width:110px;flex:none}
