:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--bg:var(--lightningcss-light,#f8fafc)var(--lightningcss-dark,#0f0f23);--fg:var(--lightningcss-light,#0f172a)var(--lightningcss-dark,#e2e8f0);--card:var(--lightningcss-light,#fff)var(--lightningcss-dark,#1e1c35);--muted:var(--lightningcss-light,#ede9fe)var(--lightningcss-dark,#27273b);--muted-fg:var(--lightningcss-light,#475569)var(--lightningcss-dark,#94a3b8);--hover:var(--lightningcss-light,#ddd6fe)var(--lightningcss-dark,#35345a);--border:var(--lightningcss-light,#ddd6fe)var(--lightningcss-dark,#4c1d95);--primary:#7c3aed;--on-primary:#fff;--accent:var(--lightningcss-light,#e11d48)var(--lightningcss-dark,#f43f5e);--on-accent:var(--lightningcss-light,#fff)var(--lightningcss-dark,#000);--ok:var(--lightningcss-light,#16a34a)var(--lightningcss-dark,#22c55e);--danger:#ef4444;--ring:var(--lightningcss-light,#7c3aed)var(--lightningcss-dark,#a78bfa);--space-1:4px;--space-2:8px;--space-3:16px;--space-4:24px;--space-5:32px;--space-6:48px;--radius:6px;--r-screen:4px;--ring-black:6px;--ring-edge:2px;--frame:calc(var(--ring-black) + var(--ring-edge));--console-edge:2px;--console-pad:var(--space-3);--console-lip:6px;--r-frame:calc(var(--r-screen) + var(--frame));--r-console:calc(var(--r-frame) + var(--console-edge) + var(--console-pad));--shell:var(--lightningcss-light,#e4e1f7)var(--lightningcss-dark,#1a1830);--key:var(--lightningcss-light,#f5f3ff)var(--lightningcss-dark,#2e2c4a);--key-edge:var(--lightningcss-light,#a79fd1)var(--lightningcss-dark,#0b0a18)}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body{height:100%;margin:0}body{background:var(--bg);color:var(--fg);-webkit-tap-highlight-color:transparent;font:16px/1.5 Be Vietnam Pro,system-ui,sans-serif}h1,h2,h3{letter-spacing:.02em;margin:0;font-family:VT323,monospace;font-weight:400;line-height:1.2}h1 span{color:var(--accent)}button,summary{font:inherit;color:var(--fg);cursor:pointer;font-size:16px}button{min-width:48px;min-height:48px;padding:0 var(--space-3);justify-content:center;align-items:center;gap:var(--space-2);background:var(--muted);border:2px solid var(--border);border-radius:var(--radius);touch-action:manipulation;transition:background-color .15s,transform 80ms,box-shadow 80ms;display:inline-flex}button:hover{background:var(--hover)}button:active,button.pressed,button[aria-pressed=true],button[aria-selected=true]{background:var(--primary);color:var(--on-primary);border-color:var(--primary)}button.cta{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}button:disabled{opacity:.45;cursor:not-allowed}button.icon{width:48px;padding:0}:focus-visible{outline:2px solid var(--ring);outline-offset:2px}svg.i{flex:none;width:24px;height:24px}input,textarea{width:100%;min-height:48px;padding:0 var(--space-2);font:inherit;color:var(--fg);background:var(--bg);border:2px solid var(--muted-fg);border-radius:var(--radius);font-size:16px}code{background:var(--bg);padding:0 var(--space-1);border-radius:var(--radius)}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}.loading{min-height:100dvh;color:var(--muted-fg);place-items:center;font-family:VT323,monospace;font-size:28px;display:grid}.login{justify-content:center;align-items:center;gap:var(--space-4);min-height:100dvh;padding:var(--space-4) var(--space-3);flex-direction:column;display:flex;position:relative}.login>*{width:min(100%,420px)}.brand{text-align:center}.brand h1{font-size:56px}.brand p{color:var(--muted-fg);margin:0}.card{background:var(--card);border:2px solid var(--border);padding:var(--space-4);box-shadow:0 6px 0 var(--key-edge);border-radius:12px}.card h2{margin-bottom:var(--space-3);font-size:28px}details>summary{align-items:center;min-height:48px;font-family:VT323,monospace;font-size:22px;display:flex}form{gap:var(--space-3);flex-direction:column;display:flex}.field{gap:var(--space-1);flex-direction:column;display:flex}.field>div{gap:var(--space-2);display:flex}.field input{flex:auto;min-width:0}form p{min-height:1.5em;color:var(--ok);margin:0}form p.err{color:var(--danger)}.help{padding-left:var(--space-4);margin:0}.help li{margin-bottom:var(--space-2)}.help strong{color:var(--accent);font-weight:400}.app{gap:var(--space-2);height:100dvh;padding:max(var(--space-2),env(safe-area-inset-top)) max(var(--space-2),env(safe-area-inset-right)) max(var(--space-2),env(safe-area-inset-bottom)) max(var(--space-2),env(safe-area-inset-left));grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr);display:grid;overflow:hidden}.bar{align-items:center;gap:var(--space-2);display:flex}.bar h1{white-space:nowrap;font-size:26px}.status{align-items:center;gap:var(--space-2);min-width:0;color:var(--muted-fg);flex:auto;font-size:14px;display:flex}.status span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.status svg{width:10px;height:10px;fill:var(--danger);flex:none}.status.on svg{fill:var(--ok)}@media (width<=420px){.bar h1{font-size:22px}}.console{gap:var(--space-3) var(--space-2);min-height:0;padding:var(--console-pad) var(--console-pad) calc(var(--console-pad) + var(--console-lip) + 4px);background:var(--shell);border:var(--console-edge) solid var(--border);border-radius:var(--r-console);box-shadow:inset 0 calc(-1*var(--console-lip)) 0 var(--key-edge);touch-action:none;-webkit-user-select:none;user-select:none;grid-template:"screen screen screen"minmax(0,1fr)"sl dpad sr""num num num"/1fr auto 1fr;display:grid}.console.nopad{grid-template:"screen"minmax(0,1fr)/minmax(0,1fr)}.screen{grid-area:screen;place-items:start center;min-width:0;min-height:0;display:grid;container-type:size}.console.nopad .screen{place-items:center}.wrap{margin:var(--frame);aspect-ratio:var(--ar,1.5);width:min(calc(100cqw - 2*var(--frame)),calc((100cqh - 2*var(--frame))*var(--ar,1.5)));border-radius:var(--r-screen);box-shadow:0 0 0 var(--ring-black) #000,0 0 0 var(--frame) var(--border);background:#000;position:relative}.wrap canvas{width:100%;height:100%;image-rendering:pixelated;touch-action:none;display:block}@supports (width:round(down,10px,3px)){.wrap.int{--nat:min(calc(100cqw - 2*var(--frame)),calc((100cqh - 2*var(--frame))*var(--ar,1.5)));width:min(var(--nat),max(calc(var(--w)*1px),round(down,var(--nat),calc(var(--w)*1px))))}}.dpad .arrow{justify-content:center;align-items:center;display:flex}.loading>div{align-items:center;gap:var(--space-3);text-align:center;padding:var(--space-3);flex-direction:column;display:flex}progress{width:100%}.screen-msg{padding:var(--space-3);text-align:center;color:#fff;pointer-events:none;background:#0000008c;place-items:center;font-family:VT323,monospace;font-size:24px;display:grid;position:absolute;inset:0}.tb:not(.flow){inset:var(--bar-h,0px) var(--bar-r,0px) 0 0}.tb{z-index:50;justify-content:flex-start;align-items:center;gap:var(--space-2);padding:max(var(--space-4,24px),env(safe-area-inset-top)) var(--space-3) var(--space-3);background:var(--card);-webkit-user-select:text;user-select:text;touch-action:auto;flex-direction:column;display:flex;position:fixed;overflow:auto}.tb.flow{z-index:auto;min-height:0;padding:var(--space-3);border:2px solid var(--border);border-radius:var(--r-console);position:static}.tb .pw{gap:var(--space-2);align-items:center;width:100%;max-width:360px;display:flex}.tb .pw input{flex:1;min-width:0}.console.tbopen{display:none}.tb label{text-align:center}textarea{padding:var(--space-2);resize:vertical}.tb input,.tb textarea{max-width:360px}.tb .btns{gap:var(--space-2);flex-wrap:wrap;justify-content:center;display:flex}.sl{grid-area:sl;align-self:start}.sr{grid-area:sr;place-self:start end}.sl,.sr{width:100%;max-width:96px}.dpad{--k:60px;grid-area:dpad;grid-template-columns:repeat(3,var(--k));grid-template-rows:repeat(3,var(--k));gap:6px;display:grid}.num{grid-area:num;grid-template-columns:repeat(3,1fr);gap:6px;display:grid}.console .key{background:var(--key);min-width:0;color:var(--fg);border:2px solid var(--key-edge);box-shadow:0 4px 0 var(--key-edge);touch-action:none;border-radius:10px;flex-direction:column;gap:0;padding:0;line-height:1.1}.console .key:active,.console .key.pressed{background:var(--primary);color:var(--on-primary);box-shadow:0 1px 0 var(--key-edge);transform:translateY(3px)}.key small{color:var(--muted-fg);letter-spacing:.05em;font-size:12px}.key.pressed small,.key:active small{color:inherit}.key.soft{border-radius:14px;width:100%;min-height:48px;font-size:14px}.key.ok{background:var(--primary);color:var(--on-primary);border-color:var(--primary);border-radius:50%;font-family:VT323,monospace;font-size:24px}.num .key{min-height:48px;font-size:20px;font-weight:600}@media (orientation:portrait){.console:not(.nopad){gap:var(--space-2);grid-template:"screen screen"minmax(0,1fr)"sl sr""dpad num"/auto minmax(0,1fr)}.console:not(.nopad) .screen{place-items:start center}.dpad{--k:48px;align-self:center}.num .key{min-height:44px}}@media (orientation:landscape){.console{padding:var(--space-2) var(--space-3);grid-template:".screen."minmax(0,1fr)"sl screen sr""dpad screen num"".screen."minmax(0,1fr)/auto minmax(0,1fr) auto}.screen{place-items:center}.sl,.sr{justify-self:center;width:64px}.dpad{--k:48px}.num{grid-template-columns:repeat(3,52px)}.num .key{min-height:44px;font-size:18px}.num .key small{display:none}}@media (orientation:landscape) and (height<=359px){.num .key{min-height:36px}.dpad{--k:40px}}@media (orientation:landscape) and (height<=330px){.app{grid-template-rows:minmax(0,1fr);grid-template-columns:minmax(0,1fr) auto}.bar{flex-direction:column;grid-area:1/2;justify-content:flex-start}.bar h1,.bar .status{display:none}.app>.console{grid-area:1/1}.console{gap:var(--space-2)}.dpad{--k:40px}.num{grid-template-columns:repeat(3,48px)}.num .key{min-height:40px}.sl,.sr{width:56px}}dialog.menu{border:0;border-left:2px solid var(--border);background:var(--card);width:min(420px,100vw);max-width:none;height:100dvh;max-height:none;color:var(--fg);margin:0 0 0 auto;padding:0}dialog::backdrop{background:#00000080}dialog.help-dialog{border:2px solid var(--border);background:var(--card);width:min(560px,100vw - 32px);max-height:calc(100dvh - 32px);color:var(--fg);border-radius:12px;padding:0}dialog.help-dialog .menu-in{height:auto;max-height:calc(100dvh - 36px)}.admin{max-width:1200px;min-height:100dvh;padding:var(--space-3);gap:var(--space-3);flex-direction:column;margin:0 auto;display:flex}.admin .card{gap:var(--space-4);flex-direction:column;display:flex}.admin .card h3{margin-bottom:0}.admin p.err{color:var(--danger);margin:0}.admin p.err:empty{display:none}.tabs-list h3{margin:0;font-size:22px}.tag{margin-left:var(--space-2);padding:0 var(--space-2);background:var(--primary);color:var(--on-primary);border-radius:var(--radius);font-size:12px}.admin .field input{flex:160px;width:auto}.dot{background:var(--muted-fg);flex:none;width:10px;height:10px}.dot.on{background:var(--ok)}.dot.idle{background:#f59e0b}dialog.menu[open]{animation:.2s ease-out slide-in}@keyframes slide-in{0%{transform:translate(100%)}}.menu-in{flex-direction:column;height:100%;display:flex}.menu-head{padding:var(--space-2) var(--space-2) var(--space-2) var(--space-3);border-bottom:2px solid var(--border);justify-content:space-between;align-items:center;display:flex}.menu-head h2{font-size:28px}[role=tablist]{gap:var(--space-1);padding:var(--space-2);border-bottom:2px solid var(--border);display:flex;overflow-x:auto}[role=tab]{padding:0 var(--space-3);flex:none}.menu-body{padding:var(--space-3) var(--space-3) max(var(--space-3),env(safe-area-inset-bottom));gap:var(--space-4);flex-direction:column;flex:1;display:flex;overflow:auto}.menu-body h3,.admin h3{margin-bottom:var(--space-2);font-size:22px}.seg{gap:var(--space-2);flex-wrap:wrap;display:flex}.hint{margin:var(--space-2) 0 0;color:var(--muted-fg);font-size:14px}.who{justify-content:space-between;align-items:center;gap:var(--space-2);padding-top:var(--space-3);border-top:2px solid var(--border);flex-wrap:wrap;display:flex}.toast{left:50%;bottom:var(--space-3);z-index:10;max-width:min(92vw,520px);padding:var(--space-2) var(--space-3);background:var(--card);border:2px solid var(--border);border-radius:var(--radius);box-shadow:0 4px 0 var(--key-edge);cursor:pointer;position:fixed;transform:translate(-50%)}.banner{padding:var(--space-2) var(--space-3);border-radius:var(--radius);background:var(--card);text-align:center;border:2px solid #f59e0b}.login>.theme{top:var(--space-2);right:var(--space-2);width:48px;position:absolute}.menu-fab{top:var(--space-2);right:calc(var(--space-2) + 56px);z-index:20;width:48px;position:fixed}.login .card>*+*{margin-top:var(--space-3)}.login .card p{margin:var(--space-3) 0 0}.admin .bar h1{flex:1}.admin>p.err{color:var(--danger);margin:0}.admin>p.err:empty{display:none}.badge{padding:0 var(--space-2);border:2px solid var(--border);border-radius:var(--radius);background:var(--card);font-size:12px;display:inline-block}.tag.bad{background:var(--danger)}.row-inline{justify-content:space-between;align-items:center;gap:var(--space-2);display:flex}.tabs-list ul,ul.tabs-list{gap:var(--space-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.tabs-list li{justify-content:space-between;align-items:center;gap:var(--space-2);padding:var(--space-2);background:var(--muted);border:2px solid var(--border);border-radius:var(--radius);display:flex}.tabs-list li p{color:var(--muted-fg);margin:0;font-size:14px}.tabs-list p.err{color:var(--danger);margin:0}.tabs-list p.err:empty{display:none}.acct-body{gap:var(--space-3);padding-top:var(--space-3);flex-direction:column;display:flex}.acct-body p{margin:0}.admin .field>div{flex-wrap:wrap;align-items:center}.warn{color:var(--danger);flex:auto}select{min-height:48px;padding:0 var(--space-2);font:inherit;color:var(--fg);background:var(--bg);border:2px solid var(--muted-fg);border-radius:var(--radius);font-size:16px}ul.log{margin:0 0 var(--space-3);gap:var(--space-1);flex-direction:column;padding:0;font-size:14px;list-style:none;display:flex}ul.log small{color:var(--muted-fg)}.errlog{max-height:60vh;padding:var(--space-2);white-space:pre-wrap;word-break:break-word;background:var(--muted);border:2px solid var(--border);border-radius:var(--radius);margin:0;font-size:12px;overflow:auto}.admin>.card{gap:var(--space-3)}.tabs-list{gap:var(--space-3);flex-direction:column;display:flex}.tabs-list button{white-space:nowrap;flex:none}.tabs-list li{padding:var(--space-3);flex-wrap:wrap}.tabs-list li>div{flex:220px;min-width:0}.tabs-list li>button:first-of-type{margin-left:auto}.tabs-list li p{margin:var(--space-1) 0 0}.tabs-list .row-inline h3{flex:auto;min-width:0}.tabs-list>button{align-self:flex-start}.admin .card{min-width:0}.admin [role=tablist]{padding:0 0 var(--space-2)}.admin-panel{gap:var(--space-3);flex-direction:column;min-width:0;display:flex}.stats{gap:var(--space-2);flex-wrap:wrap;display:flex}.stats>div{align-items:baseline;gap:var(--space-1);padding:var(--space-1) var(--space-2);background:var(--card);border:2px solid var(--border);border-radius:var(--radius);font-size:14px;display:flex}.stats span{color:var(--muted-fg)}.stats b{font-weight:600}.ulist-tools{gap:var(--space-2);flex-wrap:wrap;align-items:center;display:flex}.ulist-tools input{flex:240px;width:auto}.ulist{gap:var(--space-1);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.ulist-head,.urow{gap:var(--space-2);grid-template-columns:minmax(180px,1.4fr) minmax(150px,1.2fr) 72px 120px 100px minmax(0,1fr);align-items:center;display:grid}.ulist-head{padding:0 var(--space-3);color:var(--muted-fg);text-transform:uppercase;letter-spacing:.05em;font-size:12px}.urow{width:100%;min-height:48px;padding:var(--space-1) var(--space-3);text-align:left;background:var(--card);justify-content:stretch;font-size:14px}.urow>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.urow .c-name{align-items:center;gap:var(--space-2);font-size:16px;display:flex}.urow .c-name .tag{margin-left:0}.urow .c-proc,.urow .c-lim,.urow .c-login,.urow .c-exp,.urow .c-note{color:var(--muted-fg)}dialog.user-dialog{border:2px solid var(--border);background:var(--card);width:min(640px,100vw - 32px);max-height:calc(100dvh - 32px);color:var(--fg);border-radius:12px;padding:0}dialog.user-dialog .menu-in{height:auto;max-height:calc(100dvh - 36px)}dialog.user-dialog .menu-head h2{align-items:center;gap:var(--space-2);text-overflow:ellipsis;min-width:0;display:flex;overflow:hidden}.acct-body section{gap:var(--space-2);flex-direction:column;display:flex}.acct-body .danger{padding-top:var(--space-3);border-top:2px solid var(--border)}@media (width<=719px){.ulist-head{display:none}.urow{padding:var(--space-2) var(--space-3);grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"name name""proc login"}.urow .c-name{grid-area:name}.urow .c-proc{grid-area:proc}.urow .c-login{text-align:right;grid-area:login}.urow .c-lim,.urow .c-exp,.urow .c-note{display:none}}@media (width<=599px){dialog.user-dialog{border:0;border-radius:0;width:100vw;max-width:none;height:100dvh;max-height:none;margin:0}dialog.user-dialog .menu-in{height:100%;max-height:none}}@media (width>=900px){.admin{padding:var(--space-4)}}
