/* Design tokens. Every text/UI pair below is MEASURED by tests/test_panel_contrast.py
   (WCAG AA: text >= 4.5:1, UI boundaries and focus >= 3:1) in BOTH themes. */
:root,[data-theme="light"]{color-scheme:light;
--ok-bg:#e1f3e6;--ok-fg:#0f4d22;--ok-border:#2f7d4a;--bad-bg:#fbe4e6;--bad-fg:#7a1520;--bad-border:#a4202b;--warn-bg:#fcefd0;--warn-fg:#5e4100;--warn-border:#8a6200;--info-bg:#e0ecfb;--info-fg:#10417f;--info-border:#2c64b3;
--bg:#e9edf3;--surface:#ffffff;--surface-2:#f1f4f8;--text:#151c27;--muted:#475467;
--border:#c3ccd9;--border-ui:#6b7a90;--link:#174e9e;--focus:#0b45b5;
--btn-bg:#ffffff;--btn-text:#151c27;--btn-border:#6b7a90;--btn-hover:#e2e9f5;
--primary-bg:#1a56b8;--primary-text:#ffffff;--danger-bg:#a4202b;--danger-text:#ffffff;
--pill-bg:#e6ebf2;--pill-text:#243042;--pill-border:#6b7a90;
--critical:#981b25;--high:#a33e0b;--medium:#805800;--low:#526176;
--sev-critical-bg:#981b25;--sev-critical-fg:#ffffff;--sev-critical-border:#981b25;
--sev-high-bg:#a33e0b;--sev-high-fg:#ffffff;--sev-high-border:#a33e0b;
--sev-medium-bg:#805800;--sev-medium-fg:#ffffff;--sev-medium-border:#805800;
--sev-low-bg:#526176;--sev-low-fg:#ffffff;--sev-low-border:#526176;--space:4px}
[data-theme="dark"]{color-scheme:dark;
--ok-bg:#12331f;--ok-fg:#bdf0cd;--ok-border:#58b87a;--bad-bg:#4a1219;--bad-fg:#ffd2d6;--bad-border:#ff929a;--warn-bg:#443204;--warn-fg:#fbe6a0;--warn-border:#e8c465;--info-bg:#16305a;--info-fg:#cfe3ff;--info-border:#8dbbff;
--bg:#0e141c;--surface:#172130;--surface-2:#1e2a3b;--text:#eef2f8;--muted:#b9c5d6;
--border:#34445a;--border-ui:#7c8ba1;--link:#8dbbff;--focus:#9bc4ff;
--btn-bg:#243348;--btn-text:#eef2f8;--btn-border:#8493a8;--btn-hover:#30445f;
--primary-bg:#3d7be0;--primary-text:#06101f;--danger-bg:#ff929a;--danger-text:#2a0509;
--pill-bg:#2a3a50;--pill-text:#e3eaf4;--pill-border:#8493a8;
--critical:#ff929a;--high:#ffb07b;--medium:#e8c465;--low:#b5c3d7;
--sev-critical-bg:#5c1219;--sev-critical-fg:#ffd9dc;--sev-critical-border:#ff929a;
--sev-high-bg:#59280a;--sev-high-fg:#ffe0cb;--sev-high-border:#ffb07b;
--sev-medium-bg:#4d3a05;--sev-medium-fg:#fbe8a8;--sev-medium-border:#e8c465;
--sev-low-bg:#2b3849;--sev-low-fg:#dde6f2;--sev-low-border:#b5c3d7}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:16px/1.5 system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}.shell{max-width:1180px;margin:auto;padding:24px}h1{font-size:24px;margin:0}h2{font-size:24px}h3{margin:24px 0 12px}h4{margin:8px 0}p{margin:8px 0 16px}a{color:var(--link);text-underline-offset:3px}button,input,select{font:inherit;color:inherit;background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:8px 12px}button{cursor:pointer}button:hover,a:hover{filter:brightness(.95)}button:disabled{opacity:.6;cursor:wait}:focus-visible{outline:3px solid var(--focus);outline-offset:3px}header,.header-actions{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.header-actions details{position:relative}.header-actions details[open]{padding:8px;background:var(--surface)}summary{cursor:pointer}nav{display:flex;gap:24px;flex-wrap:wrap;margin-top:24px;border-bottom:1px solid var(--border)}nav a{padding:12px 0;text-decoration:none}nav [aria-current="page"]{border-bottom:3px solid var(--link);font-weight:700}main{padding:8px 0}.muted,.scan{color:var(--muted)}.scan{font-size:14px;margin-top:8px}.lead{font-size:24px}.tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.tile,.card,.group{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:16px}.tile,.card[class*="CRITICAL"],.card[class*="HIGH"],.card[class*="MEDIUM"],.card[class*="LOW"],.group{border-left:4px solid var(--severity,var(--border))}.tile{text-decoration:none;display:flex;flex-direction:column;gap:8px}.tile>strong{font-size:32px;color:var(--text)}.CRITICAL{--severity:var(--critical)}.HIGH{--severity:var(--high)}.MEDIUM{--severity:var(--medium)}.LOW{--severity:var(--low)}.severity{display:inline-flex;align-items:center;gap:8px;color:var(--severity,var(--low));font-size:14px;font-weight:650}.dot{background:currentColor;width:8px;height:8px;border-radius:50%;flex:none}.cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.machines{padding:0;list-style:none}.machines li{display:flex;justify-content:space-between;gap:16px;padding:12px 0;border-bottom:1px solid var(--border)}.filters{display:flex;gap:16px;flex-wrap:wrap;margin:16px 0}.filters label{display:flex;flex-direction:column;gap:4px;max-width:100%}.filters input{width:220px;max-width:100%}.group{padding:0;margin:12px 0}.group-toggle{display:flex;align-items:center;gap:12px;flex-wrap:wrap;width:100%;text-align:left;border:0;background:transparent;padding:16px}.group-toggle strong{flex:1 1 240px}.group-body{padding:0 16px 16px}.chip{border:1px solid var(--border);border-radius:12px;padding:0 8px;font-size:14px}.advisory{border-top:1px solid var(--border);padding:12px 0}.advisory p{margin:4px 0}.error{color:var(--critical);border-left:4px solid var(--critical);padding:12px}.toast:not(:empty){position:sticky;bottom:16px;background:var(--surface);border:1px solid var(--border);padding:16px;border-radius:8px}table{width:100%;border-collapse:collapse;font-size:14px}th,td{text-align:left;vertical-align:top;border-bottom:1px solid var(--border);padding:12px 8px;overflow-wrap:break-word;word-break:normal}td button{margin:4px}pre{white-space:pre-wrap;overflow-wrap:anywhere;max-width:100%}details{margin:8px 0}article{overflow-wrap:break-word}@media(max-width:700px){.shell{padding:16px}.tiles{grid-template-columns:repeat(2,minmax(0,1fr))}.cards{grid-template-columns:1fr}.lead{font-size:20px}nav{gap:16px}thead{display:none}table,tbody,tr,td{display:block}tr{padding:8px 0;border-bottom:1px solid var(--border)}td{border:0;padding:8px 0}td:before{content:attr(data-label);display:block;font-weight:650;color:var(--muted)}.machines li{flex-direction:column;gap:4px}.group-toggle{align-items:flex-start;flex-direction:column}.group-toggle strong{flex:auto}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}

/* ---- Affordance layer: what is a control, what is data, what is a label ---- */
button,input,select,.btn{font:inherit;color:var(--btn-text);background:var(--btn-bg);border:1px solid var(--btn-border);border-radius:6px;padding:8px 14px;min-height:40px}
button,.btn,summary.btn{cursor:pointer;font-weight:600;box-shadow:0 1px 0 rgba(0,0,0,.18)}
button:hover,.btn:hover,summary.btn:hover{filter:none;background:var(--btn-hover);border-color:var(--text)}
button:active,.btn:active{transform:translateY(1px);box-shadow:none}
input[type=checkbox]{min-height:0;width:20px;height:20px;accent-color:var(--primary-bg);padding:0;vertical-align:middle}
input,select{border-color:var(--border-ui)}
:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.btn-small{min-height:32px;padding:4px 10px;font-size:14px}
.btn-quiet{background:transparent}
.btn-primary,button.primary{background:var(--primary-bg);color:var(--primary-text);border-color:var(--primary-bg)}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
nav a{padding:12px 4px;font-weight:600}
nav a:hover{background:var(--surface-2)}
.tile,.card,.group{background:var(--surface);border:1px solid var(--border-ui);box-shadow:0 1px 3px rgba(0,0,0,.18)}
.tile:hover{background:var(--surface-2);border-color:var(--text)}
.severity{background:var(--sev-bg,var(--pill-bg));color:var(--sev-fg,var(--pill-text));border:1px solid var(--sev-border,var(--pill-border));border-radius:999px;padding:2px 12px 2px 10px;font-size:13px;font-weight:700;letter-spacing:.03em;text-transform:uppercase}
.CRITICAL{--sev-bg:var(--sev-critical-bg);--sev-fg:var(--sev-critical-fg);--sev-border:var(--sev-critical-border)}
.HIGH{--sev-bg:var(--sev-high-bg);--sev-fg:var(--sev-high-fg);--sev-border:var(--sev-high-border)}
.MEDIUM{--sev-bg:var(--sev-medium-bg);--sev-fg:var(--sev-medium-fg);--sev-border:var(--sev-medium-border)}
.LOW{--sev-bg:var(--sev-low-bg);--sev-fg:var(--sev-low-fg);--sev-border:var(--sev-low-border)}
.tile>.severity,.group>.group-toggle .severity{align-self:flex-start}
/* Group: the WHOLE header is one big button-row */
.group{padding:0;overflow:hidden}
.group-toggle{display:flex;align-items:center;gap:14px;flex-wrap:nowrap;width:100%;text-align:left;border:0;border-radius:0;background:var(--surface);box-shadow:none;padding:14px 16px;min-height:64px;font-weight:400}
.group-toggle:hover{background:var(--btn-hover)}
.group.is-open>.group-toggle{background:var(--surface-2);border-bottom:1px solid var(--border-ui)}
.group-toggle:focus-visible{outline-offset:-3px}
.chevron{flex:none;width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--btn-border);border-radius:6px;background:var(--btn-bg);font-size:16px}
.group-title{flex:1 1 220px;min-width:0;display:flex;flex-direction:column;gap:2px}
.group-title strong{flex:none;font-size:16px;overflow-wrap:anywhere}
.group-versions{color:var(--muted);font-size:14px;font-variant-numeric:tabular-nums}
.toggle-label{flex:none;font-size:14px;font-weight:600;color:var(--link);text-decoration:underline;text-underline-offset:3px}
.chip{flex:none;border:1px solid var(--pill-border);background:var(--pill-bg);color:var(--pill-text);border-radius:6px;padding:2px 10px;font-size:13px;font-weight:600;white-space:nowrap}
.group-body{padding:16px;display:flex;flex-direction:column;gap:16px;background:var(--surface)}
.reason{margin:0;padding:10px 14px;border-left:4px solid var(--severity,var(--border-ui));background:var(--surface-2);border-radius:0 6px 6px 0}
.evidence h4,.machines-panel h4{margin:0 0 8px;font-size:15px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.evidence .advisory{border:1px solid var(--border);border-radius:6px;padding:10px 14px;margin:8px 0;background:var(--surface-2)}
.ai-summary{border:1px dashed var(--border-ui);border-radius:6px;padding:8px 14px;color:var(--muted);background:transparent}
.ai-summary summary{font-weight:600;color:var(--muted)}
.ai-summary p{margin:8px 0 4px;font-style:italic}
/* Machine table: nothing wraps mid-word, actions stay one small control */
.table-wrap{overflow-x:auto;border:1px solid var(--border-ui);border-radius:6px}
.machine-table{table-layout:auto;min-width:560px;font-size:14px}
.machine-table thead th{background:var(--surface-2);color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.05em;position:sticky;top:0;white-space:nowrap}
.machine-table th,.machine-table td{padding:8px 12px;vertical-align:middle;overflow-wrap:normal;word-break:normal}
.machine-table tbody tr:nth-child(even){background:var(--surface-2)}
.machine-table tbody tr:hover{background:var(--btn-hover)}
.col-check{width:44px}.col-machine,.col-version,.col-status{white-space:nowrap}.col-machine{min-width:150px;font-weight:600}.col-version{min-width:150px;font-variant-numeric:tabular-nums}.col-status{min-width:130px}.col-actions{width:120px;text-align:right;white-space:nowrap}
.versions,.ref{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px}
.ref-label{border:1px solid var(--pill-border);border-radius:4px;padding:0 6px;font-family:system-ui,sans-serif;font-size:11px;text-transform:uppercase;background:var(--pill-bg);color:var(--pill-text)}
.status-pill{display:inline-block;border:1px solid var(--pill-border);background:var(--pill-bg);color:var(--pill-text);border-radius:999px;padding:1px 10px;font-size:13px;font-weight:600;white-space:nowrap}
.status-new{border-style:solid}
.bulk-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 12px;margin-bottom:8px;border:1px solid var(--primary-bg);border-radius:6px;background:var(--surface-2);position:sticky;top:0;z-index:2}
/* Row action menu */
.menu{position:relative;display:inline-block;margin:0;text-align:left}
.menu>summary{list-style:none;display:inline-flex;align-items:center;gap:6px}
.menu>summary::-webkit-details-marker{display:none}
.menu:not([data-placed]) .menu-list{visibility:hidden}
.menu-list{position:fixed;z-index:50;min-width:170px;display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border-ui);border-radius:6px;box-shadow:0 6px 18px rgba(0,0,0,.35);padding:4px}
.menu-item{border:0;box-shadow:none;background:transparent;text-align:left;border-radius:4px;font-weight:500;min-height:36px;margin:0}
.menu-item:hover{background:var(--btn-hover)}
.row-detail{position:absolute;right:0;z-index:4;width:min(520px,80vw);background:var(--surface);border:1px solid var(--border-ui);border-radius:6px;padding:8px 12px;white-space:normal}
/* Loading placeholder: fixed height, so expanding never shifts the page */
.skeleton{border-radius:6px;border:1px solid var(--border);background:linear-gradient(90deg,var(--surface-2) 0,var(--btn-hover) 50%,var(--surface-2) 100%);background-size:200% 100%;animation:shimmer 1.4s linear infinite}
@keyframes shimmer{to{background-position:-200% 0}}
.error{color:var(--text);background:var(--surface-2)}
.muted,.scan{color:var(--muted)}
@media(max-width:700px){
.group-toggle{flex-wrap:wrap;align-items:flex-start}
.machine-table{min-width:0}.machine-table thead{display:none}
.machine-table tr{display:grid;grid-template-columns:auto 1fr auto;gap:2px 10px;padding:8px}
.machine-table td{display:block;padding:2px 0;border:0}.machine-table td:before{content:none}
.col-actions{width:auto}}
/* Overview tiles state their unit; active-filter chips are real (removable) buttons */
.tile .unit{font-size:13px;color:var(--muted)}
.active-filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:12px 0;min-height:36px}
.chip-button{cursor:pointer;min-height:32px;background:var(--btn-bg);color:var(--btn-text);border:1px solid var(--btn-border)}
.chip-button:hover{background:var(--btn-hover);border-color:var(--text)}
/* Access controls and the read-only alert board reuse the theme tokens. */
.grant-chips{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0}
.grant-chips .chip{white-space:normal}
.grant-chips button{min-height:32px;padding:2px 8px;margin-left:8px}
.permission-matrix th,.permission-matrix td{min-width:100px}
.permission-matrix .matrix-dirty{background:var(--surface-2)}
.matrix-dirty th{border-left:4px solid var(--focus)}
.alert-tiles{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
@media(max-width:700px){.permission-matrix th[scope=row]{display:block}}
.card label{display:flex;flex-direction:column;gap:4px;margin:10px 0;font-size:.9rem}
.permission-matrix th[scope=col]{font-size:.75rem;font-weight:600;word-break:normal;overflow-wrap:normal;white-space:nowrap;min-width:0}
.permission-matrix td{text-align:center;min-width:0}

/* ================= UI pass: shared building blocks, History, Rollout, Access, Alerts ================= */
.skip-link{position:absolute;left:-9999px;top:8px;z-index:20;background:var(--surface);color:var(--text);border:2px solid var(--focus);border-radius:6px;padding:8px 14px}
.skip-link:focus{left:8px}
main:focus{outline:none}
.scan-times{margin:0;display:flex;flex-wrap:wrap;gap:0 6px}
.scan p.error{margin:8px 0 0}
time{white-space:nowrap}
code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;padding:0 5px;overflow-wrap:anywhere}
.badge{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--pill-border);background:var(--pill-bg);color:var(--pill-text);border-radius:999px;padding:1px 10px;font-size:13px;font-weight:650;white-space:nowrap;vertical-align:middle}
.badge-icon{display:inline-flex}
.badge-ok{background:var(--ok-bg);color:var(--ok-fg);border-color:var(--ok-border)}
.badge-bad{background:var(--bad-bg);color:var(--bad-fg);border-color:var(--bad-border)}
.badge-warn{background:var(--warn-bg);color:var(--warn-fg);border-color:var(--warn-border)}
.badge-info{background:var(--info-bg);color:var(--info-fg);border-color:var(--info-border)}
.packages{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;overflow-wrap:anywhere}
.collapsed-list{display:inline}
.collapsed-list .btn{margin-left:6px}
.meta-line{margin:6px 0}
.problems{margin:8px 0;padding-left:20px}
.problems li{margin:2px 0}
a.machine{font-weight:650}
.num{text-align:right;font-variant-numeric:tabular-nums}
.sort-btn{background:transparent;border:0;box-shadow:none;min-height:0;padding:2px 4px;margin:-2px -4px;font:inherit;font-weight:700;color:inherit;text-transform:inherit;letter-spacing:inherit;white-space:nowrap}
.sort-btn:hover{background:var(--btn-hover);border:0}
/* History: a timeline of events, never a table */
.timeline,.incident-list{list-style:none;padding:0;margin:12px 0}
.event,.incident{background:var(--surface);border:1px solid var(--border-ui);border-left:4px solid var(--border-ui);border-radius:8px;padding:14px 16px;margin:10px 0}
.event-resolved{border-left-color:var(--ok-border)}.event-update_regression,.incident.is-open{border-left-color:var(--bad-border)}.event-reopened,.event-reclassified{border-left-color:var(--warn-border)}
.event-title,.incident-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px}
.event-title h4,.incident-head h4{margin:0;font-size:16px;flex:1 1 320px;min-width:0}
.incident-head{margin-bottom:4px}
.event-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin:8px 0 4px}
.event-who{margin:4px 0 0;font-size:14px}
.event-more{margin-top:8px}
.event-detail{margin-top:10px;padding:10px 14px;background:var(--surface-2);border-radius:6px}
.incident[data-wanted="true"]{outline:2px solid var(--focus)}
/* Rollout */
.state-card{margin:12px 0}.state-card.is-halted,.card.is-halted{border-left:4px solid var(--bad-border)}
.state-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px}.state-head h3{margin:0 auto 0 0}
.stage-track{list-style:none;padding:0;margin:16px 0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.stage{border:1px solid var(--border-ui);border-radius:8px;padding:10px 14px;display:flex;flex-direction:column;gap:2px;background:var(--surface-2)}
.stage-state{font-size:13px;font-weight:700}
.stage-current{border-color:var(--info-border);background:var(--info-bg);color:var(--info-fg)}.stage-current .muted{color:var(--info-fg)}
.stage-done{border-color:var(--ok-border)}.stage-halted{border-color:var(--bad-border);background:var(--bad-bg);color:var(--bad-fg)}.stage-halted .muted{color:var(--bad-fg)}
.halt-reason{border-left:4px solid var(--bad-border);background:var(--bad-bg);color:var(--bad-fg);padding:12px 16px;border-radius:0 6px 6px 0;font-size:17px}
.halt-reason a{color:inherit}
.sort-select{display:none}
/* Responsive tables: labelled cards under 700px, horizontal scroll never leaves the table box */
.data-table{min-width:0}.data-table thead th{background:var(--surface-2);color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap}
.data-table td{vertical-align:middle}.data-table .col-machine{font-weight:600;white-space:nowrap}
.data-table tbody tr:nth-child(even){background:var(--surface-2)}
.cond-name{overflow-wrap:anywhere}
/* Access */
.role-card{display:flex;flex-direction:column;gap:6px}.role-card h3{margin:0}
.picker-results{list-style:none;padding:0;margin:6px 0;display:flex;flex-direction:column;gap:4px;max-height:220px;overflow:auto}
.picker-results button{width:100%;text-align:left}
.card select,.card input[type=search],.filters select{max-width:100%}
.unassigned-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;padding:8px 0;border-bottom:1px solid var(--border)}
.btn-row{display:flex;flex-wrap:wrap;gap:6px}
.permission-matrix{min-width:900px}
.permission-matrix thead th{background:var(--surface-2);font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);vertical-align:bottom;white-space:normal;word-break:normal;overflow-wrap:normal;min-width:84px}
.permission-matrix .matrix-groups th{text-align:center;border-bottom:2px solid var(--border-ui);color:var(--text)}
.permission-matrix th[scope=row]{min-width:150px}.row-key{font-weight:700;margin-right:6px}
.permission-matrix td .btn,.permission-matrix td button{margin:2px}
/* Alerts */
.alert-tiles{grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}
.stat{gap:4px}.stat-label{font-weight:650}.stat.is-bad{border-left:4px solid var(--bad-border)}
.board-table{min-width:0}
@media(max-width:700px){
.header-actions{width:100%;justify-content:space-between}
nav{gap:4px 14px}nav a{padding:10px 2px}
.stage-track{grid-template-columns:1fr}
.sort-select{display:flex}
.event-title h4,.incident-head h4{flex-basis:100%}
.data-table{min-width:0}.data-table thead,.permission-matrix thead{display:none}
.data-table tr,.permission-matrix tr{display:block;border:1px solid var(--border-ui);border-radius:8px;margin:10px 0;padding:6px 12px;background:var(--surface)}
.data-table tbody tr:nth-child(even){background:var(--surface)}
.data-table td,.permission-matrix td{display:flex;justify-content:space-between;align-items:center;gap:12px;border:0;padding:6px 0;text-align:right}
.data-table td:before,.permission-matrix td:before{content:attr(data-label);flex:none;font-weight:650;color:var(--muted);text-align:left}
.data-table td.col-machine{white-space:normal;font-size:16px}
.data-table .num{text-align:right}
.permission-matrix{min-width:0}.permission-matrix th[scope=row]{display:block;padding:8px 0;border-bottom:1px solid var(--border)}
.permission-matrix td[data-label="Actions"]{justify-content:flex-start}
.table-wrap{border:0}
.stat-label{overflow-wrap:break-word}
}
.picker label{display:flex;flex-direction:column;gap:4px;margin:10px 0}.picker input{width:100%;max-width:420px}
/* Apps screen: one-line CVE summary, inline gap badges, no column blow-out */
.apps-table td{min-width:0}
.apps-table .col-name{overflow-wrap:anywhere;word-break:break-word;max-width:260px}
.apps-table .gap-hint{color:var(--muted);font-size:13px}
.apps-table .gap-reason{font-size:13px;margin-top:4px}
.cve-cell{display:flex;flex-direction:column;gap:4px;align-items:flex-start;min-width:0}
.cve-counts{display:flex;flex-wrap:nowrap;gap:4px;white-space:nowrap}
.cve-details{margin:0}
.cve-details summary{font-size:13px;white-space:nowrap}
.cve-list{list-style:none;margin:6px 0 0;padding:6px 8px;max-height:220px;overflow:auto;border:1px solid var(--border);border-radius:6px;background:var(--surface-2);font-size:13px}
.cve-list li{white-space:nowrap}
.cve-id{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;white-space:nowrap}
@media(max-width:700px){.apps-table .col-name{max-width:none}.cve-counts{flex-wrap:wrap}}

