:root{
  --bg:#040816; --panel:#0b1326; --panel2:#101a33; --line:#1d2a4a; --line2:#2a3a62;
  --text:#e6ecf8; --muted:#8e9bb8; --dim:#5f6d8c;
  --blue:#7cc4ff; --amber:#f5b53d; --green:#4fd18b; --red:#ff6b6b; --grey:#7d89a6; --violet:#b39dff;
  --radius:10px; --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  color-scheme:dark;
}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--text);font:14px/1.45 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}
button,input,textarea,select{font:inherit;color:inherit}
button{cursor:pointer;background:var(--blue);color:#04101f;border:0;border-radius:8px;padding:8px 14px;font-weight:600}
button.ghost{background:transparent;color:var(--muted);border:1px solid var(--line2)}
button.ghost:hover{color:var(--text);border-color:var(--blue)}
button:focus-visible,input:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--amber);outline-offset:2px}
button[disabled]{opacity:.5;cursor:not-allowed}
.logo{width:30px;height:30px;flex:none}
.small{font-size:12px;color:var(--muted)}
code,pre{font-family:var(--mono)}

/* auth */
.auth{min-height:100vh;display:grid;place-items:center;padding:20px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:14px}
.auth-card{width:min(420px,100%);padding:26px;display:grid;gap:14px}
.brand{display:flex;gap:12px;align-items:center;margin-bottom:6px}
.brand span{display:block;color:var(--muted);font-size:12px}
label{display:grid;gap:6px;color:var(--muted);font-size:13px}
input,textarea{background:var(--bg);border:1px solid var(--line2);border-radius:8px;padding:9px 11px;color:var(--text)}
.msg{min-height:1.2em;color:var(--red);margin:0}
.totp-box{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:12px}
.totp-box p{margin:0 0 8px}
.key{display:block;font-size:17px;letter-spacing:1px;color:var(--amber);word-break:break-all;user-select:all}

/* top bar */
.top{position:sticky;top:0;z-index:5;display:flex;align-items:center;gap:16px;padding:10px 18px;background:rgba(4,8,22,.92);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}
.title strong{display:block}
.title span{display:block;font-size:12px;color:var(--muted)}
.title span.warn{color:var(--amber)}
nav{display:flex;gap:4px;margin-left:12px}
nav button{background:transparent;color:var(--muted);font-weight:500;padding:7px 12px}
nav button[aria-selected=true]{background:var(--panel2);color:var(--text);box-shadow:inset 0 -2px 0 var(--amber)}
nav b{background:var(--amber);color:#1b1100;border-radius:9px;padding:0 6px;font-size:11px;margin-left:4px}
nav b:empty{display:none}
.counts{margin-left:auto;display:flex;gap:10px;flex-wrap:wrap}
.chip{display:inline-flex;align-items:center;gap:6px;font-size:12px;padding:3px 9px;border-radius:999px;border:1px solid var(--line2);color:var(--muted);white-space:nowrap}
.dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex:none}
.s-live,.s-up{background:var(--green)} .s-planned{background:var(--grey)} .s-unknown{background:var(--amber)}
.s-down,.s-stale{background:var(--red)}
.st-submitted{background:var(--blue)} .st-delivered{background:var(--violet)} .st-applied{background:var(--green)} .st-declined{background:var(--grey)}

main{padding:16px 18px 40px}
.view[hidden]{display:none}

