/* Yhwach — reskinned to Hackuity Design System v2 (Radix neutral dark + Violet accent, Aeonik). */
@font-face{font-family:Aeonik;src:url('/static/fonts/Aeonik-Regular.woff2') format('woff2');font-weight:400;font-display:swap}
@font-face{font-family:Aeonik;src:url('/static/fonts/Aeonik-Medium.woff2') format('woff2');font-weight:500;font-display:swap}
@font-face{font-family:Aeonik;src:url('/static/fonts/Aeonik-Bold.woff2') format('woff2');font-weight:600 900;font-display:swap}

:root{
  /* Hackuity DS v2 — dark (Radix neutral dark + Violet) */
  --bg:#1c1c1e; --surface:#232323; --panel:#2c2c2c; --panel2:#232323;
  --line:#383838; --line-strong:#404040; --fg:#ffffff; --fg2:#b4b4b4; --muted:#b4b4b4;
  --accent:#8a68e9; --accent2:#7e5bdb; --accent-fg:#baa4ff; --accent-surface:#281e47; --link-hover:#cdbcff;
  --accent-a3:#7042fc38; --accent-a4:#7542fe52; --gray-a2:#fcfcbe08; --gray-a3:#ffffe512; --gray-a4:#fdfdea1a;
  --side-bg:#232323; --shadow:0 20px 40px rgba(0,0,0,.25);
  --ok:#30a46c; --warn:#e9a500; --err:#e5484d;
  --crit:#d63941; --high:#f38855; --med:#e9a500; --low:#3dc5e5; --info:#707070;
  --cat1:#8a68e9; --cat2:#3dc5e5; --cat3:#f38855; --cat4:#86ead4; --cat5:#e9a500; --cat6:#46a758; --cat7:#d6409f; --cat8:#d63941; --cat9:#696e77; --cat10:#3e63dd;
  --axis:rgba(255,255,255,.45); --sec-title:rgba(255,255,255,.42); --card-bg:rgba(28,28,30,.6); --card-shadow:0 0 20px rgba(255,255,255,.06); --glow:rgba(138,104,233,.10);
  --crit-bg:#3b1219; --crit-fg:#ff9592; --high-bg:#331e0b; --high-fg:#ffa057;
  --med-bg:#352914; --med-fg:#f8bb4f; --low-bg:#0d2847; --low-fg:#70b8ff;
  --ok-bg:#132d21; --ok-fg:#3dd68c; --neutral-bg:#2c2c2c;
  --map-land:#2c2c2c; --map-stroke:#1c1c1e; --overlay:rgba(0,0,0,.5);
  /* login */
  --auth-bg:#1c1c1e; --auth-glow:#281e47; --auth-aside:rgba(0,0,0,.25); --auth-aside-shadow:0 0 10px 0 #2c2c2c;
  --card-glass:rgba(253,253,234,.10); --card-border:rgba(255,255,229,.07); --mark:#8a68e9; --blob-op:.25;
  --r-s:4px; --r:8px; --r-l:12px; --r-xl:24px;
  --font:Aeonik,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
  --mono:"SF Mono",ui-monospace,Menlo,monospace;
  color-scheme:dark;
}
:root[data-theme="light"]{
  /* Hackuity DS v2 — light (Radix neutral + Violet light palette from hy-system) */
  --bg:#fcfcfc; --surface:#ffffff; --panel:#f9f9f9; --panel2:#f0f0f0;
  --line:#e8e8e8; --line-strong:#d9d9d9; --fg:#202020; --fg2:#646464; --muted:#646464;
  --accent:#8a68e9; --accent2:#6c47c5; --accent-fg:#6c47c5; --accent-surface:#f3f0ff; --link-hover:#381175;
  --accent-a3:#3700ff1c; --accent-a4:#3a00ff29; --gray-a2:#00000005; --gray-a3:#0000000f; --gray-a4:#00000014;
  --side-bg:#f9f9f9; --shadow:0 20px 40px rgba(32,32,32,.08);
  --ok:#30a46c; --warn:#ab6400; --err:#dc3e42;
  --crit:#e5484d; --high:#f19063; --med:#ffc100; --low:#7ce2fe; --info:#8d8d8d;
  --cat1:#8a68e9; --cat2:#7ce2fe; --cat3:#f19063; --cat4:#86ead4; --cat5:#ffc100; --cat6:#46a758; --cat7:#d6409f; --cat8:#e5484d; --cat9:#8b8d98; --cat10:#3e63dd;
  --axis:rgba(0,0,0,.42); --sec-title:rgba(0,0,0,.36); --card-bg:rgba(255,255,255,.6); --card-shadow:0 0 20px rgba(0,0,0,.05); --glow:rgba(138,104,233,.09);
  --crit-bg:#feebec; --crit-fg:#ce2c31; --high-bg:#ffefd6; --high-fg:#cc4e00;
  --med-bg:#fff4d5; --med-fg:#ab6400; --low-bg:#e6f4fe; --low-fg:#0d74ce;
  --ok-bg:#e6f6eb; --ok-fg:#218358; --neutral-bg:#f0f0f0;
  --map-land:#e8e8e8; --map-stroke:#ffffff; --overlay:rgba(32,32,32,.25);
  --auth-bg:#ffffff; --auth-glow:#e9e3ff; --auth-aside:rgba(255,255,255,.55); --auth-aside-shadow:0 0 10px 0 #e8e8e8;
  --card-glass:rgba(255,255,255,.62); --card-border:rgba(0,0,0,.06); --mark:#ac8eff; --blob-op:.18;
  color-scheme:light;
}
/* no-JS fallback */
@media (prefers-color-scheme: light){:root:not([data-theme]){
  --bg:#fcfcfc; --surface:#ffffff; --panel:#f9f9f9; --panel2:#f0f0f0;
  --line:#e8e8e8; --line-strong:#d9d9d9; --fg:#202020; --fg2:#646464; --muted:#646464;
  --accent:#8a68e9; --accent2:#6c47c5; --accent-fg:#6c47c5; --accent-surface:#f3f0ff; --link-hover:#381175;
  --accent-a3:#3700ff1c; --accent-a4:#3a00ff29; --gray-a2:#00000005; --gray-a3:#0000000f; --gray-a4:#00000014;
  --side-bg:#f9f9f9; --shadow:0 20px 40px rgba(32,32,32,.08);
  --ok:#30a46c; --warn:#ab6400; --err:#dc3e42;
  --crit:#e5484d; --high:#f19063; --med:#ffc100; --low:#7ce2fe; --info:#8d8d8d;
  --cat1:#8a68e9; --cat2:#7ce2fe; --cat3:#f19063; --cat4:#86ead4; --cat5:#ffc100; --cat6:#46a758; --cat7:#d6409f; --cat8:#e5484d; --cat9:#8b8d98; --cat10:#3e63dd;
  --axis:rgba(0,0,0,.42); --sec-title:rgba(0,0,0,.36); --card-bg:rgba(255,255,255,.6); --card-shadow:0 0 20px rgba(0,0,0,.05); --glow:rgba(138,104,233,.09);
  --crit-bg:#feebec; --crit-fg:#ce2c31; --high-bg:#ffefd6; --high-fg:#cc4e00;
  --med-bg:#fff4d5; --med-fg:#ab6400; --low-bg:#e6f4fe; --low-fg:#0d74ce;
  --ok-bg:#e6f6eb; --ok-fg:#218358; --neutral-bg:#f0f0f0;
  --map-land:#e8e8e8; --map-stroke:#ffffff; --overlay:rgba(32,32,32,.25);
  --auth-bg:#ffffff; --auth-glow:#e9e3ff; --auth-aside:rgba(255,255,255,.55); --auth-aside-shadow:0 0 10px 0 #e8e8e8;
  --card-glass:rgba(255,255,255,.62); --card-border:rgba(0,0,0,.06); --mark:#ac8eff; --blob-op:.18;
}}

*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--fg);font:400 14px/1.5 var(--font);
  -webkit-font-smoothing:antialiased}
a{color:var(--accent-fg);text-decoration:none}
a:hover{color:var(--link-hover)}
.mono{font-family:var(--mono)}
.small{font-size:12px}
.muted{color:var(--muted)}
.err{color:var(--err)}
.ok{color:var(--ok)}
h1,h2,h3{margin:.2em 0 .6em;font-weight:500;letter-spacing:-.01em}
h2{font-size:17px}
h3{font-size:14px;color:var(--fg2);font-weight:500;text-transform:none}

/* top bar */
.topbar{display:flex;justify-content:space-between;align-items:center;
  padding:0 24px;height:56px;border-bottom:1px solid var(--line);background:var(--surface)}
.brand{display:flex;align-items:center;gap:10px;font-weight:500;color:var(--fg)}
.brand img{height:22px;width:auto;display:block}
.brand .tag{color:var(--muted);font-weight:400;font-size:12px}
.topbar .user{color:var(--fg2);margin-right:14px;font-size:13px}
.wrap{max-width:1640px;margin:22px auto;padding:0 24px}
.foot{max-width:1640px;margin:30px auto;padding:0 24px;color:var(--muted);font-size:12px}

/* cards / panels — flat (aplat) */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-l);
  padding:18px 20px;margin-bottom:18px}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:18px}
@media(max-width:820px){.grid2{grid-template-columns:1fr}}

/* buttons */
.btn{background:var(--accent);color:#fff;border:0;border-radius:var(--r);
  padding:7px 14px;cursor:pointer;font:500 13px var(--font);display:inline-block;transition:background .12s}
.btn:hover{background:var(--accent2);text-decoration:none}
.btn.ghost{background:transparent;border:1px solid var(--line-strong);color:var(--fg2)}
.btn.ghost:hover{background:var(--panel);color:var(--fg);border-color:var(--muted)}
.btn.danger{color:var(--err);border:1px solid var(--crit-bg);background:transparent}
.btn.danger:hover{background:var(--crit-bg)}
button.btn{font-family:var(--font)}

/* forms */
label{display:block;margin:10px 0;color:var(--fg2);font-size:12px}
input,textarea,select{width:100%;margin-top:4px;background:var(--panel);
  border:1px solid var(--line-strong);border-radius:var(--r);color:var(--fg);padding:8px 11px;font:400 13px var(--font)}
input:focus,textarea:focus,select:focus{outline:none;border-color:var(--accent);
  box-shadow:0 0 0 3px var(--accent-surface)}
textarea{resize:vertical}
.login{max-width:380px;margin:60px auto}

/* tables */
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{text-align:left;padding:9px 12px;border-bottom:1px solid var(--line);vertical-align:top}
th{color:var(--muted);font-weight:500;font-size:12px;text-transform:uppercase;letter-spacing:.5px}
tbody tr:hover{background:var(--panel2)}

/* chips / badges */
.chip{display:inline-block;background:var(--panel);border:1px solid var(--line-strong);
  border-radius:999px;padding:1px 10px;font-size:12px;margin:2px 3px 2px 0;color:var(--fg2)}
.chip.kev{color:var(--err);border-color:var(--crit-bg);background:color-mix(in srgb,var(--crit-bg) 60%,transparent)}
.chip.llm{color:var(--accent-fg);border-color:var(--accent);background:var(--accent-surface)}
.seeds{margin-top:5px}

.scope-row{display:flex;justify-content:space-between;align-items:flex-start;
  padding:12px 0;border-bottom:1px solid var(--line);gap:12px}
.scope-row:last-child{border-bottom:0}
.actions{display:flex;gap:6px;align-items:center;flex-wrap:wrap}

/* status pills */
.status{border-radius:var(--r-s);padding:2px 8px;font-size:12px;text-transform:uppercase;letter-spacing:.4px;font-weight:500}
.status.queued{background:var(--neutral-bg);color:var(--muted)}
.status.running{background:var(--accent-surface);color:var(--accent-fg)}
.status.done{background:var(--ok-bg);color:var(--ok)}
.status.error{background:var(--crit-bg);color:var(--err)}
.status.new{background:var(--accent-surface);color:var(--accent-fg)}
.status.false_positive{background:var(--neutral-bg);color:var(--muted)}
.status.accepted_risk{background:var(--med-bg);color:var(--warn)}
.status.reopened{background:var(--crit-bg);color:var(--err)}

/* severity */
.sev{border-radius:var(--r-s);padding:2px 8px;font-size:12px;font-weight:500;text-transform:uppercase}
.sev.critical{background:var(--crit-bg);color:var(--crit-fg)}
.sev.high{background:var(--high-bg);color:var(--high-fg)}
.sev.medium{background:var(--med-bg);color:var(--med-fg)}
.sev.low{background:var(--low-bg);color:var(--low-fg)}
.sev.info{background:var(--neutral-bg);color:var(--fg2)}
.conf{font-family:var(--mono);color:var(--fg)}

