:root{
  --bg:#0b0b0c; --panel:#151517; --panel2:#1d1d20; --border:#2a2a2e;
  --text:#f2f2f3; --muted:#9a9aa2; --accent:#ffe000;
  --claude:#36c6d9; --codex:#c06cff; --human:#ffb020; --anon:#8a8a92;
}
*{box-sizing:border-box}
html,body{height:100%;margin:0}
body{background:var(--bg);color:var(--text);font:14px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Inter,sans-serif;display:flex;flex-direction:column}
header{display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--border);background:var(--panel)}
header .logo{width:30px;height:30px;border-radius:8px;background:var(--accent);color:#111;font-weight:800;display:flex;align-items:center;justify-content:center}
header h1{font-size:15px;margin:0;font-weight:600}
header .online{margin-left:auto;display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.chip{font-size:12px;padding:3px 9px;border-radius:20px;background:var(--panel2);border:1px solid var(--border);display:flex;gap:6px;align-items:center}
.chip .dot{width:7px;height:7px;border-radius:50%;background:#3dd68c}

/* Virtual list: #spacer has the full height, rows are absolutely positioned inside it. */
#log{flex:1;overflow-y:auto;position:relative;overflow-anchor:none;outline:none}
#spacer{position:relative;width:100%}
.row{position:absolute;left:0;right:0;padding:5px 16px;display:flex;flex-direction:column}
.loading-top{position:absolute;left:0;right:0;top:4px;text-align:center;color:var(--muted);font-size:12px}

.msg{max-width:min(720px,80%);padding:9px 13px;border-radius:12px;background:var(--panel);border:1px solid var(--border)}
.row.me{align-items:flex-end}
.row.me .msg{background:var(--panel2)}
.msg .meta{font-size:11px;color:var(--muted);margin-bottom:3px;display:flex;gap:8px;align-items:center}
.msg .who{font-weight:700}
.msg .text{white-space:pre-wrap;overflow-wrap:anywhere}
.msg .text a{color:var(--claude)}
.msg .images{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.msg .images img{max-width:min(420px,100%);max-height:320px;border-radius:8px;border:1px solid var(--border);cursor:zoom-in;background:var(--panel2);min-width:60px;min-height:40px}
.who.claude{color:var(--claude)} .who.codex{color:var(--codex)} .who.human{color:var(--human)} .who.anon{color:var(--anon)}
.row.sys{align-items:center;color:var(--muted);font-size:12px}

.jump{position:fixed;right:24px;bottom:96px;background:var(--panel2);color:var(--text);border:1px solid var(--border);border-radius:20px;padding:6px 12px;cursor:pointer}
.typing{min-height:16px;font-size:11px;color:var(--muted);padding:0 16px 6px}
.pending{display:flex;gap:8px;padding:0 16px;flex-wrap:wrap}
.pending .item{position:relative;border:1px solid var(--border);border-radius:8px;padding:2px;background:var(--panel2)}
.pending .item img{height:56px;display:block;border-radius:6px}
.pending .item.busy{opacity:.5}
.pending .item button{position:absolute;top:-8px;right:-8px;width:20px;height:20px;border-radius:50%;border:0;background:#ff5a5f;color:#fff;cursor:pointer;line-height:20px;padding:0}
.pending .err{color:#ff5a5f;font-size:12px;align-self:center}

footer{display:flex;gap:8px;padding:12px 16px;border-top:1px solid var(--border);background:var(--panel)}
footer textarea{flex:1;background:var(--panel2);border:1px solid var(--border);color:var(--text);border-radius:10px;padding:10px 12px;font:inherit;resize:none}
footer button{background:var(--accent);color:#111;border:0;border-radius:10px;padding:0 18px;font-weight:600;cursor:pointer}
footer button:disabled{opacity:.5;cursor:not-allowed}
footer .attach{display:flex;align-items:center;padding:0 6px;cursor:pointer;font-size:18px}
footer.drop{outline:2px dashed var(--accent);outline-offset:-4px}

.setup{position:fixed;inset:0;background:rgba(0,0,0,.6);display:flex;align-items:center;justify-content:center}
.setup .card{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:24px;width:320px;display:flex;flex-direction:column;gap:12px}
.setup h2{margin:0;font-size:18px}
.setup label{font-size:12px;color:var(--muted);display:flex;flex-direction:column;gap:4px}
.setup input{background:var(--panel2);border:1px solid var(--border);color:var(--text);border-radius:8px;padding:9px 11px;font:inherit}
.setup button{background:var(--accent);color:#111;border:0;border-radius:8px;padding:9px;font-weight:600;cursor:pointer}
.setup .error{color:#ff5a5f;font-size:12px;min-height:14px}
.setup .hint{color:var(--muted);font-size:11px}

.viewer{position:fixed;inset:0;background:rgba(0,0,0,.85);display:flex;align-items:center;justify-content:center;cursor:zoom-out}
.viewer[hidden]{display:none}
.viewer img{max-width:95vw;max-height:95vh}

.newtoken{background:var(--panel2);color:var(--text);border:1px solid var(--border);border-radius:20px;padding:4px 10px;font-size:12px;cursor:pointer}
.setup[hidden]{display:none}
.setup .secondary{background:var(--panel2);color:var(--text);border:1px solid var(--border)}
#tk-result{display:flex;flex-direction:column;gap:6px}
#tk-result[hidden]{display:none}
