/* tater-app.css — TATER Security app styles, extracted from TATER.html (#772 monolith modularization). Loaded by TATER.html before tater-themes.css; keep that order. */
:root {
  --bg:       #0e1117;
  --surface:  #161b25;
  --raised:   #1e2535;
  --border:   #2a3347;
  --border2:  #374159;
  --text:     #f5f8ff;
  --sub:      #aabdd0;
  /* ADO #1915 — the SEMANTIC STATUS RAMP is canonical in tater-shared.css and mirrored
     here. Owner decision: sync the status ramp only; full palette convergence is a separate
     design project, so the chrome tokens above/below deliberately stay per-app.
     Dark mode used to disagree — a Pass badge was #2dcc71 in Security and #3fb950 in Ops,
     which is the one difference a user can actually perceive, side by side.
     Direction (shared wins) was decided on a functional point rather than taste: this file
     set --warn and --manual to the SAME #f0a500, so the flagship could not visually
     distinguish "needs attention" from "verify by hand". Adopting these values the other
     way would have erased that distinction across five apps.
     Light mode already agreed exactly and is untouched.
     Guarded by tools/check-status-ramp.js. */
  --pass:     #3fb950;  --pass-bg:   rgba(63, 185, 80, .12);
  --fail:     #f85149;  --fail-bg:   rgba(248, 81, 73, .12);
  --warn:     #f0883e;  --warn-bg:   rgba(240, 136, 62, .12);
  /* #1890: alias for --warn. tater-app.css:1805 and TATER.html (plan badge,
     directory-search-unavailable notice) consume var(--warning), which was
     defined nowhere and silently fell back to inherited colour. Must track --warn. */
  --warning:  #f0883e;
  --manual:   #d29922;  --manual-bg: rgba(210, 153, 34, .12);
  --info:     #3b9eff;  --info-bg:   #0d1e35;
  --accent:   #3b9eff;
  --menu-highlight: #3b9eff;
  --risk:     #b060e0;  --risk-bg:   #1e0d2b;
  --predicted-pass: #0d9488;  --predicted-pass-bg: #0a2b29;
  --predicted-fail: #ec4899;  --predicted-fail-bg: #2b0d1a;
  --detail-bg:#0a0d14;
  --danger:   #e84040;  --danger-bg: #2b0d0d;
  --success:  #2dcc71;  --success-bg:#0d2b1c;
  --card:     #161b25;
  --hover:    rgba(255,255,255,.06);
  --bg2:      #121720;
  --mono: 'IBM Plex Mono', monospace;
  --sans: 'IBM Plex Sans', sans-serif;
  /* #1681: tokens the shared primitives below depend on. Values copied verbatim
     from tater-shared.css (:52 --radius, :31 --text-muted, :47-50 priority
     colors) so the ported .pill/.empty rules resolve exactly as they do in
     ops/manage/my/insights. --radius was already referenced by the ported .kpi
     family (:1218-1219) with nothing defining it. */
  --radius: 8px;
  --text-muted: #6e7681;
  --critical: #ef4444;
  --high: #f59e0b;
  --normal: #3b9eff;
  --low: #94a3b8;
  /* Modern design tokens (v2026.04.25b) */
  --radius-sm: 4px;
  --radius-md: 6px;
  --radius-lg: 10px;
  --radius-xl: 14px;
  --radius-pill: 999px;
  --shadow-xs: 0 1px 2px rgba(0,0,0,.18);
  --shadow-sm: 0 2px 4px rgba(0,0,0,.22), 0 1px 2px rgba(0,0,0,.14);
  --shadow-md: 0 4px 12px rgba(0,0,0,.28), 0 2px 4px rgba(0,0,0,.16);
  --shadow-lg: 0 12px 32px rgba(0,0,0,.36), 0 4px 8px rgba(0,0,0,.20);
  --shadow-xl: 0 24px 60px rgba(0,0,0,.45), 0 8px 16px rgba(0,0,0,.24);
  --ease: cubic-bezier(.4, 0, .2, 1);
  --ease-out: cubic-bezier(.16, 1, .3, 1);
  --t-fast: 120ms;
  --t-base: 180ms;
  --t-slow: 280ms;
  --focus-ring: 0 0 0 2px var(--bg), 0 0 0 4px color-mix(in srgb, var(--accent) 70%, transparent);
}
/* Light mode */
[data-theme="light"] {
  --bg:       #f8f9fa;
  --surface:  #ffffff;
  --raised:   #f1f3f5;
  --border:   #e2e8f0;
  --border2:  #cbd5e1;
  --text:     #111827;
  --sub:      #6b7280;
  --detail-bg:#f9fafb;
  --pass:     #16803c;  --pass-bg:   #f0fdf4;
  --fail:     #b91c1c;  --fail-bg:   #fff1f1;
  --warn:     #92600a;  --warn-bg:   #fffbeb;
  --warning:  #92600a;  /* #1890: light-mode counterpart of the --warn alias */
  --manual:   #92600a;  --manual-bg: #fffbeb;
  --info:     #1d4ed8;  --info-bg:   #eff6ff;
  --accent:   #1d4ed8;
  /* #1681: light-mode counterparts, from tater-shared.css:71 / :87-90. */
  --text-muted: #9ca3af;
  --critical: #b91c1c;
  --high:     #b45309;
  --normal:   #1d4ed8;
  --low:      #475569;
  --risk:     #6d28d9;  --risk-bg:   #f5f3ff;
  --predicted-pass: #0d9488;  --predicted-pass-bg: #f0fdfa;
  --predicted-fail: #be185d;  --predicted-fail-bg: #fdf2f8;
  --danger:   #b91c1c;  --danger-bg: #fff1f1;
  --success:  #16803c;  --success-bg:#f0fdf4;
  --card:     #ffffff;
  --hover:    rgba(0,0,0,.04);
  --bg2:      #f1f3f5;
  /* Dark sidebar in light mode */
  --sidebar-bg:     #1e2a3a;
  --sidebar-surface: #263348;
  --sidebar-border:  #334466;
  --sidebar-text:    #c8d0e0;
  --sidebar-sub:     #7a8aa0;
  --sidebar-active:  #3b9eff;
  --sidebar-hover:   #2a3a52;
  --menu-highlight:  #3b9eff;
}
[data-theme="light"] .badge-pass   { border-color: #a8d4b8; }
[data-theme="light"] .badge-fail   { border-color: #e8b0b0; }
[data-theme="light"] .badge-manual { border-color: #e0cc90; }
[data-theme="light"] .badge-override { border-color: #a0c4e8; }
[data-theme="light"] .badge-risk   { border-color: #c8b0e0; }
[data-theme="light"] .badge-pass-partial { border-color: #a8d4b8; }
[data-theme="light"] .badge-predicted-pass { border-color: #7accc8; }
[data-theme="light"] .badge-predicted-fail { border-color: #e8a0c0; }
[data-theme="light"] tr:hover td   { background: rgba(0,0,0,.03); }
[data-theme="light"] .detail-inner { background: var(--detail-bg); }
[data-theme="light"] .modal-backdrop, [data-theme="light"] .modal-overlay { background: rgba(0,0,0,.55); }
[data-theme="light"] .toast { background: var(--surface); box-shadow: 0 2px 12px rgba(0,0,0,.12); }
/* Light mode: dark sidebar + brand */
[data-theme="light"] .sidebar { background: var(--sidebar-bg); border-right-color: var(--sidebar-border); }
[data-theme="light"] .brand { color: var(--sidebar-sub); border-bottom-color: var(--sidebar-border); }
[data-theme="light"] .brand strong { color: var(--sidebar-active); }
[data-theme="light"] .nav-item { color: var(--sidebar-sub); }
[data-theme="light"] .nav-item:hover { background: var(--sidebar-hover); color: var(--sidebar-text); }
[data-theme="light"] .nav-item.active { background: var(--sidebar-hover); color: var(--menu-highlight); border-left-color: var(--menu-highlight); }
[data-theme="light"] .nav-badge { background: var(--sidebar-border); color: var(--sidebar-sub); }
[data-theme="light"] .sidebar-footer { color: var(--sidebar-sub); border-top-color: var(--sidebar-border); }
/* Light mode: topbar contrast */
[data-theme="light"] .topbar { background: #fff; border-bottom: 1px solid var(--border); box-shadow: 0 1px 3px rgba(0,0,0,.06); }
[data-theme="light"] .topbar .btn-ghost { color: #374151; }
[data-theme="light"] .topbar .btn-ghost:hover { background: rgba(0,0,0,.06); color: #111827; }
[data-theme="light"] #theme-toggle { color: #374151 !important; }
[data-theme="light"] .topbar-title { color: #111827; }
[data-theme="light"] #user-avatar { background: var(--accent); color: #fff; }
/* Light mode: nav group headers - handled by nav-rail CSS block below */
[data-theme="light"] .nav-group-header { color: var(--sidebar-sub); }
/* Light mode: filter/input fields */
[data-theme="light"] .input, [data-theme="light"] input[type="text"], [data-theme="light"] input[type="search"],
[data-theme="light"] select, [data-theme="light"] textarea { background: #fff; border-color: var(--border2); color: var(--text); }
[data-theme="light"] .msel-display, [data-theme="light"] .msel-dropdown { background: #fff; border-color: var(--border2); }
[data-theme="light"] .msel-opt:hover { background: #f1f5f9; }
[data-theme="light"] .msel-opt.msel-sel { background: rgba(29,78,216,.06); }
/* Light mode: metric cards */
[data-theme="light"] .metric-card { background: #fff; border-color: var(--border); box-shadow: 0 1px 3px rgba(0,0,0,.06); }
[data-theme="light"] .metric-card::before { background: linear-gradient(135deg, rgba(0,0,0,.015) 0%, transparent 60%); }
/* Light mode: topbar tasks badge visibility */
[data-theme="light"] #topbar-tasks-badge { background: var(--fail); }
/* Light mode: content cards with subtle shadow */
[data-theme="light"] .settings-card { box-shadow: 0 1px 3px rgba(0,0,0,.06); }
[data-theme="light"] .stat-card { box-shadow: 0 1px 3px rgba(0,0,0,.06); }
[data-theme="light"] .trend-card { box-shadow: 0 1px 3px rgba(0,0,0,.06); }
[data-theme="light"] .ctrl-table-wrap { box-shadow: 0 1px 3px rgba(0,0,0,.06); }
/* Light mode: login screen */
[data-theme="light"] .login-screen { background: radial-gradient(ellipse at 30% 20%, rgba(29,78,216,.05) 0%, transparent 50%), radial-gradient(ellipse at 70% 80%, rgba(22,128,60,.04) 0%, transparent 50%), var(--bg); }
[data-theme="light"] .login-card { box-shadow: 0 8px 32px rgba(0,0,0,.1), 0 0 0 1px rgba(43,108,176,.08); }
/* Light mode: tables */
[data-theme="light"] .ctrl-table-wrap { background: #fff; }
[data-theme="light"] .rpt-table th { color: var(--sub); }
[data-theme="light"] tbody tr:nth-child(even) td { background: rgba(0,0,0,.02); }
[data-theme="light"] tr:hover td { background: rgba(0,0,0,.04); }
/* Light mode: override cards, filter bar */
[data-theme="light"] .override-card { box-shadow: 0 1px 3px rgba(0,0,0,.06); border-color: var(--border); }
[data-theme="light"] .filter-bar { background: #fff; border: 1px solid var(--border); box-shadow: 0 1px 3px rgba(0,0,0,.04); }
/* Light mode: stronger dropdown contrast */
[data-theme="light"] .topbar-dropdown { background: #fff; border-color: #e2e8f0; box-shadow: 0 8px 24px rgba(0,0,0,.14); }
[data-theme="light"] .tools-menu-item { color: #111827; }
/* Light mode: table headers with stronger bg */
[data-theme="light"] table th { background: #f1f5f9 !important; color: #374151 !important; border-bottom-color: #cbd5e1; }
[data-theme="light"] .data-table th { background: #f1f5f9; color: #374151; }
/* Light mode: section headers */
[data-theme="light"] .section-hdr h2, [data-theme="light"] h3 { color: #111827; }
/* Light mode: page titles and labels stronger */
[data-theme="light"] .detail-label { color: #3a4a60; }
[data-theme="light"] .badge { border-width: 1px; }
/* Light mode: theme toggle button - always visible */
[data-theme="light"] #theme-toggle { background: #f0f4fa; border-color: #9aa5b5 !important; color: #1e2a3a !important; }
[data-theme="light"] #theme-toggle:hover { background: #e0e8f4; }
/* Light mode: raised surfaces need stronger shadow for depth */
[data-theme="light"] .modal-inner, [data-theme="light"] .modal-content { box-shadow: 0 8px 32px rgba(0,0,0,.14); border: 1px solid var(--border2); }
/* Light mode: empty state text */
[data-theme="light"] .empty-state h3 { color: #2c3a4a; }
[data-theme="light"] .empty-state p { color: #5e6e82; }
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { height: 100%; background: var(--bg); }
/* Subtle dark-grey → black gradient on body for default theme depth.
   Theme overrides (data-user-theme) set their own backgrounds and win. */
body { min-height: 100%; background: linear-gradient(180deg, #1a1f28 0%, #0f1115 50%, #07090d 100%); background-attachment: fixed; color: var(--text); font-family: var(--sans); font-size: 16.8px; }
/* Light mode needs its own canvas — the dark gradient above has no var() to
   invert. No !important: tater-themes.css data-user-theme skins load later
   and must keep winning via cascade order. */
[data-theme="light"] body { background: linear-gradient(180deg, #ffffff 0%, #f8f9fa 50%, #eef1f4 100%); background-attachment: fixed; }

/* Layout */
.shell { display: flex; height: 100vh; overflow: hidden; }
.sidebar { width: 220px; min-width: 220px; background: var(--surface); border-right: 1px solid var(--border); display: flex; flex-direction: column; }
.main { flex: 1; display: flex; flex-direction: column; overflow: visible; }
.topbar { height: 52px; background: var(--surface); border-bottom: 1px solid var(--border); display: flex; align-items: center; padding: 0 20px; gap: 8px; flex-shrink: 0; overflow: visible; position: relative; z-index: 100; }
.content { flex: 1; overflow-y: auto; padding: 24px; min-height: 0; }

/* Sidebar */
.brand { padding: 14px 16px 12px; border-bottom: 1px solid var(--border); font-family: var(--mono); font-size: .7rem; letter-spacing: .12em; text-transform: uppercase; color: var(--sub); }
.nav { padding: 8px 0; flex: 1; overflow-y: auto; }
.nav-item { display: flex; align-items: center; padding: 7px 16px; cursor: pointer; font-size: .8rem; font-weight: 400; color: var(--sub); transition: color .12s, background .12s; border-left: 2px solid transparent; user-select: none; }
.nav-item:hover { background: var(--raised); color: var(--text); }
.nav-item.active { background: var(--raised); color: var(--menu-highlight); border-left-color: var(--menu-highlight); font-weight: 500; }
.ni { width:14px;height:14px;flex-shrink:0;margin-right:7px;opacity:.65; }
.nav-item:hover .ni, .nav-item.active .ni { opacity:1; }
.nav-icon { display: none; }
.nav-badge { margin-left: auto; font-family: var(--mono); font-size: .68rem; background: var(--border2); color: var(--sub); padding: 1px 6px; border-radius: 10px; }
.sidebar-footer { padding: 12px 16px; border-top: 1px solid var(--border); font-family: var(--mono); font-size: .65rem; color: var(--sub); line-height: 1.7; }
.sidebar-footer span { display: block; }

/* ── Nav Rail ─────────────────────────────────────────────────────────────── */
.sidebar { flex-direction: row !important; width: 244px; min-width: 244px; }
/* ADO #1911 — the rail hid its own overflow. It had `scrollbar-width: none` plus a
   display:none webkit scrollbar, so when the content did not fit there was NO indication
   that anything sat below the fold — and the bottom-pinned Settings and Administration
   icons were the ones cut off, i.e. unreachable rather than merely hidden.
   MEASURED: the rail carries 22 entries (13 modules plus Favorites, Dashboard, AI Analyst,
   My Tasks, Audit, MSP, Community, Settings, Administration). At the old 36px pitch that is
   ~841px of content, against roughly 548px of usable height on a 1366x768 laptop once
   browser chrome and the topbar are subtracted.
   BE HONEST ABOUT WHAT THIS FIXES: 22 entries cannot all fit at that height at any icon
   size a person can still click — 548/22 is 24px, smaller than the icon itself. So this
   does two things and claims only those: it tightens the pitch (36->32px, gap 1->0) to cut
   the overflow by roughly a third, and it makes whatever remains VISIBLE so the user knows
   to scroll instead of concluding Settings does not exist. Adding a 14th rail module would
   undo the gain — which is one reason #1913 was decided as rename-in-place. */
.nav-rail { width: 52px; min-width: 52px; display: flex; flex-direction: column; align-items: center; background: var(--bg); border-right: 1px solid var(--border); padding: 6px 0 8px; gap: 0; flex-shrink: 0; overflow-y: auto; overflow-x: visible; scrollbar-width: thin; scrollbar-color: var(--border2) transparent; }
.nav-rail::-webkit-scrollbar { width: 4px; }
.nav-rail::-webkit-scrollbar-track { background: transparent; }
.nav-rail::-webkit-scrollbar-thumb { background: var(--border2); border-radius: 2px; }
.nav-rail:hover::-webkit-scrollbar-thumb { background: var(--sub); }
.nav-rail-brand { width: 36px; height: 36px; display: flex; align-items: center; justify-content: center; margin-bottom: 2px; flex-shrink: 0; }
.nav-rail-logo { height: 28px; width: auto; max-width: 28px; object-fit: contain; border-radius: 6px; }
.nav-rail-divider { width: 28px; height: 1px; background: var(--border); margin: 3px 0; flex-shrink: 0; }
.nav-rail-spacer { flex: 1; min-height: 8px; }
/* #1911 — 36 -> 32px. 22 entries x 4px saved, plus the 21 removed 1px gaps, is ~109px
   less overflow. The icon itself stays 18px so the hit target shrinks but the glyph does
   not get harder to read. */
.nav-rail-item { width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; border-radius: 8px; cursor: pointer; color: var(--sub); transition: background .12s, color .12s; flex-shrink: 0; position: relative; }
.nav-rail-item svg { width: 18px; height: 18px; }
.nav-rail-item:hover { background: var(--raised); color: var(--text); }
.nav-rail-item.active { background: color-mix(in srgb, var(--accent) 15%, transparent); color: var(--accent); }
/* Rail tooltips are JS-driven (fixed-pos div) - ::after can't escape overflow:auto scroll container */
.nav-rail-tip { position: fixed; background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 5px 10px; font-size: .72rem; white-space: nowrap; color: var(--text); pointer-events: none; opacity: 0; transition: opacity .12s; z-index: 9000; box-shadow: 0 4px 12px rgba(0,0,0,.28); transform: translateY(-50%); }
.rail-badge { position: absolute; top: 1px; right: 1px; min-width: 14px; height: 14px; border-radius: 7px; background: var(--fail); color: #fff; font-size: .58rem; font-family: var(--mono); display: flex; align-items: center; justify-content: center; padding: 0 3px; line-height: 1; pointer-events: none; }
/* ── Nav Panel ─────────────────────────────────────────────────────────────── */
.nav-panel { flex: 1; display: flex; flex-direction: column; overflow: hidden; min-width: 0; }
.nav-panel .nav { flex: 1; overflow-y: auto; }
.nav-panel .nav-group-items .nav-item .ni { display: none !important; }
.nav-panel .nav-group-items .nav-item { padding-left: 22px; }
/* ── Group headers: icon + text + chevron ─────────────────────────────────── */
.ng-icon { width: 15px; height: 15px; flex-shrink: 0; opacity: .7; }
.nav-group-chevron { width: 11px; height: 11px; margin-left: auto; flex-shrink: 0; opacity: .4; transition: transform .2s ease, opacity .15s; }
.nav-group.open .nav-group-chevron, .nav-group.active .nav-group-chevron { transform: rotate(90deg); opacity: .8; }
.nav-group.open .nav-group-header, .nav-group.active .nav-group-header { color: var(--text); }
.nav-group:hover .ng-icon, .nav-group.open .ng-icon, .nav-group.active .ng-icon { opacity: 1; }
/* Light mode rail */
[data-theme="light"] .nav-rail { background: color-mix(in srgb, var(--sidebar-bg) 95%, black); border-right-color: var(--sidebar-border); }
[data-theme="light"] .nav-rail-item { color: var(--sidebar-sub); }
[data-theme="light"] .nav-rail-item:hover { background: var(--sidebar-hover); color: var(--sidebar-text); }
[data-theme="light"] .nav-rail-item.active { background: color-mix(in srgb, var(--sidebar-active) 20%, transparent); color: var(--sidebar-active); }
[data-theme="light"] .nav-rail-item::after { background: var(--sidebar-bg); border-color: var(--sidebar-border); color: var(--sidebar-text); }
[data-theme="light"] .nav-panel { background: var(--sidebar-bg); }
[data-theme="light"] .nav-group-header { color: var(--sidebar-sub); }
[data-theme="light"] .nav-group.open .nav-group-header, [data-theme="light"] .nav-group.active .nav-group-header { color: var(--sidebar-text); }
/* Mobile: show full sidebar */
@media (max-width: 768px) { .sidebar { width: 280px !important; min-width: 280px !important; } }

/* ═════════════════════════════════════════════════════════════════════
   v3 SIDEBAR SCHEMA - 4 stacked rows + 2-column body. Replaces v2 grid.
   ═════════════════════════════════════════════════════════════════════ */
.shell[data-nav-v3] { display: flex !important; flex-direction: row !important; height: 100vh; overflow: hidden; }
.shell[data-nav-v3] .sidebar {
  display: flex !important; flex-direction: column !important;
  width: 264px !important; min-width: 264px !important;
  background: var(--surface);
  border-right: 1px solid var(--border);
  overflow: hidden; flex-shrink: 0;
}
.shell[data-nav-v3] .sb-row { border-bottom: 1px solid var(--border); padding: 8px 12px; flex-shrink: 0; }
.shell[data-nav-v3] .sb-brand-row { display: flex; align-items: center; gap: 10px; padding: 10px 12px; }
.shell[data-nav-v3] .sb-brand-row img { width: 30px; height: 30px; object-fit: contain; flex-shrink: 0; cursor: pointer; border-radius: 4px; }
.shell[data-nav-v3] .sb-brand-name { font-family: var(--mono); font-weight: 700; font-size: .82rem; letter-spacing: .1em; text-transform: uppercase; line-height: 1.05; color: var(--text); }
.shell[data-nav-v3] .sb-brand-name small { display: block; font-size: .55rem; font-weight: 500; color: var(--sub); letter-spacing: .12em; text-transform: uppercase; margin-top: 2px; }
.shell[data-nav-v3] .sb-org-row { display: flex; align-items: center; gap: 8px; min-height: 38px; }
.shell[data-nav-v3] .sb-org-logo { width: 22px; height: 22px; border-radius: 4px; object-fit: contain; flex-shrink: 0; background: var(--raised); padding: 2px; }
.shell[data-nav-v3] .sb-org-name { font-size: .76rem; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text); flex: 1; min-width: 0; }
.shell[data-nav-v3] .sb-apps-row { display: flex; gap: 4px; padding: 6px 12px; }
.shell[data-nav-v3] .sb-app-btn {
  flex: 1; height: 30px;
  display: flex; align-items: center; justify-content: center;
  border-radius: 5px; cursor: pointer; padding: 0;
  background: var(--raised); color: var(--sub); border: 1px solid var(--border);
  transition: color .15s, border-color .15s, background .15s;
  text-decoration: none;  /* app-switcher entries are <a> anchors (current-tab default + middle/right-click) */
}
.shell[data-nav-v3] .sb-app-btn svg { width: 15px; height: 15px; }
.shell[data-nav-v3] .sb-app-btn:hover { color: var(--text); border-color: var(--accent); background: var(--surface); }
.shell[data-nav-v3] .sb-app-btn.active {
  background: color-mix(in srgb, var(--accent) 18%, transparent);
  color: var(--accent); border-color: var(--accent); cursor: default;
  box-shadow: inset 0 0 0 1px var(--accent);
}
.shell[data-nav-v3] .sb-search-row { padding: 6px 12px 8px; }
.shell[data-nav-v3] .sb-search {
  display: flex; align-items: center; gap: 6px;
  padding: 5px 10px; background: var(--raised);
  border: 1px solid var(--border); border-radius: 5px;
}
.shell[data-nav-v3] .sb-search:focus-within { border-color: var(--accent); }
.shell[data-nav-v3] .sb-search svg { width: 13px; height: 13px; color: var(--sub); flex-shrink: 0; }
.shell[data-nav-v3] .sb-search input { flex: 1; background: transparent; border: none; color: var(--text); font-size: .76rem; outline: none; font-family: inherit; min-width: 0; }
.shell[data-nav-v3] .sb-body { flex: 1; display: flex; overflow: hidden; min-height: 0; }
.shell[data-nav-v3] .nav-rail {
  flex-direction: column !important;
  flex-shrink: 0;
}
.shell[data-nav-v3] .nav-rail-item.fav { color: var(--manual, #f0a500); }
.shell[data-nav-v3] .nav-panel { flex: 1; overflow-y: auto; min-width: 0; }
/* Module pane shows only the active group. Group headers are hidden - the rail
   icon serves as the module identity. Direct items (Overview, My Dashboard,
   Calendar) above the groups always remain visible. */
.shell[data-nav-v3] .nav-panel .nav-group-header { display: none; }
.shell[data-nav-v3] .nav-panel .nav-group:not(.open):not(.active) > .nav-group-items { display: none; }
.shell[data-nav-v3] .nav-panel .nav-group.open > .nav-group-items,
.shell[data-nav-v3] .nav-panel .nav-group.active > .nav-group-items { display: block; }
.shell[data-nav-v3] .nav-panel .nav-group-items .nav-item { padding-left: 14px; }
.shell[data-nav-v3] .nav-panel .nav-group-items .nav-item .ni { display: inline-block !important; }
.shell[data-nav-v3] .main { flex: 1; display: flex; flex-direction: column; overflow: hidden; min-width: 0; }

/* Mobile: slide-in sidebar */
.shell[data-nav-v3] .sb-mobile-backdrop { display: none; position: fixed; inset: 0; background: rgba(0,0,0,.5); z-index: 90; }
@media (max-width: 768px) {
  .shell[data-nav-v3] .sidebar {
    position: fixed; top: 0; left: 0; bottom: 0;
    width: 282px !important; min-width: 282px !important;
    transform: translateX(-100%);
    transition: transform .25s ease;
    z-index: 100;
    box-shadow: 4px 0 24px rgba(0,0,0,.3);
  }
  .shell[data-nav-v3] .sidebar.open { transform: translateX(0); }
  .shell[data-nav-v3] .sb-mobile-backdrop.open { display: block; }
}

/* ═════════════════════════════════════════════════════════════════════
   V2 NAV: Topbar spans both columns. Rail + module-scoped panel below.
   Only the active module's items show in the panel (no group headers).
   ═════════════════════════════════════════════════════════════════════ */
.shell[data-nav-v2] {
  display: grid;
  grid-template-columns: 52px 192px 1fr;
  grid-template-rows: 52px 1fr;
  grid-template-areas:
    "topbar topbar topbar"
    "rail   panel  main";
  height: 100vh;
  overflow: hidden;
}
/* Sidebar wrapper becomes transparent - rail and panel are direct grid children */
.shell[data-nav-v2] .sidebar { display: contents; }
.shell[data-nav-v2] .nav-rail { grid-area: rail; width: 52px; min-width: 52px; border-right: 1px solid var(--border); }
.shell[data-nav-v2] .nav-panel { grid-area: panel; border-right: 1px solid var(--border); background: var(--surface); }
.shell[data-nav-v2] .topbar { grid-area: topbar; border-bottom: 1px solid var(--border); padding: 0 16px 0 12px; }
.shell[data-nav-v2] .main { grid-area: main; overflow: hidden; display: flex; flex-direction: column; }
/* In v2, the app-switcher + brand + search live in the topbar (not in nav-panel). */
.shell[data-nav-v2] .nav-panel .app-switcher,
.shell[data-nav-v2] .nav-panel .brand,
.shell[data-nav-v2] .nav-panel #sidebar-search-wrap {
  display: none !important;
}
/* Module pane shows only the active group. Group headers are hidden - the rail
   icon serves as the module identity. Direct items (Overview, My Dashboard,
   Calendar) above the groups always remain visible. */
.shell[data-nav-v2] .nav-panel .nav-group-header { display: none; }
.shell[data-nav-v2] .nav-panel .nav-group:not(.open):not(.active) > .nav-group-items { display: none; }
.shell[data-nav-v2] .nav-panel .nav-group.open > .nav-group-items,
.shell[data-nav-v2] .nav-panel .nav-group.active > .nav-group-items { display: block; }
/* Slim padding adjustments inside the panel since the group container vanishes */
.shell[data-nav-v2] .nav-panel .nav-group-items .nav-item { padding-left: 14px; }
.shell[data-nav-v2] .nav-panel .nav-group-items .nav-item .ni { display: inline-block !important; }
/* Module name banner at top of panel (rendered by JS into #v2-module-banner) */
.v2-module-banner {
  padding: 14px 14px 10px;
  font-family: var(--mono);
  font-size: .7rem;
  font-weight: 600;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--accent);
  border-bottom: 1px solid var(--border);
  display: flex;
  align-items: center;
  gap: 8px;
}
.v2-module-banner svg { width: 14px; height: 14px; flex-shrink: 0; }
/* Topbar v2 additions: brand block + app-switcher + search field */
.shell[data-nav-v2] .topbar-brand {
  display: flex; align-items: center; gap: 10px;
  padding-right: 14px; margin-right: 10px;
  border-right: 1px solid var(--border);
  height: 100%;
  flex-shrink: 0;
}
.shell[data-nav-v2] .topbar-brand img { width: 28px; height: 28px; flex-shrink: 0; cursor: pointer; }
.shell[data-nav-v2] .topbar-brand-text {
  font-family: var(--mono); font-weight: 700; font-size: .82rem;
  letter-spacing: .12em; text-transform: uppercase; color: var(--text);
  line-height: 1.05;
}
.shell[data-nav-v2] .topbar-brand-text small {
  display: block; font-size: .55rem; font-weight: 500;
  color: var(--sub); letter-spacing: .12em; text-transform: uppercase;
  margin-top: 2px;
}
.shell[data-nav-v2] .topbar-search-v2 {
  flex: 1;
  max-width: 460px;
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 0 12px;
  height: 32px;
  background: var(--raised);
  border: 1px solid var(--border);
  border-radius: 8px;
  flex-shrink: 1;
  min-width: 100px;
}
.shell[data-nav-v2] .topbar-search-v2:focus-within { border-color: var(--accent); }
.shell[data-nav-v2] .topbar-search-v2 input {
  flex: 1; background: transparent; border: none; color: var(--text);
  font-size: .82rem; outline: none; font-family: inherit;
}
.shell[data-nav-v2] .topbar-search-v2 svg { width: 14px; height: 14px; color: var(--sub); flex-shrink: 0; }
/* App-switcher in topbar - re-style from the panel version */
.shell[data-nav-v2] .topbar .app-switcher {
  display: flex; gap: 4px; flex-shrink: 0; align-items: center;
  padding: 0; border: none; margin-right: 10px;
}
.shell[data-nav-v2] .topbar .app-switcher .as-btn {
  width: 32px; height: 32px; padding: 0;
  display: flex; align-items: center; justify-content: center;
  border-radius: 6px; cursor: pointer; flex-shrink: 0;
  background: var(--raised); color: var(--sub); border: 1px solid var(--border);
  transition: color .15s, border-color .15s, background .15s;
}
.shell[data-nav-v2] .topbar .app-switcher .as-btn svg { width: 16px; height: 16px; }
.shell[data-nav-v2] .topbar .app-switcher .as-btn:hover { color: var(--text); border-color: var(--accent); background: var(--surface); }
.shell[data-nav-v2] .topbar .app-switcher .as-btn.active {
  background: color-mix(in srgb, var(--accent) 18%, transparent);
  color: var(--accent); border-color: var(--accent); cursor: default;
  box-shadow: inset 0 0 0 1px var(--accent);
}
/* Hide legacy hamburger + mobile-nav overlay when v2 (rail handles mobile) */
@media (min-width: 769px) {
  .shell[data-nav-v2] .hamburger { display: none; }
}
@media (max-width: 768px) {
  .shell[data-nav-v2] {
    grid-template-columns: 52px 0 1fr;
    grid-template-rows: 52px 1fr;
  }
  .shell[data-nav-v2] .nav-panel {
    position: fixed; top: 52px; left: 52px; bottom: 0; width: 240px;
    z-index: 50; transform: translateX(-110%); transition: transform .25s ease;
  }
  .shell[data-nav-v2] .nav-panel.open { transform: translateX(0); box-shadow: 4px 0 16px rgba(0,0,0,.25); }
  .shell[data-nav-v2] .topbar-brand { padding-right: 8px; margin-right: 6px; }
  .shell[data-nav-v2] .topbar-brand small { display: none; }
  .shell[data-nav-v2] .topbar-search-v2 { max-width: 180px; }
}

/* v3 Phase 4: collapse the legacy verbose dashboard widgets behind a toggle. */
.dash-collapsed-v3 { display: none !important; }
/* Collapsible module-grouped sections inside the detailed view. */
.dash-section { margin-bottom: 12px; border: 1px solid var(--border); border-radius: 6px; background: var(--surface); overflow: hidden; }
.dash-section > summary { cursor: pointer; list-style: none; padding: 10px 14px; display: flex; align-items: center; gap: 10px; user-select: none; transition: background .15s; }
.dash-section > summary::-webkit-details-marker { display: none; }
.dash-section > summary::before { content: '▸'; font-size: .6rem; color: var(--sub); transition: transform .15s; display: inline-block; flex-shrink: 0; }
.dash-section[open] > summary::before { transform: rotate(90deg); }
.dash-section > summary:hover { background: var(--raised); }
.dash-section[open] > summary { background: var(--raised); border-bottom: 1px solid var(--border); }
.dash-section-title { font-family: var(--mono); font-size: .72rem; letter-spacing: .1em; text-transform: uppercase; font-weight: 600; color: var(--text); }
.dash-section-meta { margin-left: auto; font-family: var(--mono); font-size: .62rem; color: var(--sub); }
.dash-section-body { padding: 14px; }

/* ═════ Module dashboards ═════ */
.mod-dash { padding: 0; max-width: 1400px; }
.mod-dash-hdr { margin-bottom: 18px; padding-bottom: 12px; border-bottom: 1px solid var(--border); }
.mod-dash-hdr h1 { font-size: 1.5rem; font-weight: 700; margin: 0 0 4px; font-family: var(--mono); letter-spacing: -.01em; display:flex; align-items:center; gap:10px; }
.mod-dash-hdr h1 svg { width: 22px; height: 22px; color: var(--accent); }
.mod-dash-hdr p { margin: 0; color: var(--sub); font-size: .88rem; line-height: 1.5; max-width: 760px; }
.mod-dash-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 10px; margin-bottom: 18px; }
.mod-dash-kpi { background: var(--surface); border: 1px solid var(--border); border-radius: 10px; padding: 12px 14px; cursor: pointer; transition: border-color .15s, transform .15s; }
.mod-dash-kpi:hover { border-color: var(--accent); transform: translateY(-1px); }
.mod-dash-kpi-label { font-size: .62rem; text-transform: uppercase; letter-spacing: .06em; color: var(--sub); font-weight: 600; }
.mod-dash-kpi-value { font-size: 1.45rem; font-weight: 700; margin-top: 4px; color: var(--text); }
.mod-dash-kpi.fail .mod-dash-kpi-value { color: var(--fail); }
.mod-dash-kpi.pass .mod-dash-kpi-value { color: var(--pass); }
.mod-dash-kpi.warn .mod-dash-kpi-value { color: var(--manual); }
.mod-dash-section-title { font-family: var(--mono); font-size: .66rem; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: var(--sub); margin: 0 0 10px; }
/* #2432 - CONDENSED module index. The grid was 240px cards with a full description
   each, so a 20-item module filled the viewport and nothing else could sit on the
   page. It is now a denser menu: narrower columns, tighter padding, and the
   description clamped to one line. The rows still navigate, so nothing is lost -
   what is gained is vertical room on the module dashboard for per-module charts. */
.mod-dash-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 8px; }
.mod-dash-card { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 9px 11px; cursor: pointer; transition: border-color .15s, box-shadow .15s; display: flex; flex-direction: column; gap: 2px; }
.mod-dash-card:hover { border-color: var(--accent); box-shadow: 0 2px 8px rgba(0,0,0,.14); }
.mod-dash-card-icon { width: 26px; height: 26px; color: var(--accent); margin-bottom: 2px; }
.mod-dash-card-title { font-size: .92rem; font-weight: 600; color: var(--text); }
/* #2432 — wrapper for the per-section content indicator that tater-module-items.js
   stamps into each card title. Empty until then, so it must not reserve space or
   disturb the title's baseline when a section has no registered counter. */
.mod-dash-card-ind { display: inline; margin-left: 0; font-weight: 400; }
.mod-dash-card-desc { color: var(--sub); font-size: .72rem; line-height: 1.35; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mod-dash-card-meta { margin-top: 4px; font-family: var(--mono); font-size: .62rem; color: var(--accent); letter-spacing: .04em; text-transform: uppercase; }
.mod-dash-cols { display: grid; grid-template-columns: 1.4fr 1fr; gap: 14px; margin-top: 18px; }
@media (max-width: 900px) { .mod-dash-cols { grid-template-columns: 1fr; } }
.mod-dash-panel { background: var(--surface); border: 1px solid var(--border); border-radius: 10px; padding: 14px 16px; }
.mod-dash-panel h3 { margin: 0 0 10px; font-size: .92rem; font-weight: 600; display: flex; align-items: center; gap: 8px; }
.mod-dash-recent { list-style: none; padding: 0; margin: 0; }
.mod-dash-recent li { padding: 8px 0; border-bottom: 1px solid var(--border); display: flex; align-items: center; gap: 10px; cursor: pointer; transition: color .15s; }
.mod-dash-recent li:last-child { border-bottom: none; }
.mod-dash-recent li:hover { color: var(--accent); }
.mod-dash-recent .rt { flex: 1; font-size: .82rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mod-dash-recent .rs { font-size: .68rem; color: var(--sub); }
.mod-dash-empty { padding: 20px; text-align: center; color: var(--sub); font-size: .82rem; }

/* Pagination */
.pagination-bar { display:flex; align-items:center; justify-content:center; gap:8px; padding:12px 0; font-family:var(--mono); font-size:.72rem; color:var(--sub); }
.pagination-bar button { padding:4px 10px; border-radius:4px; }
.pagination-bar .pg-current { color:var(--info); font-weight:600; }

/* Bulk action bar */
.bulk-action-bar { display:flex; align-items:center; gap:12px; padding:8px 16px; background:var(--info-bg); border:1px solid var(--info); border-radius:6px; margin-bottom:8px; font-size:.78rem; }
.bulk-action-bar .bulk-count { font-weight:600; color:var(--info); }
.bulk-action-bar .btn { font-size:.72rem; padding:4px 12px; }
/* Archived row styling */
tr.archived-row td { opacity:.5; }
tr.archived-row td:first-child { opacity:1; }
.badge-archived { font-size:.6rem; background:var(--raised); color:var(--sub); border:1px solid var(--border); padding:1px 6px; border-radius:3px; margin-left:6px; }

/* MSP Onboarding Wizard Steps */
.msp-step { flex:1; text-align:center; padding:8px 4px; font-size:.72rem; color:var(--sub); background:var(--raised); border-radius:4px; font-weight:500; }
.msp-step.active { background:var(--info-bg); color:var(--info); border:1px solid var(--info); }
.msp-step.done { background:var(--pass-bg); color:var(--pass); }
.msp-step span { display:inline-block; width:18px; height:18px; line-height:18px; border-radius:50%; background:var(--border); color:var(--text); font-size:.65rem; font-weight:700; text-align:center; margin-right:4px; }
.msp-step.active span { background:var(--info); color:#fff; }
.msp-step.done span { background:var(--pass); color:#fff; }
/* Integration cards */
.intg-card { background:var(--surface); border:1px solid var(--border); border-radius:3px; padding:16px; cursor:pointer; transition:border-color .2s; }
.intg-card:hover { border-color:var(--info); }
.intg-card-icon { font-size:1.6rem; width:40px; height:40px; display:flex; align-items:center; justify-content:center; background:var(--raised); border-radius:4px; }
.intg-card-status { font-size:.68rem; font-weight:600; padding:2px 8px; border-radius:10px; }
.intg-card-status.connected { background:var(--pass-bg); color:var(--pass); border:1px solid var(--pass); }
.intg-card-status.available { background:var(--raised); color:var(--sub); border:1px solid var(--border); }
/* Azure resource health badges */
.azr-healthy { color:var(--pass); }
.azr-unhealthy { color:var(--fail); }
/* SuperAdmin-only elements */
body:not(.is-super-admin) .sa-only { display: none !important; }
.badge-custom { background:var(--info); color:#fff; font-size:.58rem; padding:1px 6px; border-radius:var(--radius-sm); text-transform:uppercase; letter-spacing:.05em; margin-left:6px; }

/* Topbar */
.topbar-logo { height: 28px; width: auto; object-fit: contain; display: none; }
.topbar-title { font-family: var(--mono); font-size: .72rem; color: var(--sub); font-weight: 500; letter-spacing: .04em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; flex: 1; flex-shrink: 2; min-width: 0; }
.topbar-meta  { font-family: var(--mono); font-size: .68rem; color: var(--sub); margin-left: 4px; }
.topbar-actions { margin-left: auto; display: flex; gap: 8px; align-items: center; overflow: visible; position: relative; }
/* Topbar hamburger overflow (injected by tater-themes.js) - hidden on desktop, shown ≤720px */
.topbar-hamburger-btn { display: none; background: transparent; border: 1px solid var(--border); color: var(--sub); width: 32px; height: 32px; border-radius: 6px; cursor: pointer; align-items: center; justify-content: center; flex-shrink: 0; transition: color .15s ease, border-color .15s ease; }
.topbar-hamburger-btn:hover { color: var(--accent); border-color: var(--accent); }
.topbar-hamburger-btn svg { width: 16px; height: 16px; }
.topbar-overflow-popover { display: none; position: absolute; top: calc(100% + 8px); right: 0; background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 8px; box-shadow: 0 8px 24px rgba(0,0,0,.4); z-index: 200; flex-direction: column; gap: 6px; min-width: 180px; }
.topbar-actions.show-overflow .topbar-overflow-popover { display: flex; }
.topbar-overflow-popover .topbar-icon-btn, .topbar-overflow-popover .theme-toggle-btn, .topbar-overflow-popover .tater-theme-picker-btn { width: 100% !important; height: 36px !important; justify-content: flex-start !important; padding: 0 12px !important; gap: 10px; }
.topbar-overflow-popover .topbar-icon-btn::after, .topbar-overflow-popover .theme-toggle-btn::after, .topbar-overflow-popover .tater-theme-picker-btn::after { content: attr(title); font-size: .82rem; color: var(--text); white-space: nowrap; }

/* Buttons */
.btn { font-family: var(--sans); font-size: .75rem; font-weight: 500; padding: .3rem .8rem; border-radius: var(--radius-md); cursor: pointer; transition: background var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease), color var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease); border: 1px solid; display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
.btn-ghost   { background: transparent; border-color: var(--border2); color: var(--sub); }
.btn-ghost:hover   { border-color: var(--info); color: var(--info); background: var(--info-bg); }
.btn-primary { background: var(--info-bg); border-color: var(--info); color: var(--info); }
.btn-primary:hover { background: var(--info); color: #fff; }
.btn-danger  { background: var(--fail-bg); border-color: var(--fail); color: var(--fail); }
.btn-danger:hover  { background: var(--fail); color: #fff; }

/* Badges */
.badge { font-family: var(--mono); font-size: .68rem; font-weight: 600; letter-spacing: .06em; padding: .15rem .45rem; border-radius: var(--radius-sm); text-transform: uppercase; white-space: nowrap; display: inline-flex; align-items: center; gap: 4px; }
.badge-pass     { background: var(--pass-bg);   color: var(--pass);   border: 1px solid #1a5c35; }
.badge-fail     { background: var(--fail-bg);   color: var(--fail);   border: 1px solid #5c1a1a; }
.badge-manual   { background: var(--manual-bg); color: var(--manual); border: 1px solid #5c3a00; }
.badge-override { background: var(--info-bg);   color: var(--info);   border: 1px solid #1a3d5c; }
.badge-risk     { background: var(--risk-bg);   color: var(--risk);   border: 1px solid #3d1a5c; }
.badge-pass-partial { background: color-mix(in srgb, var(--pass) 20%, var(--manual-bg)); color: var(--pass); border: 1px solid #2a5c35; }
.badge-skip     { background: var(--raised);    color: var(--sub);    border: 1px solid var(--border2); }
.badge-predicted-pass { background: var(--predicted-pass-bg); color: var(--predicted-pass); border: 1px solid #0a4a44; }
.badge-predicted-fail { background: var(--predicted-fail-bg); color: var(--predicted-fail); border: 1px solid #5c0d30; }
/* #1325: licensing-aware Not Applicable — out-of-scope, dashed neutral badge. */
.badge-not-applicable { background: var(--raised); color: var(--sub); border: 1px dashed var(--border2); }

/* Drift Alerts (#98) */
.drift-alert-banner { background:var(--fail-bg); border:1px solid var(--fail); border-radius:8px; padding:10px 16px; margin-bottom:14px; }
.drift-alert-banner summary { cursor:pointer; font-weight:600; font-size:.78rem; color:var(--fail); }
.drift-alert-row { display:flex; gap:12px; align-items:center; padding:4px 0; font-size:.74rem; border-bottom:1px solid rgba(232,64,64,.15); }
.drift-alert-row:last-child { border-bottom:none; }
.drift-badge-count { background:var(--fail); color:#fff; font-size:.6rem; font-weight:700; padding:1px 6px; border-radius:10px; margin-left:4px; }

/* Risk Score (#103) */
.risk-score-badge { display:inline-block; font-family:var(--mono); font-size:.68rem; font-weight:700; padding:.1rem .4rem; border-radius:var(--radius-sm); min-width:28px; text-align:center; }
.risk-score-green { background:rgba(45,204,113,.15); color:var(--pass); border:1px solid var(--pass); }
.risk-score-yellow { background:rgba(240,165,0,.15); color:var(--manual); border:1px solid var(--manual); }
.risk-score-red { background:rgba(232,64,64,.15); color:var(--fail); border:1px solid var(--fail); }

/* SLA Tracking (#102) */
.sla-badge { font-family:var(--mono); font-size:.6rem; font-weight:600; padding:1px 6px; border-radius:var(--radius-sm); white-space:nowrap; }
.sla-within { background:var(--pass-bg); color:var(--pass); border:1px solid #1a5c35; }
.sla-warning { background:var(--warn-bg); color:var(--warn); border:1px solid #5c3a00; }
.sla-breach { background:var(--fail-bg); color:var(--fail); border:1px solid #5c1a1a; }

/* Compliance Widget (#97) */
.widget-mode .shell { display:flex; justify-content:center; align-items:center; height:100vh; background:var(--bg); }
.widget-mode .sidebar, .widget-mode .topbar { display:none !important; }
.widget-container { background:var(--surface); border:1px solid var(--border); border-radius:12px; padding:24px; max-width:420px; width:100%; text-align:center; }
.widget-score-ring { position:relative; width:120px; height:120px; margin:0 auto 16px; }
.widget-fw-bar { display:flex; align-items:center; gap:8px; margin:4px 0; font-size:.74rem; }
.widget-fw-bar .bar-track { flex:1; height:6px; }

/* MITRE badges (#100) */
.mitre-chip { display:inline-block; font-size:.62rem; font-weight:600; padding:1px 6px; border-radius:var(--radius-sm); background:var(--info-bg); color:var(--info); border:1px solid var(--info); margin:1px 2px; white-space:nowrap; cursor:help; }

/* EPSS badge (#101) */
.epss-badge { display:inline-block; font-family:var(--mono); font-size:.64rem; font-weight:600; padding:1px 6px; border-radius:3px; white-space:nowrap; margin-left:4px; }
.epss-green { background:rgba(45,204,113,.15); color:var(--pass); border:1px solid var(--pass); }
.epss-yellow { background:rgba(250,204,21,.15); color:#fde047; border:1px solid #fde04788; }
.epss-orange { background:rgba(240,165,0,.15); color:var(--warn); border:1px solid var(--warn); }
.epss-red { background:rgba(232,64,64,.15); color:var(--fail); border:1px solid var(--fail); }
.epss-bar { display:inline-block; height:6px; border-radius:3px; vertical-align:middle; margin-left:4px; }
.epss-pct-tip { font-size:.6rem; color:var(--sub); margin-left:2px; }

/* Stat cards */
.stat-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(155px, 1fr)); gap: 12px; margin-bottom: 24px; }
.stat-card { background: var(--surface); border: 1px solid var(--border); border-top: 2px solid var(--border); border-radius: var(--radius-md); padding: 16px; position: relative; overflow: hidden; box-shadow: var(--shadow-xs); transition: box-shadow var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease); }
.stat-card:hover { box-shadow: var(--shadow-sm); }
.stat-card.pass        { border-top-color: var(--pass); }
.stat-card.fail        { border-top-color: var(--fail); }
.stat-card.manual      { border-top-color: var(--manual); }
.stat-card.not-scanned { border-top-color: var(--sub); }
.stat-card.total  { border-top-color: var(--info); }
.stat-card.risk   { border-top-color: var(--risk); }
.stat-card.predicted-pass { border-top-color: var(--predicted-pass); }
.stat-card.predicted-fail { border-top-color: var(--predicted-fail); }
.stat-num { font-family: var(--mono); font-size: 1.5rem; font-weight: 600; line-height: 1; margin-bottom: 4px; }
.stat-card.pass .stat-num        { color: var(--pass); }
.stat-card.fail .stat-num        { color: var(--fail); }
.stat-card.manual .stat-num      { color: var(--manual); }
.stat-card.not-scanned .stat-num { color: var(--sub); }
.stat-card.total .stat-num  { color: var(--info); }
.stat-card.risk .stat-num   { color: var(--risk); }
.stat-card.predicted-pass .stat-num { color: var(--predicted-pass); }
.stat-card.predicted-fail .stat-num { color: var(--predicted-fail); }
.stat-label { font-size: .7rem; text-transform: uppercase; letter-spacing: .1em; color: var(--sub); font-weight: 600; }
.stat-sub   { font-family: var(--mono); font-size: .68rem; color: var(--sub); margin-top: 4px; }

/* Section headers */
.section-hdr { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; }
.section-hdr h2 { font-family: var(--mono); font-size: .8rem; font-weight: 600; text-transform: uppercase; letter-spacing: .1em; color: var(--text); white-space: nowrap; }
.section-hdr .line { flex: 1; height: 1px; background: var(--border); }

/* Trend chart */
.trend-card { background: var(--surface); border: 1px solid var(--border); border-radius: 3px; padding: 16px; margin-bottom: 24px; }
.trend-hdr { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; flex-wrap: wrap; gap: 8px; }
.trend-title { font-family: var(--mono); font-size: .75rem; font-weight: 600; text-transform: uppercase; letter-spacing: .1em; color: var(--sub); }
.trend-legend { display: flex; gap: 16px; }
.trend-legend-item { display: flex; align-items: center; gap: 5px; font-size: .7rem; color: var(--sub); }
.trend-legend-dot { width: 8px; height: 8px; border-radius: 50%; }
#trendChart, #priorityTrendChart { width: 100%; height: 220px; display: block; cursor: crosshair; }
#trendChartTooltip, #priorityTrendChartTooltip { position:absolute;display:none;background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:8px 12px;font-size:.72rem;font-family:var(--mono);pointer-events:none;z-index:100;box-shadow:0 4px 12px rgba(0,0,0,.3);white-space:nowrap; }

/* App bars */
.app-bars { display: grid; grid-template-columns: repeat(auto-fill, minmax(270px, 1fr)); gap: 10px; margin-bottom: 24px; }
.app-bar-card { background: var(--surface); border: 1px solid var(--border); border-radius: 3px; padding: 12px; }
.app-bar-hdr { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
.app-bar-name { font-size: .78rem; font-weight: 600; }
.app-bar-counts { font-family: var(--mono); font-size: .7rem; color: var(--sub); }
.bar-track { height: 6px; background: var(--border); border-radius: 3px; overflow: hidden; display: flex; }
.bar-seg { height: 100%; transition: width .4s ease; }
.bar-pass { background: var(--pass); }
.bar-fail { background: var(--fail); }
.bar-manual { background: var(--manual); }
.bar-not-scanned { background: var(--sub); opacity: .4; }
.bar-predicted-pass { background: var(--predicted-pass); opacity: .75; }
.bar-predicted-fail { background: var(--predicted-fail); opacity: .75; }

/* ── Community & Gamification ──────────────────────────────────────────── */
.xp-bar-wrap { background: var(--border); border-radius: 9999px; height: 8px; overflow: hidden; }
.xp-bar-fill { height: 100%; border-radius: 9999px; background: linear-gradient(90deg, var(--accent), #7c3aed); transition: width .4s; }
.level-badge { display: inline-flex; align-items: center; gap: 4px; padding: 2px 8px; border-radius: 9999px; font-size: .72rem; font-weight: 700; background: var(--accent); color: #fff; }
.ach-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 10px; }
.ach-card { background: var(--card); border: 1px solid var(--border); border-radius: 10px; padding: 14px; display: flex; flex-direction: column; align-items: center; gap: 6px; text-align: center; transition: border-color .15s; }
.ach-card.earned { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent)22; }
.ach-card.secret:not(.earned) { opacity: .45; filter: grayscale(1); }
.ach-icon { font-size: 2rem; line-height: 1; }
.ach-name { font-size: .78rem; font-weight: 600; }
.ach-desc { font-size: .7rem; color: var(--sub); }
.ach-xp { font-size: .68rem; color: var(--accent); font-weight: 700; }
.ach-earned-at { font-size: .65rem; color: var(--pass); margin-top: 2px; }
.ach-progress { width: 100%; margin-top: 4px; }
.lb-podium { display: flex; justify-content: center; align-items: flex-end; gap: 10px; margin: 16px 0; }
.lb-podium-item { display: flex; flex-direction: column; align-items: center; gap: 4px; }
.lb-podium-avatar { width: 48px; height: 48px; border-radius: 50%; background: var(--card); border: 2px solid var(--border); display: flex; align-items: center; justify-content: center; font-size: 1.4rem; overflow: hidden; }
.lb-podium-avatar img { width: 100%; height: 100%; object-fit: cover; }
.lb-podium-pedestal { width: 70px; background: var(--border); border-radius: 4px 4px 0 0; display: flex; align-items: center; justify-content: center; font-weight: 800; font-size: .85rem; color: var(--sub); }
.lb-podium-item:nth-child(1) .lb-podium-pedestal { height: 54px; background: #fbbf2455; color: #d97706; }
.lb-podium-item:nth-child(2) .lb-podium-pedestal { height: 40px; background: #9ca3af44; color: #6b7280; }
.lb-podium-item:nth-child(3) .lb-podium-pedestal { height: 30px; background: #cd7f3244; color: #92400e; }
.lb-entry { display: flex; align-items: center; gap: 10px; padding: 8px 10px; border-radius: 8px; transition: background .1s; }
.lb-entry:hover { background: var(--hover); }
.lb-entry.is-me { background: var(--accent)11; border: 1px solid var(--accent)33; }
.lb-rank { font-size: .8rem; font-weight: 700; color: var(--sub); width: 24px; text-align: center; }
.lb-avatar { width: 32px; height: 32px; border-radius: 50%; background: var(--card); border: 1px solid var(--border); display: flex; align-items: center; justify-content: center; font-size: .9rem; overflow: hidden; flex-shrink: 0; }
.lb-avatar img { width: 100%; height: 100%; object-fit: cover; }
.lb-name { flex: 1; font-size: .85rem; }
.lb-xp-tag { font-size: .75rem; color: var(--accent); font-weight: 600; }
.profile-avatar-lg { width: 80px; height: 80px; border-radius: 50%; border: 2px solid var(--accent); display: flex; align-items: center; justify-content: center; font-size: 2.5rem; overflow: hidden; cursor: pointer; position: relative; background: var(--card); }
.profile-avatar-lg:hover::after { content: '✎'; position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; background: #00000088; color: #fff; font-size: 1.5rem; }
.profile-avatar-lg img { width: 100%; height: 100%; object-fit: cover; }
.toast-achievement { position: fixed; bottom: 24px; right: 24px; z-index: 9999; background: var(--card); border: 1px solid var(--accent); border-radius: 12px; padding: 14px 18px; display: flex; align-items: center; gap: 12px; box-shadow: 0 8px 24px #0004; min-width: 240px; animation: toast-in .3s ease; }
@keyframes toast-in { from { opacity:0; transform:translateY(10px); } to { opacity:1; transform:translateY(0); } }
.toast-ach-icon { font-size: 2rem; }
.color-swatch-row { display: flex; gap: 6px; flex-wrap: wrap; }
.color-swatch { width: 24px; height: 24px; border-radius: 50%; cursor: pointer; border: 2px solid transparent; transition: border-color .15s; }
.color-swatch.selected { border-color: var(--text); }

/* Controls table */
.filter-bar { display: flex; gap: 8px; margin-bottom: 14px; flex-wrap: wrap; align-items: center; }
.filter-bar input, .filter-bar select { background: var(--surface); border: 1px solid var(--border2); color: var(--text); padding: .35rem .6rem; border-radius: 4px; font-size: .78rem; font-family: var(--sans); outline: none; transition: border-color .15s; }
.filter-bar input:focus, .filter-bar select:focus { border-color: var(--info); }
.filter-bar input { flex: 1; min-width: 180px; }
.filter-bar select option { background: var(--surface); }
.filter-count { font-family: var(--mono); font-size: .7rem; color: var(--sub); white-space: nowrap; }
.ctrl-table-wrap { overflow-x: auto; border: 1px solid var(--border); border-radius: 3px; }

/* ADO #1892 — `.table-wrap` is canonical in tater-shared.css:400-401. TATER.html is the one
   app that does not link that file (see the .pill note at :909 below), so its four wrappers
   —  #gm-table, #aigov-inv-table, #aw-eng-table, and the governance-meeting occurrence
   history inside the detail modal — resolved to nothing and their tables pushed the page
   sideways instead of scrolling inside their box.
   COPIED, NEVER MOVED. Same precedent as .pill (#1681) and .empty-state (#1620): moving it
   out of tater-shared.css would strip it from ops/manage/my/insights, which do link that
   file. Keep the two copies in sync.
   `.data-table-wrap` gets the rule for hygiene only — all four of its uses already carry
   the same declaration inline, and those inline styles are deliberately left in place. */
.table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; max-width: 100%; margin-bottom: 12px; }
.table-wrap > table { min-width: 600px; }
.data-table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; max-width: 100%; }

/* ADO #1892 — the same safety net tater-shared.css:405-407 gives the other apps. This, not
   the rule above, is what reaches the AI-Governance inventory: that table renders through
   tater-views.js into `<div class="card" style="padding:0;overflow:hidden">`, so the clip
   happens one level deeper than .table-wrap and widening the outer wrapper cannot fix it. */
@media (max-width: 1100px) {
  .card > table, .card > div > table { display: block; overflow-x: auto; max-width: 100%; }
}
table { width: 100%; border-collapse: collapse; font-size: .8rem; }
thead tr { background: var(--raised); }
th { text-align: left; padding: 8px 10px; font-family: var(--mono); font-size: .68rem; font-weight: 600; text-transform: uppercase; letter-spacing: .08em; color: var(--sub); border-bottom: 1px solid var(--border); white-space: nowrap; cursor: pointer; user-select: none; }
th:hover { color: var(--text); }
th.sorted { color: var(--info); }
td { padding: 8px 10px; border-bottom: 1px solid var(--border); vertical-align: middle; }
tbody tr:last-child td { border-bottom: none; }
tbody tr:nth-child(even) td { background: rgba(255,255,255,.025); }
tr:hover td { background: rgba(255,255,255,.06); }
/* Role badges */
.role-badge { display:inline-block; padding:2px 8px; border-radius:4px; font-size:.7rem; font-weight:600; }
.role-badge-superadmin { background:var(--fail-bg, rgba(220,38,38,.12)); color:var(--fail); }
.role-badge-orgadmin { background:var(--info-bg, rgba(59,130,246,.12)); color:var(--info); }
.role-badge-admin { background:var(--info-bg, rgba(59,130,246,.12)); color:var(--info); }
.role-badge-auditor { background:var(--warn-bg, rgba(234,179,8,.12)); color:var(--warn); }
.role-badge-viewer { background:var(--raised); color:var(--sub); }
.role-badge-member { background:var(--raised); color:var(--sub); }
tr.row-fail   > td:first-child { border-left: 3px solid var(--fail); }
tr.row-pass   > td:first-child { border-left: 3px solid transparent; }
tr.row-manual > td:first-child { border-left: 3px solid transparent; }
tr.row-override > td:first-child { border-left: 3px solid var(--info); }
tr.row-risk   > td:first-child { border-left: 3px solid var(--risk); }
.td-ctrl { font-family: var(--mono); font-size: .75rem; white-space: nowrap; color: var(--info); cursor: pointer; }
.td-ctrl:hover { text-decoration: underline; }
.td-title { max-width: 280px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; }
.td-title:hover { color: var(--info); }
.td-fw { font-size: .7rem; color: var(--sub); white-space: nowrap; }
.app-tag { display: inline-block; font-size: .68rem; font-weight: 600; padding: .1rem .35rem; border-radius: 3px; background: var(--raised); color: var(--sub); white-space: nowrap; }
.link-btn { font-size: .68rem; padding: .12rem .38rem; border-radius: 3px; text-decoration: none; border: 1px solid var(--border2); color: var(--sub); cursor: pointer; background: transparent; font-family: var(--sans); transition: all .12s; display: inline-block; margin-right: 3px; }
.link-btn:hover { border-color: var(--info); color: var(--info); background: var(--info-bg); }
.link-btn.doc { border-color: #2a4a38; color: #3a8c5a; }
.link-btn.doc:hover { background: #0d2b1a; border-color: var(--pass); color: var(--pass); }

/* Detail row */
.detail-row td { padding: 0; border-bottom: 1px solid var(--border); }
.detail-inner { padding: 16px 20px; background: var(--detail-bg); display: grid; grid-template-columns: 1fr 1fr; gap: 20px; font-size: .78rem; }
@media (max-width: 800px) { .detail-inner { grid-template-columns: 1fr; } }
.detail-label { font-family: var(--mono); font-size: .65rem; text-transform: uppercase; letter-spacing: .1em; color: var(--sub); margin-bottom: 4px; }
.detail-value { color: var(--text); line-height: 1.5; white-space: pre-wrap; word-break: break-word; }
.detail-value.code { font-family: var(--mono); font-size: .72rem; background: var(--bg); padding: 8px; border-radius: 4px; border: 1px solid var(--border); max-height: 160px; overflow-y: auto; }
.detail-section { margin-bottom: 14px; }
.history-timeline { display: flex; flex-direction: column; gap: 6px; }
.hist-item { display: flex; align-items: center; gap: 8px; font-family: var(--mono); font-size: .7rem; color: var(--sub); }
.hist-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
.hist-dot.pass   { background: var(--pass); }
/* Item detail page + comments */
.itemdetail-header { margin-bottom:24px; }
.itemdetail-header h2 { font-size:1.4rem; margin:0 0 4px; }
.itemdetail-header .subtitle { color:var(--sub); font-size:.82rem; font-family:var(--mono); }
.itemdetail-back { display:inline-flex; align-items:center; gap:4px; color:var(--accent); font-size:.78rem; cursor:pointer; background:none; border:none; padding:4px 0; margin-bottom:12px; }
.itemdetail-back:hover { text-decoration:underline; }
.itemdetail-meta { display:flex; flex-wrap:wrap; gap:8px; margin-top:8px; }
.itemdetail-tag { display:inline-block; padding:2px 8px; border-radius:4px; font-size:.68rem; font-weight:600; background:var(--raised); border:1px solid var(--border); color:var(--sub); }
.itemdetail-tag.clickable { cursor:pointer; }
.itemdetail-tag.clickable:hover { border-color:var(--accent); color:var(--accent); }
.comments-section { margin-top:32px; border-top:1px solid var(--border); padding-top:24px; }
.comments-header { font-family:var(--mono); font-size:.7rem; text-transform:uppercase; letter-spacing:.1em; color:var(--sub); margin-bottom:16px; }
.comment-card { background:var(--raised); border:1px solid var(--border); border-radius:3px; padding:14px 16px; margin-bottom:10px; }
.comment-meta { display:flex; align-items:center; justify-content:space-between; margin-bottom:6px; }
.comment-avatar { width:28px; height:28px; border-radius:50%; object-fit:cover; flex-shrink:0; }
.comment-avatar-initials { width:28px; height:28px; border-radius:50%; background:var(--info-bg); border:1.5px solid var(--info); display:flex; align-items:center; justify-content:center; font-weight:700; font-size:.65rem; color:var(--info); flex-shrink:0; }
.comment-author { font-weight:600; font-size:.78rem; color:var(--text); }
.comment-time { font-size:.68rem; color:var(--sub); margin-left:8px; }
.comment-edited { font-size:.62rem; color:var(--sub); font-style:italic; }
.comment-body { font-size:.82rem; color:var(--text); line-height:1.55; white-space:pre-wrap; word-break:break-word; }
.comment-actions { display:flex; gap:6px; }
.comment-actions button { background:none; border:none; font-size:.68rem; color:var(--sub); cursor:pointer; padding:2px 4px; }
.comment-actions button:hover { color:var(--accent); }
.comment-reply-btn { font-size:.68rem; color:var(--sub); cursor:pointer; background:none; border:none; padding:2px 6px; }
.comment-reply-btn:hover { color:var(--info); }
.comment-replies { margin-left:28px; border-left:2px solid var(--border); padding-left:12px; }
.comment-replies .comment-card { background:var(--surface, var(--raised)); padding:10px 12px; margin-bottom:6px; }
.inline-reply-form { margin-left:28px; margin-top:6px; margin-bottom:10px; padding-left:12px; border-left:2px solid var(--border); }
.comment-form { margin-top:16px; }
.comment-form textarea { width:100%; min-height:72px; padding:10px 12px; border:1px solid var(--border); border-radius:6px; background:var(--bg); color:var(--text); font-family:inherit; font-size:.82rem; resize:vertical; }
.comment-form textarea:focus { outline:none; border-color:var(--accent); box-shadow:0 0 0 2px rgba(59,158,255,.15); }
.comment-form-actions { display:flex; justify-content:flex-end; margin-top:8px; gap:8px; }
.comment-empty { color:var(--sub); font-size:.82rem; font-style:italic; margin-bottom:16px; }
.hist-dot.fail   { background: var(--fail); }
.hist-dot.manual { background: var(--manual); }
.hist-dot.override { background: var(--info); }
.hist-label-scan { color: var(--text); }
.hist-label-ov   { color: var(--info); }

/* Scans view */
.scan-list { display: flex; flex-direction: column; gap: 8px; }
.scan-card { background: var(--surface); border: 1px solid var(--border); border-radius: 3px; padding: 14px 16px; display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.scan-card.latest { border-color: var(--info); }
.scan-ts { font-family: var(--mono); font-size: .78rem; color: var(--info); min-width: 150px; }
.scan-meta { flex: 1; font-size: .78rem; color: var(--sub); min-width: 180px; }
.scan-meta strong { color: var(--text); }
.scan-stats { display: flex; gap: 12px; font-family: var(--mono); font-size: .72rem; }
.ss-pass   { color: var(--pass); }
.ss-fail   { color: var(--fail); }
.ss-manual { color: var(--manual); }

/* Upload zone */
.upload-zone { border: 2px dashed var(--border2); border-radius: 4px; padding: 32px; text-align: center; cursor: pointer; transition: all .2s; margin-bottom: 20px; }
.upload-zone:hover, .upload-zone.drag { border-color: var(--info); background: var(--info-bg); }
.upload-icon { font-size: 2rem; margin-bottom: 8px; }
.upload-text { font-size: .82rem; color: var(--sub); line-height: 1.6; }
.upload-text strong { color: var(--info); }
#fileInput { display: none; }

/* Overrides view */
.override-list { display: flex; flex-direction: column; gap: 8px; }
.override-card { background: var(--surface); border: 1px solid var(--border); border-radius: 3px; padding: 12px 14px; display: grid; grid-template-columns: 160px 1fr auto; gap: 12px; align-items: start; }
.override-card.risk { border-color: rgba(176,96,224,.35); }
.override-ctrl { font-family: var(--mono); font-size: .75rem; color: var(--info); word-break: break-all; }
.override-sub  { font-family: var(--mono); font-size: .68rem; color: var(--sub); margin-top: 2px; }
.override-title { font-size: .8rem; color: var(--text); }
.override-note  { font-size: .75rem; color: var(--sub); margin-top: 3px; }
.override-meta  { font-family: var(--mono); font-size: .68rem; color: var(--sub); text-align: right; line-height: 1.8; }

/* Modal */
.modal-backdrop { position: fixed; inset: 0; background: rgba(0,0,0,.82); z-index: 1000; display: flex; align-items: center; justify-content: center; opacity: 0; pointer-events: none; transition: opacity .2s; }
.modal-backdrop.open { opacity: 1; pointer-events: all; }
.modal { background: var(--surface); border: 1px solid var(--border2); border-radius: 4px; padding: 24px; width: 520px; max-width: calc(100vw - 40px); max-height: calc(100vh - 60px); overflow-y: auto; transform: translateY(10px); transition: transform .2s; }
.modal-backdrop.open .modal { transform: none; }
.modal-title { font-family: var(--mono); font-size: .85rem; font-weight: 600; color: var(--text); margin-bottom: 4px; }
.modal-sub { font-size: .75rem; color: var(--sub); margin-bottom: 18px; }
/* .modal-box/.modal-header/.modal-body: an older header+body+footer modal
   layout (30+ call sites — vendor/contract/rating/RFP modals, remediation
   guidance, and others) that never got styling when the CSS was extracted
   out of TATER.html's inline <style> (#772). Without these, the box has no
   background/border/padding — it renders as unstyled, transparent content
   floating over the (correctly-styled) .modal-backdrop overlay. Same visual
   treatment as .modal, restructured as a fixed header + scrolling body so
   long forms don't push the close button off-screen. */
.modal-box { background: var(--surface); border: 1px solid var(--border2); border-radius: 4px; width: 520px; max-width: calc(100vw - 40px); max-height: calc(100vh - 60px); overflow: hidden; display: flex; flex-direction: column; transform: translateY(10px); transition: transform .2s; }
.modal-backdrop.open .modal-box { transform: none; }
.modal-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 16px 20px; border-bottom: 1px solid var(--border); flex-shrink: 0; }
.modal-header h3 { margin: 0; font-family: var(--mono); font-size: .85rem; font-weight: 600; color: var(--text); }
.modal-body { padding: 20px; overflow-y: auto; }
.form-row { margin-bottom: 12px; }
.form-label { display: block; font-size: .72rem; font-weight: 600; text-transform: uppercase; letter-spacing: .08em; color: var(--sub); margin-bottom: 5px; }
.form-input, .form-select, .form-textarea { width: 100%; background: var(--raised); border: 1px solid var(--border2); color: var(--text); padding: .5rem .7rem; border-radius: 4px; font-size: .8rem; font-family: var(--sans); outline: none; transition: border-color .15s, box-shadow .15s; }
.form-input:focus, .form-select:focus, .form-textarea:focus { border-color: var(--info); }
.form-textarea { resize: vertical; min-height: 72px; }
.form-row.check { display: flex; align-items: center; gap: 8px; }
.form-row.check label { font-size: .8rem; color: var(--text); cursor: pointer; }
.multi-select-wrap { position: relative; }
.multi-select-toggle { cursor: pointer; user-select: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.multi-select-dropdown { display: none; position: absolute; top: 100%; left: 0; right: 0; background: var(--raised); border: 1px solid var(--border2); border-radius: 4px; max-height: 180px; overflow-y: auto; z-index: 100; box-shadow: 0 4px 12px rgba(0,0,0,.25); }
.multi-select-wrap.open .multi-select-dropdown { display: block; }
.multi-select-dropdown label { display: flex; align-items: center; gap: 8px; padding: 6px 10px; font-size: .78rem; cursor: pointer; color: var(--text); }
.multi-select-dropdown label:hover { background: var(--bg2); }
.multi-select-dropdown input[type="checkbox"] { accent-color: var(--info); }
.modal-actions { display: flex; gap: 8px; margin-top: 18px; justify-content: flex-end; align-items: center; }
.modal-actions .left { margin-right: auto; }
.grp-color-swatch { width:24px;height:24px;border-radius:50%;cursor:pointer;border:2px solid transparent;transition:border-color .15s; }
.grp-color-swatch:hover { border-color: var(--text); }
.grp-color-swatch.selected { border-color: var(--text); box-shadow: 0 0 0 2px var(--bg), 0 0 0 4px var(--text); }
.grp-badge { display:inline-flex;align-items:center;gap:3px;padding:1px 8px;border-radius:3px;font-size:.65rem;font-weight:600;color:#fff;white-space:nowrap; }
.fp-grid { width:100%;border-collapse:collapse;font-size:.75rem; }
.fp-grid th, .fp-grid td { padding:6px 10px;border:1px solid var(--border);text-align:center; }
.fp-grid th { background:var(--surface);font-weight:600;font-size:.68rem;text-transform:uppercase;letter-spacing:.05em; }
.fp-grid td:first-child, .fp-grid th:first-child { text-align:left;white-space:nowrap; }
.fp-grid tr.fp-cat-row td { background:var(--raised);font-weight:600;font-size:.7rem;color:var(--sub);text-transform:uppercase;letter-spacing:.08em;padding:8px 10px; }
.fp-grid input[type="checkbox"] { width:16px;height:16px;cursor:pointer; }
.fp-grid input[type="checkbox"]:disabled { opacity:.4;cursor:not-allowed; }
.grp-member-row { display:flex;align-items:center;gap:8px;padding:4px 8px;border-radius:4px;font-size:.78rem; }
.grp-member-row:hover { background:var(--surface); }
.grp-member-row input[type="checkbox"] { flex-shrink:0; }

/* Pills / badges — #1681: promoted from tater-shared.css:457-468. TATER.html is
   the one app that does not link tater-shared.css, so `class="pill"` (including
   everything window.taterStatusPill emits) rendered as bare text here while the
   same markup was a rounded chip in ops/manage/my/insights. Copied verbatim;
   keep in sync with tater-shared.css. Same precedent as .empty-state (#1620). */
.pill { display: inline-block; font-size: .62rem; padding: 2px 8px; border-radius: 999px; font-weight: 600; }
.pill-critical { background: rgba(239, 68, 68, .18); color: var(--critical); }
.pill-high { background: rgba(245, 158, 11, .18); color: var(--high); }
.pill-normal { background: rgba(59, 158, 255, .18); color: var(--normal); }
.pill-low { background: rgba(148, 163, 184, .18); color: var(--low); }
.pill-Open { background: rgba(59, 158, 255, .18); color: var(--info); }
/* #1212 — Planned (parked/backlog): muted violet, distinct from Open/OnHold. */
.pill-Planned { background: rgba(139, 122, 220, .18); color: #a99cf0; }
.pill-InProgress { background: rgba(245, 158, 11, .18); color: var(--warn); }
.pill-OnHold { background: rgba(148, 163, 184, .18); color: var(--low); }
.pill-Closed { background: rgba(63, 185, 80, .18); color: var(--pass); }
.pill-Cancelled { background: rgba(110, 118, 129, .18); color: var(--text-muted); }

/* Loading + empty states — #1681: promoted from tater-shared.css:547-548, same
   reason as .pill above. Copied verbatim; keep in sync. */
.loader { padding: 40px; text-align: center; color: var(--sub); }
.empty { padding: 40px; text-align: center; color: var(--sub); border: 1px dashed var(--border); border-radius: var(--radius); }

/* Empty state */
.empty-state { text-align: center; padding: 60px 20px; color: var(--sub); }
.empty-icon { font-size: 3rem; margin-bottom: 12px; opacity: .4; }
.empty-state h3 { font-family: var(--mono); font-size: .85rem; margin-bottom: 8px; color: var(--text); }
.empty-state p { font-size: .8rem; max-width: 380px; margin: 0 auto 20px; line-height: 1.6; }

/* Status badges - used by POAM/RMF/SSP/policies/milestones row pills */
.status-badge {
  display: inline-block;
  padding: 2px 8px;
  border-radius: 10px;
  font-size: .68rem;
  font-weight: 600;
  font-family: var(--mono);
  letter-spacing: .02em;
  white-space: nowrap;
  border: 1px solid transparent;
  background: var(--raised);
  color: var(--text);
}
.status-badge.status-open,
.status-badge.status-fail,
.status-badge.status-overdue,
.status-badge.status-rejected,
.status-badge.status-denied,
.status-badge.status-expired      { background: rgba(232,64,64,.12);  color: var(--fail); border-color: rgba(232,64,64,.3); }
.status-badge.status-in-progress,
.status-badge.status-under-review,
.status-badge.status-pending,
.status-badge.status-pending-verification,
.status-badge.status-on-hold,
.status-badge.status-draft        { background: rgba(240,165,0,.12);  color: var(--manual, #f0a500); border-color: rgba(240,165,0,.3); }
.status-badge.status-completed,
.status-badge.status-resolved,
.status-badge.status-closed,
.status-badge.status-approved,
.status-badge.status-active,
.status-badge.status-authorized,
.status-badge.status-pass         { background: rgba(45,204,113,.12); color: var(--pass);   border-color: rgba(45,204,113,.3); }
.status-badge.status-risk-accepted,
.status-badge.status-accepted,
.status-badge.status-not-applicable,
.status-badge.status-false-positive,
.status-badge.status-archived,
.status-badge.status-withdrawn    { background: rgba(120,128,140,.15); color: var(--sub);  border-color: rgba(120,128,140,.3); }
.status-badge.status-info         { background: rgba(59,158,255,.12); color: var(--accent); border-color: rgba(59,158,255,.3); }

/* Toast */
.toast-container { position: fixed; bottom: 20px; right: 20px; z-index: 99999; display: flex; flex-direction: column; gap: 8px; pointer-events: none; }
.toast { background: var(--raised); border: 1px solid var(--border2); border-radius: 6px; padding: 10px 16px; font-size: .8rem; color: var(--text); animation: toastIn .2s ease; }
.toast.success { border-color: var(--pass); }
.toast.error   { border-color: var(--fail); }
@keyframes toastIn { from { opacity:0; transform: translateY(6px); } to { opacity:1; transform: none; } }
@keyframes org-spin { to { transform: rotate(360deg); } }
/* Enhanced toast items */
.toast-item { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 12px 14px; box-shadow: 0 4px 16px rgba(0,0,0,.2); transition: opacity .25s, transform .25s; overflow: hidden; pointer-events: all; }
.toast-info    { border-left: 3px solid var(--info);  }
.toast-success { border-left: 3px solid var(--pass);  color: var(--pass); }
.toast-error   { border-left: 3px solid var(--fail);  color: var(--fail); }
.toast-warning { border-left: 3px solid #f59e0b;       color: #f59e0b; }
.toast-item .toast-msg { color: var(--text); }
@keyframes toast-progress { from { width: 100%; } to { width: 0%; } }
/* Button loading state */
.btn-loading { position: relative; cursor: not-allowed !important; opacity: .75; }
.btn-loading::after { content: ''; display: inline-block; width: 10px; height: 10px; border: 2px solid currentColor; border-right-color: transparent; border-radius: 50%; animation: btn-spin .6s linear infinite; margin-left: 8px; vertical-align: middle; }
@keyframes btn-spin { to { transform: rotate(360deg); } }
/* Form field inline errors */
.form-input.has-error, .form-select.has-error, .form-textarea.has-error { border-color: var(--fail) !important; box-shadow: 0 0 0 2px rgba(239,68,68,.12); }
.field-error { color: var(--fail); font-size: .7rem; margin-top: 3px; display: block; }
.form-input:focus-visible, .form-select:focus-visible, .form-textarea:focus-visible { outline: none; box-shadow: 0 0 0 2px rgba(59,158,255,.35); }
/* Sort direction indicators */
th[data-sort] { cursor: pointer; user-select: none; white-space: nowrap; }
th[data-sort]:hover { color: var(--info); }
th[data-sort].sort-asc::after  { content: ' ▲'; font-size: .7em; opacity: .8; }
th[data-sort].sort-desc::after { content: ' ▼'; font-size: .7em; opacity: .8; }
th[data-sort].sort-active { color: var(--info); }
/* Loading skeleton */
.skeleton { background: linear-gradient(90deg, var(--raised) 25%, var(--border) 50%, var(--raised) 75%); background-size: 200% 100%; animation: skeleton-shimmer 1.4s ease-in-out infinite; border-radius: 4px; }
@keyframes skeleton-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
.skeleton-row td { padding: 10px 12px; }
.skeleton-cell { height: 14px; border-radius: 3px; }
/* Page toolbar */
.page-toolbar { display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px; flex-wrap: wrap; gap: 12px; }
.page-toolbar-left h2 { margin: 0 0 2px; font-size: 1.05rem; font-weight: 700; }
.page-toolbar-left p  { margin: 0; font-size: .75rem; color: var(--sub); }
.page-toolbar-right   { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }

/* Modal overlay (fw, std, csv modals) */
.modal-overlay { position: fixed; inset: 0; background: rgba(0,0,0,.82); z-index: 1000; display: flex; align-items: center; justify-content: center; opacity: 0; pointer-events: none; transition: opacity .2s; }
.modal-overlay.open { opacity: 1; pointer-events: all; }
.modal-overlay .modal { transform: translateY(10px); transition: transform .2s; }
.modal-overlay.open .modal { transform: none; }
.modal-hdr { display: flex; align-items: center; justify-content: space-between; padding: 16px 20px; border-bottom: 1px solid var(--border); }
.modal-hdr span { font-family: var(--mono); font-size: .85rem; font-weight: 600; color: var(--text); }
.modal-close { background: none; border: none; color: var(--sub); font-size: 1rem; cursor: pointer; padding: 4px 8px; border-radius: 4px; }
.modal-close:hover { background: var(--raised); color: var(--text); }
.modal-footer { display: flex; gap: 8px; padding: 14px 20px; border-top: 1px solid var(--border); justify-content: flex-end; }
.modal-footer .btn-danger { margin-right: auto; }
/* ── Searchable multi-select component ───────────────────────────────────── */
.msel{position:relative}
.msel-display{display:flex;flex-wrap:wrap;gap:4px;align-items:center;padding:5px 8px;border:1px solid var(--border);border-radius:6px;background:var(--raised);min-height:36px;cursor:text;transition:border-color .15s,box-shadow .15s}
.msel-display:focus-within{border-color:var(--accent);box-shadow:0 0 0 2px rgba(59,158,255,.15)}
.msel-chip{display:inline-flex;align-items:center;gap:3px;padding:2px 8px 2px 6px;background:rgba(59,158,255,.12);border:1px solid var(--accent,#3b9eff);border-radius:12px;font-size:.72rem;color:var(--text);white-space:nowrap;max-width:220px}
.msel-chip>span:first-child{overflow:hidden;text-overflow:ellipsis}
.msel-chip-x{cursor:pointer;font-size:.9rem;line-height:1;color:var(--sub);margin-left:2px;flex-shrink:0}
.msel-chip-x:hover{color:var(--danger)}
.msel-input{border:none;background:none;outline:none;color:var(--text);font-size:.82rem;min-width:90px;flex:1;padding:2px 4px;font-family:inherit}
.msel-dropdown{position:absolute;left:0;right:0;top:calc(100% + 3px);z-index:9999;background:var(--raised);border:1px solid var(--border);border-radius:6px;box-shadow:0 4px 20px rgba(0,0,0,.28);max-height:210px;overflow-y:auto;display:none}
.msel-dropdown.open{display:block}
.msel-opt{display:flex;align-items:center;gap:8px;padding:7px 10px;font-size:.82rem;cursor:pointer}
.msel-opt:hover{background:var(--hover)}
.msel-opt.msel-sel{background:rgba(59,158,255,.07)}
.msel-chk{width:14px;height:14px;border:1.5px solid var(--border2);border-radius:3px;display:flex;align-items:center;justify-content:center;font-size:9px;flex-shrink:0}
.msel-opt.msel-sel .msel-chk{background:var(--accent,#3b9eff);border-color:var(--accent,#3b9eff);color:#fff}
.msel-opt-body{min-width:0;flex:1}
.msel-opt-lbl{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.msel-opt-sub{font-size:.7rem;color:var(--sub);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.msel-empty{padding:10px 12px;font-size:.8rem;color:var(--sub);text-align:center}
.msel-more{padding:5px 12px;font-size:.73rem;color:var(--sub);text-align:center;border-top:1px solid var(--border)}
[data-theme="light"] .msel-chip{background:rgba(29,78,216,.1);border-color:#1d4ed8}
.catalog-form .form-row { margin-bottom: 12px; }
.catalog-form .form-label { display: block; font-size: .72rem; font-weight: 600; text-transform: uppercase; letter-spacing: .08em; color: var(--sub); margin-bottom: 5px; }
.form-row-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.logo-preview { width: 56px; height: 56px; background: var(--raised); border: 1px solid var(--border); border-radius: 6px; display: flex; align-items: center; justify-content: center; overflow: hidden; cursor: pointer; }
.logo-preview img { width: 100%; height: 100%; object-fit: contain; }
.color-row { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
.color-swatch { width: 28px; height: 28px; border-radius: 50%; cursor: pointer; border: 2px solid transparent; transition: border-color .15s, transform .1s; }
.color-swatch:hover { transform: scale(1.12); }
.color-swatch.active { border-color: var(--text); box-shadow: 0 0 0 2px var(--bg); }

/* Utility */
.hidden { display: none !important; }
.page { display: none; }
.page.active { display: block; }
::-webkit-scrollbar { width: 5px; height: 5px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--border2); border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: var(--sub); }

/* ── Tab bar / tab button (was unstyled - relied on browser defaults, ──
   ── which rendered as white pills in dark mode). Modern dark-aware. ── */
.tab-bar {
  display: flex; flex-wrap: wrap; gap: 4px;
  border-bottom: 1px solid var(--border);
  padding-bottom: 0;
}
.tab-btn {
  font-family: var(--sans);
  font-size: .78rem;
  font-weight: 500;
  background: transparent;
  border: 1px solid transparent;
  color: var(--sub);
  padding: 7px 14px;
  border-radius: var(--radius-sm) var(--radius-sm) 0 0;
  cursor: pointer;
  transition: color var(--t-fast) var(--ease), background var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease);
  display: inline-flex; align-items: center; gap: 6px;
  white-space: nowrap;
  margin-bottom: -1px;
}
.tab-btn:hover {
  color: var(--text);
  background: var(--raised);
}
.tab-btn.active {
  color: var(--accent);
  border-color: var(--border);
  border-bottom-color: var(--surface);
  background: var(--surface);
  font-weight: 600;
}
.tab-btn:focus-visible {
  outline: none;
  box-shadow: var(--focus-ring);
}
/* Standalone (non-tab-bar) usage - e.g. config docs tag chips: render as pills. */
*:not(.tab-bar) > .tab-btn {
  border-radius: var(--radius-pill);
  border: 1px solid var(--border);
  margin-bottom: 0;
  font-family: var(--mono);
  font-size: .68rem;
  text-transform: lowercase;
  letter-spacing: .04em;
  padding: 4px 11px;
}
*:not(.tab-bar) > .tab-btn.active {
  background: var(--info-bg);
  border-color: var(--info);
  color: var(--info);
}

/* ── Modern polish 2026-04: a11y focus fallback + reduced-motion ── */
a:focus-visible, button:focus-visible, [role="button"]:focus-visible,
[tabindex]:focus-visible, summary:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
  border-radius: var(--radius-sm);
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ── Report styles ── */
.report-preview { background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 24px; }
.rpt-section { margin-bottom: 28px; }
.rpt-section h2 { font-size: 1rem; font-weight: 700; margin-bottom: 12px; padding-bottom: 8px; border-bottom: 1px solid var(--border); }
.rpt-kpi-row { display: flex; gap: 16px; flex-wrap: wrap; margin-bottom: 16px; }
.rpt-kpi { background: var(--raised); border: 1px solid var(--border); border-radius: 6px; padding: 14px 20px; text-align: center; min-width: 100px; }
.rpt-kpi-num { font-size: 1.8rem; font-weight: 700; line-height: 1; }
.rpt-kpi-label { font-size: .72rem; color: var(--sub); margin-top: 4px; }
.rpt-table { width: 100%; border-collapse: collapse; font-size: .78rem; }
.rpt-table th { text-align: left; padding: 6px 10px; border-bottom: 2px solid var(--border2); color: var(--sub); font-family: var(--mono); font-size: .65rem; text-transform: uppercase; letter-spacing: .06em; }
.rpt-table td { padding: 7px 10px; border-bottom: 1px solid var(--border); vertical-align: top; }
#apps-table td { padding: 4px 8px; vertical-align: middle; }
#apps-table th { padding: 5px 8px; }
#apps-table td:first-child { text-align: center; vertical-align: middle; }
.rpt-table tr:hover td { background: var(--raised); }
.rpt-bar-row { display: flex; align-items: center; gap: 10px; margin: 5px 0; font-size: .78rem; }
.rpt-bar-track { flex: 1; height: 10px; background: var(--raised); border-radius: 3px; overflow: hidden; }
.rpt-bar-fill { height: 100%; border-radius: 3px; transition: width .3s; }

/* ── People page ── */
.person-card { display: flex; align-items: center; gap: 10px; padding: 8px 10px; background: var(--raised); border: 1px solid var(--border); border-radius: 5px; margin-bottom: 6px; }
.person-avatar { width: 32px; height: 32px; border-radius: 50%; background: var(--info-bg); border: 1.5px solid var(--info); display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: .8rem; color: var(--info); flex-shrink: 0; }
.person-name { font-weight: 600; font-size: .82rem; }
.person-meta { font-size: .7rem; color: var(--sub); }
.role-badge { display: inline-block; font-size: .6rem; font-weight: 700; padding: .1rem .3rem; border-radius: 3px; background: var(--raised); border: 1px solid var(--border2); color: var(--sub); margin-left: 4px; }

/* ── Print styles ── */
@media print {
  .sidebar, .topbar, .filter-bar, .btn, .nav-item, .toast-container { display: none !important; }
  .main { margin: 0 !important; padding: 0 !important; }
  .content { padding: 0 !important; }
  .report-preview { border: none !important; padding: 0 !important; box-shadow: none !important; background: white !important; color: black !important; }
  .rpt-table th, .rpt-table td { color: black !important; border-color: #ccc !important; }
  .rpt-kpi { border: 1px solid #ccc !important; background: white !important; }
  .badge { border: 1px solid #999 !important; }
  body { background: white !important; }
  .page { display: none !important; }
  #page-reports { display: block !important; }
}
.active-filter { border-color: var(--info) !important; color: var(--info) !important; background: var(--info-bg) !important; }
#catalog-table th { cursor: pointer; }
#catalog-table th:hover { color: var(--text); }

/* Light mode toggle transition */
*, *::before, *::after { transition: background-color .15s, border-color .15s, color .1s; }

/* Apps/Standards page grid cards */
.settings-card { background: var(--surface); border: 1px solid var(--border); border-radius: 3px; padding: 16px; }
.settings-card:hover { border-color: var(--border2); }

/* Agent settings page */
.agent-kpi-row { display: flex; gap: 14px; flex-wrap: wrap; margin-bottom: 16px; }
.agent-kpi { background: var(--raised); border: 1px solid var(--border); border-radius: 3px; padding: 14px 18px; min-width: 140px; flex: 1; }
.agent-kpi-num { font-size: 1.6rem; font-weight: 700; line-height: 1; font-family: var(--mono); }
.agent-kpi-label { font-size: .68rem; color: var(--sub); margin-top: 4px; font-family: var(--mono); text-transform: uppercase; letter-spacing: .06em; }
.agent-cmd-block { background: var(--bg); border: 1px solid var(--border); border-radius: 6px; padding: 12px 14px; font-family: var(--mono); font-size: .72rem; line-height: 1.7; overflow-x: auto; white-space: pre-wrap; word-break: break-all; position: relative; color: var(--text); }
.agent-cmd-block .cmd-comment { color: var(--sub); }
.agent-cmd-block .cmd-param { color: var(--info); }
.agent-cmd-copy { position: absolute; top: 6px; right: 6px; background: var(--surface); border: 1px solid var(--border2); border-radius: 4px; padding: 3px 8px; font-size: .62rem; cursor: pointer; color: var(--sub); font-family: var(--mono); }
.agent-cmd-copy:hover { color: var(--text); border-color: var(--info); }

/* Runbook wizard steps */
.wizard-steps { display: flex; gap: 0; margin-bottom: 20px; border-bottom: 2px solid var(--border); }
.wizard-step { display: flex; align-items: center; gap: 6px; padding: 10px 16px; font-size: .75rem; font-family: var(--mono); color: var(--sub); cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -2px; transition: all .15s; user-select: none; }
.wizard-step:hover { color: var(--text); }
.wizard-step.active { color: var(--info); border-bottom-color: var(--info); }
.wizard-step.completed { color: var(--pass); }
.wizard-step-num { width: 22px; height: 22px; border-radius: 50%; border: 1.5px solid var(--border2); display: flex; align-items: center; justify-content: center; font-size: .65rem; font-weight: 700; flex-shrink: 0; }
.wizard-step.active .wizard-step-num { border-color: var(--info); background: var(--info-bg); color: var(--info); }
.wizard-step.completed .wizard-step-num { border-color: var(--pass); background: var(--pass-bg); color: var(--pass); }
.wizard-panel { display: none; }
.wizard-panel.active { display: block; }
.wizard-checklist { list-style: none; padding: 0; margin: 0; }
.wizard-checklist li { display: flex; align-items: flex-start; gap: 8px; padding: 8px 0; border-bottom: 1px solid var(--border); font-size: .78rem; }
.wizard-checklist li:last-child { border-bottom: none; }
.wizard-check { color: var(--pass); font-size: .9rem; flex-shrink: 0; margin-top: 1px; }
.wizard-resource-row { display: grid; grid-template-columns: 180px 1fr; gap: 8px; align-items: center; margin-bottom: 8px; }
.wizard-resource-row label { font-size: .75rem; font-weight: 600; }
.wizard-resource-row input { font-size: .75rem; font-family: var(--mono); padding: 6px 10px; background: var(--bg); border: 1px solid var(--border); border-radius: 4px; color: var(--text); }
.wizard-resource-row input:focus { outline: none; border-color: var(--info); }
@media (max-width: 768px) {
  .agent-kpi-row { flex-direction: column; }
  .wizard-steps { flex-wrap: wrap; }
  .wizard-resource-row { grid-template-columns: 1fr; }
}

/* Standard coverage bar */
.std-cover-bar { height: 4px; background: var(--raised); border-radius: 2px; overflow: hidden; }
.std-cover-fill { height: 100%; border-radius: 2px; }

/* Framework org filter pills */
#fwmgr-org-pills .btn { border-radius: 3px; }

/* CSV drop zone hover */
#csv-drop-zone:hover { border-color: var(--info); background: var(--info-bg); }

/* Scrollable standard detail modal */
#std-detail-modal .modal { display: flex; flex-direction: column; }

/* App page compliance mini-bar */
.app-comply-bar { height: 5px; background: var(--raised); border-radius: 3px; overflow: hidden; margin: 4px 0; }

/* Group-by header row */
tr[data-group-id] td { background: var(--raised) !important; border-top: 2px solid var(--border2); }

/* Sidebar nav section labels (legacy) */
.nav-section-label { font-family: var(--mono); font-size: .58rem; text-transform: uppercase; letter-spacing: .12em; color: var(--sub); padding: 12px 16px 4px; }
/* Collapsible nav groups */
.nav-group { }
.nav-group-header { display: flex; align-items: center; gap: 8px; padding: 8px 14px 7px; cursor: pointer; user-select: none; font-size: .78rem; font-weight: 500; color: var(--sub); transition: color .15s, background .12s; border-left: 2px solid transparent; }
.nav-group-header:hover { background: var(--raised); color: var(--text); }
.nav-chevron { display: none; }
/* Items hidden by default; revealed on click (.open) OR when group is active */
.nav-group-items { max-height: 0; overflow: hidden; opacity: 0; pointer-events: none; transition: max-height .3s ease, opacity .15s ease; }
.nav-group.open .nav-group-items, .nav-group.active .nav-group-items { max-height: 2000px; opacity: 1; pointer-events: auto; }
/* Chevron indicator on group headers */
.nav-group-header { position: relative; }
.nav-group-header::after { display: none; }
.nav-group.open .nav-group-header::after, .nav-group.active .nav-group-header::after { display: none; }
/* When sidebar search is active, expand all visible groups. display:block
   !important is required to beat the nav-v3 collapse rule
   (.shell[data-nav-v3] .nav-panel .nav-group:not(.open):not(.active) >
   .nav-group-items { display:none }) so matches in other modules surface (#1473).
   filterNavItems hides non-matching items/groups via inline styles. */
.sidebar.searching .nav-group-items { display: block !important; max-height: 2000px !important; opacity: 1 !important; pointer-events: auto !important; }
/* While searching, show group headers too so users see which module a match
   belongs to (headers are otherwise hidden under nav-v3). */
.shell[data-nav-v3] .sidebar.searching .nav-panel .nav-group-header { display: flex !important; }
#sidebar-search { width:100%;font-size:.72rem;padding:5px 8px 5px 26px;border-radius:4px;border:1px solid var(--border);background:var(--raised);color:var(--text);outline:none;box-sizing:border-box; }
#sidebar-search:focus { border-color:var(--accent); }
#sidebar-search-wrap { position:relative;padding:6px 10px 2px; }
#sidebar-search-wrap::before { content:'⌕';position:absolute;left:18px;top:50%;transform:translateY(-50%);font-size:.8rem;color:var(--sub);pointer-events:none; }

/* ── Category Hub (#163) ── */
.hub-header { display:flex; align-items:center; gap:16px; padding:24px 0 20px; border-bottom:1px solid var(--border); margin-bottom:20px; }
.hub-title-icon { font-size:2rem; width:48px; text-align:center; opacity:.7; }
.hub-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(220px,1fr)); gap:12px; }
.hub-card { display:flex; align-items:flex-start; gap:12px; padding:14px 16px; background:var(--surface); border:1px solid var(--border); border-radius:8px; cursor:pointer; transition:border-color .15s, background .15s, transform .1s; }
.hub-card:hover { border-color:var(--accent); background:color-mix(in srgb, var(--accent) 6%, var(--surface)); transform:translateY(-1px); }
.hub-card-icon { font-size:1.2rem; opacity:.6; margin-top:2px; min-width:20px; text-align:center; }
.hub-card-title { font-weight:600; font-size:.82rem; margin-bottom:3px; }
.hub-card-desc { font-size:.72rem; color:var(--sub); line-height:1.4; }
/* ═════ Canonical KPI tiles (parity with tater-shared.css) ═════
   tater-app.css (TATER.html + hub.html) previously defined NONE of the canonical
   .kpi family — TATER uses its own prefixed schemes (.rpt-kpi-*, .mod-dash-kpi-*)
   and hub uses .hub-kpi-chip-scoped classes. That meant the shared taterKpiCard()
   builder would render unstyled here. These mirror tater-shared.css exactly so the
   builder looks identical in every app. Purely additive: no existing TATER/hub
   markup uses these bare class names.
   NOTE: deliberately NOT defining bare .kpi-lbl / .kpi-val — hub scopes those
   under .hub-kpi-chip, and a bare rule would leak styles (e.g. font-weight) onto
   the hub chips. taterKpiCard emits .kpi-label/.kpi-value, never .kpi-lbl. */
.kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 10px; margin-bottom: 14px; }
.kpi { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); padding: 12px 14px; }
.kpi-card { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); padding: 12px 14px; }
.kpi-label { font-size: .62rem; text-transform: uppercase; letter-spacing: .06em; color: var(--sub); font-weight: 600; }
.kpi-value { font-size: 1.5rem; font-weight: 700; margin-top: 4px; }
.kpi-icon { font-size: 1.1rem; line-height: 1; }
@media (max-width: 768px) {
  .kpis { grid-template-columns: repeat(2, 1fr) !important; gap: 8px !important; }
  .kpi, .kpi-card { padding: 10px !important; }
  .kpi-value { font-size: 1.4rem !important; }
  .kpi-label { font-size: .6rem !important; }
}

/* Hub KPI band */
.hub-kpi-bar { display:flex; flex-wrap:wrap; gap:8px; margin-bottom:20px; }
.hub-kpi-chip { display:flex; flex-direction:column; align-items:center; padding:10px 18px; background:var(--surface); border:1px solid var(--border); border-radius:8px; min-width:78px; cursor:default; transition:border-color .15s; }
.hub-kpi-chip:hover { border-color:var(--accent); }
.hub-kpi-chip .kpi-val { font-size:1.35rem; font-weight:700; font-family:var(--mono); line-height:1.1; }
.hub-kpi-chip .kpi-lbl { font-size:.62rem; color:var(--sub); text-transform:uppercase; letter-spacing:.05em; margin-top:3px; white-space:nowrap; }
.hub-kpi-chip.kpi-pass { border-color:rgba(34,197,94,.35); } .hub-kpi-chip.kpi-pass .kpi-val { color:var(--pass); }
.hub-kpi-chip.kpi-fail { border-color:rgba(239,68,68,.35); } .hub-kpi-chip.kpi-fail .kpi-val { color:var(--fail); }
.hub-kpi-chip.kpi-warn { border-color:rgba(234,179,8,.35); } .hub-kpi-chip.kpi-warn .kpi-val { color:#eab308; }
.hub-kpi-chip.kpi-accent { border-color:rgba(59,158,255,.35); } .hub-kpi-chip.kpi-accent .kpi-val { color:var(--accent); }
.hub-kpi-skeleton { background:var(--surface); border:1px solid var(--border); border-radius:8px; width:90px; height:62px; animation:skeleton-pulse 1.4s ease-in-out infinite; }
@keyframes skeleton-pulse { 0%,100%{opacity:.4} 50%{opacity:.9} }

/* ── Login Screen ── */
.login-screen {
  position: fixed; inset: 0; z-index: 500;
  background: radial-gradient(ellipse at 30% 20%, rgba(59,158,255,.08) 0%, transparent 50%),
              radial-gradient(ellipse at 70% 80%, rgba(45,204,113,.05) 0%, transparent 50%),
              var(--bg);
  display: flex; align-items: center; justify-content: center;
  transition: opacity .3s;
}
.login-screen.hidden { opacity: 0; pointer-events: none; }
.login-card {
  background: var(--surface); border: 1px solid var(--border2);
  border-radius: 16px; padding: 52px 44px; text-align: center;
  max-width: 440px; width: calc(100% - 40px);
  box-shadow: 0 12px 48px rgba(0,0,0,.5), 0 0 0 1px rgba(59,158,255,.06);
}
.login-shield {
  width: 88px; height: 88px; margin: 0 auto 24px;
  display: flex; align-items: center; justify-content: center;
  filter: drop-shadow(0 0 20px rgba(59,158,255,.2));
}
.login-shield img { width: 100%; height: 100%; object-fit: contain; }
.login-title {
  font-family: var(--mono); font-size: 2rem; font-weight: 700;
  color: #ffffff; letter-spacing: .12em; margin-bottom: 6px;
}
.login-title span { color: #ffffff; }
.login-tagline {
  font-family: var(--mono); font-size: .66rem; color: var(--sub);
  letter-spacing: .12em; text-transform: uppercase; margin-bottom: 32px;
}
.login-btn {
  display: inline-flex; align-items: center; gap: 10px;
  background: linear-gradient(135deg, #3b9eff 0%, #2b7fd4 100%); color: #fff; border: none;
  padding: 14px 28px; border-radius: 8px; font-size: .9rem;
  font-weight: 600; font-family: var(--sans); cursor: pointer;
  transition: all .2s; width: 100%;
  justify-content: center;
  box-shadow: 0 2px 12px rgba(59,158,255,.25);
}
.login-btn:hover { background: linear-gradient(135deg, #4da8ff 0%, #3b9eff 100%); transform: translateY(-1px); box-shadow: 0 6px 24px rgba(59,158,255,.35); }
.login-btn:active { transform: none; box-shadow: 0 2px 8px rgba(59,158,255,.2); }
.login-btn-password { background: linear-gradient(135deg, var(--success) 0%, #1fa855 100%); box-shadow: 0 2px 12px rgba(45,204,113,.2); margin-top: 4px; }
.login-btn-password:hover { background: linear-gradient(135deg, #36d87a 0%, var(--success) 100%); box-shadow: 0 6px 24px rgba(45,204,113,.3); }
.login-input {
  width: 100%; padding: 12px 14px; border-radius: 8px; border: 1px solid var(--border2);
  background: var(--bg); color: var(--text); font-size: .85rem; font-family: var(--sans);
  margin-bottom: 8px; box-sizing: border-box; outline: none; transition: border-color .2s, box-shadow .2s;
}
.login-input:focus { border-color: var(--info); box-shadow: 0 0 0 3px rgba(59,158,255,.15); }
.login-input::placeholder { color: var(--muted); }
.login-divider { display: flex; align-items: center; gap: 12px; color: var(--muted); }
.login-divider::before, .login-divider::after { content: ''; flex: 1; height: 1px; background: var(--border); }
.login-btn svg { width: 20px; height: 20px; }
.login-divider {
  display: flex; align-items: center; gap: 12px;
  margin: 20px 0; color: var(--sub); font-size: .72rem;
}
.login-divider::before, .login-divider::after {
  content: ''; flex: 1; height: 1px; background: var(--border);
}
.login-offline-btn {
  background: transparent; border: 1px solid var(--border2);
  color: var(--sub); padding: 12px 20px; border-radius: 8px;
  font-size: .78rem; font-family: var(--sans); cursor: pointer;
  transition: all .15s; width: 100%;
}
.login-offline-btn:hover { border-color: var(--text); color: var(--text); background: rgba(255,255,255,.03); }
.login-error {
  margin-top: 16px; font-size: .75rem; color: var(--fail);
  display: none;
}
.login-footer {
  margin-top: 28px; font-size: .6rem; color: var(--border2);
  font-family: var(--mono); letter-spacing: .08em;
}
.login-dev-tools { display: none; }
.login-sim-row { display: flex; gap: 8px; }
.login-sim-btn {
  flex: 1; padding: 8px 4px; border-radius: 6px; font-size: .7rem;
  font-family: var(--mono); cursor: pointer; transition: all .15s;
  border: 1px solid var(--border); background: transparent; color: var(--sub);
}
.login-sim-btn:hover { color: var(--text); border-color: var(--text); }
.sim-viewer:hover { border-color: var(--sub); color: var(--sub); background: rgba(160,160,160,.08); }
.sim-admin:hover { border-color: var(--pass); color: var(--pass); background: rgba(45,204,113,.08); }
.sim-sa:hover { border-color: var(--info); color: var(--info); background: rgba(59,158,255,.08); }

/* User info in topbar */
.user-info {
  display: flex; align-items: center; gap: 8px;
  font-size: .75rem; color: var(--sub);
  padding-left: 8px; border-left: 1px solid var(--border);
  flex-shrink: 0; margin-left: 4px;
}
.topbar-icon-btn {
  width: 32px; height: 32px; min-width: 32px; min-height: 32px;
  padding: 0; display: flex; align-items: center; justify-content: center;
  border-radius: 6px; flex-shrink: 0; font-size: 1rem;
}
.user-avatar {
  width: 32px; height: 32px; min-width: 32px; min-height: 32px;
  border-radius: 50%; overflow: hidden;
  background: var(--info-bg); border: 1.5px solid var(--info);
  display: flex; align-items: center; justify-content: center;
  font-weight: 700; font-size: .7rem; color: var(--info); flex-shrink: 0;
}
.user-name { font-weight: 600; color: var(--text); white-space: nowrap; }
.user-signout {
  background: none; border: none; color: var(--sub); font-size: .68rem;
  cursor: pointer; padding: 2px 4px; border-radius: 3px;
  font-family: var(--sans); transition: color .15s;
}
.user-signout:hover { color: var(--fail); }
/* Dropdown menu items - reused by tools, profile, org menus */
.topbar-dropdown { display:none;position:absolute;top:calc(100% + 4px);right:0;min-width:200px;background:var(--raised);border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.25);z-index:9999;padding:6px 0; }
.topbar-dropdown.open { display:block; }
.tools-menu-item { padding:8px 14px;font-size:.78rem;cursor:pointer;color:var(--text);white-space:nowrap;display:flex;align-items:center;gap:8px; }
.tools-menu-item:hover { background:var(--info-bg);color:var(--info); }
.tools-menu-item.danger { color:var(--fail); }
.tools-menu-item.danger:hover { background:rgba(231,76,60,.1);color:var(--fail); }
@media (max-width: 768px) {
  .login-card { padding: 32px 24px; }
  .login-title { font-size: 1.2rem; }
  .user-name { display: none; }
  .user-info { padding-left: 4px; border: none; }
}

/* ── Hamburger button (hidden on desktop) ── */
.hamburger { display: none; background: none; border: none; color: var(--text); font-size: 1.4rem; cursor: pointer; padding: 4px 8px; border-radius: 4px; flex-shrink: 0; line-height: 1; }
.hamburger:hover { background: var(--raised); }

/* ── Mobile sidebar overlay ── */
.sidebar-overlay { display: none; position: fixed; inset: 0; background: rgba(0,0,0,.6); z-index: 49; }
.sidebar-overlay.open { display: block; }

/* ══════════════════════════════════════════════════════════
   MOBILE RESPONSIVE - Tablet (≤960px)
   ══════════════════════════════════════════════════════════ */
@media (max-width: 960px) {
  .stat-grid { grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); gap: 8px; }
  .app-bars { grid-template-columns: 1fr; }
  .override-card { grid-template-columns: 1fr; }
  .override-meta { text-align: left; }
  .form-row-2 { grid-template-columns: 1fr; }
  .rpt-kpi-row { justify-content: center; }
}

/* ══════════════════════════════════════════════════════════
   MOBILE RESPONSIVE - Phone (≤768px)
   ══════════════════════════════════════════════════════════ */
@media (max-width: 768px) {
  /* Show hamburger, hide sidebar */
  .hamburger { display: block; }

  .sidebar {
    position: fixed;
    top: 0; left: 0; bottom: 0;
    z-index: 50;
    transform: translateX(-100%);
    transition: transform .25s ease;
    width: 260px;
    min-width: 260px;
    box-shadow: none;
  }
  .sidebar.open {
    transform: translateX(0);
    box-shadow: 4px 0 24px rgba(0,0,0,.5);
  }

  .shell { flex-direction: column; }
  .main { width: 100%; min-height: 0; overflow: hidden; }
  .content { -webkit-overflow-scrolling: touch; overflow-y: auto; }

  /* Topbar - wrap, hide redundant elements */
  .topbar { flex-wrap: wrap; height: auto; min-height: 48px; padding: 6px 12px; gap: 6px; }
  .topbar-logo { display: none !important; }
  .topbar-company { display: none !important; }
  .topbar-title { font-size: .68rem; max-width: 100px; }
  .topbar-meta { display: none; }
  #impersonate-selector { display: none !important; }
  .topbar-actions { gap: 4px; }
  .topbar-actions .btn { font-size: .68rem; padding: .25rem .5rem; }
  /* Hide less important topbar buttons on mobile (older rule); the
     hamburger handles cleaner overflow for new icon buttons. */
  .topbar-actions .btn:not(#theme-toggle):not(:first-of-type) { display: none; }
  .topbar-actions .btn#theme-toggle { order: -1; }
  .topbar-actions > .topbar-hamburger-btn { display: inline-flex; }
  #org-selector-btn { max-width: 140px; font-size: .72rem; padding: 4px 8px; }
  #org-role-badge { font-size: .7rem; }

  /* Content padding */
  .content { padding: 14px; }

  /* Stat grid */
  .stat-grid { grid-template-columns: repeat(2, 1fr); gap: 8px; margin-bottom: 16px; }
  .stat-num { font-size: 1.4rem; }
  .stat-card { padding: 12px; }

  /* Dashboard flex layout → stack */
  #dash-data > div[style*="display:flex"] { flex-direction: column !important; }

  /* Trend chart */
  .trend-card { padding: 12px; margin-bottom: 16px; }
  .trend-hdr { flex-direction: column; align-items: flex-start; gap: 6px; }

  /* App bars grid */
  .app-bars { grid-template-columns: 1fr; gap: 8px; margin-bottom: 16px; }

  /* Filter bar - stack vertically on mobile */
  .filter-bar { flex-direction: column; gap: 6px; }
  .filter-bar input { width: 100%; min-width: 0; }
  .filter-bar select { width: 100%; min-width: 0; flex: none; }
  .filter-bar > div[style*="margin-left:auto"] { margin-left: 0 !important; width: 100%; display: flex; gap: 6px; }
  .filter-bar > div[style*="margin-left:auto"] .btn { flex: 1; }
  #page-reports .filter-bar select { max-width: none !important; }

  /* Table: hide less important columns on small screens */
  .ctrl-table-wrap { margin: 0 -14px; border-radius: 0; border-left: none; border-right: none; -webkit-overflow-scrolling: touch; }
  table { font-size: .75rem; }
  th, td { padding: 7px 8px; }
  td .badge { font-size: .58rem; padding: 1px 5px; }
  .td-title { max-width: 160px; }
  .td-fw { display: none; }
  th:nth-child(5), td:nth-child(5) { display: none; } /* Hide Framework column */

  /* Detail row */
  .detail-inner { grid-template-columns: 1fr; padding: 12px 14px; gap: 12px; }
  .detail-inner pre { font-size: .65rem; max-height: 100px; overflow: auto; }
  .detail-inner img { max-width: 100%; height: auto; }

  /* Scan cards */
  .scan-card { flex-direction: column; align-items: flex-start; gap: 8px; padding: 12px; }
  .scan-stats { flex-wrap: wrap; gap: 8px; }

  /* Override cards */
  .override-card { grid-template-columns: 1fr; gap: 6px; padding: 10px 12px; }
  .override-meta { text-align: left; display: flex; gap: 12px; flex-wrap: wrap; }

  /* Upload zone */
  .upload-zone { padding: 20px 16px; }
  .upload-icon { font-size: 1.5rem; }

  /* Modal */
  .modal { width: calc(100vw - 24px); max-height: calc(100vh - 40px); padding: 18px; }
  .modal-title { font-size: .8rem; }

  /* Empty state */
  .empty-state { padding: 40px 16px; }
  .empty-icon { font-size: 2rem; }
  .empty-state h3 { font-size: .8rem; }

  /* Reports */
  .rpt-kpi { padding: 10px 14px; min-width: 80px; }
  .rpt-kpi-num { font-size: 1.3rem; }
  .report-preview { padding: 14px; }
  .rpt-section h2 { font-size: .82rem; flex-wrap: wrap; }

  /* People cards */
  .person-card { padding: 8px; gap: 8px; }

  /* Section headers & page-level */
  .section-hdr h2 { font-size: .72rem; }
  .page > .section-hdr { flex-direction: column; align-items: flex-start; gap: 6px; }
  .page > .section-hdr .btn { width: 100%; }
  .pagination { flex-wrap: wrap; justify-content: center; gap: 4px; }
  .pagination .btn { padding: .25rem .4rem; font-size: .68rem; }

  /* Settings cards */
  .settings-card { padding: 12px; }
  /* Device management grid → stack on mobile */
  #devicemgmt-card > div[style*="grid-template-columns"] { grid-template-columns: 1fr !important; }
  /* Trust Center editor → stack on mobile */
  #tc-editor-grid { grid-template-columns: 1fr !important; }
}

/* ══════════════════════════════════════════════════════════
   MOBILE RESPONSIVE - Small phone (≤480px)
   ══════════════════════════════════════════════════════════ */
/* ── Org selector styling ── */
#org-selector-btn { transition: border-color .2s; background: var(--raised) !important; color: var(--text) !important; }
#org-selector-btn:hover { border-color: var(--accent) !important; }
[data-theme="light"] #org-selector-btn { background: #fff !important; color: #2c3347 !important; border-color: var(--info) !important; }

@media (max-width: 480px) {
  .stat-grid { grid-template-columns: repeat(2, 1fr); gap: 6px; }
  .stat-num { font-size: 1.2rem; }
  .stat-label { font-size: .58rem; }
  .stat-card { padding: 10px; }

  /* Hide all topbar action buttons except theme toggle */
  .topbar-actions .btn:not(#theme-toggle) { display: none; }
  #org-selector-btn { max-width: 120px; font-size: .72rem; padding: 4px 6px; }

  .topbar-title { font-size: .66rem; max-width: 80px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

  .content { padding: 10px; }

  table { font-size: .7rem; }
  th, td { padding: 5px 6px; }
  .td-title { max-width: 120px; }

  /* Hide more table columns */
  th:nth-child(4), td:nth-child(4) { display: none; } /* Hide Application column */

  /* Modals - near full-screen on small phones */
  .modal { width: calc(100vw - 12px); max-height: calc(100vh - 20px); padding: 12px; border-radius: 6px; }
  .form-row { margin-bottom: 8px; }
  .modal-actions { flex-direction: column; gap: 6px; }
  .modal-actions .btn { width: 100%; }
  .form-input, .form-select, .form-textarea { font-size: .75rem; padding: .4rem .5rem; }

  /* Login - portrait-friendly */
  .login-card { padding: 28px 16px; }
  .login-btn { width: 100%; justify-content: center; padding: 12px 20px; }
  .login-shield { width: 44px; height: 44px; }

  /* Dashboard */
  .trend-card canvas { max-height: 180px; }

  .scan-ts { font-size: .72rem; min-width: auto; }
  .scan-meta { font-size: .72rem; min-width: auto; }
}

/* ══════════════════════════════════════════════════════════
   FAVORITES DROPDOWN
   ══════════════════════════════════════════════════════════ */
.fav-star { color: var(--sub); cursor: pointer; transition: color .15s, transform .15s; }
.fav-star:hover { color: #f59e0b; transform: scale(1.15); }
.fav-star.active { color: #f59e0b; }
#fav-dropdown { display:none;position:absolute;top:100%;right:0;min-width:220px;max-width:280px;background:var(--raised);border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.35);z-index:9999;padding:6px 0;max-height:360px;overflow-y:auto; }
#fav-dropdown .fav-item { display:flex;align-items:center;gap:8px;padding:7px 14px;font-size:.78rem;color:var(--text);cursor:pointer;transition:background .12s; }
#fav-dropdown .fav-item:hover { background:var(--surface); }
#fav-dropdown .fav-item .fav-rm { margin-left:auto;opacity:0;color:var(--sub);font-size:.7rem;transition:opacity .12s; }
#fav-dropdown .fav-item:hover .fav-rm { opacity:1; }
#fav-dropdown .fav-empty { padding:16px;text-align:center;font-size:.72rem;color:var(--sub); }
#fav-dropdown .fav-hdr { padding:6px 14px;font-size:.62rem;text-transform:uppercase;letter-spacing:.08em;color:var(--sub);font-family:var(--mono);border-bottom:1px solid var(--border);margin-bottom:2px; }

/* ══════════════════════════════════════════════════════════
   WIDGET DASHBOARD
   ══════════════════════════════════════════════════════════ */
.wd-grid { display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px;margin-bottom:16px; }
.wd-widget { background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:14px 16px;position:relative;min-height:120px;transition:box-shadow .15s,border-color .15s; }
.wd-widget:hover { border-color:var(--accent);box-shadow:0 2px 12px rgba(0,0,0,.15); }
.wd-widget-hdr { display:flex;align-items:center;gap:8px;margin-bottom:10px;cursor:grab;user-select:none; }
.wd-widget-hdr .wd-grip { color:var(--sub);opacity:.4;font-size:.8rem;cursor:grab; }
.wd-widget-hdr .wd-title { font-size:.72rem;font-family:var(--mono);text-transform:uppercase;letter-spacing:.06em;color:var(--sub);flex:1; }
.wd-widget-hdr .wd-close { background:none;border:none;color:var(--sub);cursor:pointer;font-size:.72rem;opacity:.5;padding:2px 4px;border-radius:3px;transition:all .12s; }
.wd-widget-hdr .wd-close:hover { opacity:1;background:var(--fail-bg);color:var(--fail); }
.wd-widget.dragging { opacity:.5;border:2px dashed var(--accent); }
.wd-widget.drag-over { border-color:var(--accent);box-shadow:0 0 0 2px var(--accent); }
.wd-add-btn { background:var(--surface);border:2px dashed var(--border);border-radius:8px;min-height:120px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--sub);font-size:.78rem;gap:6px;transition:all .15s; }
.wd-add-btn:hover { border-color:var(--accent);color:var(--accent); }
#wd-picker { display:none;position:fixed;inset:0;z-index:120;background:rgba(0,0,0,.75); }
#wd-picker-inner { max-width:560px;margin:60px auto;background:var(--raised);border:1px solid var(--border);border-radius:12px;padding:24px;max-height:70vh;overflow-y:auto; }
#wd-picker .wd-pick-card { display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--border);border-radius:6px;cursor:pointer;margin-bottom:6px;transition:all .12s; }
#wd-picker .wd-pick-card:hover { border-color:var(--accent);background:var(--surface); }
#wd-picker .wd-pick-card.already { opacity:.4;pointer-events:none; }
#wd-picker .wd-pick-icon { font-size:1.1rem;width:28px;text-align:center; }
#wd-picker .wd-pick-name { font-size:.78rem;font-weight:600; }
#wd-picker .wd-pick-desc { font-size:.68rem;color:var(--sub); }

/* ══════════════════════════════════════════════════════════
   ENHANCED MOBILE - Dashboard + Widget + Tables
   ══════════════════════════════════════════════════════════ */
@media (max-width: 768px) {
  .wd-grid { grid-template-columns: 1fr; gap: 10px; }
  .wd-widget { min-height: 90px; padding: 12px; }
  #mydash-cols { grid-template-columns: 1fr !important; }
  #fav-dropdown { position: fixed; left: 8px; right: 8px; top: 52px; min-width: 0; max-width: none; }
  .ctrl-table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  #dash-quick-actions { padding: 8px 10px; gap: 4px; }
  #dash-quick-actions .btn { font-size: .65rem; padding: .2rem .4rem; }
  .metric-card { padding: 10px 12px; }
  .metric-value { font-size: 1.3rem; }
  div[style*="grid-template-columns: repeat(auto-fit"] { grid-template-columns: 1fr !important; }
  .section-hdr { flex-wrap: wrap; gap: 6px; }
  .section-hdr .btn { font-size: .68rem; }

  /* ADO #1892 — `.data-table` SCROLLS on mobile. It is deliberately NOT added to the
     card-layout selector below, and that is the opposite of what the ticket asked for.
     MEASURED: TATER.html has 121 `class="data-table"` tables and ZERO `data-label`
     attributes. The card layout hides `thead` and paints each cell's field name from
     `td::before { content: attr(data-label) }` — and the rule at the end of this block
     suppresses that ::before when the attribute is absent, so card-ifying these tables
     would produce a column of BARE VALUES with no headers and no labels. That is worse
     than a sideways scroll, not better: a wide table you can scroll is legible, a
     label-less stack is not.
     So the fix for "wide tables push the page horizontally" is to let the table itself
     scroll. `display: block` makes the table a scrollable box while thead/tbody keep
     their own display, so column alignment and headers both survive. 79 of the 121 are
     already inside a `.table-wrap`; this covers the rest without touching those. */
  table.data-table {
    display: block;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    max-width: 100%;
  }

  /* TABLES → card layout (matches tater-shared.css for sister apps) */
  table.tbl, table.table, .tbl-wrapper > table { border: none !important; }
  table.tbl thead, table.table thead { display: none; }
  table.tbl, table.tbl tbody, table.tbl tr, table.tbl td,
  table.table, table.table tbody, table.table tr, table.table td { display: block; width: 100%; }
  table.tbl tr, table.table tr {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    margin-bottom: 8px;
    padding: 10px 12px;
  }
  table.tbl td, table.table td {
    padding: 4px 0 !important;
    border: none !important;
    font-size: .82rem;
  }
  table.tbl td:first-child, table.table td:first-child { font-weight: 600; color: var(--text); padding-top: 0 !important; font-size: .9rem; }
  table.tbl td::before, table.table td::before {
    content: attr(data-label);
    display: block;
    font-size: .58rem;
    text-transform: uppercase;
    letter-spacing: .08em;
    color: var(--sub);
    margin-bottom: 1px;
  }
  /* #779: tables rendered by tater-views.js emit <td> without data-label, so the
     rule above would paint an empty label block on every cell (stray gap in the
     mobile card layout). Suppress it where there is nothing to label. */
  table.tbl td:not([data-label])::before, table.table td:not([data-label])::before { display: none; }

  /* Modals → full-screen */
  .modal { max-width: 100% !important; width: 100% !important; height: 100vh; max-height: 100vh; margin: 0 !important; border-radius: 0 !important; }
  .modal-body { padding: 12px 14px !important; -webkit-overflow-scrolling: touch; overflow-y: auto; }
  .modal-actions { padding: 10px 14px !important; flex-wrap: wrap; gap: 6px; position: sticky; bottom: 0; background: var(--surface); border-top: 1px solid var(--border); z-index: 5; }
  .modal-actions .btn { flex: 1 1 auto; min-height: 40px; }

  /* Forms - stack 2/3-col grids vertically; bigger tap targets, 16px font to prevent iOS zoom */
  .form-row, .form-row-2, .form-row-3 { grid-template-columns: 1fr !important; gap: 10px !important; }
  .form-input, .form-select, .form-control,
  input[type="text"]:not(#org-selector-btn):not(.topbar-org-selector),
  input[type="email"], input[type="number"], input[type="date"], textarea, select { font-size: 16px !important; min-height: 40px; }
  textarea { min-height: 80px; }

  /* Buttons - Apple HIG ≥44px tap targets where space allows */
  .btn { min-height: 40px; padding: 8px 14px; }
  .btn-sm { min-height: 32px; padding: 6px 10px; font-size: .76rem; }

  /* Filter bars stack on mobile */
  .filter-bar { flex-direction: column; gap: 8px !important; }
  .filter-bar > * { width: 100% !important; }
}
@media (max-width: 480px) {
  .wd-grid { grid-template-columns: 1fr; }
  .wd-widget-hdr .wd-title { font-size: .65rem; }
  #dash-data > div:first-child { flex-direction: column !important; }
  #stat-grid { flex: none !important; }
  .trend-card { min-width: 0 !important; }
  #fav-dropdown { left: 4px; right: 4px; }
  #wd-picker-inner { margin: 20px 8px; padding: 16px; }
}

/* ─── Unified Controls V2 ──────────────────────────────────────────────────── */
.uc-domain-chip {
  display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:3px;
  font-size:.72rem;font-weight:600;cursor:pointer;border:1px solid var(--border);
  background:var(--surface);color:var(--sub);transition:all .15s;user-select:none;
}
.uc-domain-chip.active { background:var(--accent);color:#fff;border-color:var(--accent); }
.uc-domain-chip .uc-chip-count { font-weight:400;opacity:.8; }

.uc-fw-chip {
  display:inline-flex;align-items:center;padding:3px 8px;border-radius:3px;
  font-size:.66rem;font-weight:500;cursor:pointer;border:1px solid var(--border);
  background:var(--surface);color:var(--sub);transition:all .15s;user-select:none;
}
.uc-fw-chip.active { background:var(--info);color:#fff;border-color:var(--info); }

.uc-domain-section { margin-bottom:16px; }
.uc-domain-header {
  display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:3px;
  background:var(--surface);border:1px solid var(--border);cursor:pointer;user-select:none;
  margin-bottom:6px;
}
.uc-domain-header:hover { border-color:var(--accent); }
.uc-domain-header .uc-domain-label { font-weight:700;font-size:.82rem; }
.uc-domain-header .uc-domain-stats { font-size:.72rem;color:var(--sub);margin-left:auto; }
.uc-domain-header .uc-chevron { font-size:.7rem;color:var(--sub);transition:transform .2s; }
.uc-domain-section.collapsed .uc-domain-body { display:none; }
.uc-domain-section.collapsed .uc-chevron { transform:rotate(-90deg); }

.uc-control-table { width:100%;border-collapse:collapse; }
.uc-control-table th { text-align:left;font-size:.68rem;font-weight:600;color:var(--sub);padding:6px 10px;border-bottom:1px solid var(--border); }
.uc-control-table td { padding:7px 10px;font-size:.78rem;border-bottom:1px solid var(--border);vertical-align:middle; }
.uc-control-table tr:hover td { background:color-mix(in srgb, var(--accent) 4%, transparent); }
.uc-control-table tr.uc-control-row { cursor:pointer; }
.uc-control-table tr.uc-control-row.active { background:color-mix(in srgb, var(--accent) 12%, var(--bg));border-left:3px solid var(--accent); }

.uc-risk-badge { display:inline-block;padding:2px 7px;border-radius:4px;font-size:.66rem;font-weight:600; }
.uc-risk-badge.critical { background:var(--fail-bg);color:var(--fail);border:1px solid var(--fail);text-transform:uppercase;letter-spacing:.04em; }
.uc-risk-badge.high { background:#e67e22;color:#fff; }
.uc-risk-badge.medium { background:#f39c12;color:#fff; }
.uc-risk-badge.low { background:var(--success);color:#fff; }

.uc-variation-detail { background:var(--raised); }
.uc-variation-detail td { padding:5px 10px;font-size:.74rem; }

/* [Item 118] Slide-out detail panel */
.ucv2-slideout-backdrop { position:fixed;inset:0;background:rgba(0,0,0,.85);z-index:899;display:none; }
.ucv2-slideout { position:fixed;background:var(--surface);border:1px solid var(--border);box-shadow:0 -4px 24px rgba(0,0,0,.6);z-index:900;overflow:hidden;display:flex;flex-direction:column;transition:transform .2s ease;backdrop-filter:none;opacity:1; }
.ucv2-slideout.bottom { left:0;right:0;bottom:0;height:45vh;max-height:55vh;border-radius:6px 6px 0 0; }
.ucv2-slideout.right { top:0;right:0;bottom:0;width:45vw;max-width:600px;min-width:340px;border-radius:6px 0 0 6px; }
.ucv2-slideout-header { display:flex;align-items:center;gap:8px;padding:10px 16px;border-bottom:1px solid var(--border);background:var(--raised);flex-shrink:0; }
.ucv2-slideout-body { flex:1;overflow-y:auto;overflow-x:hidden;padding:14px 18px;background:var(--surface);word-break:break-word; }
/* Variations table inside the slideout: do NOT use table-layout:fixed -
   when the slideout is narrow the browser shrinks each column to ~100px,
   then the inherited `word-break: break-word` from .ucv2-slideout-body
   wraps text at every character boundary (TIER renders as T/I/E/R
   stacked). Let columns size naturally and allow horizontal scroll. */
.ucv2-slideout.right .uc-control-table-wrap { overflow-x:auto;max-width:100%; }
.ucv2-slideout.right .uc-control-table { width:100%;table-layout:auto;min-width:560px; }
.ucv2-slideout.right .uc-control-table td,.ucv2-slideout.right .uc-control-table th {
  white-space:normal;
  word-break:normal;
  overflow-wrap:break-word;
}
.ucv2-slideout.right .detail-section table { max-width:100%;display:block;overflow-x:auto; }
.uc-variation-name { font-weight:600;font-size:.74rem; }
.uc-threshold-pill {
  display:inline-block;padding:1px 6px;border-radius:3px;font-size:.62rem;font-weight:500;
  background:color-mix(in srgb, var(--info) 15%, transparent);color:var(--info);
}
.uc-fw-badge {
  display:inline-block;padding:1px 6px;border-radius:3px;font-size:.6rem;font-weight:500;
  background:color-mix(in srgb, var(--sub) 12%, transparent);color:var(--sub);margin:1px 2px;
}
.uc-verdict-badge {
  display:inline-block;padding:2px 8px;border-radius:4px;font-size:.68rem;font-weight:600;
}
.uc-verdict-badge.uc-pass { background:color-mix(in srgb, var(--success) 15%, transparent);color:var(--success); }
.uc-verdict-badge.uc-fail { background:color-mix(in srgb, var(--danger) 15%, transparent);color:var(--danger); }
.uc-verdict-badge.uc-na { background:color-mix(in srgb, var(--sub) 10%, transparent);color:var(--sub); }
.uc-verdict-badge.uc-error { background:color-mix(in srgb, var(--warning) 15%, transparent);color:var(--warning); }
.uc-platform-tags { display:inline-flex;gap:3px;flex-wrap:wrap; }
.uc-platform-tag { font-size:.6rem;padding:1px 5px;border-radius:3px;background:color-mix(in srgb, var(--accent) 10%, transparent);color:var(--accent); }

/* Domain color accents */
.uc-domain-header[data-domain="IAM"] { border-left:3px solid #3498db; }
.uc-domain-header[data-domain="DATA"] { border-left:3px solid #2ecc71; }
.uc-domain-header[data-domain="NET"] { border-left:3px solid #e74c3c; }
.uc-domain-header[data-domain="LOG"] { border-left:3px solid #9b59b6; }
.uc-domain-header[data-domain="END"] { border-left:3px solid #f39c12; }
.uc-domain-header[data-domain="APP"] { border-left:3px solid #1abc9c; }
.uc-domain-header[data-domain="GOV"] { border-left:3px solid #e67e22; }

/* Policy Template Browser */
.tmpl-browser-modal { width: 900px; max-width: calc(100vw - 40px); max-height: 90vh; }
.tmpl-vars-modal { width: 700px; max-width: calc(100vw - 40px); max-height: 90vh; }
.tmpl-card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 12px; max-height: 55vh; overflow-y: auto; padding: 2px; }
.tmpl-card { background: var(--raised); border: 1px solid var(--border); border-radius: 8px; padding: 16px; cursor: default; transition: border-color .15s, box-shadow .15s; display: flex; flex-direction: column; }
.tmpl-card:hover { border-color: var(--info); box-shadow: 0 2px 12px rgba(59,158,255,.12); }
.tmpl-card-title { font-family: var(--mono); font-size: .8rem; font-weight: 600; color: var(--text); margin-bottom: 6px; }
.tmpl-card-desc { font-size: .72rem; color: var(--sub); margin-bottom: 10px; flex: 1; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.tmpl-card-meta { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; margin-bottom: 10px; }
.tmpl-badge { font-size: .62rem; padding: 2px 7px; border-radius: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: .04em; }
.tmpl-badge-cat { background: var(--info-bg); color: var(--info); }
.tmpl-badge-basic { background: var(--pass-bg); color: var(--pass); }
.tmpl-badge-advanced { background: var(--info-bg); color: var(--info); }
.tmpl-badge-recommended { background: var(--warn-bg); color: var(--warn); font-size: .58rem; padding: 2px 7px; border-radius: 3px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; border: 1px solid var(--warn); }
.tmpl-card-icon { width: 36px; height: 36px; border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: 1.1rem; margin-bottom: 0; flex-shrink: 0; }
.tmpl-difficulty-dots { display: flex; gap: 3px; align-items: center; }
.tmpl-difficulty-dot { width: 7px; height: 7px; border-radius: 50%; }
.tmpl-difficulty-dot.filled { opacity: 1; }
/* #1681: renamed from `.empty` — the shared `.empty` block primitive is now
   defined in this sheet, and a bare `empty` token on the dot would drag in its
   40px padding + dashed border. */
.tmpl-difficulty-dot.hollow { opacity: .25; }
.tmpl-card-header { display: flex; gap: 10px; align-items: flex-start; margin-bottom: 6px; }
.tmpl-card-header-text { flex: 1; min-width: 0; }
.policy-org-selector { margin-bottom: 16px; padding-bottom: 12px; border-bottom: 1px solid var(--border); }
.policy-org-selector .form-label { font-weight: 600; }
.policy-org-preview { display: flex; align-items: center; gap: 10px; margin-top: 6px; padding: 8px 10px; background: var(--detail-bg); border-radius: 6px; font-size: .75rem; }
.policy-org-preview img { height: 24px; max-width: 80px; object-fit: contain; }
.policy-org-preview .org-accent-swatch { width: 14px; height: 14px; border-radius: 3px; border: 1px solid var(--border); }
.tmpl-fw-pills { display: flex; gap: 4px; flex-wrap: wrap; margin-bottom: 10px; }
.tmpl-fw-pill { font-size: .58rem; padding: 1px 6px; border-radius: 3px; background: var(--border); color: var(--sub); font-family: var(--mono); }
.tmpl-card-actions { margin-top: auto; }
.tmpl-card-actions .btn { width: 100%; justify-content: center; }
/* Template variable form */
.tmpl-var-group { margin-bottom: 16px; }
.tmpl-var-group-title { font-family: var(--mono); font-size: .72rem; font-weight: 600; text-transform: uppercase; letter-spacing: .06em; color: var(--info); margin-bottom: 8px; padding-bottom: 4px; border-bottom: 1px solid var(--border); }
.tmpl-preview-panel { margin-top: 12px; padding: 16px; background: var(--detail-bg); border: 1px solid var(--border); border-radius: 6px; max-height: 300px; overflow-y: auto; }
.tmpl-preview-panel h1 { font-size: 1.1rem; font-weight: 700; margin: 12px 0 6px; color: var(--text); }
.tmpl-preview-panel h2 { font-size: .95rem; font-weight: 600; margin: 10px 0 5px; color: var(--text); }
.tmpl-preview-panel h3 { font-size: .85rem; font-weight: 600; margin: 8px 0 4px; color: var(--text); }
.tmpl-preview-panel p { margin: 4px 0; }
.tmpl-preview-panel ul, .tmpl-preview-panel ol { margin: 4px 0 4px 20px; }
.tmpl-preview-panel li { margin: 2px 0; }
.tmpl-preview-panel strong { font-weight: 700; }
/* GFM Markdown rendering (used by _simpleMarkdownToHtml everywhere) */
.md-table-wrap { overflow-x: auto; margin: 8px 0 12px; }
.md-table { border-collapse: collapse; width: 100%; font-size: .82rem; }
.md-table th { background: var(--raised); color: var(--text); font-weight: 600; text-align: left; padding: 6px 12px; border: 1px solid var(--border); white-space: nowrap; }
.md-table td { padding: 5px 12px; border: 1px solid var(--border); color: var(--text); vertical-align: top; }
.md-table tr:nth-child(even) td { background: rgba(255,255,255,.025); }
.md-pre { background: var(--raised); border: 1px solid var(--border); border-radius: 6px; padding: 10px 14px; overflow-x: auto; margin: 8px 0; font-family: var(--mono); font-size: .78rem; color: var(--text); white-space: pre; line-height: 1.5; }
code.md-code-inline { background: var(--raised); border: 1px solid var(--border); border-radius: 3px; padding: 1px 5px; font-family: var(--mono); font-size: .85em; color: var(--accent); }
.md-hr { border: none; border-top: 1px solid var(--border); margin: 12px 0; }
.md-blockquote { border-left: 3px solid var(--border); margin: 6px 0; padding: 4px 12px; color: var(--sub); font-style: italic; }
.md-task-list { list-style: none; padding-left: 4px; }
.md-task-item { display: flex; align-items: flex-start; gap: 6px; padding: 2px 0; }
.md-task-item input[type="checkbox"] { margin-top: 3px; flex-shrink: 0; accent-color: var(--accent); }
/* Markdown body container - paragraphs, headings, links inside rendered MD */
.md-body { color: var(--text); }
.md-body p { margin: 0 0 8px; line-height: 1.6; }
.md-body h1, .md-body h2, .md-body h3, .md-body h4, .md-body h5, .md-body h6 {
  color: var(--text); margin: 14px 0 6px; line-height: 1.3;
}
.md-body h1 { font-size: 1.2rem; border-bottom: 1px solid var(--border); padding-bottom: 4px; }
.md-body h2 { font-size: 1.05rem; }
.md-body h3 { font-size: .95rem; }
.md-body h4 { font-size: .85rem; }
.md-body ul, .md-body ol { margin: 4px 0 8px; padding-left: 22px; }
.md-body li { margin: 2px 0; line-height: 1.55; }
.md-body strong { font-weight: 700; color: var(--text); }
.md-body em { font-style: italic; }
/* Links inside rendered markdown - use accent color so they stand out
   against dark backgrounds. Was previously unstyled, falling through to the
   browser default dark-blue (#0000ee) which is unreadable on black. */
.md-body a {
  color: var(--accent);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 2px;
  transition: color .15s, text-decoration-color .15s;
}
.md-body a:hover { color: var(--info); text-decoration-thickness: 2px; }
.md-body a:visited { color: var(--accent); opacity: .85; }
[data-theme="light"] .md-body a { color: var(--info); }
[data-theme="light"] .md-body a:hover { color: var(--accent); }
[data-theme="light"] .md-body a:visited { color: var(--info); opacity: .8; }
@media (max-width: 700px) {
  .tmpl-card-grid { grid-template-columns: 1fr; }
  .tmpl-browser-modal { padding: 16px; }
}
/* Endpoint Security */
.ep-severity-badge { display:inline-block;padding:1px 8px;border-radius:10px;font-size:.65rem;font-weight:600;text-transform:uppercase; }
.ep-severity-Critical { background:#dc2626;color:#fff; }
.ep-severity-High { background:#f97316;color:#fff; }
.ep-severity-Medium { background:#eab308;color:#000; }
.ep-severity-Low { background:#3b82f6;color:#fff; }
.ep-severity-Informational { background:#6b7280;color:#fff; }
.ep-health-Active,.ep-health-compliant { color:#4ade80; }
.ep-health-Inactive,.ep-health-noncompliant { color:#f87171; }
.ep-health-unknown { color:#9ca3af; }
.ep-kev-flag { display:inline-flex;align-items:center;gap:4px;background:#dc262633;color:#fca5a5;padding:2px 8px;border-radius:10px;font-size:.65rem;font-weight:600; }
.ep-ransomware-flag { background:#7c2d1233;color:#fbbf24; }

/* ══ Enterprise Polish ══════════════════════════════════════════════════════ */
/* Font rendering */
html, body { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }

/* Primary action button - gradient + glow ring on hover */
.btn-primary:hover {
  background: linear-gradient(135deg, #4aaeff 0%, #2878d8 100%) !important;
  color: #fff !important;
  box-shadow: 0 0 0 3px rgba(59,158,255,.18), 0 4px 14px rgba(59,158,255,.28);
}
/* Ghost button hover - glow ring */
.btn-ghost:hover {
  box-shadow: 0 0 0 2px rgba(59,158,255,.15);
}

/* Stat cards - lift + accent-tinted glow on hover */
.stat-card { transition: border-color .2s, box-shadow .2s, transform .2s; }
.stat-card:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(0,0,0,.3); }
.stat-card.pass:hover   { box-shadow: 0 0 0 1px rgba(45,204,113,.2), 0 8px 24px rgba(0,0,0,.3); }
.stat-card.fail:hover   { box-shadow: 0 0 0 1px rgba(232,64,64,.2), 0 8px 24px rgba(0,0,0,.3); }
.stat-card.total:hover  { box-shadow: 0 0 0 1px rgba(59,158,255,.2), 0 8px 24px rgba(0,0,0,.3); }
.stat-card.manual:hover { box-shadow: 0 0 0 1px rgba(240,165,0,.2), 0 8px 24px rgba(0,0,0,.3); }

/* Settings cards - blue glow on hover */
.settings-card { transition: border-color .22s, box-shadow .22s; }
.settings-card:hover {
  border-color: rgba(59,158,255,.35);
  box-shadow: 0 0 0 1px rgba(59,158,255,.1), 0 8px 28px rgba(0,0,0,.28);
}

/* ── Metric cards (KPI stat panels used throughout the app) ────────────────── */
.metric-card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-left: 3px solid var(--border2);
  border-radius: 6px;
  padding: 14px 16px;
  position: relative;
  overflow: hidden;
  transition: border-color .2s, box-shadow .2s, transform .18s;
}
.metric-card::before {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(135deg, rgba(255,255,255,.03) 0%, transparent 60%);
  pointer-events: none;
}
.metric-card:hover {
  border-color: rgba(59,158,255,.35);
  box-shadow: 0 0 0 1px rgba(59,158,255,.1), 0 6px 20px rgba(0,0,0,.25);
  transform: translateY(-1px);
}
.metric-label {
  font-size: .67rem;
  text-transform: uppercase;
  letter-spacing: .09em;
  color: var(--sub);
  font-weight: 600;
  margin-bottom: 8px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  display: flex;
  align-items: center;
  gap: 5px;
}
.metric-value {
  font-family: var(--mono);
  font-size: 1.7rem;
  font-weight: 700;
  line-height: 1;
  color: var(--text);
  letter-spacing: -.02em;
}
.metric-sub {
  font-size: .67rem;
  color: var(--sub);
  margin-top: 5px;
  font-family: var(--mono);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
/* Color-coded left-border variants */
.metric-card.mc-pass  { border-left-color: var(--pass); }
.metric-card.mc-fail  { border-left-color: var(--fail); }
.metric-card.mc-warn  { border-left-color: var(--manual); }
.metric-card.mc-info  { border-left-color: var(--info); }
.metric-card.mc-risk  { border-left-color: #f97316; }
.metric-card.mc-total { border-left-color: var(--accent); }
.metric-card.mc-pass  .metric-value { color: var(--pass); }
.metric-card.mc-fail  .metric-value { color: var(--fail); }
.metric-card.mc-warn  .metric-value { color: var(--manual); }
.metric-card.mc-info  .metric-value { color: var(--info); }
.metric-card.mc-risk  .metric-value { color: #f97316; }
.metric-card.mc-total .metric-value { color: var(--accent); }
.trend-card, .app-bar-card { transition: border-color .2s, box-shadow .2s; }
.trend-card:hover, .app-bar-card:hover { border-color: rgba(59,158,255,.25); }

/* Integration cards */
.intg-card { transition: border-color .2s, box-shadow .2s; }
.intg-card:hover { box-shadow: 0 0 0 1px rgba(59,158,255,.15), 0 8px 24px rgba(0,0,0,.28); }

/* Input / select focus - glow ring */
.filter-bar input:focus, .filter-bar select:focus,
input[type="text"]:focus, input[type="search"]:focus, input[type="email"]:focus,
input[type="password"]:focus, textarea:focus, select:focus {
  box-shadow: 0 0 0 2px rgba(59,158,255,.2);
  outline: none;
}

/* Nav item active - inner glow behind left border */
.nav-item.active {
  box-shadow: inset 6px 0 10px rgba(59,158,255,.07);
}

/* Topbar - removed backdrop-filter blur; causes GPU repaint artifacts on macOS Chromium.
   The topbar already has an opaque background via var(--surface), so the blur was invisible. */

/* Modal inner highlight */
.modal-inner, .modal-content {
  box-shadow: 0 1px 0 rgba(255,255,255,.05) inset, 0 24px 64px rgba(0,0,0,.55);
}

/* Login card - blue halo */
.login-card {
  box-shadow: 0 0 0 1px rgba(59,158,255,.1), 0 24px 64px rgba(0,0,0,.55),
              0 1px 0 rgba(255,255,255,.06) inset;
}

/* Letter-spacing - page section headers */
.section-hdr h2 { letter-spacing: .06em; }

/* Table rows - smoother hover transition */
tbody tr { transition: background .1s; }

/* Override/risk-accept cards */
.override-card { transition: border-color .2s, box-shadow .2s; }
.override-card:hover {
  border-color: rgba(59,158,255,.3);
  box-shadow: 0 0 0 1px rgba(59,158,255,.08), 0 6px 20px rgba(0,0,0,.25);
}
/* ══ End Enterprise Polish ══════════════════════════════════════════════════ */

/* ADO #1236 — canonical page-title (was ~63 drifted inline h2 styles) */
.page-title { font-size: 1.1rem; font-weight: 700; margin: 0 0 4px; }

/* #2433 - the module index is a TABLE, not a card grid.
   Cards put one item per box with a wrapped paragraph each, so a 20-item module filled
   the viewport and you scanned diagonally. Rows put the name, what it is, how much is in
   it and its nav switch on ONE line, in fixed columns your eye can run down.
   Done in CSS rather than in four renderers: the markup already emits title / desc /
   meta as separate children, so nothing in TATER, Ops, Manage or My had to change and
   the render-then-apply pass still works untouched. */
.mod-dash-grid {
  display: block;
  border: 1px solid var(--border);
  border-radius: 8px;
  overflow: hidden;
}
.mod-dash-card {
  display: grid;
  grid-template-columns: minmax(150px, 20%) 1fr auto;
  align-items: center;
  gap: 14px;
  padding: 6px 12px;
  border: 0;
  border-bottom: 1px solid var(--border);
  border-radius: 0;
  background: transparent;
  transform: none;
  box-shadow: none;
}
.mod-dash-card:last-child { border-bottom: 0; }
.mod-dash-card:hover {
  background: var(--surface);
  border-color: var(--border);
  box-shadow: none;
  transform: none;
}
.mod-dash-card-title { grid-column: 1; font-size: .8rem; }
.mod-dash-card-desc  { grid-column: 2; font-size: .72rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* "Open →" is redundant once the whole ROW is the target. */
.mod-dash-card-meta  { display: none; }
/* The toggle is a real column here, not an overlay pinned to a card corner. */
.mod-dash-card .tmi-navtoggle { position: static; grid-column: 3; margin: 0; }
/* The header row the shared script injects. */
.mod-dash-head {
  display: grid;
  grid-template-columns: minmax(150px, 20%) 1fr auto;
  gap: 14px;
  padding: 5px 12px;
  border-bottom: 1px solid var(--border);
  background: var(--surface);
  font-size: .62rem;
  letter-spacing: .05em;
  text-transform: uppercase;
  color: var(--sub);
}
/* On a phone the three columns collapse: the description is the first thing to go,
   because the name and the switch are what the row is FOR. */
@media (max-width: 640px) {
  .mod-dash-card, .mod-dash-head { grid-template-columns: 1fr auto; }
  .mod-dash-card-desc, .mod-dash-head span:nth-child(2) { display: none; }
}