/* scan steps */
.steps{list-style:none;padding:0;margin:10px 0}
.steps li{display:flex;align-items:center;gap:10px;padding:7px 0;border-bottom:1px solid var(--line)}
.sname{width:160px;font-weight:500}
.ssum{color:var(--muted);font-size:12px;font-family:var(--mono)}
.dot{width:10px;height:10px;border-radius:50%;background:var(--line-strong);flex:0 0 auto}
.dot.running{background:var(--accent);box-shadow:0 0 0 4px var(--accent-surface)}
.dot.done{background:var(--ok)}
.dot.error{background:var(--err)}
.dot.skipped{background:var(--warn)}

.stats pre,.evidence{background:var(--bg);border:1px solid var(--line);border-radius:var(--r);
  padding:12px;overflow:auto;font-size:12px;color:var(--fg2)}
.crumbs{color:var(--muted);font-size:12px;margin-bottom:12px}
.scan-head{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.kv{display:grid;grid-template-columns:130px 1fr;gap:4px 14px}
.kv dt{color:var(--muted)}
.fb{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.fb select,.fb input{width:auto}
.filters{margin-bottom:10px}
.filters .chip{cursor:pointer}

/* family distribution bar */
.fam-dist{margin:4px 0 8px}
.fam-bar{display:flex;height:14px;border-radius:var(--r-s);overflow:hidden;border:1px solid var(--line);background:var(--panel)}
.fam-seg{height:100%;min-width:2px}
.fam-legend{display:flex;flex-wrap:wrap;gap:4px 16px;margin-top:10px;font-size:12px}
.fam-item{display:inline-flex;align-items:center;gap:6px;color:var(--fg2)}
.fam-dot{width:10px;height:10px;border-radius:2px;display:inline-block}

/* intelligence */
.exec{background:var(--panel);border-left:3px solid var(--accent);border-radius:var(--r);padding:12px 14px;line-height:1.6;color:var(--fg2)}
.toprisks{margin:6px 0;padding-left:20px}
.toprisks li{margin:8px 0}
.paths{list-style:none;padding:0}
.paths li{padding:6px 10px;background:var(--panel);border:1px solid var(--line);border-radius:var(--r);margin:5px 0;font-size:13px}
.themes{margin-top:10px}
.risk-score{display:inline-block;min-width:34px;text-align:center;font-family:var(--mono);
  font-weight:700;padding:2px 6px;border-radius:var(--r-s);background:var(--high-bg);color:var(--high)}
.ai-badge{display:inline-block;font-size:12px;font-weight:500;padding:2px 10px;border-radius:999px;
  background:var(--accent-surface);border:1px solid var(--accent);color:var(--accent-fg);vertical-align:middle;margin-left:8px}

/* dashboard */
.dash-top{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap}
.scope-sel select{min-width:220px}
.newscope{position:relative;display:inline-block}
.newscope summary{list-style:none;cursor:pointer}
.newscope summary::-webkit-details-marker{display:none}
.newscope[open] form{position:absolute;right:0;z-index:10}
.dash-grid{display:grid;grid-template-columns:1.1fr 1.2fr 1fr;gap:16px;margin-bottom:16px}
.dash-grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px}
@media(max-width:1100px){.dash-grid{grid-template-columns:1fr}.dash-grid2{grid-template-columns:1fr}}

/* chart sizing — FIX oversized charts: fixed-height containers */
.chart-box{position:relative;height:220px}
.chart-box.sm{height:170px}
.exposure-card{text-align:center}
.gauge{display:flex;align-items:baseline;justify-content:center;gap:14px;margin:6px 0}
.gauge-grade{font:700 44px var(--font);line-height:1;width:76px;height:76px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;border:3px solid}
.gauge-num{font:500 28px var(--font)}
.gauge-num span{font-size:15px;font-weight:400;color:var(--muted)}
.grade-A{color:var(--ok-fg);border-color:var(--ok-fg)}
.grade-B{color:var(--low-fg);border-color:var(--low-fg)}
.grade-C{color:var(--med-fg);border-color:var(--med-fg)}
.grade-D{color:var(--high-fg);border-color:var(--high-fg)}
.grade-F{color:var(--crit-fg);border-color:var(--crit-fg)}
.gauge-bar{height:7px;background:var(--panel);border-radius:5px;overflow:hidden;margin:10px 0}
.gauge-bar span{display:block;height:100%;background:linear-gradient(90deg,var(--ok-fg),var(--med-fg),var(--crit-fg))}
.bench{margin-top:12px;text-align:left;border-top:1px solid var(--line);padding-top:10px}
.bench-row{display:flex;justify-content:space-between;font-size:12px;padding:2px 0}
.expo-cats{margin-top:12px;text-align:left}
.expo-cat{display:flex;justify-content:space-between;padding:4px 0;border-bottom:1px solid var(--line);font-size:12px}
.kpis{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:12px}
.kpi{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:10px 12px}
.kpi-n{font:500 26px var(--font)}
.kpi-n.crit{color:var(--crit)}.kpi-n.high{color:var(--high)}.kpi-n.ok{color:var(--ok)}
.kpi-l{color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.4px}
table.tight th,table.tight td{padding:5px 10px}
.provlist{display:flex;flex-direction:column;gap:7px}
.provrow{display:grid;grid-template-columns:150px 1fr 40px;align-items:center;gap:8px;font-size:12px}
.provlabel{color:var(--fg2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.provbar{height:12px;background:var(--panel);border-radius:4px;overflow:hidden}
.provbar span{display:block;height:100%;background:var(--accent)}
.provn{text-align:right;font-family:var(--mono)}
.grade-pill{display:inline-block;width:20px;height:20px;line-height:18px;text-align:center;border-radius:var(--r-s);font-weight:700;font-size:12px;border:1px solid}
.trend-events{margin-top:10px;display:flex;gap:6px;flex-wrap:wrap}
.aes{white-space:nowrap}
.aes-bar{display:inline-block;width:70px;height:8px;background:var(--panel);border-radius:4px;overflow:hidden;vertical-align:middle;margin-right:6px}
.aes-bar span{display:block;height:100%}
.aes-n{font-family:var(--mono);font-size:12px}
.kpi-cats{display:flex;gap:6px;flex-wrap:wrap}
.asset-search{display:flex;gap:8px;margin:10px 0}
.asset-search input{max-width:320px}
#geomap{background:var(--bg);position:relative}
#geomap [id$="markers-labels-group"]{display:none;pointer-events:none}
#geomap.geo-zoomed [id$="markers-labels-group"]{display:inline}
#geomap .jvm-zoom-btn{background:var(--surface);color:var(--fg);border:1px solid var(--line-strong);border-radius:4px;width:20px;height:20px;line-height:18px;padding:0;left:10px}
.jvm-tooltip{background:var(--surface)!important;border:1px solid var(--line)!important}

/* monitoring bar */
.monitor-bar{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r-l);padding:10px 16px;margin-bottom:16px}
.sched-form{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.sched-form .inline{display:inline-flex;align-items:center;gap:5px;margin:0;color:var(--fg2);font-size:13px}
.sched-form input[type=number]{margin:0}
.change-chips{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.pager{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;
  margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}
.pager-ctrl{display:flex;align-items:center;gap:6px}
.pager-n{font-size:12px;color:var(--fg2);padding:0 8px;font-family:var(--mono)}
.btn.ghost.disabled{opacity:.4;pointer-events:none}

/* incidents / playbook */
.inc-meta{display:flex;gap:22px;flex-wrap:wrap;margin:8px 0;font-size:13px}
.inc-meta .muted{font-size:12px;text-transform:uppercase;letter-spacing:.4px;margin-right:4px}
.alert-row{border:1px solid var(--line);border-radius:var(--r);padding:12px;margin:10px 0;background:var(--panel2)}
.alert-head{display:flex;align-items:center;gap:8px}
.remediation{margin-top:8px;padding:8px 10px;background:var(--accent-surface);border-left:3px solid var(--accent);border-radius:var(--r);font-size:13px}
.playbook{margin:6px 0;padding-left:20px}
.playbook li{margin:7px 0}
.pb-action{display:inline-block;min-width:48px;font-size:12px;text-transform:uppercase;letter-spacing:.4px;color:var(--accent-fg);font-weight:500;margin-right:6px}

/* side drawer (HyDrawer-style) for finding "view" */
.drawer-overlay{position:fixed;inset:0;background:var(--overlay);opacity:0;pointer-events:none;
  transition:opacity .2s;z-index:50}
.drawer-overlay.open{opacity:1;pointer-events:auto}
.drawer{position:fixed;top:0;right:0;height:100vh;width:min(560px,92vw);background:var(--surface);
  border-left:1px solid var(--line-strong);transform:translateX(100%);transition:transform .22s ease;
  z-index:51;overflow-y:auto;box-shadow:-20px 0 60px rgba(0,0,0,.4)}
.drawer.open{transform:translateX(0)}
.drawer-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;
  padding:18px 20px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--surface)}
.drawer-body{padding:18px 20px}
.drawer-close{background:transparent;border:0;color:var(--muted);font-size:22px;cursor:pointer;line-height:1}
.drawer-close:hover{color:var(--fg)}

/* evidence cards */
.ev-meta{display:flex;flex-direction:column;gap:5px;font-size:13px;margin-bottom:14px}
.ev-meta .muted{font-size:12px;text-transform:uppercase;letter-spacing:.5px;margin-right:6px}
.ev-note{background:var(--med-bg);border-left:3px solid var(--warn);border-radius:var(--r);padding:10px 12px;font-size:13px;margin-bottom:12px;line-height:1.5}
.ev-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-l);margin:12px 0;overflow:hidden}
.ev-card-h{display:flex;justify-content:space-between;align-items:center;gap:8px;
  padding:10px 14px;border-bottom:1px solid var(--line);background:var(--surface);font-weight:500;font-size:13px}
.ev-card-h .btn{padding:3px 10px;font-size:12px}
.ev-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px;padding:14px}
.ev-grid > div{display:flex;flex-direction:column;gap:3px;min-width:0;word-break:break-word}
.ev-grid .ev-span{grid-column:1 / -1}
.ev-k{font-size:12px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted)}
.ev-nested{display:flex;flex-direction:column;gap:3px}
.ev-nrow{display:flex;gap:8px;font-size:12px}
.ev-nk{color:var(--muted);min-width:90px}
.ev-list{margin:2px 0;padding-left:16px;font-size:12px}
.ev-details{border-top:1px solid var(--line);padding:10px 14px}
.ev-details summary{cursor:pointer;color:var(--accent-fg);font-size:12px}
.ip-card{border-color:var(--accent)}
.ip-card .ev-card-h{background:var(--accent-surface);color:var(--accent-fg)}

.fd-head{margin-bottom:12px}

.host-summary{font-weight:500;color:var(--fg);margin:2px 0 10px}
.status.fixed{background:var(--ok-bg);color:var(--ok)}

/* ================= app shell — HySideBarMenu (hackuity-gui) ================= */
html,body{background:var(--bg)}
body.app{display:block;min-height:100vh}
.ico{flex:0 0 auto;display:block}
.side{position:fixed;inset:0 auto 0 0;width:220px;background:var(--side-bg);display:flex;flex-direction:column;
  justify-content:space-between;transition:width 160ms ease;z-index:40;border-right:1px solid var(--line)}
.side-top{padding:24px 24px 8px}
.side-logo{display:block;color:var(--fg)}
.side-logo .logo-full svg{height:30px;width:auto;display:block}
.side-logo .logo-mini{display:none;width:36px;height:36px;margin:0 auto}
.side-env{font-size:12px;font-weight:500;color:var(--fg2);padding-left:37px;margin-top:2px}
.tenant-box{margin-top:16px;padding:10px 12px;background:var(--gray-a2);border:1px solid var(--line);border-radius:16px}
.tenant-name{font-weight:500;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tenant-code{font-size:12px;color:var(--muted)}
.persel{margin:8px 0 0}
.persel-l{margin:0 0 2px;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--fg2)}
.persel select{margin:0;padding:5px 8px;border-radius:999px;font-size:12px;background:var(--surface)}
.side-content{flex:1;overflow-y:auto;padding:12px 24px;display:flex;flex-direction:column;gap:16px}
.nav-group{display:flex;flex-direction:column;gap:4px}
.nav-gl{font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:.04px;color:var(--fg2);padding:0 8px;margin-bottom:2px}
.nav-item{display:flex;align-items:center;gap:8px;padding:8px;border-radius:24px;color:var(--fg);font-size:14px;
  font-weight:500;line-height:20px;cursor:pointer;background:transparent;border:0;width:100%;text-align:left;font-family:var(--font)}
