:root{
  --bg:#0a0b0e;--bg2:#101218;--surface:#16181f;--border:#2a2d38;
  --text:#ececf1;--muted:#8b8b9a;--dim:#5c5c6a;
  --g:#00ffa3;--r:#ff2d6a;--b:#00d4ff;--gold:#e8c547;--tw:#9146ff;
  --font:system-ui,-apple-system,sans-serif;
  --mono:ui-monospace,monospace;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%;background:var(--bg);color:var(--text);font:14px/1.4 var(--font);overflow:hidden}
#app{display:grid;grid-template-rows:48px 1fr;height:100%}
.top{display:flex;align-items:center;gap:10px;padding:0 12px;border-bottom:1px solid var(--border);background:var(--bg2)}
.brand{font:800 12px/1 var(--font);letter-spacing:.06em;text-transform:uppercase}
.brand span{color:var(--g)}
.tabs{display:flex;gap:4px}
.tabs button{border:0;background:transparent;color:var(--muted);padding:8px 14px;border-radius:8px;
  font:800 11px/1 var(--font);letter-spacing:.08em;text-transform:uppercase;cursor:pointer}
.tabs button.on{background:linear-gradient(90deg,var(--g),var(--b));color:#050607}
.status-pills{display:flex;gap:4px;flex-wrap:wrap}
.hud{margin-left:auto;font:11px var(--mono);color:var(--dim);max-width:36vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.panel{display:none;height:100%;min-height:0}
.panel.on{display:grid}
#panel-stream{grid-template-columns:1fr 300px}
@media(max-width:900px){#panel-stream{grid-template-columns:1fr;grid-template-rows:minmax(220px,1fr) auto}}
.stage{position:relative;min-height:0;background:#050506;overflow:hidden}
.stage-empty{position:absolute;inset:0;display:grid;place-content:center;text-align:center;color:var(--muted);padding:20px;z-index:0}
.stage-empty .se-title{font:800 1.2rem/1.2 var(--font);color:var(--text);margin:0 0 8px}
.stage-empty .se-title b{color:var(--tw)}
.stage-empty .se-sub{margin:0;font-size:13px;max-width:26rem}
.stage.has-media .stage-empty,.stage.live-embed .stage-empty{display:none}
#twitch-frame{position:absolute;inset:0;width:100%;height:100%;border:0;display:none;z-index:2}
.stage.live-embed #twitch-frame{display:block}
#cam-video{position:absolute;right:12px;bottom:12px;width:min(32vw,240px);aspect-ratio:16/9;
  border:2px solid var(--g);border-radius:10px;z-index:5;object-fit:cover;background:#111;display:none;
  box-shadow:0 8px 24px rgba(0,0,0,.55)}
#cam-video.on{display:block}
.cam-label{position:absolute;right:18px;bottom:calc(12px + min(32vw,240px) * 9/16 + 6px);z-index:6;
  font:800 10px/1 var(--font);letter-spacing:.1em;background:var(--g);color:#06140f;padding:3px 7px;border-radius:5px}
.live-badge{position:absolute;top:12px;left:12px;z-index:6;padding:6px 10px;border-radius:6px;
  font:800 11px/1 var(--font);letter-spacing:.12em;background:#e91916;color:#fff}
.stream-side{border-left:1px solid var(--border);background:var(--bg2);padding:14px;overflow:auto;min-height:0}
.stream-side h2{margin:0 0 8px;font:800 11px/1 var(--font);letter-spacing:.12em;text-transform:uppercase;color:var(--g)}
.stream-side .meta{margin:0 0 10px;font-size:12px;color:var(--muted)}
.obs-strip,.law-strip{font:11px/1.35 var(--mono);color:var(--dim);padding:8px 10px;border-radius:8px;
  border:1px solid var(--border);background:#0a0c0b;margin:0 0 10px;word-break:break-word}
.obs-strip.ok{border-color:rgba(0,255,163,.35);color:var(--g)}
.law-strip{color:var(--b);font-size:10px}
.stream-side button,.btn-link{display:block;width:100%;margin:0 0 10px;border:1px solid var(--border);
  background:#121216;color:var(--text);border-radius:999px;padding:14px 12px;font:800 12px/1 var(--font);
  letter-spacing:.06em;text-transform:uppercase;cursor:pointer;text-align:center;text-decoration:none}
.stream-side button.go{background:linear-gradient(90deg,var(--g),var(--b));color:#050607;border:0;font-size:13px;padding:16px}
.stream-side button.off{background:linear-gradient(90deg,var(--r),#c41e4a);color:#fff;border:0}
.stream-side button.sec{background:var(--surface)}
.stream-side button:disabled{opacity:.4;cursor:not-allowed}
.auth-box{margin-top:14px;padding-top:12px;border-top:1px solid var(--border)}
.auth-box label{display:flex;flex-direction:column;gap:4px;font:700 10px/1 var(--font);letter-spacing:.08em;
  text-transform:uppercase;color:var(--b);margin-bottom:8px}
.auth-box input{border:1px solid var(--border);background:var(--surface);color:var(--text);
  border-radius:8px;padding:8px 10px;font:12px var(--mono);text-transform:none;letter-spacing:normal;font-weight:500}
.auth-box .foot{font:10px/1.35 var(--font);color:var(--dim);margin-top:8px}
body.zac #auth-box{opacity:.5}

/* GROK chatbox · full panel like this terminal */
#panel-grok{grid-template-rows:1fr;background:var(--bg)}
.grok-shell{display:grid;grid-template-rows:auto 1fr auto;height:100%;min-height:0}
.grok-bar{display:flex;align-items:center;gap:8px;padding:10px 14px;border-bottom:1px solid var(--border);
  background:var(--bg2);flex-wrap:wrap}
.grok-hint{font:12px/1.3 var(--font);color:var(--muted)}
.grok-hint b{color:var(--g)}
.grok-log{overflow:auto;padding:16px 18px;min-height:0;scrollbar-width:none}
.grok-log::-webkit-scrollbar{display:none}
.msg{padding:10px 12px;margin:0 0 8px;border-radius:12px;background:var(--surface);border:1px solid var(--border)}
.msg.you{border-color:rgba(0,212,255,.25)}
.msg.grok{border-color:rgba(0,255,163,.3);background:linear-gradient(135deg,rgba(0,255,163,.08),var(--surface))}
.msg .who{font:800 11px/1.2 var(--font);color:var(--b);margin-bottom:4px;letter-spacing:.04em}
.msg.grok .who{color:var(--g)}
.msg .text{font-size:14px;white-space:pre-wrap;word-break:break-word;line-height:1.45}
.msg .ts{font:10px/1 var(--mono);color:var(--dim);margin-top:6px}
.chat-compose{display:flex;gap:8px;padding:12px 14px;border-top:1px solid var(--border);background:var(--bg2)}
.chat-compose input{flex:1;min-width:0;border:1px solid var(--border);background:var(--surface);
  color:var(--text);border-radius:12px;padding:14px 16px;font:15px/1.3 var(--font)}
.chat-compose input:focus{outline:0;border-color:var(--g)}
.chat-compose input:disabled{opacity:.45}
.chat-compose button{border:0;border-radius:12px;padding:14px 18px;font:800 12px/1 var(--font);
  letter-spacing:.06em;text-transform:uppercase;cursor:pointer;background:linear-gradient(90deg,var(--g),var(--b));color:#050607}
.chat-compose button:disabled{opacity:.4;cursor:not-allowed}

.pill{font:700 10px/1 var(--font);letter-spacing:.08em;text-transform:uppercase;padding:4px 8px;
  border-radius:999px;border:1px solid var(--border);color:var(--muted);display:inline-flex}
.pill.ok{color:#06140f;background:linear-gradient(135deg,var(--g),#5dffc0);border:0}
.pill.warn{color:#1a1408;background:linear-gradient(135deg,var(--gold),#c9a227);border:0}
.pill.live{color:#fff;background:linear-gradient(135deg,var(--tw),#772ce8);border:0}
.pill.sky{color:#061018;background:linear-gradient(135deg,var(--b),#2de2e6);border:0}
.beep-toggle{font:700 10px/1 var(--font);color:var(--muted);display:inline-flex;align-items:center;gap:6px;cursor:pointer}

/* Twitch chat flyout · quiet until someone types */
.twitch-flyout{
  position:fixed;right:16px;bottom:16px;width:min(360px,92vw);max-height:42vh;
  z-index:100;display:grid;grid-template-rows:auto 1fr;
  background:rgba(12,14,18,.94);border:1px solid var(--tw);border-radius:14px;
  box-shadow:0 16px 48px rgba(0,0,0,.55),0 0 0 1px rgba(145,70,255,.25);
  backdrop-filter:blur(8px);
  transform:translateY(12px);opacity:0;pointer-events:none;
  transition:opacity .2s ease, transform .2s ease;
}
.twitch-flyout.show{opacity:1;transform:translateY(0);pointer-events:auto}
.twitch-flyout[hidden]{display:none !important}
.tf-head{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;
  border-bottom:1px solid rgba(145,70,255,.35);background:linear-gradient(90deg,rgba(145,70,255,.2),transparent)}
.tf-title{font:800 11px/1 var(--font);letter-spacing:.1em;text-transform:uppercase;color:#c4a0ff}
.tf-close{border:0;background:transparent;color:var(--muted);font-size:18px;line-height:1;cursor:pointer;padding:0 4px}
.tf-body{overflow:auto;padding:8px 10px;min-height:0;scrollbar-width:thin}
.tf-msg{padding:6px 4px;border-bottom:1px solid #1a1a22;font-size:12px;line-height:1.35;
  animation:tfIn .25s ease}
.tf-msg .u{font-weight:800;color:var(--tw);margin-right:6px}
.tf-msg .t{color:var(--text);word-break:break-word}
@keyframes tfIn{from{opacity:0;transform:translateX(8px)}to{opacity:1;transform:none}}