/* Ownership stays visible on collapsed groups and wraps with the selection tools. */
.ownership{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px;min-width:0}
.ownership .status-pill{white-space:normal;overflow-wrap:anywhere}
.assign-group{margin:0 16px 12px}
.assign-form{display:flex;flex-wrap:wrap;align-items:end;gap:8px;padding:12px;margin-bottom:12px;border:1px solid var(--border);border-radius:6px;background:var(--surface-2)}
.assign-form label{display:flex;flex-direction:column;gap:4px;min-width:0;max-width:100%}
.assign-form input,.assign-form select{max-width:100%;width:100%}
.assignments-card{margin-top:16px}.assignments-card h3{margin-top:0}
.assignment-counts{list-style:none;padding:0;margin:0}.assignment-counts li{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px;padding:8px 0}
@media(max-width:700px){.machine-table tr{grid-template-columns:32px minmax(0,1fr)}.machine-table .col-check{grid-column:1;grid-row:1 / span 4}.machine-table td:not(.col-check){grid-column:2;min-width:0;white-space:normal}.machine-table .col-actions{text-align:left}.assign-form label{flex:1 1 100%}.bulk-bar{position:static}.filters label{min-width:0}.filters select{width:100%}}

.status-pill.muted{color:var(--muted);background:var(--surface-2)}

