/* AI Security Lab console. Cool neutral paper, graphite ink, one teal signal colour that means "verified". */
:root {
  --paper:#f3f5f4; --surface:#fff; --ink:#16202a; --ink-2:#4e5b66; --rule:#d9dfe2; --rule-2:#eaeeef;
  --signal:#0e7c6b; --signal-ink:#0a5a4e; --signal-wash:#e3f2ef;
  --amber:#9a5b00; --amber-wash:#fdf1dc; --alarm:#b3261e; --alarm-wash:#fbe9e7;
  --side:#16202a; --side-ink:#c9d3da; --side-muted:#8a98a3;
  --critical:#7f1d1d; --high:#b3261e; --medium:#9a5b00; --low:#2f6b3a; --info:#55636e;
  --radius:6px; --focus:0 0 0 3px rgba(14,124,107,.35);
}
* { box-sizing:border-box; }
html { -webkit-text-size-adjust:100%; }
body {
  margin:0; color:var(--ink); background:var(--paper);
  font:15px/1.55 "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, Roboto, "Helvetica Neue", sans-serif;
  font-variant-numeric:tabular-nums;
}
a { color:var(--signal-ink); }
a:hover { color:var(--signal); }
:focus-visible { outline:none; box-shadow:var(--focus); border-radius:3px; }