.nav-item:hover{background:var(--gray-a3);color:var(--fg)}
.nav-item.active{background:var(--accent-a3)}
.nav-item.active .ico{color:var(--accent)}
.nav-item.active:hover{background:var(--accent-a4)}
.nav-l{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.side-bottom{margin:8px 16px 16px;padding:4px;background:var(--gray-a2);border-radius:20px;display:flex;flex-direction:column;gap:2px}
.acct{position:relative}
.acct summary{list-style:none}
.acct summary::-webkit-details-marker{display:none}
.acct-menu{position:absolute;left:calc(100% + 12px);bottom:0;min-width:240px;background:var(--surface);border:1px solid var(--line-strong);
  border-radius:var(--r-l);box-shadow:var(--shadow);padding:8px;z-index:60}
.acct-h{font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--fg2);padding:4px 8px}
.theme-sw{display:flex;gap:4px;padding:4px;background:var(--panel);border-radius:999px;margin:2px 4px 8px}
.theme-sw button{flex:1;display:flex;align-items:center;justify-content:center;gap:4px;border:0;background:transparent;color:var(--fg2);
  font:500 12px var(--font);padding:5px 6px;border-radius:999px;cursor:pointer}
.theme-sw button:hover{color:var(--fg)}
html[data-theme-mode="light"] .theme-sw [data-mode="light"],html[data-theme-mode="dark"] .theme-sw [data-mode="dark"],
html[data-theme-mode="system"] .theme-sw [data-mode="system"]{background:var(--surface);color:var(--fg);box-shadow:0 1px 2px rgba(0,0,0,.15)}
.acct-a{display:flex;align-items:center;gap:8px;padding:8px;border-radius:var(--r);color:var(--fg);font-size:13px}
.acct-a:hover{background:var(--gray-a3);color:var(--fg)}
.nav-toggle .t-open{display:none}
.main{margin-left:220px;padding:28px 32px 8px;min-height:100vh;transition:margin-left 160ms ease;max-width:1880px}
.main.no-side{margin-left:0}
.foot{margin:40px 0 16px;color:var(--muted);font-size:12px;max-width:none;padding:0}
/* collapsed (84px) */
.nav-collapsed .side{width:84px}
.nav-collapsed .main{margin-left:84px}
.nav-collapsed .side-top{padding:24px 12px 8px}
.nav-collapsed .logo-full,.nav-collapsed .side-env,.nav-collapsed .tenant-box,.nav-collapsed .nav-l{display:none}
.nav-collapsed .side-logo .logo-mini{display:block}
.nav-collapsed .side-content{padding:12px 24px}
.nav-collapsed .nav-gl{font-size:0;height:16px;width:36px;border-radius:24px;background:var(--gray-a4);padding:0;margin:0 auto 4px}
.nav-collapsed .nav-item{width:36px;height:36px;justify-content:center;padding:0;margin:0 auto}
.nav-collapsed .side-bottom{margin:8px 20px 16px;align-items:center}
.nav-collapsed .nav-toggle .t-open{display:block}.nav-collapsed .nav-toggle .t-close{display:none}
@media(max-width:900px){.side{width:84px}.main{margin-left:84px;padding:20px 16px}
  .logo-full,.side-env,.tenant-box,.nav-l{display:none}.side-logo .logo-mini{display:block}
  .nav-item{width:36px;height:36px;justify-content:center;padding:0;margin:0 auto}.nav-gl{font-size:0;height:4px}}

/* page header + flash */
.page-h{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;flex-wrap:wrap;margin-bottom:20px}
.page-h h1{font-size:24px;font-weight:500;margin:0}
.page-h .sub{color:var(--fg2);font-size:13px;margin-top:2px}
.flash{display:flex;align-items:center;gap:8px;padding:10px 14px;border-radius:var(--r-l);margin-bottom:18px;font-size:13px;border:1px solid}
.flash.ok{background:var(--ok-bg);color:var(--ok-fg);border-color:color-mix(in srgb,var(--ok) 40%,transparent)}
.flash.err{background:var(--crit-bg);color:var(--crit-fg);border-color:color-mix(in srgb,var(--err) 40%,transparent)}
.btn{border-radius:999px;padding:7px 16px}
.btn.sm{padding:4px 12px;font-size:12px}
.btn .ico{display:inline-block;vertical-align:-3px;margin-right:4px}
.lic{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px;margin-bottom:18px}
.lic-i{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-l);padding:12px 14px}
.lic-l{font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--fg2)}
.lic-n{font:500 22px var(--font);margin-top:2px}
.lic-n small{font-size:13px;color:var(--muted);font-weight:400}
.lic-bar{height:6px;border-radius:4px;background:var(--panel2);overflow:hidden;margin-top:8px}
.lic-bar span{display:block;height:100%;background:var(--accent)}
.lic-bar span.full{background:var(--err)}
.seed-chip{display:inline-flex;align-items:center;gap:4px;background:var(--panel);border:1px solid var(--line-strong);
  border-radius:999px;padding:2px 4px 2px 10px;font:12px var(--mono);margin:3px 4px 3px 0}
.seed-chip form{display:inline}
.seed-chip button{border:0;background:transparent;color:var(--muted);cursor:pointer;font-size:14px;line-height:1;padding:0 4px;border-radius:50%}
.seed-chip button:hover{color:var(--err)}
.per-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-l);padding:18px 20px;margin-bottom:14px}
.per-head{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.per-head h2{margin:0}
.inline-form{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:12px}
.inline-form input,.inline-form select{width:auto;margin:0}
.inline-form input[type=text],.inline-form input[type=email],.inline-form input:not([type]){min-width:260px}
.secret-box{background:var(--accent-surface);border:1px solid var(--accent);border-radius:var(--r-l);padding:14px 16px;margin-bottom:18px}
.secret-box .mono{font-size:15px;user-select:all}
.role{font-size:12px;text-transform:uppercase;letter-spacing:.04em;padding:2px 8px;border-radius:999px;background:var(--panel);border:1px solid var(--line-strong);color:var(--fg2)}
.role.admin,.role.superadmin{color:var(--accent-fg);border-color:var(--accent);background:var(--accent-surface)}
.row-actions{display:flex;gap:6px;flex-wrap:wrap}
.row-actions form{display:inline}
td.num,th.num{text-align:right;font-family:var(--mono)}
.yes{color:var(--ok-fg)}.no{color:var(--muted)}

/* ================= login — LoginScreen (hackuity-gui @hackuity/auth) ================= */
body.auth{margin:0;overflow:hidden}
.auth-root{position:relative;display:flex;width:100vw;height:100vh;overflow:hidden;
  background:radial-gradient(50% 50% at 50% 50%,var(--auth-glow) 0%,var(--auth-bg) 100%),var(--auth-bg)}
.auth-blob{position:absolute;left:50%;top:50%;width:800px;height:800px;border-radius:50%;transform:translate(-50%,-50%);
  background:#8a68e9;opacity:var(--blob-op);mix-blend-mode:screen;filter:blur(100px);pointer-events:none}
[data-theme="light"] .auth-blob{mix-blend-mode:multiply}
.auth-aside{position:relative;z-index:2;flex:0 0 38.2%;padding:80px;display:flex;flex-direction:column;justify-content:center;gap:24px;
  background:var(--auth-aside);box-shadow:var(--auth-aside-shadow);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);color:var(--fg)}
.auth-logo svg{width:min(360px,100%);height:auto;display:block}
.auth-claim{font-size:36px;line-height:1.15;font-weight:600;color:var(--fg2);margin:0;letter-spacing:-.02em}
.auth-claim em{font-style:normal;color:var(--fg)}
.auth-sub{color:var(--muted);margin:0;font-size:14px}
.auth-mark{position:absolute;top:50%;left:38.2%;height:70vh;transform:translate(-50%,-50%);color:var(--mark);z-index:1;
  filter:drop-shadow(-5px 2px 6px rgba(0,0,0,.25));pointer-events:none}
.auth-mark svg{height:100%;width:auto;display:block}
.auth-main{position:relative;z-index:3;flex:0 0 61.8%;display:grid;grid-template-rows:minmax(24px,1fr) auto minmax(24px,1fr);justify-items:center;overflow-y:auto}
.login-card{grid-row:2;display:flex;flex-direction:column;width:480px;max-width:calc(100vw - 32px);padding:64px;border-radius:24px;
  border:1px solid var(--card-border);background:var(--card-glass);box-shadow:0 20px 40px 0 rgba(0,0,0,.25);
  backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);color:var(--fg)}
.lc-form{display:flex;flex-direction:column;gap:32px}
.lc-block{display:flex;flex-direction:column;gap:16px}
.lc-title{font-size:30px;font-weight:600;text-align:center;margin:0;letter-spacing:-.01em}
.lc-ns{font-size:14px;font-weight:500;color:var(--fg2);text-align:center;margin:6px 0 0;word-break:break-all}
.lc-inputs{display:flex;flex-direction:column;gap:8px;margin-top:24px}
.lc-email{font-size:14px;color:var(--fg);padding:0 2px}
.login-card input{margin:0;height:44px;padding:0 14px;border-radius:var(--r);font-size:14px;background:var(--surface);border:1px solid var(--line-strong)}
.lc-btn{display:flex;align-items:center;justify-content:center;height:44px;border-radius:999px;border:0;background:var(--accent);color:#fff;
  font:500 15px var(--font);cursor:pointer;flex:3;width:100%}