/* map */
#view-map{position:relative}
.legend{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.mapwrap{overflow:auto;border:1px solid var(--line);border-radius:14px;background:
  radial-gradient(circle at 20% 0%,rgba(124,196,255,.06),transparent 40%),
  linear-gradient(var(--panel),var(--bg));}
#map{display:block;min-width:1100px;width:100%;height:auto}
.row-label{fill:var(--dim);font-size:11px;letter-spacing:.12em;text-transform:uppercase}
.edge{fill:none;stroke:var(--line2);stroke-width:1.3}
.edge.kind-agent{stroke-dasharray:3 4;stroke:#33456f}
.edge.hi{stroke:var(--amber);stroke-width:2.2;stroke-dasharray:none}
.edge-label{fill:var(--muted);font-size:10px;opacity:0;pointer-events:none}
.edge-label.hi{opacity:1;fill:var(--amber)}
.node{cursor:pointer}
.node rect{fill:var(--panel2);stroke:var(--line2);stroke-width:1.2}
.node.k-company rect{fill:#132550;stroke:var(--blue);stroke-width:1.6}
.node.k-business rect{fill:#0f1d3d;stroke:#3d5a96}
.node.k-host rect{fill:#0d1730}
.node.k-external rect{fill:transparent;stroke-dasharray:4 3}
.node.k-agent rect{fill:#0f1a35}
.node.k-agent.planned rect,.node.k-agent.unknown rect{stroke-dasharray:4 3}
.node text{fill:var(--text);font-size:12px;pointer-events:none}
.node .sub{fill:var(--muted);font-size:10px}
.node:hover rect,.node.sel rect{stroke:var(--amber);stroke-width:2}
.node.fade{opacity:.28}
.edge.fade{opacity:.15}
.info{position:absolute;top:44px;right:12px;width:min(340px,90%);background:var(--panel);border:1px solid var(--line2);border-radius:12px;padding:14px 16px;box-shadow:0 12px 40px rgba(0,0,0,.5)}
.info h3{margin:0 0 4px;font-size:15px}
.info p{margin:6px 0;color:var(--muted)}
.info ul{margin:6px 0;padding-left:18px;color:var(--muted)}
.info .close{position:absolute;top:8px;right:8px;padding:2px 8px}

/* agents table */
.toolbar{display:flex;gap:10px;align-items:center;margin-bottom:12px;flex-wrap:wrap}
.toolbar input{min-width:240px}
.biz{margin:18px 0 8px;font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--dim)}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px}
.acard{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px;cursor:pointer;display:grid;gap:8px;text-align:left;color:var(--text);font-weight:400}
.acard:hover{border-color:var(--blue)}
.acard h4{margin:0;font-size:14px;display:flex;align-items:center;gap:8px}
.acard p{margin:0;color:var(--muted);font-size:13px}
.meta{display:flex;flex-wrap:wrap;gap:6px}

/* drawer */
.scrim{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:9}
.drawer{position:fixed;top:0;right:0;bottom:0;width:min(920px,100%);background:var(--panel);border-left:1px solid var(--line2);z-index:10;overflow:auto;padding:20px 24px 60px;animation:slide .18s ease-out}
@keyframes slide{from{transform:translateX(30px);opacity:.4}to{transform:none;opacity:1}}
@media (prefers-reduced-motion:reduce){.drawer{animation:none}}
.drawer h2{margin:0 0 4px;display:flex;gap:10px;align-items:center}
.drawer .x{position:absolute;top:16px;right:18px}
.kv{display:grid;grid-template-columns:130px 1fr;gap:6px 14px;margin:14px 0;font-size:13px}
.kv dt{color:var(--dim)} .kv dd{margin:0}
.ptabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-top:18px;flex-wrap:wrap}
.ptabs button{background:transparent;color:var(--muted);border-radius:8px 8px 0 0;font-weight:500}
.ptabs button[aria-selected=true]{background:var(--panel2);color:var(--text)}
.ppanel{background:var(--panel2);border:1px solid var(--line);border-top:0;border-radius:0 0 10px 10px;padding:14px}
.loc{font-family:var(--mono);font-size:12px;color:var(--muted);word-break:break-all}
pre.prompt{white-space:pre-wrap;word-break:break-word;background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:12px;max-height:55vh;overflow:auto;font-size:12.5px;line-height:1.5;margin:10px 0}
textarea.editor{width:100%;min-height:45vh;font-family:var(--mono);font-size:12.5px;line-height:1.5;resize:vertical}
.actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-top:10px}
.notice{background:#2a1f05;border:1px solid #5c4410;color:#f7d58b;border-radius:8px;padding:9px 12px;font-size:13px;margin:10px 0}
.notice.blue{background:#071d33;border-color:#17406b;color:#bfe0ff}
.diff{font-family:var(--mono);font-size:12px;background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:8px 0;max-height:45vh;overflow:auto;margin:10px 0}
.diff div{padding:0 12px;white-space:pre-wrap;word-break:break-word}
.diff .add{background:rgba(79,209,139,.13);color:#a8f0c8}
.diff .del{background:rgba(255,107,107,.13);color:#ffb3b3;text-decoration:line-through;text-decoration-color:rgba(255,179,179,.4)}
.diff .same{color:var(--dim)}
.reqs{display:grid;gap:8px;margin-top:10px}
.req{border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:var(--panel)}
.req header{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.req p{margin:6px 0 0;color:var(--muted);font-size:13px}
.empty{color:var(--muted);padding:20px;border:1px dashed var(--line2);border-radius:12px;text-align:center}
@media (max-width:760px){.top{flex-wrap:wrap}.counts{display:none}nav{margin-left:0}.kv{grid-template-columns:1fr}}

/* stacked overview */
#view-map{max-width:980px;margin:0 auto}
.stop{background:#132550;border:1px solid var(--blue);border-radius:12px;padding:14px 18px;display:grid;gap:2px;margin-bottom:18px}
.stop strong{font-size:17px}
.sblock{margin-bottom:22px}
.sblock h3{margin:0 0 8px;font-size:15px;display:flex;gap:10px;align-items:baseline}
.sblock h3 span{font-size:12px;font-weight:400;color:var(--muted)}
.slist{display:grid;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--panel)}
.srow{display:grid;grid-template-columns:14px minmax(0,1.6fr) 90px minmax(0,1.2fr) 110px;gap:12px;align-items:center;padding:11px 16px;background:transparent;color:var(--text);font-weight:400;text-align:left;border:0;border-radius:0;border-top:1px solid var(--line)}
.srow:first-child{border-top:0}
button.srow:hover{background:var(--panel2)}
.srow.static{grid-template-columns:14px minmax(0,1.6fr) 90px minmax(0,1.2fr) 110px}
.sname{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sstate{color:var(--muted);font-size:13px}
.swhere{color:var(--muted);font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sedit{color:var(--blue);font-size:13px;text-align:right}
@media (max-width:700px){.srow,.srow.static{grid-template-columns:14px 1fr auto}.swhere,.sedit{display:none}}
