:root{color-scheme:dark;--bg:#0f1419;--card:#18202a;--line:#2a3644;--fg:#e8eef5;--mut:#8a9bb0;--ac:#3b9eff;--bad:#e5534b;--ok:#2fbf71}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%;background:var(--bg);color:var(--fg);font:15px/1.4 system-ui,"Segoe UI",sans-serif;overflow:hidden}
.hide{display:none!important}.grow{flex:1}.mut{color:var(--mut);font-size:13px}
.screen{position:fixed;inset:0}
#login{display:flex;align-items:center;justify-content:center;padding:16px;overflow:auto}
#loginForm{width:100%;max-width:380px;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:24px}
h1{margin:0 0 2px;font-size:24px}.sub{margin:0 0 18px;color:var(--mut)}
label{display:block;margin:12px 0;color:var(--mut);font-size:13px}
input,select,textarea{width:100%;margin-top:4px;background:#0f1419;color:var(--fg);border:1px solid var(--line);border-radius:8px;padding:10px;font:inherit}
#fid,#fcode{font:600 20px ui-monospace,Consolas,monospace;letter-spacing:2px}
button{background:var(--ac);color:#fff;border:0;border-radius:8px;padding:8px 12px;font:inherit;cursor:pointer}
#fgo{width:100%;margin-top:8px;padding:12px;font-weight:600}
.status{min-height:22px;margin-top:12px;color:var(--mut);font-size:14px}.status.err{color:var(--bad)}.hint{color:var(--mut);font-size:12px;margin:14px 0 0}
#stage{position:absolute;inset:0;overflow:hidden;background:#000;touch-action:none}
#cv{position:absolute;left:0;top:0;transform-origin:0 0;background:#111;image-rendering:auto}
#cur{position:absolute;width:14px;height:14px;margin:-7px 0 0 -7px;border:2px solid #fff;border-radius:50%;box-shadow:0 0 0 1px #000;pointer-events:none;z-index:2}
.bar{position:absolute;left:0;right:0;top:0;display:flex;gap:6px;align-items:center;padding:6px 8px;padding-top:max(6px,env(safe-area-inset-top));background:rgba(15,20,25,.92);border-bottom:1px solid var(--line);z-index:5;flex-wrap:wrap}
.bar button,.bar select{width:auto;margin:0;padding:6px 10px;background:#2a3644}.bar select{border:0}.bar button.on{background:var(--ac)}.bar .danger{background:var(--bad)}
.dot{width:10px;height:10px;border-radius:50%;background:var(--ok)}.dot.bad{background:var(--bad)}
.chip{background:#1f2a36;border-radius:99px;padding:2px 10px;font:12px ui-monospace,Consolas,monospace;color:var(--mut)}
#tab{position:absolute;top:0;right:8px;z-index:6;padding:0 10px;height:20px;border-radius:0 0 8px 8px;background:#2a3644;opacity:.8}
.panel{position:absolute;right:8px;top:52px;width:min(360px,calc(100% - 16px));background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px;z-index:6;display:flex;flex-direction:column;gap:8px;max-height:70%;overflow:auto}
.panel button{margin-right:6px;background:#2a3644}.panel button.on{background:var(--ac)}.panel .k{display:inline-block;margin:2px}
#fileList .it{display:flex;justify-content:space-between;gap:8px;padding:4px 0;border-top:1px solid var(--line);font-size:13px}
.prog{height:4px;background:#2a3644;border-radius:2px;margin-top:2px}.prog i{display:block;height:100%;background:var(--ac);border-radius:2px}
#ovl{position:absolute;inset:0;background:rgba(0,0,0,.6);display:flex;align-items:center;justify-content:center;z-index:9;text-align:center;padding:20px}
#ovlMsg{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:18px 22px;max-width:420px}
#toast{position:absolute;left:50%;bottom:20px;transform:translateX(-50%);background:#222c38;border:1px solid var(--line);border-radius:10px;padding:10px 14px;z-index:10;max-width:90%}
#kb{position:fixed;left:-100px;top:0;width:10px;height:10px;opacity:0}
label.inl{display:flex;gap:8px;align-items:center;margin:-4px 0 8px}label.inl input{width:auto;margin:0}