.lc-btn:hover{background:var(--accent2);color:#fff}
.lc-btn.ghost{flex:1;background:transparent;border:1px solid var(--line-strong);color:var(--fg)}
.lc-btn.ghost:hover{background:var(--gray-a3);color:var(--fg)}
.lc-row{display:flex;gap:16px}
.lc-err{display:flex;align-items:center;gap:8px;background:var(--crit-bg);color:var(--crit-fg);border-radius:var(--r);padding:10px 12px;font-size:13px}
.lc-hint,.lc-note{color:var(--muted);font-size:12px;margin:0;text-align:center;font-style:italic;line-height:1.5}
.lc-steps{margin:0;padding-left:18px;color:var(--fg2);font-size:13px;line-height:1.55}
.qr{background:#fff;border-radius:16px;padding:10px;width:196px;height:196px;margin:0 auto}
.qr svg{width:100%;height:100%;display:block}
.lc-secret{font-size:12px;color:var(--fg2);text-align:center}
.lc-secret summary{cursor:pointer;color:var(--accent-fg)}
.secret-key{margin:8px 0 4px;font-size:13px;letter-spacing:.08em;word-break:break-all;user-select:all;color:var(--fg)}
.lc-link{border:0;background:none;color:var(--accent-fg);cursor:pointer;font:500 12px var(--font)}
.otp-boxes{display:flex;justify-content:center;align-items:center;gap:8px}
.login-card .otp-boxes input{width:52px;height:52px;padding:0;text-align:center;font:500 22px var(--mono);border-radius:8px;
  border:1px solid color-mix(in srgb,var(--fg) 15%,transparent);background:var(--surface)}
.otp-dot{color:var(--muted);font-size:20px}
.pw-rules{margin:0;padding-left:18px;color:var(--fg2);font-size:12px;line-height:1.7}
@media(max-width:900px){.auth-aside,.auth-mark{display:none}.auth-main{flex:1 1 100%}.login-card{padding:40px 28px}}


/* ================= typography — hackuity-gui HyText (Radix scale: 1=12 2=14 3=16 4=18 7=28) ================= */
body{font:400 14px/1.5 var(--font)}
h1,.page-h h1{font-size:28px;font-weight:700;letter-spacing:-.01em;line-height:1.2}
h2{font-size:18px;font-weight:700;color:var(--fg)}          /* section-title */
h3{font-size:16px;font-weight:700;color:var(--fg)}          /* title */
.page-h .sub{font-size:14px;color:var(--fg2)}
.small{font-size:12px}                                       /* caption */
.muted{color:var(--fg2)}
label{font-size:14px;font-weight:500;color:var(--fg);margin:12px 0}
input,textarea,select{font:400 14px var(--font);padding:9px 12px;min-height:40px}
textarea{min-height:auto}
input::placeholder,textarea::placeholder{color:var(--fg2);opacity:.75}
.btn{font:500 14px var(--font);padding:8px 18px}
.btn.sm{font-size:13px;padding:5px 14px}
.btn.ghost{color:var(--fg);border-color:var(--line-strong)}
/* tables — HyTable: header bold plain, body medium, generous padding */
table{font-size:14px}
th{font-size:14px;font-weight:700;color:var(--fg);text-transform:none;letter-spacing:0;padding:14px 16px;
  background:var(--panel);border-bottom:1px solid var(--line-strong)}
td{padding:14px 16px;font-weight:500;color:var(--fg)}
td .muted,td.muted{font-weight:400}
table.tight th,table.tight td{padding:10px 14px}
tbody tr:hover{background:var(--gray-a3)}
.card,.per-card{padding:24px}
.chip,.status,.sev,.role{font-size:12px}
.status,.sev{letter-spacing:.02em}
.crumbs{font-size:14px;color:var(--fg2)}
.kpi-l,.lic-l,.ev-k,.nav-gl{font-size:12px;color:var(--fg2)}
.ev-card-h{font-size:14px}
.ev-grid > div,.ev-meta,.remediation,.ev-note{font-size:14px}
.ssum{font-size:12px;color:var(--fg2)}
.foot{color:var(--fg2)}
.flash{font-size:14px}
.secret-box{font-size:14px}
.tenant-code{font-size:12px;color:var(--fg2)}
td.num,th.num{font-family:var(--font);font-variant-numeric:tabular-nums}
td.small{font-size:13px}
.mono{font-variant-numeric:tabular-nums}
.form-err{display:flex;align-items:center;gap:8px;margin-top:10px;padding:10px 12px;border-radius:var(--r);
  background:var(--crit-bg);color:var(--crit-fg);font-size:14px}
.seed-count.over{color:var(--crit-fg);font-weight:500}
.is-err,.is-err:focus{border-color:var(--err)!important;box-shadow:0 0 0 3px color-mix(in srgb,var(--err) 20%,transparent)!important}
.btn:disabled{opacity:.45;cursor:not-allowed}

/* side drawer = half the screen (user request); full width on small screens */
.drawer{width:50vw;min-width:min(640px,100vw)}
@media(max-width:1100px){.drawer{width:94vw;min-width:0}}
.drawer-body{padding:24px 28px}
.chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.chips .chip{margin:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ev-grid > div{overflow-wrap:anywhere}
.ev-card .host-summary{padding:12px 14px 0;margin:0}
.ev-card .ev-note{margin:0 14px 14px}
.ev-grid .mono{overflow-wrap:anywhere}

/* map — readable zoom buttons, labels, borders and tooltip in both themes */
#geomap .jvm-zoom-btn{position:absolute;left:12px;width:30px;height:30px;line-height:28px;padding:0;text-align:center;
  font:600 18px var(--font);background:var(--surface);color:var(--fg);border:1px solid var(--line-strong);
  border-radius:8px;cursor:pointer;box-shadow:0 1px 2px rgba(0,0,0,.12);box-sizing:border-box}
#geomap .jvm-zoom-btn:hover{background:var(--panel)}
#geomap .jvm-zoomin{top:12px}
#geomap .jvm-zoomout{top:48px}
#geomap path.jvm-region{vector-effect:non-scaling-stroke;stroke-width:1px!important}
#geomap [id$="markers-labels-group"] text{paint-order:stroke;stroke:var(--surface);stroke-width:4px;stroke-linejoin:round}
.jvm-tooltip{background:var(--surface)!important;color:var(--fg)!important;border:1px solid var(--line-strong)!important;
  border-radius:10px!important;padding:10px 12px!important;font:400 13px/1.45 var(--font)!important;
  box-shadow:var(--shadow)!important;max-width:320px;white-space:normal!important;z-index:30}
.jvm-tooltip b{font-weight:700;font-size:14px}
.jvm-tooltip .tt-sub{color:var(--fg2)}
.jvm-tooltip .tt-warn{margin-top:6px;color:var(--med-fg);font-size:12px}
.jvm-tooltip .tt-ips{margin-top:6px;font:12px var(--mono);color:var(--fg2)}
.ev-explain{font-size:14px;line-height:1.55;margin:0 0 10px;color:var(--fg)}
.ev-explain strong{font-weight:700}
.ev-repro{display:flex;flex-direction:column;gap:4px;margin:0 0 12px}
.ev-repro code{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:8px 10px;font-size:12px;overflow-wrap:anywhere}
.ev-xp{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-l);padding:14px 16px 4px;margin:0 0 12px}

/* severity mini-squares (assets list, IP pane) */
.fcell{white-space:nowrap}
.fcount{display:inline-block;min-width:26px;padding:2px 8px;border-radius:999px;background:var(--accent-surface);
  color:var(--accent-fg);font-weight:700;text-align:center;margin-right:8px}
.fcount:hover{background:var(--accent-a4);color:var(--accent-fg)}
.sevmini{display:inline-flex;gap:8px;align-items:center;vertical-align:middle}
.sm-i{display:inline-flex;align-items:center;gap:3px;font-size:12px;font-weight:600;color:var(--fg)}
.sq{display:inline-block;width:10px;height:10px;border-radius:2px}
.sq.critical{background:var(--crit)}.sq.high{background:var(--high)}.sq.medium{background:var(--med)}
.sq.low{background:var(--low)}.sq.info{background:var(--info)}
.chip-on{background:var(--accent-surface);color:var(--accent-fg);border-color:var(--accent)}
.asset-filter{display:flex;gap:10px;align-items:center;margin:4px 0 10px;font-size:14px}

/* MapLibre map */
.geomap{height:440px;border-radius:12px;overflow:hidden;border:1px solid var(--line)}
.maplibregl-popup-content{background:var(--surface)!important;color:var(--fg);border:1px solid var(--line-strong);
  border-radius:10px!important;box-shadow:var(--shadow)!important;padding:12px 14px!important;font:400 13px/1.45 var(--font)}
.maplibregl-popup-tip{border-top-color:var(--surface)!important;border-bottom-color:var(--surface)!important}
.maplibregl-popup-close-button{color:var(--fg2);font-size:18px;padding:2px 8px}
.geo-tt b{font-size:14px;font-weight:700}
.geo-tt .tt-sub{color:var(--fg2)}
.geo-tt .tt-warn{margin-top:6px;color:var(--med-fg);font-size:12px}
.geo-tt .tt-ips{margin-top:6px;font:12px var(--mono);color:var(--fg2)}
.geo-tt .tt-hint{margin-top:6px;font-size:12px;color:var(--fg2);font-style:italic}
.geo-tt .tt-link{display:inline-block;margin-top:8px;font-weight:600}
.maplibregl-ctrl-group{background:var(--surface)!important;border:1px solid var(--line-strong)}
.maplibregl-ctrl-group button{width:32px!important;height:32px!important}
[data-theme="dark"] .maplibregl-ctrl-group button .maplibregl-ctrl-icon{filter:invert(1)}
.provrow.ctry{cursor:pointer;border-radius:8px;padding:4px 6px;margin:0 -6px}
.provrow.ctry:hover,.provrow.ctry.on{background:var(--accent-a3)}
.provrow.ctry:focus-visible{outline:2px solid var(--accent)}
.crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:14px;color:var(--fg2);margin:0 0 14px}
.crumbs a{color:var(--fg2);text-decoration:none;border-radius:6px;padding:2px 4px;margin:0 -4px}
.crumbs a:hover{color:var(--accent-fg);background:var(--accent-a3)}
.crumbs .sep{color:var(--line-strong);font-size:15px}
.crumbs .cur{color:var(--fg);font-weight:600;overflow-wrap:anywhere}
.row-hit{background:var(--accent-a3)}.row-hit td{font-weight:600}
.form-warn{display:flex;align-items:center;gap:8px;margin-top:10px;padding:10px 12px;border-radius:var(--r);
  background:var(--med-bg);color:var(--med-fg);font-size:14px;border:1px solid color-mix(in srgb,var(--warn) 35%,transparent)}
.seed-count.warn{color:var(--med-fg);font-weight:500}
.flash.warn{background:var(--med-bg);color:var(--med-fg);border-color:color-mix(in srgb,var(--warn) 40%,transparent)}

/* ================= Dashboard — hackuity-gui managed dashboard look ================= */
body.app{background:radial-gradient(55% 45% at 62% 38%, var(--glow) 0%, transparent 70%) fixed, var(--bg)}
.dash-sec-t{font-size:28px;font-weight:700;color:var(--sec-title);margin:56px 0 20px;letter-spacing:-.01em}
.dash-sec-t:first-of-type{margin-top:28px}
.dg{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:16px}
.dg .c3{grid-column:span 3}.dg .c4{grid-column:span 4}.dg .c6{grid-column:span 6}.dg .c8{grid-column:span 8}.dg .c12{grid-column:span 12}
@media(max-width:1250px){.dg .c3{grid-column:span 6}.dg .c4,.dg .c6,.dg .c8{grid-column:span 12}}
.hy-card{position:relative;padding:24px;border-radius:24px;background:var(--card-bg);box-shadow:var(--card-shadow);
  backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);min-width:0}
.hy-card-h{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:24px}
.hy-card-h h3{margin:0;font-size:16px;font-weight:700;color:var(--fg)}
.hy-card-sub{font-size:12px;color:var(--fg2)}
.chart-h{position:relative;height:280px}
.chart-h.donut{height:240px}
.nodata{color:var(--fg2);text-align:center;padding:48px 0;margin:0}
.hy-legend{display:flex;flex-wrap:wrap;gap:8px 16px;margin-top:24px;justify-content:center}
.lg-i{display:inline-flex;align-items:center;gap:6px;border:0;background:none;padding:0;cursor:pointer;font:500 14px var(--font);color:var(--fg2)}
.lg-i i{width:8px;height:8px;border-radius:50%;display:inline-block}
.lg-i.off{opacity:.5;text-decoration:line-through}
/* HyKPI */
.hy-kpi{display:block;padding:16px 20px;border-radius:16px;background:var(--card-bg);box-shadow:var(--card-shadow);
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);color:var(--fg);transition:background .15s}
.hy-kpi:hover{background:var(--accent-a3);color:var(--fg)}
.kpi-v{display:flex;align-items:center;gap:8px;font-size:35px;font-weight:700;line-height:1.15}
.kpi-pct{font-size:20px;font-weight:700;color:var(--fg2)}
.kpi-dot{width:12px;height:12px;border-radius:50%;flex:0 0 auto;background:var(--info)}
.kpi-dot.critical{background:var(--crit)}.kpi-dot.high{background:var(--high)}.kpi-dot.medium{background:var(--med)}
.kpi-dot.low{background:var(--low)}.kpi-dot.accent{background:var(--accent)}
.kpi-lbl{font-size:20px;font-weight:700;margin-top:4px}
.kpi-sub{font-size:16px;font-weight:500;color:var(--fg2);margin-top:2px}
/* HyGauge (288° arc) for the exposure score */
.gauge2{position:relative;width:200px;height:200px;margin:0 auto}
.gauge2 svg{width:100%;height:100%;transform:rotate(0deg)}
.gauge2 path{fill:none;stroke-linecap:round}
.gauge2 .g-track{stroke:var(--gray-a4);stroke-width:3.3}
.gauge2 .g-val{stroke-width:11.2;transition:stroke-dasharray 1s ease}
.gauge2.grade-A .g-val{stroke:var(--ok)}.gauge2.grade-B .g-val{stroke:var(--low)}.gauge2.grade-C .g-val{stroke:var(--med)}
.gauge2.grade-D .g-val{stroke:var(--high)}.gauge2.grade-F .g-val{stroke:var(--crit)}
.g-center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}
.g-grade{font-size:48px;font-weight:700;line-height:1}
.g-num{font-size:20px;font-weight:700;margin-top:4px}
.g-num small{font-size:14px;color:var(--fg2);font-weight:500}
.bench2{margin-top:16px;display:flex;flex-direction:column;gap:6px;font-size:14px}
.bench2 > div:not(.muted){display:flex;justify-content:space-between}
.hy-table{font-size:14px}
.hy-table th{background:transparent;border-bottom:1px solid var(--line);padding:10px 12px}
.hy-table td{padding:12px;border-bottom:1px solid var(--line)}
.hy-table tr:last-child td{border-bottom:0}
.dash-strip{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:-4px 0 0}
.dash-strip .chip{font-size:13px;display:inline-flex;align-items:center;gap:6px;background:var(--card-bg)}
.chip-crit{color:var(--crit-fg)!important;border-color:color-mix(in srgb,var(--crit) 45%,transparent)!important}
.chip-ok{color:var(--ok-fg)!important;border-color:color-mix(in srgb,var(--ok) 45%,transparent)!important}
.sub-h{font-size:14px;font-weight:700;margin:18px 0 6px}

