:root{--bg:#14161c;--panel:#1b1e26;--line:#2b303b;--fg:#e6e8ee;--muted:#8d94a6;--accent:#6aa7ff;--ok:#4cc38a;--warn:#e9b44c;--bad:#ef6b6b;--bar:48px;--tabs:56px} @media (prefers-color-scheme:light){:root:not([data-theme=dark]){--bg:#f5f6f9;--panel:#fff;--line:#d9dde6;--fg:#1c2030;--muted:#5c6579;--accent:#2563eb}} *{box-sizing:border-box} html,body{height:100%;margin:0} body{background:var(--bg);color:var(--fg);font:15px/1.4 system-ui,sans-serif;display:flex;flex-direction:column;height:100dvh;overflow:hidden;padding:env(safe-area-inset-top) 0 0} .muted{color:var(--muted)}.error{color:var(--bad)} #bar{display:flex;align-items:center;gap:10px;min-height:var(--bar);padding:6px 16px;border-bottom:1px solid var(--line);background:var(--panel)} .title{display:flex;flex-direction:column;min-width:0;flex:1}.title strong,.title small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap} .title small{color:var(--muted);font-size:12px} .device{color:var(--muted);font-size:12px;max-width:30%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} .dot{width:10px;height:10px;border-radius:50%;background:var(--muted);flex:none} .dot[data-state=connected]{background:var(--ok)}.dot[data-state=connecting],.dot[data-state=waiting]{background:var(--warn)}.dot[data-state=lost],.dot[data-state=denied]{background:var(--bad)} button{font:inherit;color:#fff;background:var(--accent);border:0;border-radius:8px;padding:10px 16px;min-height:44px;cursor:pointer} button.ghost{background:transparent;color:var(--fg);border:1px solid var(--line);min-height:36px;padding:6px 12px} input{font:inherit;color:var(--fg);background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:10px 12px;min-height:44px;width:100%} label{display:block;margin:10px 0}label span{display:block;color:var(--muted);font-size:12px;margin-bottom:4px} .gate{flex:1;display:flex;align-items:center;justify-content:center;padding:16px;overflow:auto} .gate[hidden],[hidden]{display:none!important} .card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:20px;width:100%;max-width:440px} .card h1{font-size:20px;margin:0 0 8px}.card button[type=submit]{width:100%;margin-top:8px} #wait{text-align:center} .spinner{width:28px;height:28px;margin:4px auto 12px;border:3px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:spin 1s linear infinite} @keyframes spin{to{transform:rotate(360deg)}} /* panels: bottom tab bar on phones, side tabs on wide screens */ #panels{flex:1;min-height:0;display:flex;flex-direction:column-reverse} #tabs{display:flex;border-top:1px solid var(--line);background:var(--panel);padding-bottom:env(safe-area-inset-bottom)} #tabs button{flex:1;background:transparent;color:var(--muted);border-radius:0;min-height:var(--tabs);border-top:3px solid transparent} #tabs button[aria-selected=true]{color:var(--fg);border-top-color:var(--accent)} #views{flex:1;min-height:0;position:relative} .panel{position:absolute;inset:0;overflow:hidden;display:flex;flex-direction:column} @media (min-width:800px){ #panels{flex-direction:row} #tabs{flex-direction:column;width:132px;border-top:0;border-right:1px solid var(--line);padding:8px 0} #tabs button{flex:none;text-align:left;padding:12px 16px;min-height:44px;border-top:0;border-left:3px solid transparent} #tabs button[aria-selected=true]{border-left-color:var(--accent)} }