:root {
  --bg: #0f1419; --panel: #1a212b; --panel2: #232c38; --panel3: #2b3542; --text: #e6edf3;
  --muted: #8b98a5; --accent: #ff7a18; --accent2: #2f81f7; --line: #2d3744;
  --ok: #3fb950; --warn: #d29922; --bad: #f85149;
}
* { box-sizing: border-box; }
html, body { height: 100%; }
body { margin: 0; font: 15px/1.5 system-ui, sans-serif; background: var(--bg); color: var(--text); display: flex; flex-direction: column; }
a { color: var(--accent); }
button { background: var(--accent); color: #1a1000; border: none; border-radius: 8px; padding: 8px 14px; font-weight: 600; cursor: pointer; font-size: 14px; }
button.ghost { background: var(--panel2); color: var(--text); border: 1px solid var(--line); }
button.small { padding: 4px 10px; font-size: 12px; }
button.danger { background: var(--bad); color: #fff; }
button:disabled { opacity: .5; cursor: default; }
input[type=text], input[type=password], input[type=number] {
  background: var(--panel2); border: 1px solid var(--line); color: var(--text);
  border-radius: 8px; padding: 9px 12px; font-size: 15px; width: 100%;
}
label { font-size: 13px; color: var(--muted); display: block; margin-bottom: 4px; }
.hint { font-size: 12px; color: var(--muted); }
.err { color: var(--bad); font-size: 13px; min-height: 1em; }
.hidden { display: none !important; }
.row { display: flex; gap: 8px; align-items: center; }
.grow { flex: 1; min-width: 0; }

/* ---- auth overlay ---- */
#auth { position: fixed; inset: 0; background: var(--bg); display: flex; align-items: center; justify-content: center; z-index: 20; }
#auth .card { background: var(--panel); border: 1px solid var(--line); border-radius: 14px; padding: 28px; width: 360px; display: flex; flex-direction: column; gap: 12px; }
#auth h2 { margin: 0; color: var(--accent); }
#auth .tabs { display: flex; gap: 4px; }
#auth .tabs button { flex: 1; }
#auth .tabs button:not(.active) { background: var(--panel2); color: var(--muted); }
#inviteBanner { background: var(--panel2); border: 1px solid var(--accent); border-radius: 8px; padding: 10px; font-size: 13px; }

/* ---- layout ---- */
header { display: flex; align-items: center; gap: 12px; padding: 8px 16px; background: var(--panel); border-bottom: 1px solid var(--line); }
header h1 { font-size: 16px; margin: 0; color: var(--accent); }
header .me { color: var(--muted); font-size: 13px; }
header .me b { color: var(--text); }
header .spacer { flex: 1; }
.status { font-size: 12px; color: var(--muted); display: flex; align-items: center; gap: 6px; }
main { flex: 1; display: flex; min-height: 0; }

aside { width: 260px; background: var(--panel); border-right: 1px solid var(--line); display: flex; flex-direction: column; overflow-y: auto; }
aside section { padding: 10px 12px; border-bottom: 1px solid var(--line); }
aside h2 { font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); margin: 0 0 6px; display: flex; align-items: center; }
aside h2 .spacer { flex: 1; }
aside h2 button { padding: 2px 8px; font-size: 12px; }
.item { padding: 6px 8px; border-radius: 6px; display: flex; align-items: center; gap: 8px; cursor: pointer; font-size: 14px; }
.item:hover { background: var(--panel2); }
.item.active { background: var(--panel3); }
.item .name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.item .badge { background: var(--accent); color: #1a1000; border-radius: 10px; font-size: 11px; padding: 0 6px; font-weight: 700; }
.item .pend { color: var(--warn); font-size: 11px; }
.dot { width: 8px; height: 8px; border-radius: 50%; background: var(--muted); flex-shrink: 0; }
.dot.on { background: var(--ok); }
.dot.link { background: var(--accent2); }
.pending-req { display: flex; gap: 6px; align-items: center; font-size: 13px; padding: 4px 8px; }

/* ---- chat ---- */
.chat { flex: 1; display: flex; flex-direction: column; min-width: 0; }
.chat-head { display: flex; align-items: center; gap: 10px; padding: 8px 16px; border-bottom: 1px solid var(--line); background: var(--panel); font-size: 14px; min-height: 46px; }
.chat-head b { font-size: 15px; }
.chat-head .sub { color: var(--muted); font-size: 12px; }
#log { flex: 1; overflow-y: auto; padding: 16px; display: flex; flex-direction: column; gap: 6px; }
.msg { max-width: 72%; padding: 7px 12px; border-radius: 10px; background: var(--panel2); word-wrap: break-word; white-space: pre-wrap; }
.msg.me { align-self: flex-end; background: var(--accent2); }
.msg .who { font-size: 12px; color: var(--muted); margin-bottom: 1px; }
.msg.me .who { color: #cfe2ff; }
.msg .meta { font-size: 11px; color: var(--muted); margin-top: 2px; text-align: right; }
.msg.me .meta { color: #cfe2ff; opacity: .8; }
.msg.queued { opacity: .6; border: 1px dashed #cfe2ff; }
.sys { align-self: center; color: var(--muted); font-size: 12px; font-style: italic; }
.file a { color: var(--accent); font-weight: 600; }
.msg.me .file a, .msg.me a { color: #fff; }
.progress { height: 4px; background: var(--line); border-radius: 2px; margin-top: 5px; overflow: hidden; }
.progress > span { display: block; height: 100%; background: var(--accent); width: 0; transition: width .15s; }
footer { display: flex; gap: 8px; padding: 10px 16px; background: var(--panel); border-top: 1px solid var(--line); }
footer input { flex: 1; }
.empty { flex: 1; display: flex; align-items: center; justify-content: center; color: var(--muted); text-align: center; padding: 40px; }

/* ---- modal ---- */
.modal { position: fixed; inset: 0; background: rgba(8,11,15,.8); display: flex; align-items: center; justify-content: center; z-index: 30; }
.modal .card { background: var(--panel); border: 1px solid var(--line); border-radius: 14px; padding: 22px; width: 460px; max-width: 95vw; max-height: 90vh; overflow-y: auto; display: flex; flex-direction: column; gap: 12px; }
.modal h3 { margin: 0; color: var(--accent); }
.modal .list { display: flex; flex-direction: column; gap: 4px; }
.modal .list .row { padding: 4px 6px; border-radius: 6px; font-size: 14px; }
.modal .list .row:hover { background: var(--panel2); }
.modal code { background: var(--bg); padding: 4px 8px; border-radius: 6px; font-size: 12px; word-break: break-all; display: block; }
.role { font-size: 11px; color: var(--muted); text-transform: uppercase; }
.toggle { display: flex; align-items: center; gap: 8px; font-size: 14px; cursor: pointer; }

@media (max-width: 700px) {
  aside { width: 200px; }
  .msg { max-width: 90%; }
}
