:root{--bg:#0f172a;--panel:#111c33;--line:#22314f;--fg:#e6edf7;--mut:#8aa0c0;--ok:#22c55e;--warn:#eab308;--bad:#f97316;--crit:#ef4444;--acc:#3b82f6}
*{box-sizing:border-box}
body{margin:0;font:14px/1.5 system-ui,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--fg)}
a{color:#93c5fd;text-decoration:none}
.muted{color:var(--mut);font-weight:400;font-size:.85em}
.grow{flex:1}
.topbar{display:flex;align-items:center;gap:10px;padding:10px 16px;background:var(--panel);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5}
.btn{background:var(--acc);color:#fff;border:0;border-radius:8px;padding:7px 12px;cursor:pointer;font-size:13px}
.btn.ghost{background:transparent;border:1px solid var(--line);color:var(--fg)}
.btn.small{padding:4px 9px;font-size:12px}
.btn:disabled{opacity:.5;cursor:wait}
.grid{display:grid;grid-template-columns:1.4fr 1fr;gap:18px;padding:18px;max-width:1500px;margin:0 auto}
.col h2{font-size:15px;margin:18px 0 8px;border-bottom:1px solid var(--line);padding-bottom:6px}
.board{width:100%;border-collapse:collapse;background:var(--panel);border-radius:10px;overflow:hidden}
.board th,.board td{padding:9px 10px;text-align:left;border-bottom:1px solid var(--line)}
.board th{font-size:12px;color:var(--mut);font-weight:600}
.score{display:inline-block;min-width:34px;text-align:center;border-radius:6px;padding:2px 6px;font-weight:700;color:#08111f}
.score.ok{background:var(--ok)}.score.warn{background:var(--warn)}.score.bad{background:var(--bad)}.score.crit{background:var(--crit);color:#fff}
.tag{display:inline-block;font-size:11px;padding:1px 7px;border-radius:20px;background:var(--line);color:var(--fg)}
.tag.spa{background:#7c2d12;color:#fed7aa}
.risk-safe{background:#14532d;color:#bbf7d0}.risk-risky{background:#7f1d1d;color:#fecaca}
.recs{display:flex;flex-direction:column;gap:8px}
.rec{background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--acc);border-radius:8px;padding:10px 12px}
.rec.sev-high{border-left-color:var(--bad)}.rec.sev-critical{border-left-color:var(--crit)}.rec.sev-low{border-left-color:var(--mut)}
.rec-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.rec-d{color:var(--mut);margin:6px 0}
.rec-a{display:flex;gap:6px}
.chat{height:340px;overflow:auto;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:12px;display:flex;flex-direction:column;gap:8px}
.msg{max-width:85%;padding:8px 11px;border-radius:10px}
.msg.user{align-self:flex-end;background:var(--acc);color:#fff}
.msg.assistant{align-self:flex-start;background:#0b1526;border:1px solid var(--line)}
.msg.system{align-self:center;background:transparent;color:var(--mut);font-size:12px}
.chat-in{display:flex;gap:8px;margin-top:8px}
.chat-in input{flex:1;background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:9px 11px;color:var(--fg)}
.tasks{display:flex;flex-direction:column;gap:6px}
.task{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:8px 10px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.task.st-running{border-color:var(--warn)}.task.st-done{opacity:.6}
/* login */
.login-body{display:grid;place-items:center;min-height:100vh}
.login-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:28px;width:320px;display:flex;flex-direction:column;gap:12px}
.login-card h1{font-size:18px;margin:0}
.login-card label{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--mut)}
.login-card input{background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:9px;color:var(--fg)}
.err{background:#7f1d1d;color:#fecaca;padding:8px;border-radius:8px;font-size:13px}
@media(max-width:900px){.grid{grid-template-columns:1fr}}