/* The estate archive is a destination, not a tab: it sits at the end of the tab row, outside
   the nav, and takes its own row on mobile. */
.nav-row{display:flex;align-items:center;gap:8px 16px;flex-wrap:wrap;margin-top:24px;border-bottom:1px solid var(--border)}
.nav-row>nav{margin-top:0;border-bottom:0;flex:1 1 auto}
.nav-row .estate-scan{margin-left:auto;padding:8px 14px;white-space:nowrap;text-decoration:none}
.nav-row .estate-scan:hover{background:var(--primary-bg);color:var(--primary-text)}
@media(max-width:700px){.nav-row .estate-scan{flex-basis:100%;margin-left:0;text-align:center;margin-bottom:8px}}
/* Dedicated IP policy view, sharing the panel's existing cards and mobile table. */
.policy-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.policy-form{margin:16px 0;max-width:680px;display:flex;flex-direction:column;gap:10px}
.policy-form label{display:flex;flex-direction:column;gap:4px}
.policy-form .policy-confirm{flex-direction:row;align-items:center}
.policy-form input:not([type=checkbox]){width:100%;min-width:0}
.policy-table code{overflow-wrap:anywhere;white-space:normal}
/* Spreadsheet-style sortable headers (common.js SortTh): the button fills the header text. */
.th-sort{all:unset;cursor:pointer;font-weight:inherit;white-space:nowrap}
.th-sort:hover{text-decoration:underline}
.th-sort:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.th-sort-arrow{opacity:.5;font-size:.8em}
th[aria-sort="ascending"] .th-sort-arrow,th[aria-sort="descending"] .th-sort-arrow{opacity:1}