/* --- refinements from the real Hackuity dashboards --- */
.hy-card{border:1px solid var(--gray-a3)}
.hy-kpi.strong{background:transparent;box-shadow:none;backdrop-filter:none;-webkit-backdrop-filter:none;padding:12px 16px}
.hy-kpi.strong .kpi-v{font-size:48px;letter-spacing:-.02em;align-items:baseline}
.hy-kpi.strong .kpi-dot{width:8px;height:8px;align-self:center}
.hy-kpi.strong:hover{background:var(--accent-a3)}
.hy-legend{justify-content:flex-start}
.btn-out{display:inline-flex;align-items:center;gap:8px;margin-top:20px;padding:7px 14px;border:1px solid var(--accent);
  border-radius:8px;color:var(--accent-fg);font-weight:500;font-size:14px;background:transparent}
.btn-out:hover{background:var(--accent-a3);color:var(--accent-fg)}
/* TrueRisk-style score scale */
.score-w{padding:8px 0 4px}
.score-n{font-size:48px;font-weight:700;text-align:center;line-height:1.1;display:flex;align-items:center;justify-content:center;gap:12px}
.score-n .grade-pill{width:30px;height:30px;line-height:28px;font-size:16px;border-radius:8px}
.score-scale{position:relative;display:grid;grid-template-columns:repeat(10,1fr);gap:3px;margin:26px 4px 6px}
.score-scale .seg{height:10px;border-radius:2px;display:block}
.seg.s0,.seg.s1,.seg.s2,.seg.s3{background:var(--low)}
.seg.s4,.seg.s5,.seg.s6{background:var(--med)}
.seg.s7,.seg.s8{background:var(--high)}
.seg.s9{background:var(--crit)}
.score-scale .caret{position:absolute;top:-14px;width:0;height:0;transform:translateX(-50%);
  border-left:7px solid transparent;border-right:7px solid transparent;border-top:9px solid var(--fg)}
.score-ticks{display:flex;justify-content:space-between;font-size:12px;font-weight:600;color:var(--fg2);margin:0 -2px}
/* right-side section navigation (Hackuity dashboard TOC) */
.dash-body{margin-right:190px}
.sec-nav{position:fixed;right:24px;top:96px;width:160px;display:flex;flex-direction:column;gap:2px;z-index:5}
.sec-nav .sec-upd{font-size:12px;color:var(--fg2);display:flex;align-items:center;gap:6px;margin-bottom:14px}
.sec-nav a{display:flex;align-items:center;gap:10px;padding:8px 6px;color:var(--accent-fg);font-size:13px;font-weight:500;
  border-left:1px solid var(--line-strong);margin-left:10px;padding-left:14px}
.sec-nav a .ico{width:14px;height:14px}
.sec-nav a:hover{color:var(--fg);border-left-color:var(--accent)}
@media(max-width:1400px){.sec-nav{display:none}.dash-body{margin-right:0}}
html{scroll-behavior:smooth}
.dash-sec-t{scroll-margin-top:24px}
.drawer{box-shadow:none}
.drawer.open{box-shadow:-20px 0 60px rgba(0,0,0,.25)}

/* dashboard: content + section menu centred together on wide screens */
.main:has(.dash-wrap){max-width:none}
.dash-wrap{display:flex;gap:32px;max-width:1600px;margin:0 auto;align-items:flex-start}
.dash-main{flex:1 1 auto;min-width:0}
.dash-body{margin-right:0}
.sec-nav{position:sticky;top:24px;right:auto;width:160px;flex:0 0 160px;margin-top:96px}
@media(max-width:1400px){.sec-nav{display:none}}

/* every page: content centred in the space right of the sidebar, (almost) full width */
.main{max-width:none}
.page-wrap{max-width:1760px;margin:0 auto}
.main:has(.dash-wrap) .page-wrap{max-width:none}
td .chip,.chip{white-space:nowrap}
.danger-zone{margin-top:14px;border-top:1px dashed var(--line-strong);padding-top:10px}
.danger-zone summary{cursor:pointer;color:var(--crit-fg);font-size:13px;font-weight:500;width:max-content}
.danger-zone .inline-form{background:var(--crit-bg);border-radius:var(--r);padding:10px 12px}
.btn.danger{color:var(--crit-fg);border:1px solid color-mix(in srgb,var(--err) 50%,transparent)}
.lc-warn[hidden]{display:none}
.lc-warn{display:flex;align-items:center;gap:8px;background:var(--med-bg);color:var(--med-fg);border-radius:var(--r);padding:10px 12px;font-size:13px}
.status.assigned,.status.uploaded,.status.post_processing{background:var(--accent-surface);color:var(--accent-fg)}

/* ================= Sentinel honeycomb ================= */
.fleet-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:20px}
@media(max-width:900px){.fleet-kpis{grid-template-columns:repeat(2,1fr)}}
.honey-tools{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin:4px 0 12px}
.honey-tools .filters{margin:0}
.zoom-ctl{display:flex;gap:4px;margin-left:auto}
#fleet-grid{max-height:72vh;overflow:auto;border-radius:16px}
.honey-wrap{position:relative;margin:4px 0 8px;--hs:180px}
.hx{--ring:var(--line-strong);--fill:var(--surface);position:absolute;padding:0;border:0;cursor:pointer;
  clip-path:polygon(0% 25%,0% 75%,50% 100%,100% 75%,100% 25%,50% 0%);background:var(--ring);
  transition:transform .15s,left .25s,top .25s,width .25s,height .25s}
.hx:hover{transform:scale(1.05);z-index:2}
.hx-in{position:absolute;inset:3px;clip-path:inherit;background:var(--fill);display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:3px;text-align:center;padding:0 10%;color:var(--fg);font-family:var(--font);overflow:hidden}
.hx-num{display:none;font-weight:700;font-size:calc(var(--hs) * .24);letter-spacing:-.02em}
.honey-wrap[data-lv="min"] .hx-in > :not(.hx-num){display:none}
.honey-wrap[data-lv="min"] .hx-num{display:block}
.honey-wrap[data-lv="min"] .hx-in{inset:2px}
.honey-wrap:is([data-lv="mid"],[data-lv="small"]) :is(.hx-uid,.hx-meta,.hx-perm,.hx-jobs){display:none}
.honey-wrap[data-lv="mid"] .hx-name{font-size:14px}
.honey-wrap[data-lv="mid"] .hx-state{font-size:10px}
.honey-wrap[data-lv="small"] :is(.hx-size,.hx-cnt){display:none}
.honey-wrap[data-lv="small"] .hx-name{font-size:13px}
.honey-wrap[data-lv="small"] .hx-state{font-size:9px;letter-spacing:.02em}
.honey-wrap[data-lv="small"] .hx-dot{width:6px;height:6px}
#fleet-kpis .fleet-kpis{margin-bottom:14px}
#hx-filters .chip{display:inline-flex;align-items:center;gap:5px}
#hx-filters .chip .n{font-variant-numeric:tabular-nums;opacity:.7}
#hx-filters .hx-dot{width:7px;height:7px}
.hxf-ready{--ring:var(--ok)}.hxf-scanning{--ring:var(--accent)}.hxf-provisioning{--ring:var(--med)}.hxf-draining{--ring:var(--low)}.hxf-problem{--ring:var(--crit)}
.hx-star{color:var(--med-fg);font-size:.8em;margin-right:2px}
.honey-wrap[data-lv="full"] .hx-star{display:none}
.honey-wrap[data-lv="mid"] .hx-size{font-size:11px}
.hx-tip{position:fixed;z-index:80;max-width:290px;background:var(--surface);color:var(--fg);border:1px solid var(--line-strong);
  border-radius:10px;padding:10px 12px;box-shadow:var(--shadow);font-size:13px;line-height:1.45;pointer-events:none}
.hx-tip b{font-size:14px}
.hx-name{font-size:17px;font-weight:700;letter-spacing:-.01em}
.hx-uid{font-size:11px;color:var(--fg2)}
.hx-size{font-size:12px;font-weight:600;color:var(--fg2)}
.hx-state{display:inline-flex;align-items:center;gap:5px;white-space:nowrap;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}
.hx-dot{width:8px;height:8px;border-radius:50%;background:var(--ring)}
.hx-jobs{font-size:11px;color:var(--accent-fg);max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hx-meta{font-size:11px;color:var(--fg2)}
.hx-meta .stale{color:var(--crit-fg);font-weight:600}
.hx-perm{font-size:10px;font-weight:700;color:var(--med-fg);text-transform:uppercase;letter-spacing:.05em}
.hx.st-ready{--ring:var(--ok);--fill:color-mix(in srgb,var(--ok) 9%,var(--surface))}
.hx.st-scanning{--ring:var(--accent);--fill:color-mix(in srgb,var(--accent) 12%,var(--surface))}
.hx.st-provisioning{--ring:var(--med);--fill:color-mix(in srgb,var(--med) 10%,var(--surface));animation:hxpulse 1.6s ease-in-out infinite}
.hx.st-draining{--ring:var(--low);--fill:color-mix(in srgb,var(--low) 10%,var(--surface))}
.hx.st-lost,.hx.st-error{--ring:var(--crit);--fill:color-mix(in srgb,var(--crit) 10%,var(--surface))}
.hx.st-destroying,.hx.st-destroyed{--ring:var(--line-strong);opacity:.55}
@keyframes hxpulse{50%{opacity:.6}}
@media (prefers-reduced-motion: reduce){.hx.st-provisioning{animation:none}}
.slog{max-height:420px;overflow:auto;border:1px solid var(--line);border-radius:var(--r);padding:8px 10px;background:var(--panel);font-size:12px}
.slog-l{padding:2px 0;border-bottom:1px dashed var(--line)}
.slog-l.error{color:var(--crit-fg)}.slog-l.warning{color:var(--med-fg)}
.status.ready{background:var(--ok-bg);color:var(--ok-fg)}.status.scanning{background:var(--accent-surface);color:var(--accent-fg)}
.status.provisioning{background:var(--med-bg);color:var(--med-fg)}.status.lost{background:var(--crit-bg);color:var(--crit-fg)}
.status.draining{background:var(--low-bg);color:var(--low-fg)}.status.destroyed,.status.destroying{background:var(--neutral-bg);color:var(--fg2)}

/* ================= screenshots ================= */
.shot-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px}
.shot-card{display:flex;flex-direction:column;padding:0;border:1px solid var(--line);border-radius:16px;overflow:hidden;
  background:var(--card-bg);cursor:pointer;text-align:left;color:var(--fg);font-family:var(--font);transition:transform .15s,box-shadow .15s}
.shot-card:hover{transform:translateY(-2px);box-shadow:var(--shadow)}
.shot-card img{width:100%;aspect-ratio:16/10;object-fit:cover;object-position:top;display:block;background:var(--panel);border-bottom:1px solid var(--line)}
.shot-meta{display:flex;flex-direction:column;gap:6px;padding:10px 12px}
.shot-url{font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.shot-tags{display:flex;flex-wrap:wrap;gap:4px}
.shot-tags .chip{margin:0}
.shot-thumb{border:1px solid var(--line);border-radius:6px;padding:0;margin-right:8px;vertical-align:middle;cursor:pointer;background:var(--panel)}
.shot-thumb img{width:64px;height:40px;object-fit:cover;object-position:top;display:block;border-radius:5px}
.shot-inline{display:flex;gap:12px;align-items:center;margin:4px 14px 14px;padding:8px;border:1px solid var(--line);border-radius:12px;
  background:var(--surface);cursor:pointer;text-align:left;font-family:var(--font);width:calc(100% - 28px)}
.shot-inline img{width:200px;aspect-ratio:16/10;object-fit:cover;object-position:top;border-radius:8px;border:1px solid var(--line)}
.shot-pair{display:grid;gap:16px;margin:12px 0}
.shot-pair.two{grid-template-columns:1fr 1fr}
.shot-pair figure{margin:0}
.shot-pair figcaption{font-size:12px;color:var(--fg2);margin-bottom:6px}
.shot-pair img{width:100%;border:1px solid var(--line);border-radius:10px;display:block}
.chip.vc-admin_panel,.chip.vc-directory_listing{color:var(--high-fg);border-color:color-mix(in srgb,var(--high) 50%,transparent)}
.chip.vc-login{color:var(--accent-fg);border-color:var(--accent)}
.chip.vc-default_page,.chip.vc-parked,.chip.vc-under_construction,.chip.vc-error_page{color:var(--med-fg);border-color:color-mix(in srgb,var(--med) 50%,transparent)}

/* back-office scans table */
table.sortable th{cursor:pointer;user-select:none;white-space:nowrap}
table.sortable th::after{content:attr(data-dir);margin-left:4px;color:var(--accent-fg);font-size:11px}
table.sortable th:hover{color:var(--accent-fg)}
.prog-cell{min-width:120px}
.prog{height:6px;border-radius:4px;background:var(--panel2);overflow:hidden;margin-bottom:4px}
.prog span{display:block;height:100%;background:var(--accent);transition:width .4s}
.sen-link{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line-strong);background:var(--surface);color:var(--fg);
  border-radius:999px;padding:2px 10px;font:600 13px var(--font);cursor:pointer}