/* ---------- shell: sidebar + content ---------- */
.shell { display:grid; grid-template-columns:232px minmax(0, 1fr); min-height:100vh; }
.side { background:var(--side); color:var(--side-ink); padding:20px 14px; display:flex; flex-direction:column; gap:22px; }
.mark { color:#fff; text-decoration:none; display:block; padding:0 8px; }
.mark strong { display:block; font-size:17px; font-weight:650; letter-spacing:-.01em; }
.mark span { display:block; font-size:12.5px; color:var(--side-muted); }
.nav { display:flex; flex-direction:column; gap:2px; }
.nav h3 { margin:14px 8px 6px; font-size:12.5px; font-weight:600; color:var(--side-muted); }
.nav a { color:var(--side-ink); text-decoration:none; padding:7px 10px; border-radius:var(--radius); border-left:3px solid transparent; }
.nav a:hover { background:rgba(255,255,255,.06); color:#fff; }
.nav a[aria-current="page"] { background:rgba(14,124,107,.18); color:#fff; border-left-color:#3fbfa9; }
.side .who { margin-top:auto; padding:12px 8px 0; border-top:1px solid rgba(255,255,255,.1); font-size:13px; color:var(--side-muted); }
.side .who b { display:block; color:var(--side-ink); font-weight:500; word-break:break-all; }
.side .who .acts { display:flex; gap:14px; margin-top:8px; align-items:center; }
.side .who a, .side .who button.link { color:var(--side-ink); font-size:13px; }
.side form { margin:0; }
.content { padding:28px 36px 64px; max-width:1120px; width:100%; }

/* ---------- page header ---------- */
.page-head { margin:0 0 22px; }
.page-head h1 { font-size:26px; line-height:1.2; font-weight:650; letter-spacing:-.015em; margin:0 0 6px; }
.page-head p { margin:0; color:var(--ink-2); max-width:72ch; }
h1 { font-size:26px; font-weight:650; letter-spacing:-.015em; margin:0 0 14px; }
h2 { font-size:17px; font-weight:620; margin:0 0 12px; }
h3 { font-size:15px; font-weight:620; margin:0 0 8px; }

/* ---------- surfaces ---------- */
.card { background:var(--surface); border:1px solid var(--rule); border-radius:var(--radius); padding:18px 20px; margin:0 0 18px; }
.card > h2:first-child { margin-top:0; }
.card .card-note { color:var(--ink-2); font-size:13.5px; margin:-6px 0 14px; }
.narrow { max-width:440px; margin:56px auto; }
.section-title { display:flex; justify-content:space-between; align-items:baseline; gap:12px; margin:26px 0 10px; }
.section-title h2 { margin:0; }

/* ---------- tables ---------- */
table { width:100%; border-collapse:collapse; }
th, td { text-align:left; padding:9px 10px; border-bottom:1px solid var(--rule-2); vertical-align:top; }
th { font-weight:600; color:var(--ink-2); font-size:13px; border-bottom-color:var(--rule); }
tr:last-child td { border-bottom:0; }
td.num, th.num { text-align:right; white-space:nowrap; }

/* ---------- forms ---------- */
label { display:block; margin:10px 0 5px; font-size:13.5px; color:var(--ink-2); font-weight:500; }
.hint { display:block; font-size:12.5px; color:var(--ink-2); margin-top:4px; }
input[type=text], input[type=email], input[type=password], input[type=number], input[type=date], input[type=url], select, textarea {
  width:100%; padding:8px 10px; border:1px solid var(--rule); border-radius:var(--radius); font:inherit; color:inherit; background:#fff;
}
input:focus, select:focus, textarea:focus { outline:none; border-color:var(--signal); box-shadow:var(--focus); }
textarea { min-height:96px; }
.field-unit { display:flex; align-items:stretch; }
.field-unit input { border-top-right-radius:0; border-bottom-right-radius:0; }
.field-unit span { display:flex; align-items:center; padding:0 10px; border:1px solid var(--rule); border-left:0; border-radius:0 var(--radius) var(--radius) 0; background:var(--paper); color:var(--ink-2); font-size:13px; white-space:nowrap; }
button, .btn {
  background:var(--signal); color:#fff; border:1px solid var(--signal); border-radius:var(--radius);
  padding:8px 16px; font:inherit; font-weight:550; cursor:pointer; text-decoration:none; display:inline-block; line-height:1.4;
}
button:hover, .btn:hover { background:var(--signal-ink); border-color:var(--signal-ink); color:#fff; }
button.secondary, .btn.secondary { background:#fff; color:var(--ink); border-color:var(--rule); }
button.secondary:hover { background:var(--paper); color:var(--ink); }
button.danger { background:#fff; color:var(--alarm); border-color:#e8b9b4; }
button.danger:hover { background:var(--alarm-wash); color:var(--alarm); }
button.link { background:none; border:0; color:var(--signal-ink); padding:0; font-weight:inherit; }
.row { display:flex; gap:14px; flex-wrap:wrap; align-items:flex-end; }
.row > * { flex:1 1 170px; }
.row > .shrink { flex:0 0 auto; }
.actions { display:flex; gap:10px; flex-wrap:wrap; align-items:center; }
form { margin:0; }

/* ---------- text helpers ---------- */
.muted { color:var(--ink-2); } .small { font-size:13px; }
code, .id { font-family:ui-monospace, "Cascadia Mono", Consolas, monospace; font-size:.92em; }
.id { background:var(--paper); border:1px solid var(--rule-2); border-radius:4px; padding:1px 6px; color:var(--ink-2); }

/* ---------- notices ---------- */
.error, .warn, .ok, .note { padding:10px 14px; border-radius:var(--radius); margin:0 0 16px; border:1px solid; }
.error { background:var(--alarm-wash); border-color:#efc2bd; color:#7a1a14; }
.warn { background:var(--amber-wash); border-color:#ecd3a3; color:#6b4000; }
.ok { background:var(--signal-wash); border-color:#b9ddd5; color:var(--signal-ink); word-break:break-all; }
.note { background:#fff; border-color:var(--rule); color:var(--ink-2); }

/* ---------- status pills ---------- */
.pill { display:inline-block; padding:1px 9px; border-radius:999px; font-size:12.5px; font-weight:550; border:1px solid; white-space:nowrap; }
.pill.good { color:var(--signal-ink); background:var(--signal-wash); border-color:#b9ddd5; }
.pill.bad { color:var(--alarm); background:var(--alarm-wash); border-color:#efc2bd; }
.pill.wait { color:var(--amber); background:var(--amber-wash); border-color:#ecd3a3; }
.pill.none { color:var(--ink-2); background:var(--paper); border-color:var(--rule); }

/* ---------- severity ---------- */
.sev { display:inline-block; padding:1px 9px; border-radius:999px; color:#fff; font-size:12.5px; font-weight:550; }
.sev-critical { background:var(--critical);} .sev-high { background:var(--high);} .sev-medium { background:var(--medium);}
.sev-low { background:var(--low);} .sev-info { background:var(--info);}
.summary { display:grid; grid-template-columns:repeat(auto-fit, minmax(120px, 1fr)); gap:10px; }
.summary a { text-decoration:none; color:inherit; border:1px solid var(--rule); border-radius:var(--radius); padding:12px 14px; background:#fff; }
.summary a:hover { border-color:var(--signal); }
.summary .num { font-size:28px; font-weight:650; line-height:1.1; display:block; margin-top:6px; }

/* ---------- tenant provisioning rail (admin) ---------- */
.tenant { padding:0; }
.tenant-head { display:flex; gap:14px; align-items:center; flex-wrap:wrap; padding:16px 20px; border-bottom:1px solid var(--rule-2); }
.tenant-head h2 { margin:0; font-size:18px; }
.tenant-head .actions { margin-left:auto; }
.rail { list-style:none; margin:0; padding:16px 20px; display:grid; grid-template-columns:repeat(4, minmax(0, 1fr)); gap:0; counter-reset:step; }
.rail li { position:relative; padding:0 14px 0 34px; font-size:13.5px; }
.rail li::before {
  counter-increment:step; content:counter(step); position:absolute; left:0; top:0; width:24px; height:24px; border-radius:50%;
  display:flex; align-items:center; justify-content:center; font-size:12.5px; font-weight:650;
  background:#fff; border:2px solid var(--rule); color:var(--ink-2);
}
.rail li::after { content:""; position:absolute; left:28px; right:4px; top:11px; height:2px; background:var(--rule); z-index:0; }
.rail li:last-child::after { display:none; }
.rail li b { display:block; font-weight:600; position:relative; background:#fff; padding-right:6px; width:max-content; max-width:100%; z-index:1; }
.rail li span { display:block; color:var(--ink-2); font-size:12.5px; margin-top:2px; padding-right:6px; }
.rail li.done::before { content:"\2713"; background:var(--signal); border-color:var(--signal); color:#fff; }
.rail li.done::after { background:var(--signal); }
.rail li.fail::before { content:"!"; background:var(--alarm); border-color:var(--alarm); color:#fff; }
.rail li.todo::before { border-color:var(--amber); color:var(--amber); }
.tenant-body { display:grid; grid-template-columns:minmax(0, 1.2fr) minmax(0, 1fr); gap:0; border-top:1px solid var(--rule-2); }
.tenant-body > div { padding:16px 20px; }
.tenant-body > div + div { border-left:1px solid var(--rule-2); }
.metrics { display:grid; grid-template-columns:repeat(4, minmax(0, 1fr)); gap:10px; margin:0 0 4px; }
.metrics div { font-size:12.5px; color:var(--ink-2); }
.metrics b { display:block; font-size:18px; color:var(--ink); font-weight:620; }

/* ---------- usage: sidebar meter and the Usage page ---------- */
.meter { display:block; text-decoration:none; color:var(--side-ink); font-size:12.5px; padding:10px; border:1px solid rgba(255,255,255,.1); border-radius:var(--radius); }
.meter:hover { background:rgba(255,255,255,.06); color:#fff; }
.meter-title { display:block; color:var(--side-muted); }
.meter-row { display:flex; justify-content:space-between; gap:8px; margin-top:4px; }
.meter-row b { color:#fff; font-weight:600; white-space:nowrap; }
.meter-row.lvl-warn b { color:#f2b84b; } .meter-row.lvl-stop b { color:#ff8f86; }
svg.bar { display:block; width:100%; height:4px; margin-top:3px; }
svg.bar .track { fill:rgba(255,255,255,.14); } svg.bar .fill { fill:#3fbfa9; }
svg.bar.lvl-warn .fill { fill:#f2b84b; } svg.bar.lvl-stop .fill { fill:#ff8f86; }
.card svg.bar { height:8px; margin:6px 0 2px; }
.card svg.bar .track { fill:var(--rule-2); } .card svg.bar .fill { fill:var(--signal); }
.card svg.bar.lvl-warn .fill { fill:var(--amber); } .card svg.bar.lvl-stop .fill { fill:var(--alarm); }
.periods { display:flex; flex-wrap:wrap; gap:6px; margin:0 0 16px; }
.periods a { padding:3px 10px; border:1px solid var(--rule); border-radius:999px; background:#fff; text-decoration:none; font-size:13px; color:var(--ink-2); }
.periods a[aria-current="page"] { border-color:var(--signal); color:var(--signal-ink); background:var(--signal-wash); }
.quota-grid { display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:18px; margin-top:14px; }
.quota-head { display:flex; gap:10px; align-items:baseline; flex-wrap:wrap; }
svg.days { display:block; width:100%; max-height:180px; margin:0 0 12px; }
svg.days .day { fill:var(--signal); } svg.days .day:hover { fill:var(--signal-ink); }
svg.days text { font-size:6px; fill:var(--ink-2); text-anchor:middle; }
svg.days .axis { stroke:var(--rule); stroke-width:1; }
.msg-usage { margin-top:4px; }
.card h3.sub { margin-top:18px; }

/* ---------- environment: sidebar node line and the Environment page ---------- */
.node-line { display:flex; gap:10px; align-items:flex-start; text-decoration:none; color:var(--side-ink); font-size:12.5px; padding:9px 10px; border:1px solid rgba(255,255,255,.1); border-radius:var(--radius); }
.node-line:hover { background:rgba(255,255,255,.06); color:#fff; }
.node-line .node-text { min-width:0; }
.node-line b { display:block; color:#fff; font-weight:600; }
.node-line .node-model { display:block; color:var(--side-muted); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; max-width:170px; }
.dot { flex:0 0 auto; display:inline-block; width:9px; height:9px; border-radius:50%; margin-top:4px; background:var(--side-muted); }
.st-ready .dot, .st-busy .dot { background:#3fbfa9; }
.st-starting .dot, .st-loading .dot, .st-stopping .dot { background:#f2b84b; animation:node-pulse 1.4s ease-in-out infinite; }
.st-busy_other .dot { background:#f2b84b; }
.env-node .dot { width:12px; height:12px; margin-top:8px; background:var(--rule); }
.env-node.st-ready .dot, .env-node.st-busy .dot { background:var(--signal); }
.env-node.st-starting .dot, .env-node.st-loading .dot, .env-node.st-stopping .dot, .env-node.st-busy_other .dot { background:var(--amber); }
.env-state { display:flex; gap:12px; align-items:flex-start; margin:0 0 14px; }
.env-state h2 { margin:0 0 4px; display:flex; gap:10px; align-items:center; flex-wrap:wrap; }
.env-says { margin:0; color:var(--ink-2); max-width:72ch; }
.facts.env-facts { grid-template-columns:repeat(3, minmax(0, 1fr)); }
.facts.env-facts > div:nth-child(3n+1) { border-left:0; }
.facts.env-facts > div:nth-child(n+4) { border-top:1px solid var(--rule-2); }
.env-actions { margin-top:16px; }
.env-actions form { margin:0; }
.env-actions .hint { margin-top:0; flex:1 1 240px; }
.env-auto { max-width:520px; }
.env-history td.nowrap { white-space:nowrap; }
@keyframes node-pulse { 50% { opacity:.35; } }

/* ---------- models ---------- */
.section-title.flush { margin-top:0; }
label.check { display:flex; gap:8px; align-items:center; margin:0; color:var(--ink); font-size:15px; }
.row.top { align-items:flex-start; }

/* ---------- misc kept from v1 ---------- */
pre { background:#101820; color:#e3e8ee; padding:12px 14px; border-radius:var(--radius); overflow:auto; white-space:pre-wrap; word-break:break-word; }
.msg { border-left:3px solid var(--rule); padding:6px 14px; margin:12px 0; } .msg.user { border-color:var(--signal); }
.msg.assistant { border-color:var(--ink-2); } .msg .body { white-space:pre-wrap; overflow-wrap:anywhere; }

/* ---------- live chat (static/chat.js) ---------- */
.chat-log { max-height:62vh; overflow-y:auto; overscroll-behavior:contain; }
.chat-log .msg:first-child { margin-top:0; }
.msg .body pre.code { margin:8px 0; white-space:pre; overflow-x:auto; word-break:normal; font-family:ui-monospace, "Cascadia Mono", Consolas, monospace; font-size:13px; }
.msg .body pre.code code { font-size:inherit; }
.msg .body pre.diff .add { color:#8fe0a5; } .msg .body pre.diff .del { color:#ff9e94; }
.msg .body pre.diff .hunk { color:#8ecdf0; } .msg .body pre.diff .meta { color:#9aa7b2; }
.msg.live .body::after { content:"\25CD"; display:inline-block; margin-left:4px; color:var(--signal); animation:chat-pulse 1s ease-in-out infinite; }
.msg.live.idle .body::after { display:none; }
@keyframes chat-pulse { 50% { opacity:.25; } }
.chat-composer textarea { width:100%; resize:vertical; min-height:68px; }
.chat-actions { display:flex; gap:10px; align-items:center; justify-content:flex-end; margin-top:10px; }
.chat-actions #chat-hint { margin-right:auto; }
[hidden] { display:none !important; }
.visually-hidden { position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; }
progress { width:220px; accent-color:var(--signal); }
ul { padding-left:20px; }

/* ---------- in-cabinet report (templates/report.html) ---------- */
.report-cta { display:flex; gap:16px; align-items:center; justify-content:space-between; flex-wrap:wrap; border-left:3px solid var(--signal); }
.report-cta h2 { margin:0 0 2px; } .report-cta p { margin:0; }
.report-head { margin:0 0 20px; position:relative; }
.report-head .crumbs { margin:0 0 14px; font-size:13px; color:var(--ink-2); }
.report-head .eyebrow { margin:0 0 4px; font-size:12.5px; font-weight:600; letter-spacing:.06em; text-transform:uppercase; color:var(--signal-ink); }
.report-head h1 { font-size:30px; line-height:1.15; margin:0 0 16px; max-width:28ch; overflow-wrap:anywhere; }
.report-actions { position:absolute; top:28px; right:0; display:flex; gap:8px; }
.facts { display:grid; grid-template-columns:minmax(0, 1fr) minmax(0, .8fr) minmax(0, 1fr) minmax(0, 1.5fr); gap:0; margin:0; background:var(--surface); border:1px solid var(--rule); border-radius:var(--radius); }
.facts > div { padding:10px 14px; border-left:1px solid var(--rule-2); min-width:0; }
.facts > div:first-child { border-left:0; }
.facts dt { font-size:12px; color:var(--ink-2); font-weight:500; margin:0 0 2px; }
.facts dd { margin:0; overflow-wrap:anywhere; }
.facts dd code { font-size:12.5px; }
.facts.wide { grid-template-columns:minmax(0, 2fr) minmax(0, 1.2fr) minmax(0, 1fr); margin-top:10px; }
.facts .sources { list-style:none; margin:0; padding:0; }
.facts .sources li + li { margin-top:8px; padding-top:8px; border-top:1px dashed var(--rule-2); }
code.wrap { overflow-wrap:anywhere; word-break:break-all; }
.report-summary .lede { font-size:17px; line-height:1.45; margin:0 0 14px; max-width:68ch; }
svg.sevbar { display:block; width:100%; height:12px; border-radius:3px; overflow:hidden; background:var(--rule-2); }
svg.sevbar .seg-critical { fill:var(--critical); } svg.sevbar .seg-high { fill:var(--high); } svg.sevbar .seg-medium { fill:var(--medium); }
svg.sevbar .seg-low { fill:var(--low); } svg.sevbar .seg-info { fill:var(--info); }
.sevlegend { list-style:none; padding:0; margin:10px 0 18px; display:flex; flex-wrap:wrap; gap:6px 16px; }
.sevlegend a { text-decoration:none; color:var(--ink); display:inline-flex; gap:6px; align-items:center; }
.sevlegend b { font-weight:650; }
.summary-grid { display:grid; grid-template-columns:minmax(0, 1.5fr) minmax(0, 1fr) minmax(0, 1fr); gap:24px; border-top:1px solid var(--rule-2); padding-top:16px; }
.summary-grid h3 { font-size:13px; color:var(--ink-2); text-transform:uppercase; letter-spacing:.05em; font-weight:600; }
.summary-grid h3.sub { margin-top:16px; }
.top-risks ol { margin:0; padding-left:20px; }
.top-risks li { margin:0 0 10px; }
.top-risks li a { font-weight:600; }
.top-risks .why { display:block; color:var(--ink-2); font-size:13.5px; max-width:75ch; }
.changes { list-style:none; margin:0; padding:0; }
.changes li { padding:2px 0; } .changes a { text-decoration:none; color:var(--ink); }
.changes b { display:inline-block; min-width:2.2em; font-weight:650; }
table.mini td { padding:3px 0; border-bottom:1px solid var(--rule-2); }
table.mini td.num { padding-left:12px; font-weight:600; }
.report-filters { display:flex; flex-wrap:wrap; gap:12px; align-items:flex-end; margin:0 0 14px; }
.report-filters > div { flex:1 1 150px; } .report-filters > .shrink { flex:0 0 auto; }
.report-filters label { margin-top:0; }
.report-items h3.sev-head { display:flex; gap:10px; align-items:center; margin:26px 0 8px; padding-bottom:6px; border-bottom:2px solid var(--rule); font-size:16px; }
.report-items h3.sev-head:first-child { margin-top:6px; }
.report-items h4.cat-head { margin:14px 0 6px; font-size:13px; font-weight:600; color:var(--ink-2); text-transform:uppercase; letter-spacing:.05em; }
.group-count { font-size:12.5px; font-weight:600; color:var(--ink-2); background:var(--rule-2); border-radius:999px; padding:0 8px; }
details.finding { background:var(--surface); border:1px solid var(--rule); border-radius:var(--radius); margin:0 0 8px; }
details.finding > summary { list-style:none; cursor:pointer; padding:11px 16px 11px 34px; position:relative; display:flex; flex-wrap:wrap; gap:4px 14px; align-items:baseline; }
details.finding > summary::-webkit-details-marker { display:none; }
details.finding > summary::before { content:""; position:absolute; left:15px; top:17px; width:7px; height:7px; border-right:2px solid var(--ink-2); border-bottom:2px solid var(--ink-2); transform:rotate(-45deg); transition:transform .12s; }
details.finding[open] > summary::before { transform:rotate(45deg); top:15px; }
details.finding > summary:hover { background:var(--paper); }
details.finding[open] > summary { border-bottom:1px solid var(--rule-2); }
.f-title { font-weight:600; flex:1 1 320px; min-width:0; overflow-wrap:anywhere; }
.f-meta { display:flex; flex-wrap:wrap; gap:4px 10px; align-items:baseline; font-size:13px; color:var(--ink-2); min-width:0; }
.f-where { font-family:ui-monospace, "Cascadia Mono", Consolas, monospace; font-size:12.5px; overflow-wrap:anywhere; word-break:break-all; }
.f-tool { color:var(--ink-2); }
details.finding.st-fixed .f-title, details.finding.st-false_positive .f-title { color:var(--ink-2); font-weight:500; }
.f-body { padding:14px 16px 16px 34px; display:grid; grid-template-columns:minmax(0, 75ch); gap:12px; }
.f-text h5 { margin:12px 0 2px; font-size:12.5px; text-transform:uppercase; letter-spacing:.05em; color:var(--ink-2); font-weight:600; }
.f-text h5:first-child { margin-top:0; }
.f-text p { margin:0; max-width:75ch; white-space:pre-line; overflow-wrap:anywhere; }
.f-text p.upgrade { font-weight:600; margin-bottom:4px; }
.f-text code, .f-facts code { background:var(--paper); border:1px solid var(--rule-2); border-radius:3px; padding:0 4px; }
pre.snippet { margin:0; font:12.5px/1.5 ui-monospace, "Cascadia Mono", Consolas, monospace; white-space:pre; overflow-x:auto; word-break:normal; max-width:100%; }
.f-facts { display:grid; grid-template-columns:max-content minmax(0, 1fr); gap:5px 16px; margin:0; font-size:13.5px; }
.f-facts dt { color:var(--ink-2); } .f-facts dd { margin:0; overflow-wrap:anywhere; }
.f-facts .tags span { display:inline-block; border:1px solid var(--rule); border-radius:4px; padding:0 6px; margin:0 4px 4px 0; font-size:12px; }
.f-link { margin:0; font-size:13.5px; }
a.ext::after { content:"\2197"; font-size:.85em; margin-left:2px; text-decoration:none; display:inline-block; }
.load-more { text-align:center; margin:14px 0; }
.downloads .btn { margin:0 4px 6px 0; min-width:64px; text-align:center; }
.report-foot { margin-top:24px; max-width:75ch; }
.print-view .report-filters { display:none; }

/* ---------- small screens ---------- */
@media (max-width: 860px) {
  .shell { grid-template-columns:minmax(0, 1fr); }
  .side { padding:10px 16px; gap:10px; flex-direction:row; flex-wrap:wrap; align-items:center; justify-content:space-between; }
  .side .mark { padding:0; }
  .menu-toggle { display:inline-block; background:transparent; border-color:rgba(255,255,255,.3); color:#fff; padding:6px 14px; }
  .menu-toggle::before { content:"\2630"; margin-right:8px; }
  .side-body { flex:1 1 100%; gap:12px; }
  .side.js-menu:not(.menu-open) .side-body { display:none; }
  .nav { flex-direction:column; }
  .side .who { margin-top:4px; }
  .content { padding:20px 16px 48px; }
  .rail { grid-template-columns:1fr 1fr; row-gap:14px; }
  .rail li::after { display:none; }
  .tenant-body { grid-template-columns:1fr; }
  .tenant-body > div + div { border-left:0; border-top:1px solid var(--rule-2); }
  .metrics { grid-template-columns:1fr 1fr; }
  .quota-grid { grid-template-columns:1fr; }
  .card { overflow-x:auto; }
  .report-actions { position:static; margin:0 0 14px; }
  .report-head h1 { font-size:24px; }
  .facts { grid-template-columns:1fr 1fr; }
  .facts > div:nth-child(odd) { border-left:0; }
  .facts > div:nth-child(n+3) { border-top:1px solid var(--rule-2); }
  .facts.env-facts { grid-template-columns:1fr 1fr; }
  .facts.env-facts > div:nth-child(3n+1) { border-left:1px solid var(--rule-2); }
  .facts.env-facts > div:nth-child(odd) { border-left:0; }
  .facts.env-facts > div:nth-child(n+3) { border-top:1px solid var(--rule-2); }
  .node-line .node-model { max-width:none; }
  .env-history td.nowrap { white-space:normal; }
  .facts.wide { grid-template-columns:1fr; }
  .facts.wide > div { border-left:0; }
  .facts.wide > div + div { border-top:1px solid var(--rule-2); }
  .summary-grid { grid-template-columns:1fr; gap:16px; }
  details.finding > summary { padding:10px 12px 10px 30px; }
  details.finding > summary::before { left:12px; }
  .f-body { padding:12px; }
  .f-facts { grid-template-columns:1fr; gap:0; }
  .f-facts dd { margin:0 0 6px; }
}

/* ---------- print: the browser's print of the report page is the report ---------- */
@media print {
  @page { margin:16mm 14mm; }
  body { background:#fff; font-size:11pt; }
  .shell { display:block; }
  .side, .no-print, .report-filters, .load-more { display:none !important; }
  .content { padding:0; max-width:none; }
  .card, .facts, details.finding { border-color:#bbb; box-shadow:none; }
  .report-head h1 { max-width:none; }
  details.finding { break-inside:avoid; page-break-inside:avoid; }
  details.finding > summary::before { display:none; }
  details.finding > summary { padding-left:12px; }
  .f-body { padding-left:12px; }
  details.finding[hidden], h3[hidden], h4[hidden] { display:none !important; }
  details.finding::details-content { content-visibility:visible; display:contents; }
  h3.sev-head { break-after:avoid; page-break-after:avoid; }
  pre.snippet { white-space:pre-wrap; word-break:break-word; background:#f4f4f4; color:#111; border:1px solid #ccc; }
  a { color:inherit; text-decoration:none; }
  a.ext::after { content:" (" attr(href) ")"; font-size:8.5pt; color:#555; word-break:break-all; }
  .sev, svg.sevbar rect { -webkit-print-color-adjust:exact; print-color-adjust:exact; }
}
@media (prefers-reduced-motion: reduce) { * { transition:none !important; animation:none !important; } }

/* ---------- UX pass 2026-11: page actions, crumbs, confirmations, source form ---------- */
/* Destructive triggers look destructive and never like the primary button next to them. */
details.confirm > summary, details.edit > summary {
  cursor:pointer; list-style:none; display:inline-block; font-size:13.5px; font-weight:550;
  padding:4px 10px; border-radius:var(--radius); border:1px solid #e8b9b4; color:var(--alarm); background:#fff;
}
details.edit > summary { color:var(--ink); border-color:var(--rule); }
details.confirm > summary::-webkit-details-marker, details.edit > summary::-webkit-details-marker,
details.help > summary::-webkit-details-marker { display:none; }
details.confirm > summary:hover { background:var(--alarm-wash); }
details.edit > summary:hover { background:var(--paper); }
details.confirm[open], details.edit[open] { min-width:240px; }
details.confirm[open] > form { margin-top:8px; padding:10px 12px; border:1px solid #efc2bd; border-radius:var(--radius); background:var(--alarm-wash); }
details.edit[open] > form { margin-top:8px; padding:10px 12px; border:1px solid var(--rule); border-radius:var(--radius); background:var(--paper); text-align:left; }
details.confirm form p { margin:0 0 8px; color:#7a1a14; }
button.danger.solid { background:var(--alarm); color:#fff; border-color:var(--alarm); }
button.danger.solid:hover { background:#8f1d17; border-color:#8f1d17; color:#fff; }
button:disabled { opacity:.5; cursor:not-allowed; }
.row-actions { white-space:nowrap; text-align:right; }
.row-actions details { display:inline-block; vertical-align:top; margin-left:6px; }
.row-actions details[open] { display:block; margin:6px 0 0; white-space:normal; }

.crumbs { font-size:13px; color:var(--ink-2); margin:0 0 10px; }
.crumbs ol { list-style:none; margin:0; padding:0; display:flex; flex-wrap:wrap; gap:4px; }
.crumbs li + li::before { content:"\203A"; margin-right:4px; color:var(--rule); }
.crumbs [aria-current] { color:var(--ink); }

.page-head.with-action { display:flex; gap:16px 24px; align-items:flex-start; justify-content:space-between; flex-wrap:wrap; }
.page-head .head-text { flex:1 1 360px; min-width:0; }
.page-head h1 .pill { vertical-align:middle; font-size:13px; }
.head-action { flex:0 0 auto; display:flex; flex-direction:column; align-items:flex-end; gap:4px; max-width:100%; }
.head-action .hint { margin:0; }
label.check { display:flex; gap:8px; align-items:flex-start; margin:0; color:var(--ink); font-size:14.5px; font-weight:400; }
label.check input { margin-top:4px; flex:0 0 auto; }
.hint.caution { color:var(--amber); }
.stop-note { color:var(--amber); font-weight:600; }

.context-bar { display:flex; gap:8px 16px; flex-wrap:wrap; align-items:center; margin:-8px 0 18px; padding:8px 12px;
  border:1px solid #ecd3a3; background:var(--amber-wash); color:#6b4000; border-radius:var(--radius); font-size:13.5px; }
.context-bar a { font-weight:600; color:#6b4000; }

.card-head { display:flex; gap:8px 16px; justify-content:space-between; align-items:baseline; flex-wrap:wrap; margin-bottom:12px; }
.card-head h2 { margin:0; }
.card-head .actions { gap:14px; }
.report-line { margin:14px 0 0; }
.empty { color:var(--ink-2); margin:0; max-width:70ch; }
.plain-list { list-style:none; padding:0; margin:0; }
.plain-list li { padding:5px 0; }
.src-url { display:block; font-family:ui-monospace, "Cascadia Mono", Consolas, monospace; font-size:12px; color:var(--ink-2); overflow-wrap:anywhere; }
.small-btn { padding:3px 10px; font-size:13px; }
.start ol { margin:0; padding-left:20px; } .start li { margin:4px 0; }
.archived-list { margin-top:14px; } .archived-list summary { cursor:pointer; color:var(--ink-2); }

/* Source type switch: radios outside the panels; :has shows the matching panel. */
.seg { display:flex; flex-wrap:wrap; gap:0; border:0; padding:0; margin:0 0 14px; }
.seg label { margin:0; }
.seg input { position:absolute; opacity:0; pointer-events:none; }
.seg label { padding:7px 14px; border:1px solid var(--rule); margin-left:-1px; cursor:pointer; background:#fff; color:var(--ink); font-size:14px; }
.seg label:first-of-type { border-radius:var(--radius) 0 0 var(--radius); margin-left:0; }
.seg label:last-of-type { border-radius:0 var(--radius) var(--radius) 0; }
.seg label:has(input:checked) { background:var(--signal-wash); border-color:var(--signal); color:var(--signal-ink); font-weight:600; position:relative; }
.seg label:has(input:focus-visible) { box-shadow:var(--focus); }
.src-tabs:has(input[value="archive"]:checked) .git-panel,
.src-tabs:not(:has(input[value="archive"]:checked)) .archive-panel { display:none; }
.src-tabs:has(input[value="ssh_git"]:checked) .only-https,
.src-tabs:not(:has(input[value="ssh_git"]:checked)) .only-ssh,
.src-tabs:not(:has(input[value="github"]:checked)) .only-github,
.src-tabs:not(:has(input[value="gitlab"]:checked)) .only-gitlab { display:none; }
.src-panel .actions { margin-top:14px; }
details.help { margin:10px 0 0; border:1px solid var(--rule-2); border-radius:var(--radius); background:var(--paper); }
details.help > summary { cursor:pointer; padding:7px 12px; color:var(--signal-ink); font-weight:550; font-size:14px; list-style:none; }
details.help > summary::before { content:"?"; display:inline-flex; align-items:center; justify-content:center; width:18px; height:18px; margin-right:8px; border-radius:50%; border:1px solid currentColor; font-size:12px; }
details.help ol { margin:0; padding:4px 16px 4px 34px; font-size:14px; } details.help li { margin:4px 0; }
details.help p { margin:4px 12px 10px; }
.edit-form label { margin-top:8px; }

.danger-zone { border-color:#efc2bd; }
.danger-zone h2 { color:var(--alarm); }
.danger-row { display:flex; gap:10px 24px; justify-content:space-between; align-items:flex-start; flex-wrap:wrap; padding:12px 0; border-top:1px solid var(--rule-2); }
.danger-row:first-of-type { border-top:0; padding-top:0; }
.danger-row > div { flex:1 1 300px; } .danger-row p { margin:2px 0 0; }
.danger-row details[open] { flex:1 1 100%; }

.job-status .status-line { display:flex; gap:10px; align-items:baseline; flex-wrap:wrap; margin-bottom:12px; }
.status-says { margin:0; flex:1 1 300px; }
.job-status progress { width:100%; max-width:480px; display:block; margin:0 0 12px; }
.job-error p { margin:6px 0 0; }
.facts.job-facts { grid-template-columns:repeat(4, minmax(0, 1fr)); margin-bottom:10px; }

/* Sidebar groups (static/nav.js) and the small-screen menu button. */
.side-body { display:flex; flex-direction:column; gap:22px; flex:1 1 auto; }
.menu-toggle { display:none; }
.nav .node-line { margin:2px 0 6px; }
details.nav-group { margin-top:10px; }
details.nav-group > summary { list-style:none; cursor:pointer; margin:4px 8px 6px; font-size:12.5px; font-weight:600; color:var(--side-muted);
  display:flex; justify-content:space-between; align-items:center; border-radius:4px; }
details.nav-group > summary::-webkit-details-marker { display:none; }
details.nav-group > summary::after { content:"\25BE"; font-size:11px; transition:transform .12s; }
details.nav-group:not([open]) > summary::after { transform:rotate(-90deg); }
details.nav-group > summary:hover { color:#fff; }
details.nav-group > a { display:block; }
.mark[aria-current="page"] span { color:#3fbfa9; }

.inline-form { display:inline-block; vertical-align:top; }
.chips { display:flex; flex-wrap:wrap; gap:8px; margin:0 0 12px; }
.chips form { margin:0; }
button.chip { background:var(--signal-wash); color:var(--signal-ink); border-color:#b9ddd5; border-radius:999px; padding:5px 14px; font-weight:500; }
button.chip:hover { background:#d3ebe5; color:var(--signal-ink); }
.report-actions form { margin:0; }
.disabled-wrap { display:inline-block; vertical-align:top; }
details.menu { position:relative; }
details.menu > summary { list-style:none; }
details.menu > summary::-webkit-details-marker { display:none; }
details.menu > summary::after { content:"\25BE"; margin-left:8px; font-size:.85em; }
.menu-body { position:absolute; right:0; top:calc(100% + 6px); z-index:5; width:min(340px, 92vw); background:var(--surface);
  border:1px solid var(--rule); border-radius:var(--radius); padding:12px 14px; box-shadow:0 8px 24px rgba(22,32,42,.14); }
.menu-body p { margin:0 0 6px; } .menu-body li a { display:block; padding:4px 0; }

/* Perimeter and cloud: two sections, each opens with what it gives and its main action. */
.tabs { display:flex; gap:6px; flex-wrap:wrap; margin-top:12px; }
.tabs a { padding:4px 12px; border:1px solid var(--rule); border-radius:999px; background:#fff; text-decoration:none; font-size:13.5px; color:var(--ink); }
.tabs a:hover { border-color:var(--signal); color:var(--signal-ink); }
.section-block { scroll-margin-top:16px; }
.section-block .card-head form { margin:0; }
.lede { margin:0 0 14px; max-width:75ch; }
.section-block .rail { padding:0 0 14px; grid-template-columns:repeat(3, minmax(0, 1fr)); }
.pick-project { max-width:620px; margin-bottom:6px; }
.connect { display:flex; flex-direction:column; align-items:flex-start; gap:10px; margin-top:14px; }
.connect details[open] { align-self:stretch; }
details.connect-flow > summary { list-style:none; }
details.connect-flow > summary::-webkit-details-marker { display:none; }
details.connect-flow[open] > summary { margin-bottom:10px; }
.flow { border:1px solid var(--rule); border-radius:var(--radius); padding:14px 16px; background:var(--paper); }
ol.steps { margin:0; padding-left:20px; } ol.steps > li { margin:0 0 12px; } ol.steps .actions { margin:8px 0 0; }
.flow pre { font-size:12px; }

@media (max-width: 860px) {
  .section-block .rail { grid-template-columns:1fr; }
  .page-head.with-action { flex-direction:column; align-items:stretch; }
  .page-head .head-text { flex:0 0 auto; }
  .head-action { align-items:stretch; }
  .head-action .btn, .head-action button { width:100%; text-align:center; }
  .menu-body { position:static; width:100%; margin-top:8px; box-shadow:none; }
  /* Tables become one block per row with the column name as a label. */
  table.stack, table.stack tbody, table.stack tr, table.stack td { display:block; width:100%; }
  table.stack tr:first-child:has(th) { display:none; }
  table.stack tr { padding:10px 0; border-bottom:1px solid var(--rule-2); }
  table.stack tr:last-child { border-bottom:0; }
  table.stack td { border:0; padding:3px 0; text-align:left; }
  table.stack td[data-label]::before { content:attr(data-label); display:block; font-size:12px; color:var(--ink-2); }
  table.stack td:first-child::before { display:none !important; }
  .row-actions { text-align:left; white-space:normal; }
  .row-actions details { margin:6px 8px 0 0; }
  .card:has(table.stack) { overflow-x:visible; }
  .facts.job-facts { grid-template-columns:1fr 1fr; }
  .seg { width:100%; } .seg label { flex:1 1 50%; text-align:center; margin:0 0 -1px 0; border-radius:0 !important; }
}
#upload-progress { width:100%; max-width:480px; height:8px; margin:10px 0 2px; display:block; }
#upload-progress[hidden] { display:none; }

/* Project agent (ENV-11): header line, what the agent read, proposal cards, project notes. */
.agent-head { margin:0 0 6px; padding:6px 12px; border-left:3px solid var(--signal); background:var(--signal-wash); font-size:13.5px; }
.msg details.agent-activity { margin:6px 0 0; }
.msg details.agent-activity summary { cursor:pointer; }
.msg details.agent-activity ul { margin:4px 0 0; padding-left:18px; }
.msg .card.proposal { margin:10px 0 4px; }
.card.proposal .actions { display:flex; flex-wrap:wrap; gap:8px; align-items:center; }
.card.proposal .actions form { margin:0; }
.note-text { white-space:pre-wrap; overflow-wrap:anywhere; margin:0; }
blockquote.note-text { border-left:3px solid var(--rule); padding:4px 10px; }
ul.notes { list-style:none; padding:0; margin:0 0 12px; }
ul.notes li.note { padding:8px 0; border-bottom:1px solid var(--rule); }
ul.notes li.note:last-child { border-bottom:0; }

/* textarea character counter (static/counter.js) */
.char-count { display:block; text-align:right; font-size:12.5px; color:var(--ink-2); margin-top:3px; font-variant-numeric:tabular-nums; }
.char-count.near { color:var(--amber); }
.char-count.full { color:var(--alarm); font-weight:600; }

/* Findings list: long rule ids and paths wrap inside the card instead of widening it. */
.card { overflow-x:auto; }
.findings-table td.wrap-any { overflow-wrap:anywhere; word-break:break-word; min-width:16rem; }
.findings-table td:not(.wrap-any) { white-space:nowrap; }

/* ---------- Run audit panel (templates/_run_panel.html, docs/design/run-panel-brief-2026-11-01.md) ----------
   Own block: other pages do not use these classes. Which fields show follows the checked mode card (:has). */
.run-panel:not(:target):not(.is-open) { display:none; }
.run-panel { scroll-margin-top:16px; }
.run-panel h2 { margin:0 0 14px; }
.run-form fieldset { border:0; padding:0; min-width:0; }
.run-form .run-block { margin:0 0 22px; }
.run-block legend, .run-legend legend { font-weight:600; font-size:14.5px; padding:0; margin:0 0 8px; }
.run-legend { display:flex; gap:4px 16px; justify-content:space-between; align-items:baseline; flex-wrap:wrap; }
.run-bulk { display:inline-flex; gap:14px; }
.run-bulk[hidden] { display:none; }
.run-bulk button.link { font-size:13.5px; }
.run-sources { list-style:none; margin:0; padding:0; max-height:300px; overflow:auto; border-top:1px solid var(--rule-2); }
.run-sources li { padding:7px 0; border-bottom:1px solid var(--rule-2); }
.run-sources li.off { color:var(--ink-2); }
.run-sources .check > span { min-width:0; }
.run-sources .check > span > span { display:block; overflow-wrap:anywhere; }
.run-count { margin:6px 0 0; }

.run-modes { display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); gap:10px; }
.run-mode { position:relative; display:flex; flex-direction:column; gap:3px; margin:0; padding:12px 14px 12px 40px; cursor:pointer;
  border:1px solid var(--rule); border-radius:var(--radius); background:var(--surface); font-size:13.5px; font-weight:400; color:var(--ink); }
.run-mode input { position:absolute; left:14px; top:15px; margin:0; }
.run-mode b { font-size:14.5px; font-weight:600; }
.run-mode span { overflow-wrap:anywhere; }
.run-mode-time { margin-top:auto; padding-top:6px; color:var(--ink-2); font-size:13px; }
.run-mode:hover { border-color:var(--ink-2); }
.run-mode:has(input:checked) { border-color:var(--signal); background:var(--signal-wash); box-shadow:inset 3px 0 0 var(--signal); }
.run-mode:has(input:focus-visible) { box-shadow:var(--focus), inset 3px 0 0 var(--signal); }
.run-caution { margin:8px 0 0; font-size:13px; color:var(--amber); }

.run-profiles { display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:8px 16px; }
.run-profiles .pill { font-weight:500; margin-left:4px; white-space:normal; }
.run-form label.check .hint { display:block; }

.run-warning { margin:0 0 14px; padding:8px 12px; border:1px solid #ecd3a3; background:var(--amber-wash); color:#6b4000;
  border-radius:var(--radius); font-size:13.5px; }
.run-warning a { color:#6b4000; font-weight:600; margin-left:4px; }

.run-foot { display:flex; gap:12px 20px; align-items:flex-end; justify-content:space-between; flex-wrap:wrap;
  padding-top:14px; border-top:1px solid var(--rule-2); }
.run-summary { flex:1 1 320px; min-width:0; }
.run-summary > p { margin:0; font-weight:600; }
.run-how { margin-top:2px; font-size:13px; color:var(--ink-2); }
.run-how > summary { cursor:pointer; color:var(--signal-ink); width:max-content; }
.run-how p { margin:6px 0 0; max-width:70ch; }
.run-buttons { display:flex; gap:10px; margin-left:auto; }
.run-more { display:flex; gap:6px 18px; flex-wrap:wrap; justify-content:flex-end; margin:12px 0 0; }

/* Visibility by mode: "when-X" shows only with mode X, "unless-model-only" with the two scanner modes. */
.run-form .when-scanners, .run-form .when-deep, .run-form .when-model-only { display:none; }
.run-form:has(input[name=mode][value=scanners]:checked) .when-scanners,
.run-form:has(input[name=mode][value=deep]:checked) .when-deep,
.run-form:has(input[name=mode][value=model_only]:checked) .when-model-only { display:revert; }
.run-form:has(input[name=mode][value=model_only]:checked) .unless-model-only { display:none; }

@media (max-width: 860px) {
  .run-modes { grid-template-columns:1fr; }
  .run-profiles { grid-template-columns:1fr; }
  .run-foot { flex-direction:column; align-items:stretch; }
  .run-summary { flex:0 0 auto; }
  .run-buttons { margin-left:0; flex-direction:column-reverse; }
  .run-buttons .btn, .run-buttons button { width:100%; text-align:center; }
  .run-more { justify-content:flex-start; }
}

/* ---------- UI pass 2026-11-01b: one primary action, nothing outside its card, separated danger ---------- */
/* Utilities: dates and ids never break mid-value; long ids, urls and emails wrap inside their cell. */
.nowrap { white-space:nowrap; }
.wrap-any { overflow-wrap:anywhere; word-break:break-word; }
/* In a table cell a word must not break into pieces: the column keeps a sane minimum, only long tokens wrap. */
td.wrap-any { overflow-wrap:break-word; word-break:normal; min-width:9rem; }
.audit-table td:nth-child(4) { min-width:12rem; }
.prose { white-space:pre-line; overflow-wrap:anywhere; max-width:75ch; }
h1, .page-head h1, .title-wrap { overflow-wrap:anywhere; }
.crumbs li { min-width:0; overflow-wrap:anywhere; }
.page-head .head-meta { display:flex; flex-wrap:wrap; gap:6px 10px; align-items:center; margin-top:4px; }
.card h3.sub, h3.sub { margin-top:20px; }
.table-foot { margin:12px 0 0; }

/* Row actions: safe actions first, the destructive one last behind a divider; all the same height. */
.row-actions .small-btn, .row-actions details > summary, .row-actions .btn.small-btn {
  padding:4px 10px; font-size:13px; line-height:1.4; vertical-align:top; }
.row-actions details, .row-actions .inline-form, .row-actions .disabled-wrap { vertical-align:top; margin-top:0; }
.row-actions details.confirm { margin-left:10px; padding-left:10px; border-left:1px solid var(--rule-2); }
.summary a.card { overflow:visible; margin:0; min-width:0; }
.row-actions details.confirm[open] { border-left:0; padding-left:0; margin-left:0; }
.row-actions .actions { justify-content:flex-end; }
.note-actions { margin-top:6px; text-align:left; }
.inline-row { display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
.inline-row select { width:auto; min-width:0; flex:1 1 140px; }
.pager { display:flex; gap:8px; margin-top:14px; }
.downloads .btn { margin:0 6px 6px 0; }

/* Collapsible help that holds a form (security context): the form gets the same inner padding. */
details.help > form { padding:4px 12px 12px; }
details.help > form textarea { background:#fff; }

/* Key and value list (finding card). */
dl.kv-list { display:grid; grid-template-columns:max-content minmax(0, 1fr); gap:8px 20px; margin:0; }
dl.kv-list dt { color:var(--ink-2); font-size:13.5px; }
dl.kv-list dd { margin:0; min-width:0; overflow-wrap:anywhere; }
pre.snippet-block { white-space:pre; overflow-x:auto; word-break:normal; }
.decision-form { margin-top:14px; max-width:640px; }

/* Audit logs. */
.audit-table .kv { display:inline-block; margin:0 10px 2px 0; }
.audit-table th { white-space:nowrap; }
.audit-table code { font-size:12px; }
.filters label { margin-top:0; }

/* Report header: the primary action first, then the secondary ones. */
.report-actions { flex-wrap:wrap; justify-content:flex-end; max-width:60%; }

/* Admin console: blocking a tenant sits at the bottom of its card, away from "Work in this tenant". */
.tenant-danger { padding:12px 20px 14px; border-top:1px solid var(--rule-2); }
.tenant-danger.danger-row:first-of-type { padding-top:12px; border-top:1px solid var(--rule-2); }
.tenant-danger b { color:var(--alarm); }

/* Erase page. */
.erase-form { max-width:440px; }

/* Models: one origin form at a time, like the source type switch of a project. */
.origin-tabs:not(:has(input[value="hf"]:checked)) .origin-hf,
.origin-tabs:not(:has(input[value="https"]:checked)) .origin-https,
.origin-tabs:not(:has(input[value="s3"]:checked)) .origin-s3 { display:none; }
.origin-panel .actions { margin-top:14px; }

/* Public pages: product name and the language switch. */
.public-bar { display:flex; justify-content:space-between; align-items:center; gap:12px; padding:14px 24px;
  background:var(--side); color:#fff; }
.public-mark { font-weight:650; font-size:16px; }
.lang-switch { display:flex; gap:4px; font-size:13.5px; }
.lang-switch a, .lang-switch span { padding:3px 10px; border-radius:999px; text-decoration:none; }
.lang-switch a { color:var(--side-ink); }
.lang-switch a:hover { background:rgba(255,255,255,.08); color:#fff; }
.lang-switch [aria-current] { background:rgba(63,191,169,.2); color:#fff; }
.content.public { margin:0 auto; }
.narrow h1 { font-size:24px; }
.narrow form button[type=submit] { width:100%; }

@media (max-width: 860px) {
  .report-actions { max-width:none; justify-content:stretch; }
  .report-actions > form { flex:1 1 100%; }
  .report-actions > form button { width:100%; }
  .report-actions > .btn { flex:1 1 0; text-align:center; }
  .row-actions .actions { justify-content:flex-start; }
  .row-actions details, .row-actions .inline-form, .row-actions .disabled-wrap { margin:0 6px 6px 0; }
  .row-actions details.confirm { margin-left:4px; }
  table.stack td.nowrap { white-space:normal; }
  .findings-table td:not(.wrap-any) { white-space:normal; }
  .summary { grid-template-columns:repeat(auto-fit, minmax(116px, 1fr)); gap:8px; }
  .summary a { padding:10px 12px; }
  .summary .num { font-size:24px; }
  .filters > div { flex:1 1 100%; }
  .filters .shrink button { width:100%; }
  .public-bar { padding:12px 16px; }
  .tenant-head .actions { margin-left:0; }
  .narrow { margin:24px auto; }
}
@media (max-width: 520px) {
  /* Facts: one per line, the label on the left and the value on the right. */
  .facts, .facts.job-facts, .facts.env-facts, .facts.wide { grid-template-columns:minmax(0, 1fr); }
  .facts > div, .facts.env-facts > div, .facts.job-facts > div { border-left:0 !important; border-top:1px solid var(--rule-2); }
  .facts > div:first-child { border-top:0; }
  .facts:not(.wide) > div { display:flex; justify-content:space-between; gap:12px; align-items:baseline; }
  .facts:not(.wide) dd { text-align:right; }
  dl.kv-list { grid-template-columns:minmax(0, 1fr); gap:2px; }
  dl.kv-list dd { margin-bottom:8px; }
  .metrics { grid-template-columns:1fr 1fr; }
}
/* ---------- Skills 2026-11-01 (aisl/skills.py): the Skills page and the project's Skills card ---------- */
ul.skills { list-style:none; padding:0; margin:0 0 12px; }
ul.skills li.skill { padding:10px 0; border-bottom:1px solid var(--rule); min-width:0; }
ul.skills li.skill:last-child { border-bottom:0; }
.skill-head b { overflow-wrap:anywhere; }
.skill-desc { margin:2px 0 4px; color:var(--ink-2); overflow-wrap:anywhere; }
details.skill-text > summary { cursor:pointer; color:var(--signal-ink); font-size:14px; }
details.skill-text pre { max-height:420px; margin:6px 0 0; }
.skill-form input, .skill-form textarea, .skill-choice select { width:100%; max-width:100%; box-sizing:border-box; }
.skill-choice label { display:block; margin-top:10px; }
.skill-choice .actions { margin-top:14px; }

/* Guards (aisl/guards.py): project switches, summaries on audit and chat pages, blocked answers. */
.guard-row { padding:10px 0; border-top:1px solid var(--rule); }
.guard-row:first-of-type { border-top:0; }
.guard-row label.check { display:inline-flex; }
.guard-form .guard-row p { margin:4px 0 0 26px; }
.guard-summary { display:flex; flex-wrap:wrap; gap:6px 14px; align-items:center; }
.guard-summary.compact { margin-top:6px; font-size:13px; }
.guard-summary details { flex-basis:100%; }
.guard-blocked { display:flex; flex-wrap:wrap; gap:6px; align-items:center; }
.guard-title { display:flex; flex-wrap:wrap; gap:8px; align-items:center; margin:0; font-size:15.5px; }
.guard-row > .small:not(:last-child) { margin:6px 0 0; }