.sen-link:hover{border-color:var(--accent);color:var(--accent-fg)}
.sen-dot{width:8px;height:8px;border-radius:50%;background:var(--line-strong)}
.sen-dot.st-ready{background:var(--ok)}.sen-dot.st-scanning{background:var(--accent)}.sen-dot.st-provisioning{background:var(--med)}
.sen-dot.st-lost,.sen-dot.st-error{background:var(--crit)}

/* ================= risk page, technology categories, panes (Oct 15) ================= */
.tc-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:middle}
.tc-list{display:flex;flex-direction:column;gap:6px}
.tc-row{border:1px solid var(--line);border-radius:12px;padding:0 12px;background:var(--card-bg)}
.tc-row[open]{padding-bottom:10px}
.tc-row summary{display:grid;grid-template-columns:minmax(220px,1.3fr) 90px 50px 3fr;gap:12px;align-items:center;
  padding:10px 0;cursor:pointer;list-style:none}
.tc-row summary::-webkit-details-marker{display:none}
.tc-row summary:hover .tc-name{color:var(--accent-fg)}
.tc-name{font-weight:500}
.tc-n{text-align:right;font-size:15px}
.tc-prods .chip{margin:2px 0}
.linkbtn{background:none;border:0;padding:0;color:var(--accent-fg);cursor:pointer;font:inherit;text-align:left;overflow-wrap:anywhere}
.linkbtn:hover{text-decoration:underline}
.linkbtn.mono{font-family:var(--mono)}
.pane-links{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 14px}
.pane-links .chip{cursor:pointer}
.pane-links .chip:hover{background:var(--accent-a3)}
.view-toggle{display:flex;gap:6px;align-self:flex-start}
.view-toggle .chip{display:inline-flex;align-items:center;gap:4px}
.filt-l{display:inline-block;min-width:90px}
.cell-wrap{display:block;max-width:360px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tbl-wrap{overflow-x:auto}
.shot-table td{vertical-align:middle}
.shot-card{cursor:default}
.shot-open{border:0;padding:0;background:none;cursor:pointer;display:block;width:100%}
.shot-src{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:center}
.shot-src .linkbtn{display:inline-flex;align-items:center;gap:3px;font-size:12px}
.chip.front-ingress{color:var(--accent-fg);border-color:var(--accent)}
.chip.front-cloud_lb,.chip.front-api_gateway,.chip.front-paas{color:var(--ok-fg)}
.chip.front-reverse_proxy{color:var(--med-fg)}
@media (max-width:760px){
  .tc-row summary{grid-template-columns:1fr auto auto}
  .tc-prods{grid-column:1/-1}
  .cell-wrap{max-width:200px}
}

/* lightbox (screenshot zoom in a popup) */
.lb-open{display:block;width:100%;padding:0;border:0;background:none;cursor:zoom-in}
.lb-open img{display:block;width:100%}
.lightbox{position:fixed;inset:0;z-index:1000;display:none;align-items:center;justify-content:center;
  background:color-mix(in srgb,#000 82%,transparent);padding:32px 64px}
.lightbox.open{display:flex}
.lightbox figure{margin:0;max-width:100%;max-height:100%;display:flex;flex-direction:column;align-items:center;gap:10px}
.lightbox img{max-width:100%;max-height:calc(100vh - 110px);object-fit:contain;border-radius:10px;background:#fff;box-shadow:0 20px 60px rgba(0,0,0,.5)}
.lightbox figcaption{color:#e6e6ea;font-size:13px}
.lb-x{position:absolute;top:14px;right:20px;background:none;border:0;color:#fff;font-size:34px;line-height:1;cursor:pointer}
.lb-nav{position:absolute;top:50%;transform:translateY(-50%);width:44px;height:44px;border-radius:50%;border:0;
  background:rgba(255,255,255,.14);color:#fff;font-size:28px;line-height:1;cursor:pointer}
.lb-nav:hover,.lb-x:hover{background:rgba(255,255,255,.26)}
.lb-prev{left:14px}.lb-next{right:14px}
@media (max-width:760px){.lightbox{padding:48px 8px}.lb-nav{width:36px;height:36px}}
/* map: reset control + discreet (folded) attribution */
.geo-reset{font-size:17px;line-height:1;font-weight:700;color:var(--fg)!important}
#geomap .maplibregl-ctrl-attrib.maplibregl-compact{opacity:.55;transition:opacity .15s}
#geomap .maplibregl-ctrl-attrib.maplibregl-compact:hover,#geomap .maplibregl-ctrl-attrib.maplibregl-compact-show{opacity:1}

/* dashboard: KPI variation, SLA rings + age heatmap, advisories */
.kpi-delta{font-size:13px;font-weight:600;border-radius:999px;padding:2px 8px;margin-left:10px;align-self:center}
.kpi-delta.up{color:var(--crit-fg);background:color-mix(in srgb,var(--crit) 14%,transparent)}
.kpi-delta.down{color:var(--ok-fg);background:color-mix(in srgb,var(--ok) 14%,transparent)}
.sla-grid{display:grid;grid-template-columns:repeat(4,minmax(120px,1fr)) minmax(320px,2fr);gap:18px;align-items:center}
.sla-cell{display:flex;flex-direction:column;align-items:center;gap:4px;text-align:center;color:var(--fg);border-radius:12px;padding:8px}
.sla-main{display:flex;flex-direction:column;align-items:center;gap:6px;color:var(--fg);text-decoration:none;border-radius:12px;padding:6px 10px}
.sla-main:hover{background:var(--gray-a3)}
/* a thin ring with a true hole (mask): no tinted fill behind the figure, whatever the card background */
.sla-ring{position:relative;width:96px;height:96px;display:grid;place-items:center}
.sla-ring::before{content:"";position:absolute;inset:0;border-radius:50%;
  background:conic-gradient(var(--okc) calc(var(--p)*1%),var(--rest) 0);
  -webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 7px),#000 calc(100% - 6px));
          mask:radial-gradient(farthest-side,transparent calc(100% - 7px),#000 calc(100% - 6px))}
.sla-ring.ok{--okc:var(--ok);--rest:var(--line-strong)}.sla-ring.bad{--okc:var(--ok);--rest:var(--crit)}
.sla-ring.none{--okc:var(--line-strong);--rest:var(--line-strong)}
.sla-ring b{position:relative;display:flex;flex-direction:column;align-items:center;font-size:22px;font-weight:700;line-height:1.05}
.sla-ring b i{font-style:normal;font-size:13px;font-weight:600;color:var(--fg2)}
.sla-ring b small{font-size:10.5px;font-weight:400;color:var(--fg2);margin-top:2px}
.sla-ring b:has(i){flex-direction:row;flex-wrap:wrap;justify-content:center;align-items:baseline;width:70px}
.sla-ring b:has(i) small{flex-basis:100%;text-align:center}
.sla-late{color:var(--crit-fg)}
.heat{border-collapse:separate;border-spacing:3px;width:100%;font-size:12px}
.heat th{font-weight:500;color:var(--fg2);text-align:center;padding:2px}
.heat td{text-align:center;border-radius:6px;padding:6px 2px;font-family:var(--mono);min-width:44px;
  background:color-mix(in srgb,var(--hc) var(--h),var(--panel))}
.hc-critical{--hc:var(--crit)}.hc-high{--hc:var(--high)}.hc-medium{--hc:var(--med)}.hc-low{--hc:var(--low)}
.adv td{vertical-align:top}
.adv-n{display:inline-block;min-width:28px;font-size:18px;font-weight:700;color:var(--fg2)}
.adv-n.hit{color:var(--crit-fg)}
a.provrow{color:var(--fg);border-radius:6px;padding:2px 4px;margin:0 -4px}
a.provrow:hover{background:var(--accent-a3)}
@media (max-width:1100px){.sla-grid{grid-template-columns:repeat(2,1fr)}.sla-heat{grid-column:1/-1}}
.chip-val{color:var(--ok-fg)!important;border-color:color-mix(in srgb,var(--ok) 50%,transparent)!important;background:color-mix(in srgb,var(--ok) 10%,transparent)}
.status.ignored{background:var(--neutral-bg);color:var(--fg2)}
.val-proof{margin-top:10px;padding:8px 12px;border-radius:10px;background:color-mix(in srgb,var(--ok) 8%,transparent);border:1px solid color-mix(in srgb,var(--ok) 30%,transparent);font-size:13px}
.tc-row summary.tech-sum{grid-template-columns:minmax(200px,1.2fr) 50px 3fr 80px}
.tech-body{padding:2px 0 6px}
@media (max-width:760px){.tc-row summary.tech-sum{grid-template-columns:1fr auto}}
.rule-off td{opacity:.55}
.rule-form{display:flex;gap:6px;align-items:center}
.rule-form select{width:auto;padding:4px 8px;font-size:12px}
.rules-t td{vertical-align:top}
.ep-filters{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:flex-end;margin:0 0 12px}
.ep-filters label{display:flex;flex-direction:column;gap:3px;font-size:12px;color:var(--fg2);margin:0}
.ep-filters select{width:auto;min-width:110px;max-width:220px;padding:5px 8px;font-size:13px}
.ep-count{align-self:center;margin-left:4px}
.shot-table .linkbtn{white-space:nowrap}

/* multi-select dropdown (_multiselect.html): "All" or a set of values, checkboxes + search */
.ms{position:relative;margin:12px 0;font-size:14px;font-weight:500;color:var(--fg)}
.ms-label{display:block}
.ms-btn{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;margin-top:4px;min-height:40px;
  padding:9px 12px;background:var(--panel);border:1px solid var(--line-strong);border-radius:var(--r);color:var(--fg2);
  font:400 14px var(--font);text-align:left;cursor:pointer}
.ms.ms-some .ms-btn{color:var(--fg)}
.ms-btn:focus-visible,.ms-btn[aria-expanded="true"]{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-surface)}
.ms-sum{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.ms-btn .ico{flex:none;color:var(--fg2);transition:transform .15s}
.ms-btn[aria-expanded="true"] .ico{transform:rotate(180deg)}
.ms-pop{position:absolute;z-index:40;left:0;right:0;top:calc(100% + 4px);background:var(--surface);border:1px solid var(--line-strong);
  border-radius:var(--r);box-shadow:0 10px 28px rgba(0,0,0,.28);padding:6px;font-weight:400}
.ms.ms-up .ms-pop{top:auto;bottom:calc(100% + 4px)}
.ms-pop[hidden],.ms-opt[hidden],.ms-empty[hidden]{display:none}
.ms-q{margin:0 0 6px;min-height:34px;padding:6px 10px;font-size:13px}
.ms-list{max-height:260px;overflow:auto}
.ms-opt{display:flex;align-items:center;gap:9px;margin:0;padding:6px 8px;border-radius:6px;font-size:13px;font-weight:400;
  color:var(--fg);cursor:pointer}
.ms-opt:hover{background:var(--gray-a3)}
.ms-opt input{width:auto;min-height:0;margin:0;accent-color:var(--accent)}
.ms-all{border-bottom:1px solid var(--line);border-radius:6px 6px 0 0;margin-bottom:4px;font-weight:500}
.ms-empty{padding:6px 8px}
/* the report form's single-choice lists look like the multi-select buttons */
.rep-form select{appearance:none;-webkit-appearance:none;min-height:40px;padding-right:34px;cursor:pointer;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%23888' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 12px center}

/* test authorizations + ownership verification (_authz.html) */
.fam-passive{padding:10px 12px;border-radius:var(--r);background:var(--panel);border:1px solid var(--line);color:var(--fg2);font-weight:400}
.fam-passive strong{color:var(--fg)}
.fam-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:10px}
.fam{display:flex;flex-direction:column;gap:6px;margin:0;padding:12px 14px;border:1px solid var(--line-strong);border-radius:var(--r);
  background:var(--surface);cursor:pointer;font-weight:400;color:var(--fg2);font-size:13px;line-height:1.45;transition:border-color .15s,background .15s}
.fam:hover{border-color:var(--muted)}
.fam.on{border-color:var(--accent);background:var(--accent-surface)}
.fam-h{display:flex;align-items:center;gap:9px}
.fam-h input{width:auto;min-height:0;margin:0;accent-color:var(--accent)}
.fam-t{font-weight:600;color:var(--fg);font-size:14px}
.fam-seen{color:var(--fg2)} .fam-seen b{font-weight:500;color:var(--fg)}
.fam-req{font-size:12px;color:var(--muted)}
.fam-risk .fam-t::after{content:"high impact";margin-left:8px;padding:1px 7px;border-radius:999px;font-size:11px;font-weight:500;
  background:var(--high-bg);color:var(--high-fg)}
.fam-risk.on{border-color:var(--high);background:var(--high-bg)}
.attest{display:flex;gap:10px;align-items:flex-start;margin:12px 0 0;padding:12px 14px;border-radius:var(--r);border:1px dashed var(--line-strong);
  font-weight:400;font-size:13px;color:var(--fg2);line-height:1.45}
.attest input{width:auto;min-height:0;margin:3px 0 0;accent-color:var(--accent);flex:none}
.fam-block.fam-on .attest{border-style:solid;border-color:var(--accent);color:var(--fg)}
.attest-inline{flex-basis:100%;margin-top:6px;padding:8px 10px}
.auth-line{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:10px}
.fam-chip{background:var(--accent-surface);border-color:var(--accent-a4);color:var(--accent-fg)}
.fam-chip-risk{background:var(--high-bg);border-color:transparent;color:var(--high-fg)}
.own-chip{display:inline-flex;align-items:center;gap:5px;text-decoration:none}
.own-ok{background:var(--ok-bg);color:var(--ok-fg);border-color:transparent}
.own-part{background:var(--med-bg);color:var(--med-fg);border-color:transparent}
.own-no{background:var(--panel);color:var(--fg2)}
.auth-box{margin-top:10px;border:1px solid var(--line);border-radius:var(--r);padding:8px 12px;background:var(--panel2)}
.auth-box>summary{cursor:pointer;font-weight:500;font-size:14px;padding:2px 0}
.auth-box[open]>summary{margin-bottom:8px}
.copy-row{display:flex;align-items:center;gap:10px;margin:5px 0;flex-wrap:wrap}
.copy-k{min-width:60px}
.copy-row code{flex:1;min-width:0;padding:6px 9px;border-radius:var(--r-s);background:var(--surface);border:1px solid var(--line);
  font-size:12.5px;word-break:break-all}
@media(max-width:640px){.fam-grid{grid-template-columns:1fr}}
.auth-box .hy-table th,.auth-box .hy-table td{font-size:12.5px;padding:6px 8px}

/* The Owl */
.nav-badge{margin-left:auto;min-width:18px;height:18px;padding:0 6px;border-radius:999px;background:var(--crit);color:#fff;
  font-size:11px;font-weight:600;line-height:18px;text-align:center}
.owl-lic{display:flex;align-items:baseline;gap:6px;padding:10px 14px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface)}
.owl-lic b{font-size:22px}
.owl-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:14px;margin-top:6px}
.owl-card{display:flex;flex-direction:column;gap:12px;padding:16px 18px;border:1px solid var(--line);border-radius:var(--r-l);background:var(--surface)}
.owl-card.owl-changed{border-color:var(--high)}
.owl-card.owl-unreachable{border-color:var(--crit)}
.owl-card-h{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.owl-host{display:flex;flex-direction:column;gap:2px;min-width:0}
.owl-host .mono{font-size:15px;font-weight:600;word-break:break-all}
.owl-st{flex:none;padding:2px 9px;border-radius:999px;font-size:12px;font-weight:500;background:var(--panel);color:var(--fg2)}
.owl-st-ok{background:var(--ok-bg);color:var(--ok-fg)}
.owl-st-changed{background:var(--high-bg);color:var(--high-fg)}
.owl-st-unreachable{background:var(--crit-bg);color:var(--crit-fg)}
.owl-shots{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.owl-shot{display:flex;flex-direction:column;gap:4px;color:var(--fg2);text-decoration:none;min-width:0}
.owl-shot img{width:100%;aspect-ratio:16/10;object-fit:cover;object-position:top;border-radius:var(--r-s);border:1px solid var(--line)}
.owl-noshot{display:flex;align-items:center;justify-content:center;aspect-ratio:16/10;border-radius:var(--r-s);border:1px dashed var(--line-strong)}
.owl-shot-l{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.owl-facts{display:grid;gap:7px;margin:0}
.owl-facts>div{display:grid;grid-template-columns:110px 1fr;gap:8px;align-items:baseline}
.owl-facts dt{font-size:12px;color:var(--muted)}
.owl-facts dd{margin:0;display:flex;flex-wrap:wrap;gap:4px;align-items:center}
.owl-card-f{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:auto;padding-top:10px;border-top:1px solid var(--line)}
.owl-actions{display:flex;gap:6px}
.owl-actions form{display:inline}
.owl-unread{display:inline-flex;align-items:center;gap:5px;font-size:13px;font-weight:500;color:var(--crit-fg)}
.owl-add{border-style:dashed;justify-content:center}
.owl-add h3{margin:0}
.owl-add-f label{margin:6px 0}
.owl-add-f .btn{margin-top:8px;display:inline-flex;align-items:center;gap:6px}
.owl-filters{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.owl-filters .chip.on{background:var(--accent-surface);border-color:var(--accent);color:var(--accent-fg)}
.owl-events{list-style:none;margin:0;padding:0}
.owl-ev{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:start;padding:10px 4px;border-bottom:1px solid var(--line)}
.owl-ev:last-child{border-bottom:0}
.owl-ev.unread{background:linear-gradient(90deg,var(--accent-surface),transparent 60%)}
.owl-ev .sev{margin-top:2px}
.owl-ev-t{font-size:14px;color:var(--fg)}
.owl-kind{font-weight:600;margin-right:4px}
.owl-ev form{display:inline}
.kev-chip{background:var(--crit-bg);color:var(--crit-fg);border-color:transparent;font-size:11px;padding:0 6px}
.owl-watch-btn{display:inline-flex;align-items:center;gap:6px}
@media(max-width:640px){.owl-grid{grid-template-columns:1fr}.owl-facts>div{grid-template-columns:1fr}}
.owl-hostf[hidden]{display:none}

/* high-signal exposure tiles (kpitiles.py) */
.sig-tile{position:relative}
.sig-tile .sig-ico{margin-left:auto;color:var(--fg2);display:inline-flex}
.sig-tile.sig-on .sig-ico{color:var(--fg)}
.sig-tile.sig-off .kpi-v{color:var(--fg2)}
.kpi-dot.none{background:var(--line-strong)}

/* dashboard views per role (dashviews.py) */
.view-tabs{display:flex;gap:4px;margin:-6px 0 18px;border-bottom:1px solid var(--line);overflow-x:auto}
.view-tabs a{padding:9px 14px;color:var(--fg2);font-weight:500;font-size:14px;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap;text-decoration:none}
.view-tabs a:hover{color:var(--fg)}
.view-tabs a.on{color:var(--fg);border-bottom-color:var(--accent)}
.dg .c2{grid-column:span 2}
@media(max-width:1250px){.dg .c2{grid-column:span 4}}
@media(max-width:640px){.dg .c2{grid-column:span 6}}
.xv-big{display:flex;align-items:center;gap:10px;font-size:44px;font-weight:700;line-height:1.1}
.xv-unit{font-size:24px;color:var(--fg2)}
.xv-mid{font-size:30px;font-weight:700}
.xv-mid.ok{color:var(--ok-fg)}
.xv-delta{margin-top:6px;font-size:13px;font-weight:500;color:var(--fg2)}
.xv-delta.good{color:var(--ok-fg)} .xv-delta.bad{color:var(--crit-fg)}
.xv-bar{display:grid;grid-template-columns:86px 1fr 44px;gap:8px;align-items:center;margin:5px 0}
.xv-track{height:6px;border-radius:99px;background:var(--panel);overflow:hidden}
.xv-track i{display:block;height:100%;background:var(--accent);border-radius:99px}
.xv-pair{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.xv-risks{list-style:none;margin:0;padding:0}
.xv-risks li{display:grid;grid-template-columns:auto 1fr;gap:10px;align-items:start;padding:9px 0;border-bottom:1px solid var(--line)}
.xv-risks li:last-child{border-bottom:0}
.xv-sevrow{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:7px 0;border-bottom:1px solid var(--line);color:var(--fg);text-decoration:none}
.xv-sevrow:last-child{border-bottom:0}
.xv-sevrow .bad{color:var(--crit-fg)}
.xv-owl{display:flex;align-items:center;gap:6px;margin-top:12px;font-size:13px}
.xv-summary{margin:0;line-height:1.6;color:var(--fg)}
.vm-q td{vertical-align:middle}
.vm-q tr.late td:first-child{box-shadow:inset 3px 0 0 var(--crit)}
.vm-loc{max-width:280px;overflow-wrap:anywhere}
.due{font-weight:600}.due.late{color:var(--crit-fg)}.due.soon{color:var(--high-fg)}
.vm-assign{display:flex;gap:4px;align-items:center}
.vm-assign select{width:auto;max-width:210px;min-height:0;margin:0;padding:4px 8px;font-size:12.5px}
.asm-shots{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
@media(max-width:900px){.asm-shots{grid-template-columns:repeat(2,minmax(0,1fr))}}
/* assets list: capture in its own column (names stay aligned), The Owl action */
.cap-col{width:74px}
.cap-col .shot-thumb{margin-right:0}
.owl-col{width:34px;text-align:center}
.owl-col form{display:inline}
.owl-add-btn{border:1px solid transparent;background:transparent;color:var(--muted);border-radius:6px;padding:3px 4px;cursor:pointer;line-height:0}
.owl-add-btn:hover:not([disabled]){border-color:var(--line-strong);color:var(--accent-fg);background:var(--accent-surface)}
.owl-add-btn[disabled]{opacity:.35;cursor:not-allowed}
.owl-on{color:var(--accent-fg);line-height:0;display:inline-block;padding:3px 4px}
/* searchable list drawn in the page (data-combo) */
.combo{position:relative;margin:6px 0}
.combo label{margin:0 0 4px}
.combo-pop{position:absolute;z-index:40;left:0;right:0;top:calc(100% + 4px);max-height:280px;overflow:auto;margin:0;padding:4px;list-style:none;
  background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--r);box-shadow:0 10px 28px rgba(0,0,0,.28)}
.combo.combo-up .combo-pop{top:auto;bottom:calc(100% + 4px)}
.combo-pop[hidden]{display:none}
.combo-pop li{padding:6px 9px;border-radius:6px;font:400 13px var(--mono);color:var(--fg);cursor:pointer;overflow-wrap:anywhere}
.combo-pop li:hover,.combo-pop li.on{background:var(--accent-surface);color:var(--accent-fg)}
.combo-pop li.combo-empty{font-family:var(--font);color:var(--muted);cursor:default;background:none}
.credits{margin:0;padding-left:18px;line-height:1.9;font-size:13.5px}

/* API documentation */
.doc-wrap{display:grid;grid-template-columns:200px minmax(0,1fr);gap:20px;align-items:start}
.doc-toc{position:sticky;top:16px;display:flex;flex-direction:column;gap:2px;font-size:13px}
.doc-toc a{padding:5px 8px;border-radius:6px;color:var(--fg2);text-decoration:none}
.doc-toc a:hover{background:var(--panel);color:var(--fg)}
.doc-toc-h{margin:12px 8px 4px;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.doc-main{display:flex;flex-direction:column;gap:16px;min-width:0}
.doc-sec h2{margin-top:0}
.doc-sec h3{margin:18px 0 6px;font-size:14.5px}
.doc-sec li{margin:4px 0}
.doc-sec code.mono{font-size:12.5px;padding:1px 5px;border-radius:5px;background:var(--panel)}
.doc-code{position:relative;margin:8px 0}
.doc-code pre{margin:0;padding:12px 14px;border-radius:var(--r);background:var(--panel);border:1px solid var(--line);overflow-x:auto;font:400 12.5px/1.55 var(--mono)}
.doc-copy{position:absolute;top:6px;right:6px}
.doc-tbl td,.doc-tbl th{font-size:13px;padding:6px 8px}
.doc-op{padding:12px 0;border-top:1px solid var(--line)}
.doc-op:first-of-type{border-top:0}
.doc-op-h{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.doc-op-h code{font-size:14px}
.doc-m{min-width:58px;text-align:center;padding:2px 8px;border-radius:6px;font:600 12px var(--mono)}
.doc-m-get{background:var(--ok-bg);color:var(--ok-fg)} .doc-m-post{background:var(--accent-surface);color:var(--accent-fg)}
.doc-m-put{background:var(--med-bg);color:var(--med-fg)} .doc-m-delete{background:var(--crit-bg);color:var(--crit-fg)}
.doc-params{margin-top:6px}
@media(max-width:900px){.doc-wrap{grid-template-columns:1fr}.doc-toc{position:static;flex-direction:row;flex-wrap:wrap}}

/* Dynamic AppSec (DAST) */
.dast-form{display:flex;flex-direction:column;gap:14px;max-width:880px}
.dast-form .fl{display:flex;flex-direction:column;gap:5px}
.dast-form .fl>span,.dast-form .fl-l{font-weight:600;font-size:.9rem}
.dast-form textarea,.dast-form select{width:100%;padding:9px 11px;background:var(--panel);border:1px solid var(--line);border-radius:9px;color:var(--fg);font-size:.92rem}
.dast-form textarea{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;resize:vertical}
.dast-sites{display:flex;flex-direction:column;gap:7px}
.dast-sites[hidden]{display:none}
.dast-site-list{display:flex;flex-direction:column;gap:2px;max-height:230px;overflow:auto;border:1px solid var(--line);border-radius:9px;padding:7px 9px;background:var(--panel2)}
.dast-site{display:flex;align-items:center;gap:9px;padding:3px 4px;border-radius:6px;cursor:pointer}
.dast-site:hover{background:var(--gray-a3)}
.dast-site input{width:15px;height:15px;flex:none;accent-color:var(--accent)}
.dast-tiers{display:flex;flex-wrap:wrap;gap:8px}
.dast-tier{display:flex;flex-direction:column;gap:1px;padding:7px 11px;border:1px solid var(--line);border-radius:9px;font-size:.86rem;font-weight:600}
.dast-tier small{font-weight:400;color:var(--muted)}
.dast-tier.on{border-color:var(--accent);background:var(--accent-surface);color:var(--accent-fg)}
.dast-tier.off{opacity:.5}
.dast-steps{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px;counter-reset:dast}
.dast-steps li{display:flex;align-items:baseline;gap:10px;padding:7px 10px;border-radius:8px;background:var(--panel2)}
.dast-steps li::before{counter-increment:dast;content:counter(dast);color:var(--muted);font-variant-numeric:tabular-nums;min-width:16px}
.dast-steps .step-name{font-weight:600;min-width:220px}
.dast-steps .step-state{font-size:.82rem;text-transform:uppercase;letter-spacing:.03em;color:var(--muted)}
.dast-steps li.step-done{background:var(--accent-surface)}
.dast-steps li.step-done .step-state{color:var(--accent-fg)}
.dast-steps li.step-running .step-state{color:var(--accent)}
.dast-steps li.step-skipped{opacity:.6}
.dast-steps li.step-error .step-state{color:var(--crit-fg,#e5484d)}

/* Wide data tables: scroll inside their card instead of pushing the page off to the right */
.t-scroll{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch}
.t-scroll>table{margin:0}
.main th{white-space:nowrap}            /* headers never break char-by-char: the table scrolls in .t-scroll instead */
.main td.mono{overflow-wrap:anywhere}  /* only long mono cells (URLs, CVE lists) wrap within their column */

/* Dynamic AppSec — token modes, search, compact site list */
.dast-form input[type=text],.dast-form input[type=search]{width:100%;padding:9px 11px;background:var(--panel);border:1px solid var(--line);border-radius:9px;color:var(--fg);font-size:.92rem}
.dast-search{margin-bottom:4px}
.dast-site-list{display:flex;flex-direction:column;gap:0;max-height:240px;overflow:auto;border:1px solid var(--line);border-radius:9px;padding:4px;background:var(--panel2)}
.dast-site{display:flex;align-items:center;gap:9px;padding:5px 7px;border-radius:6px;cursor:pointer;line-height:1.2}
.dast-site:hover{background:var(--gray-a3)}
.dast-site input{width:15px;height:15px;flex:none;accent-color:var(--accent)}
.dast-modes{display:flex;flex-wrap:wrap;gap:10px}
.dast-mode{display:flex;flex-direction:column;gap:1px;padding:9px 13px;border:1px solid var(--line);border-radius:10px;cursor:pointer;min-width:230px}
.dast-mode b{font-size:.92rem}
.dast-mode input{position:absolute;opacity:0;pointer-events:none}
.dast-mode.on{border-color:var(--accent);background:var(--accent-surface)}
.dast-mode.on b{color:var(--accent-fg)}
.dast-price{font-weight:700;color:var(--fg)}
#dastCostNote.danger{color:var(--crit-fg,#e5484d)}

/* The Owl — header actions, card search */
.owl-head-r{display:flex;align-items:center;gap:14px}
.owl-toolbar{display:flex;align-items:center;gap:12px;margin:0 0 14px}
.owl-search{width:320px;max-width:100%;padding:8px 11px;background:var(--panel);border:1px solid var(--line);border-radius:9px;color:var(--fg);font-size:.9rem}
.owl-passive{display:flex;gap:7px;align-items:flex-start;padding:7px 9px;margin:0 0 10px;border:1px solid var(--line);border-radius:8px;background:var(--gray-a3);color:var(--muted)}
.owl-passive a{color:var(--accent-fg)}

/* DAST / scan steps: a spinner on the running step so progress is obvious while a slow (AI) step works */
@keyframes hy-spin{to{transform:rotate(360deg)}}
.dast-steps li.step-running .step-state,.steps li.running .sstat{position:relative}
.dast-steps li.step-running .step-state::before{content:"";display:inline-block;width:11px;height:11px;margin-right:8px;
  border:2px solid var(--accent);border-top-color:transparent;border-radius:50%;vertical-align:-1px;animation:hy-spin .7s linear infinite}
.dast-steps li.step-running{background:var(--accent-surface)}
.dast-steps li.step-done .step-state::before{content:"✓ ";color:var(--accent-fg)}
.dast-steps li.step-skipped .step-state{opacity:.7}

/* Dynamic AppSec — grey-box credential form */
.greybox{border:1px solid var(--line);border-radius:12px;padding:14px;background:var(--panel2);display:flex;flex-direction:column;gap:10px}
.gb-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.gb-import{cursor:pointer;display:inline-flex;align-items:center;gap:6px}
.greybox input[type=text],.greybox input[type=password]{width:100%;padding:8px 11px;background:var(--panel);border:1px solid var(--line);border-radius:9px;color:var(--fg);font-size:.92rem}
.gb-extra{display:flex;gap:8px;margin-bottom:6px}
.gb-extra input{flex:1;min-width:0}.gb-extra select{flex:none;width:150px;background:var(--panel);border:1px solid var(--line);border-radius:9px;color:var(--fg);padding:0 8px}
.gb-note{padding:8px 11px;border-radius:9px;font-size:.86rem;border:1px solid var(--line);background:var(--gray-a3)}
.gb-note.ok{border-color:var(--accent);background:var(--accent-surface);color:var(--accent-fg)}
.gb-note.err{border-color:var(--crit-bg,#e5484d);color:var(--crit-fg,#e5484d)}
.gb-privacy{display:flex;gap:6px;align-items:flex-start;color:var(--muted)}
#dastTarget.locked{opacity:.75;cursor:not-allowed}

/* an element with the hidden attribute stays hidden whatever its display rule (.greybox{display:flex} showed the
   grey-box credentials in black box mode) */
[hidden]{display:none!important}
/* grey box: "Test the login" */
.gb-test{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.gb-test-out{padding:9px 12px;border-radius:9px;font-size:.86rem;border:1px solid var(--line);background:var(--gray-a3)}
.gb-test-out.ok{border-color:var(--accent);background:var(--accent-surface);color:var(--accent-fg)}
.gb-test-out.err{border-color:var(--crit-bg,#e5484d);color:var(--crit-fg,#e5484d)}
.gb-test-out .spin{display:inline-block;width:11px;height:11px;margin-right:8px;border:2px solid var(--accent);
  border-top-color:transparent;border-radius:50%;vertical-align:-1px;animation:hy-spin .7s linear infinite}
.signin-trace{margin:8px 0 6px;padding-left:20px;display:flex;flex-direction:column;gap:3px;color:var(--fg)}
.signin-trace .mono{font-size:.84rem;overflow-wrap:anywhere}
.signin-fail{align-items:flex-start}
.signin-fail > div{display:flex;flex-direction:column;gap:4px;min-width:0}
/* Scans page: EASM scans vs Dynamic AppSec tests; DAST tests listing filters */
.scan-kinds{display:flex;gap:8px;flex-wrap:wrap;margin:-6px 0 14px}
.dast-filters{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:0 0 12px}
.dast-filters input[type=search],.dast-filters select{width:auto;margin-top:0;min-height:36px;background:var(--panel2);border:1px solid var(--line);border-radius:9px;color:var(--fg)}
.dast-filters input[type=search]{flex:1 1 220px;min-width:0;padding:7px 11px}
.dast-filters select{flex:0 1 auto;max-width:100%;padding:7px 10px}
/* a URL cell keeps a readable width: on a phone the table scrolls sideways instead of breaking it char by char */
.main td.dast-site-cell{min-width:190px}
.dast-tests td:not(.dast-site-cell){white-space:nowrap}
/* Dynamic AppSec finding: Summary / Request & response */
.dast-fd{margin-top:14px;border:1px solid var(--line);border-radius:12px;background:var(--panel)}
.dast-tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);padding:0 10px;overflow-x:auto}
.dast-tab{background:none;border:0;border-bottom:2px solid transparent;padding:11px 12px;color:var(--fg2);font:500 14px var(--font);cursor:pointer;white-space:nowrap}
.dast-tab.on{color:var(--fg);border-bottom-color:var(--accent)}
.dast-panel{padding:14px 16px;display:flex;flex-direction:column;gap:14px;min-width:0}
.dast-chips{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.dast-chips .dast-url{max-width:100%;overflow-wrap:anywhere}
.chip-crit{background:var(--crit-bg);color:var(--crit-fg);border-color:color-mix(in srgb,var(--err) 40%,transparent)}
.dast-sec h4{display:flex;align-items:center;gap:7px;margin:0 0 6px;font-size:14px}
.dast-sec h4 .btn{margin-left:auto}
.dast-sec p{margin:0;line-height:1.55;overflow-wrap:anywhere;white-space:pre-line}
.dast-fix{border-left:3px solid var(--accent);padding-left:12px}
.dast-code{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:8px 0;font:400 12.5px var(--mono);overflow-x:auto}
.dast-code .dl{display:flex;gap:12px;padding:2px 12px 2px 0;min-width:max-content}
.dast-code .dl.hl{background:var(--crit-bg);box-shadow:inset 3px 0 0 var(--err)}
.dast-code .ln{flex:none;width:30px;text-align:right;color:var(--fg2);opacity:.6;user-select:none}
.dast-code .lt{white-space:pre}
@media(max-width:600px){.dast-tabs{flex-wrap:wrap;overflow-x:visible}.dast-tab{padding:9px 8px}.dast-chips .chip{max-width:100%;white-space:normal;overflow-wrap:anywhere}.dast-panel{padding:12px}.dast-code .lt{white-space:pre-wrap;overflow-wrap:anywhere}.dast-code .dl{min-width:0}}
.chip.cert-high{background:var(--ok-bg);color:var(--ok-fg);border-color:color-mix(in srgb,var(--ok) 40%,transparent)}
.chip.cert-medium{background:var(--accent-surface);color:var(--accent-fg);border-color:var(--accent)}
.chip.cert-low{color:var(--fg2)}
.cert-list{margin:0 0 8px;padding-left:18px;display:flex;flex-direction:column;gap:3px}
.cert-list li.ok{color:var(--ok-fg)}.cert-list li.warn{color:var(--crit-fg)}
.dast-code .dl.proof{background:var(--ok-bg);box-shadow:inset 3px 0 0 var(--ok)}
