/* =============================================================
   Hurriyya Dashboard styles
   Extracted verbatim from apps/dashboard/index.html
   (2026-06-06 modularization, Stage 1). No rule changes — pure move.
   Loaded via <link rel="stylesheet" href="styles/dashboard.css"> in <head>.
   ============================================================= */

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

:root {
  --bg: #080C12;
  --panel: #0D1219;
  --card: #111820;
  --border: #1E2A38;
  --border-lit: #2A3A50;
  --blue: #00B4D8;
  --blue-glow: rgba(0,180,216,0.12);
  --green: #00E676;
  --green-glow: rgba(0,230,118,0.12);
  --gold: #FFB830;
  --gold-glow: rgba(255,184,48,0.12);
  --red: #FF4560;
  --red-glow: rgba(255,69,96,0.14);
  --purple: #8B5CF6;
  --text: #E8F0F8;
  /* Raised from #4A6080 (2.79:1 on --card — failed WCAG AA) to ~4.6:1 so all
     secondary text passes; kept below --soft (#7E94B0) to preserve hierarchy. */
  --muted: #6B82A6;
  --soft: #7E94B0;
  --dim: #1E2A38;
  /* Clean numeric font for values/money/counts — straight lining figures that
     the Syne display font can't render. Falls back to Segoe UI on Windows. */
  --num-font: 'Inter', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'DM Sans', sans-serif;
}

/* ============================================================================
   Light theme — token override. Toggled from the topbar (sets data-theme on
   <html>) and persisted in localStorage. The app is almost fully tokenized, so
   flipping these flips the whole UI; the rules below fix the few components that
   hardcode dark surfaces (the message-thread bubbles).
   ============================================================================ */
:root[data-theme="light"] {
  --bg: #F1F4F7;
  --panel: #FFFFFF;
  --card: #FFFFFF;
  /* Borders deepened so cards/rows separate on a near-white page. */
  --border: #D7DEE7;
  --border-lit: #C2CBD6;
  /* Accents darkened to clear WCAG AA (~4.5:1) as pill/label text on tinted fills.
     The *-glow tint fills are carried a bit stronger than dark so chips/pills read
     as solid on white instead of washed out (see the light badge block below). */
  --blue: #0A7C8E;
  --blue-glow: rgba(14,143,163,0.18);
  --green: #137A37;
  --green-glow: rgba(21,136,60,0.18);
  --gold: #855700;
  --gold-glow: rgba(194,120,11,0.20);
  --red: #D02A42;
  --red-glow: rgba(208,42,66,0.16);
  --purple: #7C3AED;
  --text: #1B2733;
  /* --muted was #94A0AE (~2.5:1 on white — failed AA). Darkened to ~4.8:1 so all
     secondary text (phones, dates, labels, table headers) is actually readable.
     --soft stays a notch darker than --muted to preserve the prominence order. */
  --muted: #5C6A7B;
  --soft: #4D5B6A;
  --dim: #D7DEE7;
}
/* Message-thread bubbles: the "clinic sent" bubble flips from near-black to a
   light grey with dark text; the patient (blue) bubble already reads on white. */
:root[data-theme="light"] .pp-message-row.outbound .pp-message-bubble,
:root[data-theme="light"] .modal-from-clinic,
:root[data-theme="light"] .sms-from-clinic { background:#E9ECF1; color:#1B2733; }

/* ----- Light-mode status chips: solid, not faded ----------------------------
   The tinted .badge pills (status column, lane tags, etc.) lean on low-alpha glow
   fills that read crisp on dark but washed-out on white, and on most tabs they
   have NO border. In light mode give every badge a 1px accent border in its own
   colour so it reads as a defined chip on every tab; the bumped --*-glow tokens
   above carry the fill. The #page-patients selectors re-assert the colour over the
   existing dark-theme border rules (higher specificity). Dark theme is untouched. */
:root[data-theme="light"] .badge { border:1px solid transparent; }
:root[data-theme="light"] .badge.bd-gold,
:root[data-theme="light"] #page-patients .badge.bd-gold  { border-color:rgba(168,108,9,0.42); }
:root[data-theme="light"] .badge.bd-blue,
:root[data-theme="light"] #page-patients .badge.bd-blue  { border-color:rgba(10,124,142,0.40); }
:root[data-theme="light"] .badge.bd-green,
:root[data-theme="light"] #page-patients .badge.bd-green { border-color:rgba(19,122,55,0.40); }
:root[data-theme="light"] .badge.bd-red                  { border-color:rgba(208,42,66,0.40); }
:root[data-theme="light"] .badge.bd-grey,
:root[data-theme="light"] #page-patients .badge.bd-grey  { background:rgba(92,106,123,0.14); border-color:rgba(77,91,106,0.34); color:var(--soft); }

/* ----- Light-mode interactive hover ----------------------------------------
   The dark theme tints rows with a faint white overlay (rgba(255,255,255,0.0x))
   that is invisible on the near-white page, so hover/clickable affordance
   disappeared in light mode. Re-tint those same rows with a faint navy so the
   feedback reads on every data table and clickable row. Dark theme untouched. */
:root[data-theme="light"] .data-table tr:hover td,
:root[data-theme="light"] #page-patients .data-table tbody tr:hover td,
:root[data-theme="light"] #page-reminders .rem-log .data-table tbody tr:hover td,
:root[data-theme="light"] .ov-sg-row:hover,
:root[data-theme="light"] .ov-attn-row:hover,
:root[data-theme="light"] .ov-act-open:hover,
:root[data-theme="light"] .ov-srow:hover,
:root[data-theme="light"] .ov-cand[data-action]:hover,
:root[data-theme="light"] .status-dropdown-item:hover,
:root[data-theme="light"] .wl-row[data-action]:hover { background:rgba(20,40,70,0.05); }

/* Revenue trend chart: gridlines + line are themed via tokens so they read on
   both surfaces (the dark-only white gridlines vanished on the light page). */
.rs-grid-line { stroke:rgba(255,255,255,0.06); stroke-width:1; }
.rs-trend-line { stroke:#00E676; }
.rs-trend-dot { fill:#00E676; }
:root[data-theme="light"] .rs-grid-line { stroke:rgba(20,40,70,0.10); }
:root[data-theme="light"] .rs-trend-line { stroke:var(--green); }
:root[data-theme="light"] .rs-trend-dot { fill:var(--green); }

/* ============================================================================
   Boot veil. theme-init.js (a classic <head> script) sets the saved theme and
   adds .app-booting to <html> BEFORE first paint; engine.js removes it once the
   first cached/real state is painted (failsafe timeout in theme-init.js too).
   While booting, the chrome stays hidden so neither the default dark theme nor
   the static showcase markup flashes on refresh. The body keeps its themed
   background (data-theme is already correct), so the brief gap is a calm blank,
   not a white or dark flash. visibility (not display) keeps layout stable.
   ============================================================================ */
html.app-booting .topbar,
html.app-booting .layout { visibility: hidden; }

html { scroll-behavior: smooth; }

/* Keyboard focus fallback for CUSTOM focusable widgets (role=button/switch + the
   tabindex'd KPI cards, filter chips, toggles, "View all" links). Native controls
   and components with their own ring are unaffected; this only adds an indicator
   where there was none (WCAG 2.4.7). */
[role="button"]:focus-visible,
[role="switch"]:focus-visible,
[tabindex="0"]:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; border-radius: 6px; }
/* Tabular figures everywhere: the UI fonts ship proportional digits, which makes
   numbers, money, dates and counts look crooked when stacked in columns/cards.
   font-variant-numeric inherits, so this aligns every digit across the app. */
body { font-family: 'DM Sans', sans-serif; background: var(--bg); color: var(--text); min-height: 100vh; overflow-x: hidden;
  font-variant-numeric: tabular-nums; font-feature-settings: "tnum" 1; }

/* Shared numeric value classes — apply to any KPI number, money value, count or
   table currency so digits render straight (clean lining figures, fixed widths,
   no stray letter-spacing). .money-value keeps the $ on the digits' baseline. */
.metric-value, .money-value, .numeric-value, .tabular-value {
  font-family: var(--num-font);
  font-variant-numeric: tabular-nums lining-nums;
  font-feature-settings: "tnum" 1, "lnum" 1;
  letter-spacing: 0;
}
.money-value { display: inline-flex; align-items: baseline; }

/* Numeric / currency table cells: right-aligned, clean lining/tabular figures,
   vertically centered so a column of values reads as a clean straight edge. */
.td-num { text-align: right; white-space: nowrap; font-family: var(--num-font);
  font-variant-numeric: tabular-nums lining-nums; font-feature-settings: "tnum" 1, "lnum" 1; }
.data-table th.td-num { text-align: right; }

/* ============================================================================
   Global subtle scrollbars — ONE thin, premium, theme-matched system for every
   scrollable area (page scroller, data tables, modals, activity feeds). Replaces
   the old per-page one-offs so scrollbars are consistent everywhere: a narrow,
   low-contrast slate thumb at rest, brighter teal on hover/scroll — never the
   fat white/grey browser default. Track footprint is small + fixed, so showing
   or hiding the bar causes no layout shift, and content is never clipped.
   Named hooks (.thin-scroll / .data-scroll / .modal-scroll / .soft-scroll) map
   to the same system for explicit container intent.
   ========================================================================== */
*,
.thin-scroll, .data-scroll, .modal-scroll, .soft-scroll {
  scrollbar-width: thin;                                   /* Firefox */
  scrollbar-color: rgba(74,96,128,0.45) transparent;       /* thumb · track */
}
*::-webkit-scrollbar { width: 8px; height: 8px; }
*::-webkit-scrollbar-track { background: transparent; }
*::-webkit-scrollbar-thumb {
  background: rgba(74,96,128,0.45);                         /* muted slate */
  border-radius: 8px;
  border: 2px solid transparent;                           /* inset → ~4px visible thumb */
  background-clip: padding-box;
  transition: background .2s ease;
}
*::-webkit-scrollbar-thumb:hover,
*::-webkit-scrollbar-thumb:active { background: rgba(0,180,216,0.6); } /* teal on hover/scroll */
*::-webkit-scrollbar-corner { background: transparent; }

/* ── HEADER ── */
.topbar {
  display: flex; align-items: center; justify-content: space-between;
  padding: 16px 32px;
  background: var(--panel);
  border-bottom: 1px solid var(--border);
  position: sticky; top: 0; z-index: 100;
}

.brand { display: flex; align-items: center; gap: 12px; text-decoration: none; }

/* Hurriyya Logo */
.logo-mark { width: 38px; height: 38px; position: relative; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.wing { position: absolute; width: 15px; height: 22px; border: 1.5px solid; clip-path: polygon(50% 0%, 100% 38%, 78% 100%, 22% 100%, 0% 38%); }
.wing-left { left: 0; top: 50%; transform: translateY(-50%) rotate(-18deg); border-color: var(--green); background: var(--green-glow); box-shadow: 0 0 10px rgba(16,185,129,0.3); }
.wing-right { right: 0; top: 50%; transform: translateY(-50%) rotate(18deg); border-color: var(--blue); background: var(--blue-glow); box-shadow: 0 0 10px rgba(59,130,246,0.3); }
.wing-center { position: absolute; left: 50%; top: 8%; transform: translateX(-50%); width: 7px; height: 26px; background: linear-gradient(to bottom, #fff, rgba(255,255,255,0.2)); clip-path: polygon(50% 0%, 100% 100%, 0% 100%); }

.brand-name { font-family: 'Syne', sans-serif; font-size: 16px; font-weight: 800; letter-spacing: 2px; background: linear-gradient(90deg, var(--green), var(--blue)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; }
.brand-sub { font-size: 10px; color: var(--muted); margin-top: 1px; letter-spacing: 1.5px; text-transform: uppercase; }

.topbar-right { display: flex; align-items: center; gap: 12px; }
.clinic-badge {
  background: var(--card); border: 1px solid var(--border);
  border-radius: 8px; padding: 6px 14px;
  font-size: 12px; color: var(--muted);
}
.clinic-badge strong { color: var(--text); }

.live-dot {
  display: flex; align-items: center; gap: 6px;
  font-size: 12px; color: var(--green);
  font-weight: 500;
}
.live-dot::before {
  content: '';
  width: 7px; height: 7px;
  background: var(--green);
  border-radius: 50%;
  animation: livepulse 1.5s infinite;
}
@keyframes livepulse { 0%,100%{opacity:1;transform:scale(1)} 50%{opacity:0.5;transform:scale(1.3)} }

/* ── LAYOUT ── */
.layout { display: grid; grid-template-columns: 220px 1fr; min-height: calc(100vh - 65px); width: 100%; }

/* ── SIDEBAR ── */
.sidebar {
  background: var(--panel);
  border-right: 1px solid var(--border);
  padding: 20px 12px;
  display: flex; flex-direction: column; gap: 4px;
}

.sidebar-section { font-size: 10px; font-weight: 600; letter-spacing: 1.5px; text-transform: uppercase; color: var(--muted); padding: 8px 12px 4px; margin-top: 8px; }

.nav-item {
  display: flex; align-items: center; gap: 10px;
  padding: 9px 12px; border-radius: 8px;
  font-size: 13px; color: var(--muted);
  cursor: pointer; transition: all 0.2s;
  border: 1px solid transparent;
}
.nav-item:hover { background: var(--card); color: var(--text); }
.nav-item.active { background: rgba(0,230,118,0.08); color: var(--green); border-color: rgba(0,230,118,0.15); }
.nav-item .ni-icon { font-size: 15px; width: 20px; text-align: center; }

.nav-badge {
  margin-left: auto;
  background: rgba(255,255,255,0.06);
  color: var(--muted); font-size: 10px; font-weight: 700;
  padding: 1px 6px; border-radius: 10px;
}

.nav-badge.green { background: rgba(0,230,118,0.12); color: var(--green); }
.nav-badge.gold { background: rgba(0,180,216,0.12); color: var(--blue); }

/* ── MAIN ── */
.main { padding: 28px 32px; overflow-y: auto; min-width: 0; }

/* PAGE (shown/hidden) */
.page { display: none; }
.page.active { display: block; }

/* ── STATS ROW ── */
.stats-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 28px; }

.stat-card {
  background: var(--card); border: 1px solid var(--border);
  border-radius: 14px; padding: 20px;
  transition: border-color 0.2s;
  display: flex; flex-direction: column;
}
.stat-card:hover { border-color: var(--border-lit); }

.stat-label { font-size: 11px; font-weight: 500; color: var(--muted); letter-spacing: 0.5px; text-transform: uppercase; margin-bottom: 10px; min-height: 15px; line-height: 1.3; }
/* KPI values use the clean numeric sans (NOT the Syne display font, whose
   stylised figures + glow looked crooked) with stable lining + tabular figures
   and no text-shadow, so every digit sits on the baseline at a fixed width. */
.stat-val { font-family: var(--num-font); font-size: 26px; font-weight: 700; line-height: 1.1; margin-bottom: 6px;
  font-variant-numeric: tabular-nums lining-nums; font-feature-settings: "tnum" 1, "lnum" 1; letter-spacing: 0; }
.stat-val.blue { color: var(--blue); }
.stat-val.green { color: var(--green); }
.stat-val.gold { color: var(--blue); }
.stat-val.purple { color: var(--green); }

.stat-change { font-size: 12px; display: flex; align-items: center; gap: 4px; min-height: 18px; }
.up { color: var(--green); }
.down { color: var(--red); }

/* ── SECTION HEADER ── */
.sec-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; }
.sec-title { font-family: 'Syne', sans-serif; font-size: 16px; font-weight: 700; color: var(--text); }
.sec-sub { font-size: 12px; color: var(--muted); margin-top: 2px; }

.btn-sm {
  background: linear-gradient(135deg, var(--green), var(--blue)); color: #000;
  border: none; border-radius: 8px;
  padding: 8px 16px; font-size: 12px; font-weight: 700;
  cursor: pointer; font-family: 'DM Sans', sans-serif;
  transition: all 0.2s;
}
.btn-sm:hover { opacity: 0.9; transform: translateY(-1px); box-shadow: 0 4px 14px rgba(0,230,118,0.3); }
.btn-sm.green { background: var(--green); color: #000; }
.btn-sm.green:hover { opacity: 0.9; }
.btn-sm.ghost { background: transparent; border: 1px solid var(--border); color: var(--muted); }
.btn-sm.ghost:hover { border-color: var(--border-lit); color: var(--text); }

/* ── TABLE ── */
.data-table { width: 100%; border-collapse: collapse; }
.data-table th {
  text-align: left; font-size: 11px; font-weight: 600;
  color: var(--muted); letter-spacing: 0.5px; text-transform: uppercase;
  padding: 0 16px 10px; border-bottom: 1px solid var(--border);
}
.data-table td {
  padding: 13px 16px; font-size: 13px;
  border-bottom: 1px solid var(--border);
  vertical-align: middle;
}
.data-table tr:last-child td { border-bottom: none; }
.data-table tr:hover td { background: rgba(255,255,255,0.02); }

.table-wrap { background: var(--card); border: 1px solid var(--border); border-radius: 14px; overflow: visible; margin-bottom: 24px; }

/* ── STATUS PILLS ── */
.pill {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 3px 10px; border-radius: 20px;
  font-size: 11px; font-weight: 600;
}
.pill.confirmed { background: var(--green-glow); color: var(--green); }
.pill.pending { background: var(--gold-glow); color: var(--gold); }
.pill.noshow { background: rgba(239,68,68,0.12); color: var(--red); }
.pill.sent { background: var(--blue-glow); color: var(--blue); }
.pill.booked { background: var(--green-glow); color: var(--green); }
.pill.overdue { background: var(--blue-glow); color: var(--blue); }

/* ── PHONE MOCKUP ── */
.phone-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; margin-bottom: 24px; }

.phone-wrap { display: flex; flex-direction: column; gap: 10px; }
.phone-label { font-size: 12px; font-weight: 600; color: var(--muted); text-align: center; letter-spacing: 0.5px; text-transform: uppercase; }

.phone {
  background: #1C1C1E;
  border-radius: 40px;
  padding: 12px;
  border: 2px solid #2C2C2E;
  box-shadow: 0 20px 60px rgba(0,0,0,0.5);
  position: relative;
}

.phone-screen {
  background: #000;
  border-radius: 30px;
  overflow: hidden;
  min-height: 520px;
}

.phone-status {
  background: #1C1C1E;
  padding: 12px 20px 8px;
  display: flex; justify-content: space-between;
  font-size: 11px; color: #fff; font-weight: 600;
}

.sms-header {
  background: #1C1C1E;
  padding: 10px 16px;
  display: flex; align-items: center; gap: 10px;
  border-bottom: 1px solid #2C2C2E;
}

.sms-av {
  width: 36px; height: 36px;
  border-radius: 50%; display: flex; align-items: center; justify-content: center;
  font-weight: 700; font-size: 14px; flex-shrink: 0;
}

.sms-name { font-size: 13px; font-weight: 600; color: #fff; }
.sms-num { font-size: 11px; color: #8E8E93; }

.sms-body { padding: 14px 12px; display: flex; flex-direction: column; gap: 10px; background: #000; min-height: 380px; }

.sms-bubble {
  max-width: 82%; padding: 10px 13px;
  border-radius: 18px; font-size: 13px;
  line-height: 1.5;
}

.sms-from-clinic { background: #1C1C1E; color: #fff; border-bottom-left-radius: 4px; align-self: flex-start; }
.sms-from-patient { background: #0A84FF; color: #fff; border-bottom-right-radius: 4px; align-self: flex-end; }

.sms-time { font-size: 10px; color: #8E8E93; text-align: center; margin: 4px 0; }

.sms-result {
  background: var(--green-glow);
  border: 1px solid rgba(16,185,129,0.3);
  border-radius: 10px; padding: 8px 12px;
  font-size: 11px; color: var(--green);
  font-weight: 600; text-align: center; margin-top: 4px;
}

.pp-message-card {
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 12px;
  margin-bottom: 20px;
}

.pp-message-meta {
  font-size: 10px;
  color: var(--muted);
  margin-bottom: 10px;
}

.pp-message-thread {
  display: flex;
  flex-direction: column;
  gap: 10px;
  max-height: 260px;
  overflow-y: auto;
  padding-right: 2px;
}

.pp-message-row {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.pp-message-row.outbound { align-items: flex-start; }
.pp-message-row.inbound { align-items: flex-end; }

.pp-message-bubble {
  max-width: 84%;
  padding: 9px 12px;
  border-radius: 14px;
  font-size: 12px;
  line-height: 1.45;
  white-space: pre-wrap;
  word-break: break-word;
}

.pp-message-row.outbound .pp-message-bubble {
  background: #1C1C1E;
  color: #fff;
  border-bottom-left-radius: 4px;
}

.pp-message-row.inbound .pp-message-bubble {
  background: #0A84FF;
  color: #fff;
  border-bottom-right-radius: 4px;
}

.pp-message-line-meta {
  max-width: 84%;
  font-size: 10px;
  color: var(--muted);
}

/* Internal staff note inside the thread — a centered, de-emphasized annotation
   (the handed-to-front-desk moment), visibly NOT a patient-facing SMS bubble. */
.pp-message-note {
  align-self: center;
  max-width: 92%;
  text-align: center;
  font-size: 10.5px;
  color: var(--muted);
  background: rgba(126,148,176,0.07);
  border: 1px dashed var(--border);
  border-radius: 8px;
  padding: 5px 10px;
}

.pp-message-empty {
  color: var(--muted);
  font-size: 12px;
  line-height: 1.45;
  padding: 14px;
  text-align: center;
}

/* ── AUTOMATION FLOWS ── */
.flow-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 24px; }

.flow-card {
  background: var(--card); border: 1px solid var(--border);
  border-radius: 14px; padding: 20px;
  transition: all 0.25s;
}
.flow-card:hover { border-color: var(--border-lit); transform: translateY(-2px); }

.flow-header { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }
.flow-icon {
  width: 38px; height: 38px; border-radius: 10px;
  display: flex; align-items: center; justify-content: center; font-size: 18px;
}
.fi-blue { background: var(--blue-glow); }
.fi-green { background: var(--green-glow); }
.fi-gold { background: var(--gold-glow); }
.fi-purple { background: var(--blue-glow); }

.flow-name { font-family: 'Syne', sans-serif; font-size: 14px; font-weight: 700; color: var(--text); }
.flow-desc { font-size: 12px; color: var(--muted); margin-top: 2px; }

.flow-steps { display: flex; flex-direction: column; gap: 8px; }

.flow-step {
  display: flex; align-items: flex-start; gap: 10px;
  padding: 8px 10px;
  background: rgba(255,255,255,0.02);
  border: 1px solid var(--border);
  border-radius: 8px;
  font-size: 12px;
}

.step-dot {
  width: 20px; height: 20px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: 10px; font-weight: 700; flex-shrink: 0; margin-top: 1px;
}
.sd-blue { background: var(--blue-glow); color: var(--blue); }
.sd-green { background: var(--green-glow); color: var(--green); }
.sd-gold { background: var(--gold-glow); color: var(--gold); }
.sd-red { background: var(--red-glow); color: var(--red); }
.sd-purple { background: var(--blue-glow); color: var(--blue); }

.step-content { flex: 1; }
.step-title { font-weight: 600; color: var(--text); margin-bottom: 2px; }
.step-detail { color: var(--muted); line-height: 1.4; }

.flow-toggle {
  display: flex; align-items: center; justify-content: space-between;
  margin-top: 14px; padding-top: 12px;
  border-top: 1px solid var(--border);
}

.toggle-wrap { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--muted); }

.toggle {
  width: 36px; height: 20px;
  background: var(--green);
  border-radius: 10px; position: relative;
  cursor: pointer; transition: background 0.2s;
}
.toggle::after {
  content: '';
  position: absolute; top: 2px; right: 2px;
  width: 16px; height: 16px;
  background: #fff; border-radius: 50%;
  transition: right 0.2s;
}
.toggle.off { background: var(--dim); }
.toggle.off::after { right: 18px; }

.flow-stat { font-size: 12px; color: var(--green); font-weight: 600; }

/* ── REVENUE PANEL ── */
.revenue-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }

.rev-card {
  background: var(--card); border: 1px solid var(--border);
  border-radius: 14px; padding: 20px;
}

.rev-title { font-size: 12px; color: var(--muted); margin-bottom: 16px; font-weight: 500; letter-spacing: 0.3px; }

.rev-item {
  display: flex; align-items: center; justify-content: space-between;
  padding: 10px 0; border-bottom: 1px solid var(--border);
  font-size: 13px;
}
.rev-item:last-child { border-bottom: none; }

.rev-label { color: var(--muted); }
.rev-val { font-weight: 600; color: var(--text); }
.rev-val.green { color: var(--green); }
.rev-val.gold { color: var(--gold); }

.rev-total {
  margin-top: 12px; padding-top: 12px;
  border-top: 2px solid var(--border-lit);
  display: flex; justify-content: space-between;
  font-family: 'Syne', sans-serif; font-size: 18px; font-weight: 700;
}
.rev-total-label { color: var(--muted); }
.rev-total-val { color: var(--green); text-shadow: 0 0 14px rgba(0,230,118,0.3); }

/* ── PAGE TITLE ── */
.page-title {
  font-family: 'DM Sans', sans-serif;
  font-size: 18px; font-weight: 600;
  color: var(--text); margin-bottom: 4px;
  letter-spacing: 0;
}
.page-sub { font-size: 13px; color: var(--muted); margin-bottom: 28px; }

/* ── REVIEW ITEMS ── */
.review-items { display: flex; flex-direction: column; gap: 10px; }
.review-item {
  background: var(--card); border: 1px solid var(--border);
  border-radius: 12px; padding: 14px 16px;
  display: flex; align-items: flex-start; gap: 12px;
}
.rev-av {
  width: 36px; height: 36px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: 14px; font-weight: 700; flex-shrink: 0;
}
.rev-content { flex: 1; }
.rev-name { font-size: 13px; font-weight: 600; color: var(--text); margin-bottom: 2px; }
.rev-stars { color: var(--gold); font-size: 12px; margin-bottom: 4px; }
.rev-text { font-size: 12px; color: var(--muted); line-height: 1.5; }
.rev-meta { font-size: 11px; color: var(--dim); margin-top: 4px; }

/* ── PATIENT TABLE ACTIONS ── */
.action-btn {
  background: transparent; border: 1px solid var(--border);
  color: var(--muted); border-radius: 6px;
  padding: 4px 10px; font-size: 11px; font-weight: 600;
  cursor: pointer; font-family: 'DM Sans', sans-serif;
  transition: all 0.2s; margin-right: 4px;
}
.action-btn:hover { border-color: var(--blue); color: var(--blue); }
.action-btn.fire { border-color: rgba(16,185,129,0.3); color: var(--green); }
.action-btn.fire:hover { background: var(--green-glow); }

/* ── NOTIFICATION TOAST ── */
.toast {
  position: fixed; bottom: 28px; left: 50%; transform: translateX(-50%) translateY(80px);
  background: linear-gradient(135deg, var(--green), var(--blue));
  color: #000; font-weight: 700;
  padding: 12px 24px; border-radius: 10px;
  font-size: 13px;
  box-shadow: 0 8px 32px rgba(0,230,118,0.4);
  z-index: 9999;
  transition: transform 0.4s cubic-bezier(0.34,1.56,0.64,1);
  white-space: nowrap;
}
.toast.show { transform: translateX(-50%) translateY(0); }

/* ── CONTROLLED NOTIFICATION STACK (top-right of content, below the modal) ── */
.notif-stack {
  position: fixed; top: 70px; right: 22px; z-index: 450;
  width: 340px; max-width: calc(100vw - 44px);
  display: flex; flex-direction: column; gap: 10px;
  pointer-events: none; /* empty stack never blocks content */
}
.nf-card {
  pointer-events: auto; position: relative;
  display: flex; align-items: flex-start; gap: 11px;
  background: var(--panel); border: 1px solid var(--border); border-left: 3px solid var(--border-lit);
  border-radius: 12px; padding: 13px 14px 12px;
  box-shadow: 0 14px 36px rgba(0,0,0,0.42), inset 0 1px 0 rgba(255,255,255,0.03);
  animation: nfIn .26s cubic-bezier(0.22,1,0.36,1);
}
.nf-card.nf-out { animation: nfOut .2s ease forwards; }
@keyframes nfIn  { from { opacity:0; transform: translateX(14px); } to { opacity:1; transform: none; } }
@keyframes nfOut { from { opacity:1; } to { opacity:0; transform: translateX(14px); } }
@media (prefers-reduced-motion: reduce) {
  .nf-card { animation: none; }
  .nf-card.nf-out { animation: none; opacity: 0; }
}
.nf-ico {
  flex-shrink: 0; width: 26px; height: 26px; border-radius: 8px; display: flex; align-items: center;
  justify-content: center; font-size: 13px; font-weight: 800; line-height: 1;
  background: rgba(255,255,255,0.05); color: var(--muted); border: 1px solid var(--border);
}
.nf-body { min-width: 0; flex: 1; }
.nf-title { font-size: 12.5px; font-weight: 700; color: var(--text); }
.nf-msg { font-size: 12px; color: var(--soft); line-height: 1.45; margin-top: 2px; word-break: break-word; }
.nf-meta { font-size: 10px; color: var(--muted); margin-top: 5px; }
.nf-actions { display: flex; gap: 7px; margin-top: 9px; }
.nf-btn {
  font-size: 11px; font-weight: 600; padding: 5px 11px; border-radius: 7px; cursor: pointer;
  font-family: 'DM Sans', sans-serif; background: var(--blue-glow); color: var(--blue);
  border: 1px solid rgba(0,180,216,0.28);
}
.nf-btn:hover { border-color: var(--blue); }
.nf-btn.nf-btn-ghost { background: none; color: var(--muted); border-color: var(--border); }
.nf-btn.nf-btn-ghost:hover { color: var(--text); border-color: var(--border-lit); }
.nf-x {
  flex-shrink: 0; background: none; border: none; color: var(--muted); cursor: pointer;
  font-size: 12px; line-height: 1; padding: 2px 4px; border-radius: 6px;
}
.nf-x:hover { color: var(--text); }
/* Type accents — teal=info/attention, amber=pending, green=good, red=error only. */
.nf-card.nf-info    { border-left-color: var(--blue); }
.nf-card.nf-info    .nf-ico { background: var(--blue-glow); color: var(--blue); border-color: rgba(0,180,216,0.3); }
.nf-card.nf-high    { border-left-color: var(--blue); box-shadow: 0 14px 36px rgba(0,0,0,0.42), 0 0 0 1px rgba(0,180,216,0.18), 0 0 22px rgba(0,180,216,0.16); }
.nf-card.nf-high    .nf-ico { background: var(--blue-glow); color: var(--blue); border-color: rgba(0,180,216,0.45); }
.nf-card.nf-warn    { border-left-color: var(--gold); }
.nf-card.nf-warn    .nf-ico { background: var(--gold-glow); color: var(--gold); border-color: rgba(255,184,48,0.3); }
.nf-card.nf-success { border-left-color: var(--green); }
.nf-card.nf-success .nf-ico { background: var(--green-glow); color: var(--green); border-color: rgba(0,230,118,0.3); }
.nf-card.nf-error   { border-left-color: var(--red); }
.nf-card.nf-error   .nf-ico { background: rgba(239,68,68,0.12); color: var(--red); border-color: rgba(239,68,68,0.32); }
/* Top-bar mute toggle. */
.nf-mute {
  display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0;
  width: 30px; height: 30px; border-radius: 8px; cursor: pointer;
  background: var(--card); border: 1px solid var(--border); color: var(--text); font-size: 13px;
  transition: border-color .15s, opacity .15s;
}
.nf-mute:hover { border-color: var(--border-lit); }
.nf-mute.muted { opacity: 0.55; }
@media (max-width: 720px) {
  .notif-stack { top: 62px; right: 12px; left: 12px; width: auto; }
}

/* ── BADGES ── */
.badge { display:inline-block; padding:2px 8px; border-radius:20px; font-size:10px; font-weight:600; white-space:nowrap; }
.bd-green { background:var(--green-glow); color:var(--green); }
.bd-blue  { background:var(--blue-glow);  color:var(--blue);  }
.bd-gold  { background:var(--gold-glow);  color:var(--gold);  }
.bd-red   { background:rgba(255,69,96,0.12); color:var(--red); }
.bd-purple{ background:var(--blue-glow); color:var(--blue); }
.bd-grey  { background:rgba(255,255,255,0.06); color:var(--muted); }

/* Priority scale — traffic-light severity: High = red, Medium = amber, Low =
   blue (solid filled dot). The "High/Medium/Low" label rides alongside, so the
   signal is never colour-only. One pill component; the bd-* badge classes are
   intentionally not reused. Same hues as the Overview dots (dot-red/gold/blue). */
.pri { display:inline-flex; align-items:center; gap:7px; font-size:11px; font-weight:600;
  color:var(--muted); background:rgba(255,255,255,0.03); border:1px solid var(--border);
  border-radius:999px; padding:3px 11px 3px 9px; letter-spacing:.2px; white-space:nowrap; }
.pri::before { content:''; width:9px; height:9px; border-radius:50%; flex-shrink:0;
  border:1.5px solid var(--blue); box-sizing:border-box; }
.pri-high { color:var(--text); }
.pri-high::before { background:var(--red);  border-color:var(--red); }
.pri-med::before  { background:var(--gold); border-color:var(--gold); }
.pri-low { color:var(--muted); }
.pri-low::before  { background:var(--blue); border-color:var(--blue); }

/* ── ACTION BUTTONS ── */
/* The action cell stays a REAL table cell. Never set display:flex on a <td> —
   that pulls it out of the table layout, so the cell no longer stretches to the
   row height and its border-bottom (the row divider) + buttons stop aligning
   with the sibling cells (crooked divider + buttons shifting between rows).
   Buttons lay out inline, vertically centered, spaced by horizontal margin
   (which never affects row height). */
.action-btns { vertical-align:middle; white-space:nowrap; text-align:left; }
.action-btns .act-btn,
.action-btns .preview-cell { vertical-align:middle; }
.action-btns .act-btn + .act-btn { margin-left:8px; }
.act-btn { display:inline-flex; align-items:center; justify-content:center; padding:5px 12px; border-radius:6px; font-size:10px; font-weight:600; cursor:pointer; background:transparent; border:1px solid var(--border); color:var(--muted); font-family:'DM Sans',sans-serif; transition:all 0.2s; white-space:nowrap; }
.act-view { background:var(--blue-glow); border-color:rgba(0,180,216,0.2); color:var(--blue); }
.act-view:hover { background:rgba(0,180,216,0.2); }
/* Finalized/resolved rows: muted outline, no teal fill — de-emphasized so the
   front desk's eye is drawn to unresolved work first. Same modal underneath. */
.act-soft { background:transparent; border-color:var(--border); color:var(--soft); font-weight:500; }
.act-soft:hover { border-color:var(--border-lit); color:var(--text); background:rgba(126,148,176,0.06); }
.act-send { background:var(--green-glow); border-color:rgba(0,230,118,0.2); color:var(--green); }
.act-send:hover { background:rgba(0,230,118,0.2); }
.act-edit { background:rgba(0,255,163,0.08); border-color:rgba(0,255,163,0.2); color:#00FFA3; }
.act-edit:hover { background:rgba(0,255,163,0.18); }

/* ============================================================================
   Inline Resolve + momentum (Needs Action queue). See actions/queueResolve.js.
   Primary green Resolve button; a ✓ flies into the Resolved Today card; the row
   fades out; an Undo toast counts down; combo glow escalates; inbox-zero shimmer.
   ============================================================================ */
/* Primary action: solid green, theme-aware text (bright-green needs dark text in
   dark mode; deep-green needs white in light mode). */
.act-resolve { background:var(--green); color:#06140C; border-color:transparent; font-weight:700; }
.act-resolve:hover { filter:brightness(1.06); transform:translateY(-1px); box-shadow:0 4px 14px var(--green-glow); }
.act-resolve:active { transform:translateY(0) scale(0.97); }
:root[data-theme="light"] .act-resolve { color:#FFFFFF; }
/* Visible keyboard focus rings (match the rest of the dashboard's pattern). */
.act-btn:focus-visible { outline:none; box-shadow:0 0 0 3px var(--blue-glow); }
.act-resolve:focus-visible { box-shadow:0 0 0 3px var(--green-glow); }

/* Resolved Today counter spring + priority-card dip. */
@keyframes naPop { 0%{transform:scale(1)} 35%{transform:scale(1.26)} 62%{transform:scale(0.95)} 100%{transform:scale(1)} }
.na-pop { animation:naPop .5s cubic-bezier(.34,1.56,.64,1); }
@keyframes naDim { 0%{opacity:1} 42%{opacity:.45} 100%{opacity:1} }
.na-dim { animation:naDim .45s ease; }

/* The ✓ that flies from the button to the Resolved Today card. */
.na-fly { position:fixed; z-index:1200; width:22px; height:22px; margin:-11px 0 0 -11px;
  border-radius:50%; background:var(--green); color:#06140C; display:flex; align-items:center;
  justify-content:center; font-size:13px; font-weight:800; pointer-events:none;
  box-shadow:0 4px 16px var(--green-glow);
  transition:transform .55s cubic-bezier(.4,0,.2,1), opacity .55s ease; }
:root[data-theme="light"] .na-fly { color:#FFFFFF; }

/* Cleared row fades + slides out behind a brief green wash (JS hides it at ~380ms). */
.na-resolving { background:var(--green-glow); }
.na-resolving > td { transition:opacity .32s ease, transform .32s ease; opacity:0; transform:translateX(12px); }

/* Undo toast — own element (the #toast singleton is text-only). Bottom-centered,
   draining countdown bar, combo glow tiers. */
.undo-toast { position:fixed; left:50%; bottom:26px; transform:translateX(-50%) translateY(14px);
  display:flex; align-items:center; gap:10px; padding:10px 14px 13px; min-width:230px;
  background:var(--card); color:var(--text); border:1px solid var(--border-lit); border-radius:12px;
  box-shadow:0 14px 40px rgba(0,0,0,0.28); opacity:0; pointer-events:none; z-index:1300;
  font-size:12.5px; transition:opacity .2s ease, transform .2s ease; }
.undo-toast.show { opacity:1; transform:translateX(-50%) translateY(0); pointer-events:auto; }
.undo-toast .ut-check { display:inline-flex; align-items:center; justify-content:center; width:20px; height:20px;
  border-radius:50%; background:var(--green); color:#06140C; font-weight:800; font-size:12px; flex-shrink:0; }
:root[data-theme="light"] .undo-toast .ut-check { color:#FFFFFF; }
.undo-toast .ut-msg { font-weight:600; }
.undo-toast .ut-streak { font-size:11px; color:var(--gold); font-weight:700; white-space:nowrap; }
/* Undo reads as a real button at rest (no hover needed): green-tinted fill + a
   green border that clears the 3:1 UI-component contrast minimum in both themes. */
.undo-toast .ut-undo { margin-left:6px; background:var(--green-glow); border:1px solid var(--green); color:var(--green);
  border-radius:7px; padding:4px 11px; font-size:11px; font-weight:700; cursor:pointer;
  font-family:'DM Sans',sans-serif; transition:filter .15s, background .15s; }
.undo-toast .ut-undo:hover { filter:brightness(1.06); }
.undo-toast .ut-undo:focus-visible { outline:none; box-shadow:0 0 0 3px var(--green-glow); }
.undo-toast .ut-bar { position:absolute; left:12px; right:12px; bottom:6px; height:3px; border-radius:3px;
  background:var(--border); overflow:hidden; }
.undo-toast .ut-bar-fill { display:block; height:100%; width:100%; background:var(--green); border-radius:3px; }
.undo-toast.ut-tier1 { border-color:var(--green); }
.undo-toast.ut-tier2 { border-color:var(--green); box-shadow:0 14px 40px rgba(0,0,0,0.28), 0 0 0 1px var(--green-glow); }
.undo-toast.ut-tier3 { border-color:var(--green); box-shadow:0 14px 44px rgba(0,0,0,0.30), 0 0 22px var(--green-glow); }

/* Inbox-zero: a calm, one-time payoff when the last item clears. */
.na-iz > td { padding:34px 16px !important; text-align:center; }
.na-iz-wrap { display:flex; flex-direction:column; align-items:center; gap:8px; animation:naIzIn .5s cubic-bezier(.34,1.56,.64,1); }
.na-iz-check { position:relative; display:inline-flex; align-items:center; justify-content:center; width:46px; height:46px;
  border-radius:50%; background:var(--green-glow); color:var(--green); font-size:22px; font-weight:800; }
.na-iz-check::after { content:''; position:absolute; inset:-4px; border-radius:50%; border:2px solid var(--green);
  opacity:0; animation:naIzRing 1.1s ease forwards; }
.na-iz-title { font-family:'Syne',sans-serif; font-size:16px; font-weight:800; color:var(--text); }
.na-iz-sub { font-size:12px; color:var(--muted); max-width:380px; line-height:1.5; }
@keyframes naIzIn { 0%{opacity:0; transform:translateY(8px) scale(.96)} 100%{opacity:1; transform:none} }
@keyframes naIzRing { 0%{opacity:.7; transform:scale(.7)} 100%{opacity:0; transform:scale(1.25)} }

@media (prefers-reduced-motion: reduce) {
  .na-pop, .na-dim, .na-iz-wrap { animation:none; }
  .na-iz-check::after { display:none; }
  .na-resolving > td { transition:none; }
  .na-fly { transition:none; }
  .undo-toast { transition:none; }
  .act-resolve:hover { transform:none; box-shadow:none; }
}
/* Dark secondary action (e.g. the roster "Messages" deep-link) — never white. */
.status-dropdown { position:absolute; background:var(--panel); border:1px solid var(--border); border-radius:10px; padding:6px 0; min-width:170px; z-index:300; box-shadow:0 12px 36px rgba(0,0,0,0.5); animation:sdFadeIn 0.15s ease; }
.status-dropdown.drop-down { top:100%; left:50%; transform:translateX(-50%); margin-top:4px; }
.status-dropdown.drop-up { bottom:100%; left:50%; transform:translateX(-50%); margin-bottom:4px; }
.status-dropdown-item { padding:7px 14px; font-size:11px; font-weight:600; cursor:pointer; display:flex; align-items:center; gap:8px; transition:background 0.15s; font-family:'DM Sans',sans-serif; color:var(--text); }
.status-dropdown-item:hover { background:rgba(255,255,255,0.04); }
.status-dropdown-item .sd-dot { width:7px; height:7px; border-radius:50%; flex-shrink:0; }
@keyframes sdFadeIn { from { opacity:0; transform:translateX(-50%) translateY(-4px); } to { opacity:1; transform:translateX(-50%) translateY(0); } }

/* ── TABLE WRAP ── */
.tw-head { display:flex; justify-content:space-between; align-items:center; padding:12px 16px; border-bottom:1px solid var(--border); }
.tw-title { font-family:'Syne',sans-serif; font-size:13px; font-weight:700; }
.tw-sub { font-size:11px; color:var(--muted); margin-top:2px; }

/* ── TIGHTER TABLE ── */
.data-table th, table th { font-size:10px; padding:8px 14px; }
.data-table td, table td { font-size:12px; padding:9px 14px; }
.data-table td strong, table td strong { font-size:12px; }

/* ── SMS MODAL BUBBLES ── */
.modal-bubble { max-width:82%; padding:8px 12px; border-radius:14px; font-size:11.5px; line-height:1.5; }
.modal-from-clinic { background:#1C1C1E; color:#fff; border-bottom-left-radius:3px; align-self:flex-start; }
.modal-from-patient { background:#0A84FF; color:#fff; border-bottom-right-radius:3px; align-self:flex-end; }
.modal-time { font-size:10px; color:#555; text-align:center; }
.modal-result { background:rgba(0,230,118,0.1); border:1px solid rgba(0,230,118,0.2); border-radius:8px; padding:6px 10px; font-size:10.5px; color:var(--green); font-weight:600; text-align:center; }
.sidebar::after {
  content: 'HURRIYYA · PATIENT FOLLOW-UP SYSTEM';
  display: block;
  margin-top: auto;            /* pin to the bottom of the flex column — no absolute, no reserved gap */
  padding: 20px 12px 4px;
  font-size: 9px;
  letter-spacing: 1.5px;
  color: var(--muted);
  text-align: center;
  border-top: 1px solid var(--border);
}

/* Highlight premium row */
table tr.premium-row td { background: rgba(0,230,118,0.03); }

/* ── CLINIC SWITCHER ── */
.clinic-identity { background:var(--card); border:1px solid var(--border); border-radius:8px; padding:6px 12px; font-size:12px; color:var(--text); display:flex; align-items:center; gap:7px; user-select:none; }
.add-opt { color:var(--blue) !important; }

/* ── OVERVIEW LAYOUT ── */
.overview-grid { display:grid; grid-template-columns:1fr 270px; gap:20px; margin-top:20px; }
.activity-feed { background:var(--card); border:1px solid var(--border); border-radius:14px; overflow:hidden; }
.af-header { padding:11px 14px; border-bottom:1px solid var(--border); display:flex; align-items:center; justify-content:space-between; }
.af-title { font-family:'Syne',sans-serif; font-size:12px; font-weight:700; }
.af-live { font-size:10px; color:var(--green); display:flex; align-items:center; gap:4px; }
.af-dot { width:5px; height:5px; background:var(--green); border-radius:50%; animation:livepulse 1.5s infinite; }
.af-items { padding:4px 0; }
.af-item { display:flex; align-items:flex-start; gap:9px; padding:8px 12px; border-bottom:1px solid rgba(30,42,56,0.4); }
.af-item:last-child { border-bottom:none; }
.af-icon { width:26px; height:26px; border-radius:7px; display:flex; align-items:center; justify-content:center; font-size:11px; flex-shrink:0; margin-top:1px; }
.af-text { font-size:11px; color:var(--text); line-height:1.45; }
.af-time { font-size:10px; color:var(--muted); margin-top:2px; }

/* ── REPORT MODAL ── */
.report-modal-inner { background:var(--panel); border:1px solid var(--border); border-radius:20px; width:500px; max-width:95vw; max-height:88vh; overflow-y:auto; box-shadow:0 24px 60px rgba(0,0,0,0.6); }
.report-header-bar { background:linear-gradient(135deg,rgba(0,230,118,0.08),rgba(0,180,216,0.08)); padding:18px 22px; border-bottom:1px solid var(--border); }
.report-clinic-name { font-family:'Syne',sans-serif; font-size:17px; font-weight:800; color:var(--text); }
.report-period { font-size:11px; color:var(--muted); margin-top:2px; }
.report-body { padding:18px 22px; }
.report-section-title { font-size:10px; font-weight:600; letter-spacing:1.5px; text-transform:uppercase; color:var(--muted); margin-bottom:10px; margin-top:16px; }
.report-stat-grid { display:grid; grid-template-columns:repeat(2,1fr); gap:8px; margin-bottom:16px; }
.report-stat { background:var(--card); border:1px solid var(--border); border-radius:10px; padding:11px 13px; }
.report-stat-val { font-family:'Syne',sans-serif; font-size:20px; font-weight:800; line-height:1; margin-bottom:3px; }
.report-stat-label { font-size:10px; color:var(--muted); }
.report-row { display:flex; justify-content:space-between; padding:7px 0; border-bottom:1px solid rgba(30,42,56,0.5); font-size:12px; }
.report-row:last-child { border-bottom:none; }
.report-total { display:flex; justify-content:space-between; margin-top:12px; padding-top:12px; border-top:1px solid var(--border-lit); font-family:'Syne',sans-serif; font-size:17px; font-weight:800; }

/* ── SETTINGS ── */
.settings-grid { display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:14px; }
.settings-card { background:var(--card); border:1px solid var(--border); border-radius:14px; padding:16px; }
.settings-card-title { font-family:'Syne',sans-serif; font-size:13px; font-weight:700; margin-bottom:12px; }
.settings-label { font-size:10px; font-weight:600; letter-spacing:1px; text-transform:uppercase; color:var(--muted); margin-bottom:4px; }
.settings-input { width:100%; background:var(--panel); border:1px solid var(--border); border-radius:7px; padding:7px 11px; font-size:12px; color:var(--text); font-family:'DM Sans',sans-serif; outline:none; transition:border-color 0.2s; margin-bottom:10px; }
.settings-input:focus { border-color:rgba(0,230,118,0.3); }
.settings-toggle-row { display:flex; justify-content:space-between; align-items:center; padding:7px 0; border-bottom:1px solid rgba(30,42,56,0.5); font-size:12px; }
.settings-toggle-row:last-child { border-bottom:none; }

@media (max-width: 900px) {
  .overview-grid { grid-template-columns:1fr; }
  .settings-grid { grid-template-columns:1fr; }
}

/* --- floating help button hover (was a second inline <style> in body) --- */
#helpBtn:hover{transform:scale(1.1);box-shadow:0 6px 28px rgba(0,230,118,0.4)}

/* --- Stage 6b-2: cosmetic hover/focus moved off inline on* handlers --- */
/* Overview quick-nav cards (were onmouseover/onmouseout). */
.nav-card:hover{background:rgba(0,230,118,0.04)}
/* Search inputs (were onfocus/onblur); border moved off inline so :focus wins. */
.search-input{border:1px solid var(--border)}
.search-input:focus{border-color:rgba(0,230,118,0.3)}

/* === Settings control center: sub-nav (left) + sub-page pane (right) === */
/* The whole shell is capped AND centered in the main area: a sensible max-width
   keeps cards/inputs from stretching across a wide monitor, while margin:0 auto
   removes the dead right-side gap the old pane-only cap left behind. */
.settings-shell{display:flex;gap:18px;align-items:flex-start;width:min(100%,1280px);margin:0 auto}
.settings-subnav{flex:0 0 224px;display:flex;flex-direction:column;gap:2px;position:sticky;top:8px}
.settings-subnav-item{display:flex;align-items:center;gap:9px;padding:9px 12px;border-radius:8px;font-size:12.5px;color:var(--muted);cursor:pointer;border:1px solid transparent;transition:background .15s,color .15s;white-space:nowrap}
.settings-subnav-item:hover{background:var(--card);color:var(--text)}
.settings-subnav-item.active{background:rgba(0,230,118,0.08);color:var(--green);border-color:rgba(0,230,118,0.15)}
.settings-subnav-item svg{flex-shrink:0}
/* Basic / Advanced split: advanced items + the back control are hidden by
   default; entering advanced mode hides the basic items + the advanced entry. */
.settings-subnav .settings-adv-item, .settings-subnav .settings-adv-back{display:none}
.settings-subnav.adv-mode .settings-basic-item, .settings-subnav.adv-mode .settings-adv-entry{display:none}
.settings-subnav.adv-mode .settings-adv-item{display:flex}
.settings-subnav.adv-mode .settings-adv-back{display:flex;color:var(--blue);margin-bottom:6px}
.settings-subnav.adv-mode .settings-adv-back:hover{color:var(--blue);background:var(--blue-glow)}
/* "Advanced settings" entry (bottom of the basic sub-nav) */
.settings-adv-entry{display:flex;flex-direction:column;gap:2px;margin-top:10px;padding:10px 12px;border-radius:8px;border:1px solid var(--border);background:rgba(255,255,255,0.015);cursor:pointer;transition:border-color .15s,background .15s}
.settings-adv-entry:hover{border-color:var(--border-lit);background:var(--card)}
.sae-main{display:flex;align-items:center;gap:9px;font-size:12.5px;font-weight:600;color:var(--text)}
.sae-main svg{width:15px;height:15px;flex-shrink:0;opacity:.85}
.sae-chev{margin-left:auto;opacity:.6}
.sae-sub{font-size:11px;color:var(--muted);padding-left:24px}
/* Messaging-provider status line (kept in the basic view) */
.set-provider-status{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--muted);background:var(--card);border:1px solid var(--border);border-radius:9px;padding:9px 13px;margin-bottom:14px;line-height:1.5;max-width:680px}
.set-provider-status strong{color:var(--text);font-weight:600}
.set-provider-status em{color:var(--soft);font-style:normal}
.sps-dot{width:7px;height:7px;border-radius:50%;background:var(--muted);flex-shrink:0}
/* The pane fills the centered shell (which owns the max-width now), so cards sit
   balanced in the available space instead of capping early and leaving a void. */
.settings-pane{flex:1;min-width:0}
.settings-subpage{display:none}
.settings-subpage.active{display:block}
.settings-readonly{font-size:12px;color:var(--muted);line-height:1.6;margin:2px 0 0;max-width:640px}
.settings-field{font-size:12.5px;color:var(--text);background:var(--panel);border:1px solid var(--border);border-radius:7px;padding:8px 11px;margin-bottom:10px;line-height:1.5}
@media (max-width:900px){
  .settings-shell{flex-direction:column}
  .settings-subnav{flex-direction:row;overflow-x:auto;width:100%;flex:none;gap:6px;padding-bottom:8px;position:static}
  .settings-subnav-item{flex:0 0 auto}
  /* Column mode: the shell's flex-start (a desktop row need) would otherwise let
     the pane shrink-wrap to its content's max-content. Force it to fill. */
  .settings-pane{width:100%}
}

/* === Stage 0 revision: collapsible sidebar (desktop rail) + mobile drawer === */
/* A desktop collapse chevron lives in the sidebar; a mobile burger lives in the
   top bar. Both are CSP-safe (data-action) and reduced-motion aware. UI only. */
.sidebar-toggle{display:flex;align-items:center;justify-content:flex-end;gap:6px;background:none;border:0;color:var(--muted);cursor:pointer;padding:4px 8px;margin:-4px 0 6px;border-radius:8px;transition:color .15s,background .15s}
.sidebar-toggle:hover{color:var(--text);background:var(--card)}
.sidebar-toggle svg{width:16px;height:16px;transition:transform .2s}
.nav-burger{display:none;align-items:center;justify-content:center;width:38px;height:38px;border:1px solid var(--border);border-radius:8px;background:var(--card);color:var(--text);cursor:pointer;margin-right:6px;flex-shrink:0}
.nav-burger:hover{color:var(--green);border-color:rgba(0,230,118,0.25)}
.nav-burger svg{width:18px;height:18px}
.nav-scrim{display:none;position:fixed;inset:65px 0 0 0;background:rgba(0,0,0,.5);z-index:70}

/* Desktop only: collapsed sidebar becomes a centered icon rail. */
@media (min-width:901px){
  .layout.sidebar-collapsed{grid-template-columns:64px 1fr}
  .sidebar-collapsed .sidebar{padding:20px 8px}
  .sidebar-collapsed .sidebar-section{height:0;padding:0;margin:10px 0 2px;overflow:hidden}
  .sidebar-collapsed .nav-item{justify-content:center;gap:0;padding:9px 0;font-size:0}
  .sidebar-collapsed .nav-badge{display:none}
  .sidebar-collapsed .sidebar-toggle{justify-content:center}
  .sidebar-collapsed .sidebar-toggle svg{transform:rotate(180deg)}
  .sidebar-collapsed .sidebar::after{font-size:0;padding:14px 0}
  /* Hover/focus tooltip on the collapsed icon rail — beside the icon, never over it. */
  .sidebar-collapsed .nav-item{position:relative}
  .sidebar-collapsed .nav-item::after{
    content:attr(data-label);
    position:absolute; left:calc(100% + 12px); top:50%; transform:translateY(-50%);
    background:var(--panel); color:var(--text); border:1px solid var(--border-lit);
    padding:6px 10px; border-radius:8px; font-size:12px; font-weight:500; line-height:1;
    white-space:nowrap; box-shadow:0 8px 24px rgba(0,0,0,0.5);
    opacity:0; pointer-events:none; transition:opacity .12s ease; z-index:200;
    font-family:'DM Sans',sans-serif;
  }
  .sidebar-collapsed .nav-item:hover::after{opacity:1}
  .sidebar-collapsed .nav-item:focus::after{opacity:1}
  .sidebar-collapsed .nav-item:focus-visible::after{opacity:1}
  .sidebar-collapsed .nav-item:focus{outline:none}
  .sidebar-collapsed .nav-item:focus-visible{box-shadow:inset 0 0 0 1px rgba(0,180,216,0.5)}
}

/* Mobile: the sidebar slides in as an off-canvas drawer; content takes full width. */
@media (max-width:900px){
  .layout{grid-template-columns:1fr}
  .nav-burger{display:inline-flex}
  .sidebar-toggle{display:none}
  .sidebar{position:fixed;top:65px;left:0;bottom:0;width:248px;z-index:80;transform:translateX(-100%);transition:transform .25s ease;overflow-y:auto}
  .layout.drawer-open .sidebar{transform:translateX(0);box-shadow:0 16px 48px rgba(0,0,0,.55)}
  .layout.drawer-open .nav-scrim{display:block}
}

@media (prefers-reduced-motion:reduce){
  .sidebar{transition:none}
  .sidebar-toggle svg{transition:none}
}

/* Phones: keep the top bar on one line (it never had a mobile treatment). Tighter
   padding, drop the decorative subtitle + "System Active", truncate a long clinic
   name, and give content edge-to-edge breathing room. Kills horizontal overflow. */
@media (max-width:560px){
  .topbar{padding:14px 16px}
  .brand{min-width:0}
  .brand-name{display:none}   /* logo mark + clinic name is the mobile top bar; wordmark stays in the drawer footer */
  .brand-sub{display:none}
  .live-dot{display:none}
  .clinic-identity{min-width:0;max-width:48vw}
  .clinic-identity strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .main{padding:20px 16px}
}

/* === Settings repair: finished-product cards, help tooltips, template editor === */
/* Breathing room for the configure cards (scoped to the Settings pane). */
.settings-pane .settings-grid{gap:16px}
.settings-pane .settings-card{padding:18px}
.settings-card-title{display:flex;align-items:center;gap:7px}
.settings-card-sub{font-size:11.5px;color:var(--muted);margin:-6px 0 14px;line-height:1.5}
.settings-row{display:flex;gap:12px}
.settings-row > *{flex:1;min-width:0}
.settings-actions{display:flex;align-items:center;gap:10px;margin-top:4px}
.settings-saved{font-size:11px;font-weight:600;color:var(--green);opacity:0;transition:opacity .2s}
.settings-saved.show{opacity:1}
.btn-sm:disabled{opacity:.4;cursor:not-allowed;transform:none;box-shadow:none}
.card-span{grid-column:1 / -1}

/* Business hours — 7 independent day rows (compact, clear closed state) */
.hours-list{display:flex;flex-direction:column;gap:2px;margin-bottom:12px}
.hours-row{display:grid;grid-template-columns:84px 36px 52px minmax(0,1fr) 10px minmax(0,1fr);align-items:center;gap:9px;padding:7px 0;border-bottom:1px solid var(--border)}
.hours-row:last-child{border-bottom:none}
.hours-day{font-size:12.5px;font-weight:600;color:var(--text)}
.hours-toggle{flex-shrink:0;margin:0}
.hours-state{font-size:10px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--green)}
.hours-time{margin-bottom:0;padding:6px 9px;font-variant-numeric:tabular-nums;text-align:center}
.hours-time::-webkit-calendar-picker-indicator{opacity:.45;cursor:pointer}
.hours-dash{text-align:center;color:var(--muted);font-size:12px}
.hours-row.is-closed .hours-state{color:var(--muted)}
.hours-row.is-closed .hours-time{opacity:.4}
.hours-row.is-closed .hours-dash{opacity:.4}
.hours-row.hours-row-bad .hours-time{border-color:rgba(255,90,90,.55)}
.hours-error{font-size:11.5px;color:#ff7a7a;line-height:1.5;margin:-2px 0 12px}
@media (max-width:520px){
  .hours-row{grid-template-columns:72px 32px minmax(0,1fr) 8px minmax(0,1fr);gap:7px}
  .hours-state{display:none}
}

/* Help "?" tooltip — CSS only (hover + keyboard/tap focus), no JS. */
.help{display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;border-radius:50%;border:1px solid var(--border-lit);background:none;color:var(--muted);font-size:9.5px;font-weight:700;cursor:help;position:relative;padding:0;line-height:1;flex-shrink:0;vertical-align:middle}
.help:hover,.help:focus-visible,.help:focus{color:var(--text);border-color:var(--green);outline:none}
.help-pop{position:absolute;bottom:calc(100% + 9px);left:50%;transform:translateX(-50%);width:224px;background:var(--panel);border:1px solid var(--border-lit);border-radius:9px;padding:10px 12px;font-size:11px;font-weight:400;letter-spacing:0;text-transform:none;line-height:1.55;color:var(--muted);text-align:left;box-shadow:0 10px 30px rgba(0,0,0,.55);opacity:0;visibility:hidden;transition:opacity .15s;z-index:60;pointer-events:none}
.help:hover .help-pop,.help:focus .help-pop{opacity:1;visibility:visible}
.help-pop::after{content:'';position:absolute;top:100%;left:50%;transform:translateX(-50%);border:5px solid transparent;border-top-color:var(--border-lit)}

/* Team table */
.team-table{width:100%;border-collapse:collapse}
.team-table th{font-size:9.5px;font-weight:600;letter-spacing:1px;text-transform:uppercase;color:var(--muted);text-align:left;padding:6px 10px;border-bottom:1px solid var(--border)}
.team-table td{font-size:12.5px;color:var(--text);padding:9px 10px;border-bottom:1px solid rgba(30,42,56,0.5)}
.team-table tr:last-child td{border-bottom:none}
.role-pill{font-size:10px;font-weight:600;padding:2px 8px;border-radius:20px;background:var(--card);border:1px solid var(--border);color:var(--muted)}
.invite{margin-top:14px;border-top:1px solid var(--border);padding-top:12px}
.invite>summary{font-size:12px;font-weight:600;color:var(--green);cursor:pointer;list-style:none;display:inline-flex;align-items:center;gap:6px}
.invite>summary::-webkit-details-marker{display:none}
.invite-form{display:grid;grid-template-columns:1fr 1fr auto;gap:10px;align-items:end;margin-top:12px}
.import-drop{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;width:100%;box-sizing:border-box;min-height:200px;border:1.5px dashed var(--border-lit);border-radius:12px;padding:30px 20px;text-align:center;color:var(--muted);background:rgba(255,255,255,0.01);cursor:pointer;transition:border-color .15s,background .15s}
.import-drop:hover{border-color:var(--green);background:rgba(0,230,118,.03)}
.import-drop svg{opacity:.5;margin-bottom:8px}
.import-types{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin-top:12px}
.import-type{font-size:11px;color:var(--text);background:var(--card);border:1px solid var(--border);border-radius:7px;padding:5px 11px}

/* Template editor (accordion via <details>) */
.tmpl-section{font-size:10px;font-weight:600;letter-spacing:1.5px;text-transform:uppercase;color:var(--muted);margin:20px 0 9px;display:flex;align-items:center;gap:7px}
.tmpl-section:first-of-type{margin-top:2px}
.tmpl-item{border:1px solid var(--border);border-radius:12px;background:var(--card);margin-bottom:10px;overflow:hidden}
.tmpl-item[open]{border-color:var(--border-lit);background:var(--panel)}
.tmpl-head{display:flex;align-items:center;gap:12px;padding:13px 16px;cursor:pointer;list-style:none;user-select:none}
.tmpl-head::-webkit-details-marker{display:none}
.tmpl-head::after{content:'';margin-left:auto;width:7px;height:7px;border-right:1.5px solid var(--muted);border-bottom:1.5px solid var(--muted);transform:rotate(45deg);transition:transform .2s;flex-shrink:0}
.tmpl-item[open] .tmpl-head::after{transform:rotate(-135deg)}
.tmpl-name{font-size:13px;font-weight:600;color:var(--text);flex-shrink:0}
.tmpl-snippet{font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.tmpl-item[open] .tmpl-snippet{display:none}
.tmpl-editor{display:grid;grid-template-columns:1fr 236px;gap:18px;padding:2px 16px 16px}
.tmpl-main{display:flex;flex-direction:column;min-width:0}
.tmpl-body{width:100%;min-height:108px;resize:vertical;background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:11px 13px;font-size:12.5px;color:var(--text);font-family:'DM Sans',sans-serif;line-height:1.55;outline:none;transition:border-color .2s}
.tmpl-body:focus{border-color:rgba(0,230,118,0.3)}
.tmpl-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:11px}
.tmpl-chip{font-size:10.5px;color:var(--blue);background:rgba(0,180,216,0.08);border:1px solid rgba(0,180,216,0.22);border-radius:6px;padding:3px 8px;cursor:pointer;transition:background .15s}
.tmpl-chip:hover{background:rgba(0,180,216,0.18)}
.tmpl-side{display:flex;flex-direction:column;gap:8px}
.tmpl-side-label{font-size:9.5px;font-weight:600;letter-spacing:1px;text-transform:uppercase;color:var(--muted)}
.tmpl-bubble{background:#0A84FF;color:#fff;border-radius:15px;border-bottom-left-radius:4px;padding:9px 13px;font-size:12px;line-height:1.5;align-self:flex-start;max-width:100%;word-wrap:break-word;white-space:pre-wrap}
.tmpl-meta{font-size:10.5px;color:var(--muted)}
.tmpl-warn{font-size:10.5px;color:#e0a82e;line-height:1.4;display:none}
.tmpl-warn.show{display:block}
.tmpl-actions{grid-column:1 / -1;display:flex;align-items:center;gap:10px;margin-top:2px}
@media (max-width:820px){
  .tmpl-editor{grid-template-columns:1fr}
  .invite-form{grid-template-columns:1fr}
}

/* === Settings repair v2: sub-nav icons, balanced cards, sending controls,
   role matrix, team actions, CSV import mapper === */

/* Sub-nav icons sit left of the label (the item is already a flex row). */
.settings-subnav-item svg{width:15px;height:15px;flex-shrink:0;opacity:.85}

/* Balanced rows: cards in a row share height; action footers settle at the bottom. */
.settings-pane .settings-grid{align-items:stretch}
.settings-pane .settings-card{display:flex;flex-direction:column}
.settings-pane .settings-card .settings-actions{margin-top:auto;padding-top:6px}
.settings-card-note{font-size:11px;color:var(--muted);line-height:1.5;margin-top:10px}

/* Sending controls — label-left / control-right rows. */
.sc-list{display:flex;flex-direction:column;margin-top:2px}
.sc-item{display:flex;justify-content:space-between;align-items:center;gap:14px;padding:10px 0;border-bottom:1px solid rgba(30,42,56,0.5)}
.sc-item:last-child{border-bottom:none}
.sc-text{min-width:0}
.sc-label{font-size:12.5px;color:var(--text)}
.sc-hint{font-size:10.5px;color:var(--muted);margin-top:2px;line-height:1.4}
.settings-input.sc-num{width:92px;margin-bottom:0;text-align:right;flex-shrink:0;font-variant-numeric:tabular-nums}
.sc-val{font-size:12.5px;color:var(--muted);font-variant-numeric:tabular-nums;flex-shrink:0}
.sc-tag{font-size:9px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--muted);border:1px solid var(--border-lit);border-radius:5px;padding:2px 7px;white-space:nowrap}
.settings-card-title .sc-tag{margin-left:auto}

/* Priority order — read-only numbered list. */
.prio{display:flex;flex-direction:column;gap:7px;counter-reset:p;margin-top:2px}
.prio-item{display:flex;align-items:center;gap:10px;font-size:12.5px;color:var(--text)}
.prio-item::before{counter-increment:p;content:counter(p);width:19px;height:19px;flex-shrink:0;border-radius:50%;background:var(--panel);border:1px solid var(--border-lit);color:var(--muted);font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center}

/* Connection status row + mocked test. */
.conn-status{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--text);margin:2px 0 12px}
.conn-dot{width:8px;height:8px;border-radius:50%;background:var(--muted);flex-shrink:0}
.conn-dot.ok{background:var(--green)}
.conn-dot.fail{background:var(--red)}
.conn-dot.testing{background:var(--gold)}

/* SMS provider — read-only safe-metadata status panel (server-authoritative). */
.prov-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:0 18px;margin-top:4px}
.prov-cell .settings-label{margin-top:2px}
.prov-cell .conn-status{margin:2px 0 10px}
.prov-note{font-size:12px;color:var(--muted);line-height:1.5;margin:10px 0 14px}

/* Role capabilities matrix. */
.role-matrix-wrap{overflow-x:auto;margin-top:2px}
.role-matrix{width:100%;border-collapse:collapse;min-width:380px}
.role-matrix th,.role-matrix td{padding:7px 8px;font-size:11.5px;border-bottom:1px solid rgba(30,42,56,0.5);text-align:center;white-space:nowrap}
.role-matrix tr:last-child td{border-bottom:none}
.role-matrix th:first-child,.role-matrix td:first-child{text-align:left;color:var(--text)}
.role-matrix thead th{font-size:9.5px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);font-weight:600}
.role-matrix .yes{color:var(--green);font-weight:700}
.role-matrix .no{color:var(--dim)}

/* Team table: actions, inline role select, status dot, inline remove-confirm. */
.team-table td.team-actions-cell{padding-top:6px;padding-bottom:6px}
.team-actions{display:flex;gap:7px;align-items:center;flex-wrap:wrap;justify-content:flex-end}
.team-act{font-size:11px;color:var(--muted);background:none;border:1px solid var(--border);border-radius:6px;padding:3px 9px;cursor:pointer;transition:color .15s,border-color .15s}
.team-act:hover{color:var(--text);border-color:var(--border-lit)}
.team-act.danger:hover{color:var(--red);border-color:rgba(255,69,96,.4)}
.team-role-select{font-size:11.5px;padding:4px 8px;border-radius:6px;background:var(--panel);border:1px solid var(--border);color:var(--text);font-family:'DM Sans',sans-serif;outline:none;cursor:pointer}
.team-role-select:focus{border-color:rgba(0,230,118,0.3)}
.team-status{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--muted)}
.team-status::before{content:'';width:6px;height:6px;border-radius:50%;background:var(--muted);flex-shrink:0}
.team-status.active{color:var(--text)}
.team-status.active::before{background:var(--green)}
.team-status.invited::before{background:var(--gold)}

/* Services & Pricing table: compact editable rows, right-aligned $ values. */
.svc-table td, .svc-table th { vertical-align:middle; }
.svc-table td { padding:8px 10px; }
.svc-input { background:var(--panel); border:1px solid var(--border); border-radius:6px; padding:5px 9px; font-size:12px; color:var(--text); font-family:'DM Sans',sans-serif; outline:none; transition:border-color .15s; }
.svc-input:focus { border-color:rgba(0,230,118,0.3); }
.svc-name { width:100%; max-width:230px; }
.svc-cat { cursor:pointer; }
.svc-val-wrap { display:inline-flex; align-items:center; gap:2px; }
.svc-val-cur { color:var(--muted); font-size:12px; }
.svc-val { width:74px; text-align:right; font-family:var(--num-font); font-variant-numeric:tabular-nums lining-nums; font-feature-settings:"tnum" 1,"lnum" 1; }
.svc-active-th { text-align:left; }
.svc-active-cell { white-space:nowrap; }
.svc-rm-cell { text-align:right; }
.svc-rm { font-size:11px; line-height:1; padding:4px 8px; }
.svc-inactive .svc-name, .svc-inactive .svc-val, .svc-inactive .svc-cat { opacity:0.5; }
.svc-foot { display:flex; gap:8px; justify-content:flex-end; margin-top:16px; }
.team-confirm{display:inline-flex;align-items:center;gap:8px;font-size:11.5px;color:var(--text)}

/* CSV import: stepper + mapping table + denylist + summary. */
.import-steps{display:flex;flex-wrap:wrap;gap:6px 18px;margin-bottom:18px}
.import-step{display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--muted)}
.import-step .step-num{width:21px;height:21px;border-radius:50%;border:1px solid var(--border-lit);display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700;flex-shrink:0}
.import-step.active{color:var(--text)}
.import-step.active .step-num{border-color:var(--green);color:var(--green);background:rgba(0,230,118,.08)}
.import-step.done .step-num{background:var(--green);color:#06140c;border-color:var(--green)}
.import-step-panel{display:none}
.import-step-panel.active{display:block}
.import-actions{display:flex;align-items:center;gap:10px;margin-top:16px;flex-wrap:wrap}
.import-remember{display:flex;align-items:center;gap:9px;font-size:12px;color:var(--text);margin-top:14px;cursor:pointer}
.import-remember .toggle{flex-shrink:0}
.import-remember-note{font-size:10.5px;color:var(--muted);margin-top:6px;line-height:1.45}
.map-wrap,.review-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:10px}
.map-table,.review-table{width:100%;border-collapse:collapse;min-width:520px}
.map-table th,.review-table th{font-size:9.5px;font-weight:600;letter-spacing:.5px;text-transform:uppercase;color:var(--muted);text-align:left;padding:9px 12px;border-bottom:1px solid var(--border);background:var(--panel);position:sticky;top:0}
.map-table td,.review-table td{font-size:12px;color:var(--text);padding:9px 12px;border-bottom:1px solid rgba(30,42,56,.5)}
.map-table tr:last-child td,.review-table tr:last-child td{border-bottom:none}
.map-col{font-family:'DM Mono','DM Sans',monospace;color:var(--text)}
.map-arrow{color:var(--muted);padding:0 2px}
.map-dest{font-size:11.5px;padding:4px 8px;border-radius:6px;background:var(--panel);border:1px solid var(--border);color:var(--text);font-family:'DM Sans',sans-serif;outline:none;cursor:pointer;max-width:100%}
.map-dest:focus{border-color:rgba(0,230,118,0.3)}
.map-dest:disabled{opacity:.55;cursor:not-allowed}
.conf{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;padding:2px 7px;border-radius:5px;border:1px solid currentColor;white-space:nowrap}
.conf.high{color:var(--green)}
.conf.med{color:var(--blue)}
.conf.low{color:var(--gold)}
.conf.deny{color:var(--red)}
.conf.skip{color:var(--muted)}
.conf.none{color:var(--muted)}
.map-block{display:inline-flex;align-items:center;gap:8px}
.map-block-name{font-size:12px;color:var(--muted)}
.map-block-tag{font-size:11.5px;color:var(--muted);opacity:.9}
.map-block-tag.is-block{color:var(--red);opacity:1}
.import-map-intro{margin:8px 0 2px;line-height:1.55}
.import-map-intro .help{vertical-align:middle}
.deny-list{display:flex;flex-wrap:wrap;gap:7px;margin-top:4px}
.deny-chip{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--muted);background:rgba(255,69,96,.05);border:1px solid rgba(255,69,96,.18);border-radius:7px;padding:4px 9px}
.deny-chip svg{width:11px;height:11px;flex-shrink:0;opacity:.8}
.import-summary-head{font-size:13px;font-weight:700;color:var(--text);margin:2px 0 11px;display:flex;align-items:center;gap:6px}
.import-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:4px;max-width:520px}
.sum-stat{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:14px 12px;text-align:center}
.sum-val{font-family:var(--num-font);font-size:25px;font-weight:700;line-height:1.1;font-variant-numeric:tabular-nums lining-nums;font-feature-settings:"tnum" 1,"lnum" 1;letter-spacing:0}
.sum-val.ok{color:var(--green)}
.sum-val.warn{color:var(--gold)}
.sum-val.deny{color:var(--red)}
.sum-label{font-size:9.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;margin-top:5px}
.import-breakdown{margin-top:16px;border:1px solid var(--border);border-radius:11px;overflow:hidden;max-width:600px}
.imp-bd-head{font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);padding:10px 14px;background:var(--panel);border-bottom:1px solid var(--border)}
.imp-bd-row{display:flex;align-items:center;justify-content:space-between;padding:11px 14px;border-bottom:1px solid rgba(30,42,56,.5)}
.imp-bd-row:last-child{border-bottom:none}
.imp-bd-label{display:flex;align-items:center;gap:9px;font-size:12.5px;color:var(--text)}
.imp-bd-dot{width:7px;height:7px;border-radius:50%;background:var(--muted);flex-shrink:0}
.imp-bd-dot.g{background:var(--green)}
.imp-bd-dot.b{background:var(--blue)}
.imp-bd-dot.gold{background:var(--gold)}
.imp-bd-val{font-size:13px;font-weight:700;color:var(--text);white-space:nowrap;font-variant-numeric:tabular-nums lining-nums;font-feature-settings:"tnum" 1,"lnum" 1}
.imp-bd-sub{font-size:11px;color:var(--muted);font-weight:400;margin-left:7px}
.imp-bd-foot{font-size:11px;color:var(--muted);padding:10px 14px;background:var(--panel);border-top:1px solid var(--border);line-height:1.55}
.import-dragover{border-color:var(--green)!important;background:rgba(0,230,118,.04)!important}
@media (max-width:560px){
  .import-summary{grid-template-columns:1fr}
  .team-actions{justify-content:flex-start}
}

/* Messaging restructure: group tabs + multi-step campaign cards */
.msg-tabs{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:16px;border-bottom:1px solid var(--border)}
.msg-tab{font-size:12.5px;color:var(--muted);background:none;border:0;border-bottom:2px solid transparent;padding:8px 13px;cursor:pointer;margin-bottom:-1px;font-family:'DM Sans',sans-serif}
.msg-tab:hover{color:var(--text)}
.msg-tab.active{color:var(--green);border-bottom-color:var(--green)}
.msg-group{display:none}
.msg-group.active{display:block}
.campaign-card{border:1px solid var(--border);border-radius:12px;background:var(--card);padding:16px;margin-bottom:12px}
.campaign-title{font-family:'Syne',sans-serif;font-size:13px;font-weight:700;display:flex;align-items:center;gap:7px}
.campaign-sub{font-size:11.5px;color:var(--muted);margin:6px 0 12px;line-height:1.5}
.campaign-sub strong{color:var(--text);font-weight:600}
.step-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}
.step-tab{font-size:11.5px;color:var(--muted);background:var(--panel);border:1px solid var(--border);border-radius:7px;padding:5px 12px;cursor:pointer;font-family:'DM Sans',sans-serif}
.step-tab:hover{color:var(--text);border-color:var(--border-lit)}
.step-tab.active{color:var(--green);border-color:rgba(0,230,118,0.3);background:rgba(0,230,118,0.06)}
.campaign-step{display:none}
.campaign-step.active{display:block}
.campaign-step .tmpl-editor{padding:0}

/* ============================================================================
   Stage 1 cohesion primitives (src/views/_shared.js). Power the rich page
   designs; reused by every operational tab at the Settings quality bar.
   ========================================================================== */
/* Tabular figures: KPI values + numeric/time columns align in a column. */
.stat-num, .num-cell { font-variant-numeric: tabular-nums; }

/* Priority severity scale on the Needs Action KPI cards (matches the pill map:
   High=red, Medium=gold, Low=grey, Resolved=green). */
.stat-val.sv-high { color: var(--blue); }
.stat-val.sv-med  { color: var(--text); text-shadow: none; }
.stat-val.sv-low  { color: var(--muted); text-shadow: none; }
.stat-val.sv-done { color: var(--green); }

/* "What's happening" next-best-action cell: what happened + what to do. */
.na-line { font-weight: 600; color: var(--text); font-size: 13px; }
.na-step { font-size: 11px; color: var(--muted); margin-top: 2px; }

/* Empty state — small icon + positive headline + one teaching line, never
   "No data". A healthy zero-row page reads as calm/encouraging, not broken. */
.empty-state { display:flex; flex-direction:column; align-items:center; justify-content:center;
  text-align:center; padding:38px 20px; gap:7px; }
.empty-state .es-icon { width:42px; height:42px; border-radius:50%; display:flex; align-items:center;
  justify-content:center; margin-bottom:3px; background:rgba(0,230,118,0.08); border:1px solid rgba(0,230,118,0.18); }
.empty-state .es-icon svg { width:21px; height:21px; fill:none; stroke:var(--green);
  stroke-width:2; stroke-linecap:round; stroke-linejoin:round; }
.empty-state .es-head { font-family:'Syne',sans-serif; font-size:14px; font-weight:700; color:var(--text); }
.empty-state .es-sub { font-size:12px; color:var(--muted); line-height:1.55; max-width:420px; }
/* Error tone — honest but calm (slate, not alarm-red): the data is coming back. */
.empty-state.es-error .es-icon { background:rgba(120,140,170,0.10); border-color:rgba(120,140,170,0.24); }
.empty-state.es-error .es-icon svg { stroke:var(--soft); }
.empty-state.es-error .es-head { color:var(--soft); }
/* Left-aligned, padding-free variant inside the Overview status strip. */
.ov-status .empty-state .es-icon { display:none; }

/* Loading skeleton rows (replace the "Loading…" text line). */
.skel-row td { padding:14px 16px; }
.skel-bar { display:block; height:12px; border-radius:6px;
  background:linear-gradient(90deg, var(--panel) 0%, var(--border-lit) 50%, var(--panel) 100%);
  background-size:200% 100%; animation:skelpulse 1.3s ease-in-out infinite; }
@keyframes skelpulse { 0%{background-position:200% 0} 100%{background-position:-200% 0} }
@media (prefers-reduced-motion: reduce) { .skel-bar { animation:none; opacity:0.5; } }

/* ============================================================================
   Patient Workspace — the patient modal as a working surface (Stage 1).
   Persistent header + left tab rail + swapping content pane. Settings-grade.
   ========================================================================== */
.pw-shell { background:var(--panel); border:1px solid var(--border); border-radius:18px;
  width:1060px; max-width:96vw; min-height:520px; max-height:90vh; display:flex; flex-direction:column;
  overflow:hidden; box-shadow:0 24px 60px rgba(0,0,0,0.6); }
.pw-header { display:flex; align-items:center; justify-content:space-between; gap:12px;
  padding:16px 22px; border-bottom:1px solid var(--border); flex-shrink:0; }
.pw-name { font-family:'Syne',sans-serif; font-size:17px; font-weight:700; color:var(--text); }
.pw-substatus { display:flex; align-items:center; gap:8px; margin-top:4px; font-size:11.5px; color:var(--muted); }
.pw-close { background:rgba(255,255,255,0.05); border:1px solid var(--border); color:var(--muted);
  width:30px; height:30px; border-radius:50%; cursor:pointer; font-size:14px; flex-shrink:0; transition:all .15s; }
.pw-close:hover { color:var(--text); border-color:var(--border-lit); }

.pw-body { display:flex; flex:1; min-height:0; }
.pw-rail { display:flex; flex-direction:column; gap:2px; width:184px; flex-shrink:0;
  padding:14px 10px; border-right:1px solid var(--border); background:rgba(0,0,0,0.12); overflow-y:auto; }
.pw-tab { text-align:left; font-size:13px; color:var(--muted); background:none; border:1px solid transparent;
  border-radius:9px; padding:10px 12px; cursor:pointer; font-family:'DM Sans',sans-serif; transition:all .15s; }
.pw-tab:hover { color:var(--text); background:var(--card); }
.pw-tab.active { color:var(--green); background:rgba(0,230,118,0.08); border-color:rgba(0,230,118,0.18); font-weight:600; }

.pw-content { flex:1; min-width:0; overflow-y:auto; padding:22px 24px; }
.pw-pane { display:none; }
.pw-pane.active { display:block; }
.pw-section-title { font-family:'Syne',sans-serif; font-size:12px; font-weight:700; color:var(--text);
  margin:0 0 12px; }

/* Needs-attention / message-context card — calm accent by severity, not loud. */
.pw-attn { border:1px solid var(--border); border-left:3px solid var(--border-lit); background:var(--card);
  border-radius:10px; padding:14px 16px; margin-bottom:20px; }
.pw-attn-high   { border-left-color:var(--blue); }   /* attention = teal, not red */
.pw-attn-medium { border-left-color:var(--border-lit); }
.pw-attn-low    { border-left-color:var(--border-lit); }
.pw-attn-good   { border-left-color:var(--green); }
.pw-attn-review { border-left-color:var(--border-lit); }
.pw-attn-head { display:flex; align-items:center; gap:9px; margin-bottom:8px; }
.pw-attn-title { font-size:13.5px; font-weight:700; color:var(--text); }
.pw-attn-what { font-size:12.5px; color:var(--text); line-height:1.55; }
.pw-attn-step { font-size:12px; color:var(--muted); line-height:1.5; margin-top:5px; }
.pw-attn-meta { font-size:11px; color:var(--muted); margin-top:8px; }

/* Summary info grid + current appointment. */
.pw-grid { display:grid; grid-template-columns:1fr 1fr 1fr; gap:12px; margin-bottom:20px; }
.pw-cell { background:var(--card); border:1px solid var(--border); border-radius:10px; padding:12px 14px; }
.pw-cell-label { font-size:10px; color:var(--muted); text-transform:uppercase; letter-spacing:1px; margin-bottom:5px; }
.pw-cell-val { font-size:13.5px; font-weight:600; color:var(--text); word-break:break-word; }
.pw-cell-val.pw-email { color:var(--blue); font-weight:500; font-size:12.5px; }
.pw-cell-val.pw-next { color:var(--green); }
.pw-appt-card { background:var(--card); border:1px solid var(--border); border-radius:10px; padding:14px 16px; }
.pw-appt-grid { display:grid; grid-template-columns:1fr 1fr; gap:14px; }
.pw-appt-status { grid-column:1 / span 2; }

/* Messages thread + composer. */
.pw-thread { background:var(--card); border:1px solid var(--border); border-radius:10px; padding:14px;
  min-height:180px; max-height:320px; overflow-y:auto; display:flex; flex-direction:column; gap:10px; }
.pw-thread-empty { color:var(--muted); font-size:12.5px; text-align:center; padding:40px 16px; line-height:1.6; margin:auto; }
.pw-thread-meta { font-size:11px; color:var(--muted); margin:8px 2px 0; }
.pw-composer { margin-top:14px; border:1px solid var(--border); border-radius:10px; background:var(--card); padding:12px; }
.pw-compose-input { width:100%; box-sizing:border-box; background:var(--panel); border:1px solid var(--border);
  border-radius:8px; color:var(--text); font-family:'DM Sans',sans-serif; font-size:13px; padding:10px; resize:vertical; }
.pw-compose-input:focus { outline:none; border-color:rgba(0,230,118,0.35); }
.pw-compose-input:disabled { opacity:0.5; cursor:not-allowed; }
.pw-compose-row { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-top:10px; }
.pw-compose-note { font-size:11px; color:var(--muted); line-height:1.45; }
.pw-compose-note.warn { color:var(--gold); }
.pw-composer-blocked .pw-compose-note.warn { color:var(--red); }
.pw-composer [data-action="pw-compose"]:disabled { opacity:0.5; cursor:not-allowed; }

/* Appointments / treatment list rows. */
.pw-list-row { display:flex; align-items:center; justify-content:space-between; gap:12px;
  padding:12px 14px; background:var(--card); border:1px solid var(--border); border-radius:9px; margin-bottom:8px; }
.pw-list-primary { font-size:13px; font-weight:600; color:var(--text); }
.pw-list-sub { font-size:11.5px; color:var(--muted); margin-top:2px; }
.pw-activity { display:flex; flex-direction:column; gap:8px; }
.pw-actions-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:8px; }

/* Mobile: rail becomes a horizontal tab strip above the content. */
@media (max-width:720px) {
  .pw-shell { height:92vh; max-height:92vh; }
  .pw-body { flex-direction:column; }
  .pw-rail { width:auto; border-right:none; border-bottom:1px solid var(--border); padding:14px; }
  .pw-tab { white-space:nowrap; padding:8px 12px; }
  .pw-facts { display:grid; grid-template-columns:1fr 1fr; gap:6px 16px; }
  .pw-trust { margin-top:14px; }
  .pw-actions-grid { grid-template-columns:1fr 1fr; }
}

/* 3-tab refinement: Summary single best action + Record cards. */
.pw-summary-action { display:flex; align-items:center; gap:10px; margin:0 0 20px; flex-wrap:wrap; }
.pw-summary-action .pw-primary { padding:9px 18px; }
.pw-record-card { background:var(--card); border:1px solid var(--border); border-radius:12px;
  padding:16px 18px; margin-bottom:14px; }
.pw-record-card .pw-section-title { margin-bottom:12px; }
.pw-appt-actions { display:flex; flex-wrap:wrap; gap:8px; margin-bottom:14px; }
.btn-sm.pw-btn-secondary { opacity:0.7; font-size:11px; }
.btn-sm.pw-btn-secondary:hover { opacity:1; }

/* Record → Notes & activity: inline Add note composer. */
.pw-note-add { margin-bottom:12px; }
.pw-note-composer { margin-bottom:14px; border:1px solid var(--border); border-radius:10px;
  background:var(--panel); padding:12px; }
.pw-note-buttons { display:flex; gap:8px; }

/* ============================================================================
   Patient Workspace v2 — identity rail + Settings-grade panels.
   ========================================================================== */
.pw-shell { position:relative; }
.pw-close { position:absolute; top:12px; right:14px; z-index:3; }
.pw-rail { width:222px; gap:0; padding:18px 16px; }
.pw-identity { display:flex; gap:12px; align-items:flex-start; margin-bottom:16px; }
.pw-mono { width:44px; height:44px; border-radius:50%; flex-shrink:0; display:flex; align-items:center;
  justify-content:center; font-family:'Syne',sans-serif; font-weight:700; font-size:15px;
  color:var(--blue); background:var(--blue-glow); border:1px solid rgba(0,180,216,0.28); }
.pw-id-text { min-width:0; flex:1; }
.pw-id-text .pw-name { font-size:15px; cursor:pointer; word-break:break-word; }
.pw-chips { display:flex; flex-wrap:wrap; gap:6px; margin-top:6px; }
.pw-chip { font-size:10.5px; font-weight:600; padding:2px 9px; border-radius:999px;
  background:rgba(255,255,255,0.05); color:var(--muted); border:1px solid var(--border); white-space:nowrap; }
.pw-chip-muted { color:var(--muted); }
.pw-chip-on { color:var(--green); background:var(--green-glow); border-color:rgba(0,230,118,0.22); }
.pw-chip-block { color:var(--text); background:transparent; border:1px solid var(--border-lit); font-weight:700; }
.pw-chip-block .pw-chip-ico { color:var(--muted); margin-right:2px; }
.pw-id-email { display:block; margin-top:8px; font-size:11.5px; color:var(--blue); background:none;
  border:none; padding:0; cursor:pointer; text-align:left; font-family:inherit;
  max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.pw-id-email:hover { text-decoration:underline; }

.pw-tabs { display:flex; flex-direction:column; gap:2px; margin-bottom:16px; }
.pw-facts { display:flex; flex-direction:column; gap:1px; margin-bottom:16px;
  border-top:1px solid var(--border); padding-top:14px; }
.pw-fact { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:5px 0; }
.pw-fact-k { font-size:10px; color:var(--muted); text-transform:uppercase; letter-spacing:.8px; flex-shrink:0; }
.pw-fact-v { font-size:12.5px; font-weight:600; color:var(--text); text-align:right; word-break:break-word; }
.pw-fact-copy { background:none; border:none; padding:0; cursor:pointer; font-family:inherit; }
.pw-fact-copy:hover { color:var(--blue); }

.pw-quick { display:grid; grid-template-columns:1fr 1fr; gap:7px; margin-top:auto; padding-top:14px;
  border-top:1px solid var(--border); }
.pw-qa { display:inline-flex; align-items:center; justify-content:center; gap:6px; font-size:11.5px;
  font-weight:600; color:var(--text); background:var(--card); border:1px solid var(--border);
  border-radius:9px; padding:8px 6px; cursor:pointer; font-family:'DM Sans',sans-serif; transition:all .15s; }
.pw-qa:hover { border-color:var(--blue); color:var(--blue); }
.pw-qa-ico { font-size:13px; }

.pw-card { background:var(--card); border:1px solid var(--border); border-radius:12px; padding:14px 16px; margin-bottom:14px; }
.pw-card-head { display:flex; align-items:center; gap:8px; margin-bottom:12px; }
.pw-card-ico { font-size:13px; opacity:.85; }
.pw-card-head .pw-section-title { margin:0; }
.pw-card-link { margin-left:auto; background:none; border:none; color:var(--blue); font-size:11.5px;
  cursor:pointer; font-family:inherit; }
.pw-card-link:hover { text-decoration:underline; }
.pw-recent { display:flex; flex-direction:column; gap:10px; }
.pw-recent-row { display:flex; align-items:flex-start; gap:10px; }
.pw-recent-dot { width:6px; height:6px; border-radius:50%; margin-top:5px; flex-shrink:0; background:var(--muted); }
.pw-recent-tx { font-size:12px; color:var(--text); line-height:1.45; }
.pw-recent-ts { font-size:10px; color:var(--muted); margin-top:2px; }
.pw-recent-empty { font-size:12px; color:var(--muted); padding:4px 0; }

.pw-queue-counter { font-size:11px; color:var(--muted); margin-bottom:14px; font-weight:600; letter-spacing:.3px; }
.pw-attn-prov { font-size:11.5px; color:var(--muted); margin-top:6px; font-style:italic; }

.pw-pane.active { animation:pwFade .18s ease; }
@media (prefers-reduced-motion: reduce) { .pw-pane.active { animation:none; } }
@keyframes pwFade { from { opacity:0; } to { opacity:1; } }

.bd-green-soft { background:rgba(0,230,118,0.06); color:#62B98C; }

/* A.1 polish: tighter Summary, intentional empty states, dark scrollbars. */
.pw-attn .pw-summary-action { margin:14px 0 0; }
.pw-summary-cards { display:grid; grid-template-columns:1fr 1fr; gap:14px; align-items:start; }
.pw-summary-cards .pw-card { margin-bottom:0; }
@media (max-width:720px) { .pw-summary-cards { grid-template-columns:1fr; } }

.pw-empty-head { font-size:13px; font-weight:700; color:var(--text); margin-bottom:4px; }
.pw-empty-sub  { font-size:12px; color:var(--muted); line-height:1.5; }

/* Close button reads as intentional and clears the content scrollbar. */
.pw-close { top:14px; right:18px; background:rgba(13,18,25,0.92); }
.pw-content { padding-right:26px; }
/* Modal panes (content / rail / message thread / activity) use the global thin
   scrollbar system defined at the top of this file — no per-pane overrides. */

/* Destructive one-step confirm — the only red in the workspace. */
.btn-sm.pw-confirm-danger { color:var(--red); border-color:var(--red); opacity:1; }

/* ============================================================================
   Patient Workspace v3 — single-patient operating cockpit.
   Identity/context sidebar · Summary dual-pane (Active Case + Timeline) ·
   context-preserving Messages · structured Record. No dead space.
   ========================================================================== */
/* Sidebar status line tone + trust indicators (replaced the quick-action grid). */
.pw-fact-status { font-weight:700; }
.pw-fact-high   { color:var(--blue); }
.pw-fact-medium { color:var(--text); }
.pw-fact-low    { color:var(--muted); }
.pw-fact-good   { color:var(--green); }
.pw-trust { margin-top:auto; padding-top:14px; border-top:1px solid var(--border); display:flex; flex-direction:column; gap:7px; }
.pw-trust-row { display:flex; align-items:center; gap:8px; font-size:10.5px; color:var(--muted); line-height:1.3; }
.pw-trust-ico { font-size:11px; flex-shrink:0; opacity:.9; }

/* Summary dual-pane: Active Case (flexible) + Timeline (fixed-ish right rail). */
.pw-summary-2col { display:grid; grid-template-columns:minmax(0,1.35fr) minmax(0,1fr); gap:18px; align-items:start; }

/* Active Case — the operating panel. Calm left accent by tone (teal = attention). */
.pw-case { background:var(--card); border:1px solid var(--border); border-left:3px solid var(--border-lit);
  border-radius:12px; padding:16px 18px; }
.pw-case-high   { border-left-color:var(--blue); }
.pw-case-medium { border-left-color:var(--border-lit); }
.pw-case-low    { border-left-color:var(--border-lit); }
.pw-case-good   { border-left-color:var(--green); }
.pw-case-review { border-left-color:var(--border-lit); }
.pw-case-head { display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:6px; }
.pw-case-eyebrow { font-size:10px; font-weight:700; letter-spacing:.9px; text-transform:uppercase; color:var(--muted); }
.pw-case-title { font-family:'Syne',sans-serif; font-size:16px; font-weight:700; color:var(--text); line-height:1.25; }
.pw-case-what { font-size:12.5px; color:var(--text); line-height:1.55; margin-top:7px; }
.pw-case-ctx { margin-top:14px; padding-top:14px; border-top:1px solid var(--border); }
.pw-case-ctx-label { font-size:10px; font-weight:700; letter-spacing:.8px; text-transform:uppercase; color:var(--muted); margin-bottom:9px; }
.pw-case-treat-row { display:flex; align-items:baseline; justify-content:space-between; gap:12px; }
.pw-case-treat-val { color:var(--gold); font-weight:700; }
.pw-case-step { font-size:12px; color:var(--green); line-height:1.5; margin-top:12px; font-weight:600; }
.pw-case-actions { margin-top:14px; }
.pw-case-actions .pw-summary-action { margin:0 0 8px; }
.pw-case-actions .pw-appt-actions { margin-bottom:0; }

/* Manual / future workflow actions — honestly disabled until connected. */
.pw-manual { margin-top:16px; padding-top:14px; border-top:1px solid var(--border); }
.pw-manual-head { display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:10px;
  font-size:11px; font-weight:700; letter-spacing:.6px; text-transform:uppercase; color:var(--muted); }
.pw-manual-tag { font-size:9px; font-weight:700; letter-spacing:.6px; text-transform:uppercase; color:var(--muted);
  background:rgba(255,255,255,0.04); border:1px solid var(--border); border-radius:999px; padding:2px 8px; }
.pw-manual-grid { display:grid; grid-template-columns:1fr 1fr; gap:7px; }
.pw-manual-btn { font-size:11.5px; font-weight:600; color:var(--muted); background:var(--panel);
  border:1px solid var(--border); border-radius:8px; padding:8px 10px; text-align:left; cursor:not-allowed;
  font-family:'DM Sans',sans-serif; opacity:.65; }
.pw-manual-btn:disabled { cursor:not-allowed; }
.pw-manual-note { font-size:10.5px; color:var(--muted); line-height:1.5; margin-top:9px; }

/* Timeline — full-height vertical list with a connecting spine. */
.pw-tl-wrap { background:var(--card); border:1px solid var(--border); border-radius:12px; padding:16px 18px;
  max-height:560px; display:flex; flex-direction:column; }
.pw-tl-wrap .pw-section-title { margin-bottom:14px; }
.pw-timeline { position:relative; overflow-y:auto; padding-left:4px; }
.pw-timeline::before { content:''; position:absolute; left:7px; top:4px; bottom:4px; width:1px; background:var(--border); }
.pw-tl-item { position:relative; display:flex; gap:12px; padding:0 0 16px 0; }
.pw-tl-item:last-child { padding-bottom:2px; }
.pw-tl-dot { position:relative; z-index:1; width:9px; height:9px; border-radius:50%; margin-top:3px; flex-shrink:0;
  background:var(--muted); box-shadow:0 0 0 3px var(--card); }
.pw-tl-body { min-width:0; }
.pw-tl-tx { font-size:12px; color:var(--text); line-height:1.45; }
.pw-tl-ts { font-size:10px; color:var(--muted); margin-top:2px; }
.pw-tl-empty { color:var(--muted); text-align:center; padding:34px 12px; }

/* Messages — persistent context rail (left) + conversation (right). */
.pw-messages-2col { display:grid; grid-template-columns:248px minmax(0,1fr); gap:18px; align-items:stretch; }
.pw-msg-main { min-width:0; display:flex; flex-direction:column; }
.pw-msg-main .pw-thread { min-height:240px; flex:1; }
.pw-mctx { background:var(--card); border:1px solid var(--border); border-left:3px solid var(--blue);
  border-radius:12px; padding:14px 16px; align-self:flex-start; }
.pw-mctx-eyebrow { font-size:10px; font-weight:700; letter-spacing:.9px; text-transform:uppercase; color:var(--muted); margin-bottom:7px; }
.pw-mctx-head { display:flex; align-items:center; gap:8px; margin-bottom:7px; flex-wrap:wrap; }
.pw-mctx-title { font-size:13.5px; font-weight:700; color:var(--text); line-height:1.3; }
.pw-mctx-what { font-size:12px; color:var(--text); line-height:1.5; }
.pw-mctx-line { font-size:11.5px; color:var(--muted); margin-top:9px; padding-top:9px; border-top:1px solid var(--border); line-height:1.45; }
.pw-mctx-step { font-size:11.5px; color:var(--green); font-weight:600; line-height:1.45; margin-top:8px; }
.pw-mctx-consent { font-size:11px; font-weight:700; margin-top:12px; }
.pw-mctx-consent.on { color:var(--green); }
.pw-mctx-consent.block { color:var(--muted); }

@media (max-width:760px) {
  .pw-summary-2col { grid-template-columns:1fr; }
  .pw-messages-2col { grid-template-columns:1fr; }
  .pw-tl-wrap { max-height:none; }
  .pw-manual-grid { grid-template-columns:1fr; }
}

/* ============================================================================
   Overview — manager visibility layer (single rich page).
   ========================================================================== */

/* Hero: greeting + today's headline, with the running / freshness status. */
.ov-hero { display:flex; justify-content:space-between; align-items:flex-start; gap:16px; flex-wrap:wrap; margin-bottom:18px; }
.ov-hero-main { min-width:240px; }
.ov-hero .page-title { font-size:24px; letter-spacing:-0.015em; }
.ov-status { font-size:14px; color:var(--text); font-weight:600; margin-top:8px; min-height:18px; }
.ov-status .empty-state { text-align:left; padding:0; align-items:flex-start; }
.ov-status-warn { color:var(--gold); font-weight:700; }
.ov-status-act { color:var(--blue); font-weight:700; }
.ov-hero-side { display:flex; flex-direction:column; align-items:flex-end; gap:6px; }
.ov-run { display:inline-flex; align-items:center; gap:7px; font-size:12px; font-weight:600; color:var(--green);
  background:var(--green-glow); border:1px solid rgba(0,230,118,0.25); border-radius:999px; padding:5px 12px;
  box-shadow:0 0 16px rgba(0,230,118,0.10); }
.ov-run-dot { width:7px; height:7px; border-radius:50%; background:var(--green); animation:livepulse 1.5s infinite; }
.ov-run.stale { color:var(--gold); background:var(--gold-glow); border-color:rgba(255,184,48,0.3); }
.ov-run.stale .ov-run-dot { background:var(--gold); animation:none; }
.ov-sync { font-size:11.5px; color:var(--muted); }
.ov-update-link { background:none; border:none; color:var(--blue); font-size:11.5px; cursor:pointer; font-family:inherit; padding:0; }
.ov-update-link:hover { text-decoration:underline; }

/* Summary cards — premium tiles: accent icon chip + glowing value + context. */
.ov-kpis { margin:0 0 18px; }
.ov-kpis .stat-card { padding:16px 18px; gap:2px; border-color:var(--border-lit);
  background:linear-gradient(180deg, rgba(255,255,255,0.022), rgba(255,255,255,0) 65%), var(--card);
  box-shadow:inset 0 1px 0 rgba(255,255,255,0.05), 0 8px 24px rgba(0,0,0,0.30);
  transition:border-color .15s, transform .15s, box-shadow .15s; }
.ov-kpi-top { display:flex; align-items:center; gap:9px; margin-bottom:9px; }
.ov-kpi-ico { display:inline-flex; align-items:center; justify-content:center; width:30px; height:30px; border-radius:9px;
  background:rgba(255,255,255,0.04); border:1px solid rgba(255,255,255,0.05); color:var(--muted); flex-shrink:0; }
.ov-kpi-top .stat-label { margin-bottom:0; min-height:0; }
.ov-kpi .stat-val { font-size:31px; font-weight:700; letter-spacing:-0.015em; }
.ov-kpi .stat-change { color:var(--muted); }
.ov-kpi-link { cursor:pointer; }
.ov-kpi-link:hover { border-color:rgba(0,180,216,0.45); transform:translateY(-2px);
  box-shadow:inset 0 1px 0 rgba(255,255,255,0.03), 0 10px 24px rgba(0,0,0,0.28); }
.ov-kpi-teal  { border-top:2px solid rgba(0,180,216,0.55); }
.ov-kpi-teal .ov-kpi-ico  { background:var(--blue-glow);  color:var(--blue);  border-color:rgba(0,180,216,0.32); }
.ov-kpi-teal .stat-val    { color:var(--blue);  text-shadow:0 0 18px rgba(0,180,216,0.50); }
.ov-kpi-green { border-top:2px solid rgba(0,230,118,0.50); }
.ov-kpi-green .ov-kpi-ico { background:var(--green-glow); color:var(--green); border-color:rgba(0,230,118,0.32); }
.ov-kpi-green .stat-val   { color:var(--green); text-shadow:0 0 18px rgba(0,230,118,0.46); }
.ov-kpi-amber { border-top:2px solid rgba(255,184,48,0.50); }
.ov-kpi-amber .ov-kpi-ico { background:var(--gold-glow);  color:var(--gold);  border-color:rgba(255,184,48,0.32); }
.ov-kpi-amber .stat-val   { color:var(--gold);  text-shadow:0 0 18px rgba(255,184,48,0.44); }
.ov-kpi-slate { border-top:2px solid rgba(255,255,255,0.08); }
.ov-kpi-slate .stat-val   { color:var(--text); }

/* Work (wide) + Hurriyya activity rail (narrow). */
.ov-grid { display:grid; grid-template-columns:1.6fr 1fr; gap:16px; align-items:start; }
.ov-col-main, .ov-col-side { display:flex; flex-direction:column; gap:16px; min-width:0; }
.ov-card { background:linear-gradient(180deg, rgba(255,255,255,0.016), rgba(255,255,255,0) 55%), var(--card);
  border:1px solid var(--border-lit); border-radius:14px; padding:16px 18px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,0.04), 0 8px 24px rgba(0,0,0,0.26); }
.ov-card-head { display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:12px; flex-wrap:wrap; }
.ov-card-head .sec-title { font-family:'Syne',sans-serif; font-size:14px; font-weight:700; color:var(--text); }
.ov-link { background:none; border:none; color:var(--blue); font-size:11.5px; font-weight:600; cursor:pointer; font-family:inherit; }
.ov-link:hover { text-decoration:underline; }
.ov-card-sub { font-size:11.5px; color:var(--muted); margin:-6px 0 12px; line-height:1.5; }
.ov-card-sub:empty { display:none; }
.ov-card .empty-state { padding:22px 0 14px; }

/* Schedule controls (range pills + status select) live in the card head. */
.ov-sched-controls { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.ov-scope { display:flex; gap:3px; background:rgba(255,255,255,0.03); border:1px solid var(--border); border-radius:999px; padding:3px; }
.ov-scope-btn { background:none; border:none; border-radius:999px; padding:4px 12px; font-size:11.5px; font-weight:600; color:var(--muted); cursor:pointer; font-family:inherit; }
.ov-scope-btn:hover { color:var(--text); }
.ov-scope-btn.active { background:rgba(255,255,255,0.07); color:var(--text); }
.ov-filter-sel { background:rgba(255,255,255,0.03); border:1px solid var(--border); color:var(--text); border-radius:8px; padding:5px 9px; font-size:11.5px; font-family:inherit; cursor:pointer; }
.ov-filter-sel:focus-visible { outline:2px solid var(--blue); outline-offset:1px; }

/* Schedule grid rows (div-based so phones can stack). */
.ov-sched-scroll { margin:0 -4px; }
.ov-sg-head, .ov-sg-row { display:grid; grid-template-columns:88px 1.3fr 1fr 72px 116px 60px; gap:8px; align-items:center; padding:10px 10px; }
.ov-sg-head { font-size:10.5px; text-transform:uppercase; letter-spacing:.05em; color:var(--muted); padding-bottom:7px; }
.ov-sg-row { border-top:1px solid var(--border); cursor:pointer; transition:background .12s; border-radius:8px; }
.ov-sg-row:hover { background:rgba(255,255,255,0.02); }
.ov-sg-next { background:rgba(0,180,216,0.05); box-shadow:inset 2px 0 0 var(--blue); }
.ov-sg-next:hover { background:rgba(0,180,216,0.08); }
.ov-sg-done { opacity:.55; }
.ov-next-chip { display:inline-block; margin-left:7px; font-size:8.5px; font-weight:700; letter-spacing:.05em;
  text-transform:uppercase; color:var(--blue); background:var(--blue-glow); border-radius:6px; padding:1px 6px; vertical-align:1px; }
.ov-sg-time { color:var(--text); font-variant-numeric:tabular-nums; white-space:nowrap; font-size:12.5px; font-weight:600; }
.ov-sg-name { font-size:13px; font-weight:600; color:var(--text); }
.ov-sg-svc, .ov-sg-val { font-size:12.5px; color:var(--muted); }
.ov-sg-val { font-variant-numeric:tabular-nums; }
.ov-sg-open { text-align:right; }
.ov-dim { color:var(--muted); }

/* Needs attention list (count lives in the card's sub-line). */
.ov-attn-row { display:flex; align-items:flex-start; gap:12px; padding:11px 8px; margin:0 -8px;
  border-top:1px solid var(--border); border-radius:8px; transition:background .12s; }
.ov-attn-row:hover { background:rgba(255,255,255,0.02); }
.ov-attn-top { display:flex; align-items:baseline; justify-content:space-between; gap:8px; }
.ov-attn-when { font-size:10.5px; color:var(--muted); white-space:nowrap; flex-shrink:0; }
.ov-attn-pri { flex-shrink:0; margin-top:1px; }
.ov-attn-body { flex:1; min-width:0; }
.ov-attn-name { font-size:13px; font-weight:600; color:var(--text); }
.ov-attn-line { font-size:12px; color:var(--text); margin-top:1px; }
.ov-attn-step { font-size:11.5px; color:var(--muted); margin-top:2px; }
.ov-attn-row .act-btn { flex-shrink:0; align-self:center; }

/* Hurriyya activity rail (the honest "Live Activity" energy). */
.ov-activity-card #ovActivity { max-height:560px; overflow-y:auto; margin:0 -4px; padding:0 4px; }
.ov-act-row { display:flex; align-items:flex-start; gap:11px; padding:9px 0; border-top:1px solid var(--border); }
.ov-act-row:first-child { border-top:none; }
.ov-act-open { cursor:pointer; border-radius:8px; transition:background .12s; }
.ov-act-open:hover { background:rgba(255,255,255,0.02); }
.ov-act-ico { display:inline-flex; align-items:center; justify-content:center; width:25px; height:25px; border-radius:7px;
  background:rgba(255,255,255,0.04); border:1px solid rgba(255,255,255,0.05); color:var(--muted); flex-shrink:0; margin-top:1px; }
.ov-ic-teal  { background:var(--blue-glow);  color:var(--blue); }
.ov-ic-green { background:var(--green-glow); color:var(--green); }
.ov-ic-amber { background:var(--gold-glow);  color:var(--gold); }
.ov-ic-slate { background:rgba(255,255,255,0.05); color:var(--muted); }
.ov-act-tx { flex:1; min-width:0; }
.ov-act-main { font-size:12.5px; color:var(--text); line-height:1.4; }
.ov-act-time { font-size:11px; color:var(--muted); margin-top:1px; }

/* Plan & results. */
.ov-section-head { font-family:'Syne',sans-serif; font-size:15px; font-weight:700; color:var(--text); letter-spacing:-0.01em; margin:24px 0 12px; }
.ov-pr-grid { display:grid; grid-template-columns:1fr 1fr; gap:16px; align-items:start; }
.ov-pr-grid .ov-week { grid-template-columns:repeat(2,1fr); }
.ov-pr-grid .ov-month { grid-template-columns:repeat(3,1fr); margin-bottom:10px; }

/* Reminder plan. */
.ov-rp-cadence { display:flex; align-items:center; gap:10px; padding-bottom:12px; border-bottom:1px solid var(--border); margin-bottom:12px; }
.ov-rp-k { font-size:11px; text-transform:uppercase; letter-spacing:.5px; color:var(--muted); }
.ov-rp-steps { display:flex; gap:6px; flex-wrap:wrap; }
.ov-rp-steps span { font-size:11px; font-weight:600; color:var(--text); background:rgba(255,255,255,0.04);
  border:1px solid var(--border); border-radius:999px; padding:3px 9px; }
.ov-rp-due { font-size:12.5px; color:var(--text); margin-bottom:10px; }
.ov-rp-due strong { color:var(--gold); }
.ov-rp-list { display:flex; flex-direction:column; gap:7px; margin-bottom:12px; }
.ov-rp-row { display:flex; align-items:baseline; justify-content:space-between; gap:10px; font-size:12px; }
.ov-rp-name { color:var(--text); font-weight:600; }
.ov-rp-when { color:var(--muted); text-align:right; }
.ov-rp-gate { font-size:11px; color:var(--muted); font-style:italic; padding-top:10px; border-top:1px solid var(--border); }

/* Opportunities. */
.ov-opp-row { display:flex; align-items:center; justify-content:space-between; padding:10px 0; border-top:1px solid var(--border); cursor:pointer; }
.ov-opp-row:first-child { border-top:none; }
.ov-opp-row:hover .ov-opp-label { color:var(--blue); }
.ov-opp-static { cursor:default; }
.ov-opp-static:hover .ov-opp-label { color:var(--text); }
.ov-opp-label { font-size:13px; color:var(--text); }
.ov-opp-num { font-size:15px; font-weight:700; color:var(--text); font-variant-numeric:tabular-nums; }

/* Handled / proof strips. */
.ov-week { display:grid; grid-template-columns:repeat(4,1fr); gap:14px; }
.ov-week-item { background:rgba(255,255,255,0.02); border:1px solid var(--border); border-radius:10px; padding:12px 14px; }
.ov-week-num { font-family:'Syne',sans-serif; font-size:20px; font-weight:700; color:var(--text); font-variant-numeric:tabular-nums; }
.ov-week-lbl { font-size:11px; color:var(--muted); margin-top:3px; }
.ov-week-gated .ov-week-gate { font-size:12px; font-weight:600; color:var(--blue); font-style:italic; }

/* Reviews (honest gate). */
.ov-reviews-card { margin-top:16px; }
.ov-reviews-empty { font-size:12.5px; color:var(--muted); font-style:italic; padding:6px 0 4px; }

/* Loading skeleton (boot, before the first data lands). */
.ov-skel-list { display:flex; flex-direction:column; gap:12px; padding:8px 0; }
.ov-skel { display:block; height:13px; border-radius:6px;
  background:linear-gradient(90deg, rgba(255,255,255,0.04), rgba(255,255,255,0.09), rgba(255,255,255,0.04));
  background-size:200% 100%; animation:ovshim 1.3s ease-in-out infinite; }
@keyframes ovshim { 0% { background-position:200% 0; } 100% { background-position:-200% 0; } }

/* ============================================================================
   Overview demo-structure shell — flow cards + activity feed (2026-06-11).
   Classes ported from the reference demo; theme tokens shared with the app.
   ========================================================================== */
.ov-shell-head { display:flex; justify-content:space-between; align-items:flex-start; flex-wrap:wrap; gap:10px; margin-bottom:4px; }
.flow-grid { display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-bottom:24px; }
.flow-card { background:var(--card); border:1px solid var(--border); border-radius:14px; padding:20px; transition:border-color .2s, transform .2s; }
.flow-card:hover { border-color:var(--border-lit); transform:translateY(-2px); }
.flow-header { display:flex; align-items:center; gap:10px; margin-bottom:14px; }
.flow-icon { width:38px; height:38px; border-radius:10px; display:flex; align-items:center; justify-content:center; }
.fi-blue { background:var(--blue-glow); }
.fi-green { background:var(--green-glow); }
.fi-gold { background:var(--gold-glow); }
.flow-name { font-family:'Syne',sans-serif; font-size:14px; font-weight:700; color:var(--text); }
.flow-desc { font-size:12px; color:var(--muted); margin-top:2px; }
.flow-steps { display:flex; flex-direction:column; gap:8px; }
.flow-step { display:flex; align-items:flex-start; gap:10px; padding:8px 10px; background:rgba(255,255,255,0.02); border:1px solid var(--border); border-radius:8px; font-size:12px; }
.step-dot { width:20px; height:20px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:10px; font-weight:700; flex-shrink:0; margin-top:1px; }
.sd-blue { background:var(--blue-glow); color:var(--blue); }
.sd-green { background:var(--green-glow); color:var(--green); }
.sd-gold { background:var(--gold-glow); color:var(--gold); }
.step-content { flex:1; }
.step-title { font-weight:600; color:var(--text); margin-bottom:2px; }
.step-detail { color:var(--muted); line-height:1.4; }
.flow-toggle { display:flex; align-items:center; justify-content:space-between; margin-top:14px; padding-top:12px; border-top:1px solid var(--border); }
.flow-stat { font-size:12px; color:var(--green); font-weight:600; }
/* Right column stretches to the left content height; the feed flex-fills it and
   scrolls internally (thin global scrollbar) so there is no dead page-bg gap
   under the card. .activity-feed's overflow:hidden keeps a long feed from
   inflating the grid row — the taller left column dictates the row height. */
.overview-grid { display:grid; grid-template-columns:1fr 270px; gap:20px; margin-top:20px; align-items:stretch; }
.activity-feed { background:var(--card); border:1px solid var(--border); border-radius:14px; overflow:hidden; display:flex; flex-direction:column; min-height:0; }
.af-header { padding:11px 14px; border-bottom:1px solid var(--border); display:flex; align-items:center; justify-content:space-between; flex-shrink:0; }
.af-title { font-family:'Syne',sans-serif; font-size:12px; font-weight:700; }
.af-items { padding:4px 0; flex:1 1 0; min-height:0; }
.af-item { display:flex; align-items:flex-start; gap:9px; padding:8px 12px; border-bottom:1px solid rgba(30,42,56,0.4); }
.af-item:last-child { border-bottom:none; }
.af-icon { width:26px; height:26px; border-radius:7px; display:flex; align-items:center; justify-content:center; font-size:11px; flex-shrink:0; margin-top:1px; }
.af-text { font-size:11px; color:var(--text); line-height:1.45; }
.af-time { font-size:10px; color:var(--muted); margin-top:2px; }
/* Mobile: single column — revert the flex-fill (no taller sibling to match) and
   cap the feed so it scrolls instead of running the page long. */
@media (max-width:900px) { .overview-grid { grid-template-columns:1fr; } .flow-grid { grid-template-columns:1fr; } .activity-feed { display:block; } .af-items { flex:none; max-height:60vh; } }

/* ============================================================================
   Overview value dashboard (2026-06-11) — owner / manager view.
   ========================================================================== */
.ov-vhead { display:flex; justify-content:space-between; align-items:flex-start; flex-wrap:wrap; gap:10px; margin-bottom:14px; }
.ov-kpis { margin-top:0; }
.ov-dim { color:var(--muted); }

/* badge variants used by the schedule status pills */
.bd-grey { background:rgba(74,96,128,0.18); color:var(--muted); }
.bd-green-soft { background:rgba(0,230,118,0.10); color:var(--green); }

/* engine cards — "what Hurriyya is running" */
.ov-engines { display:grid; grid-template-columns:repeat(4,1fr); gap:14px; margin-top:10px; }
.ov-engine { background:var(--card); border:1px solid var(--border); border-radius:14px; padding:16px; display:flex; flex-direction:column; gap:10px; transition:border-color .2s, transform .2s; }
.ov-engine:hover { border-color:var(--border-lit); transform:translateY(-2px); }
.ov-eng-head { display:flex; align-items:flex-start; gap:10px; }
.ov-eng-head .flow-icon { width:34px; height:34px; border-radius:9px; flex-shrink:0; }
.ov-eng-name { font-family:'Syne',sans-serif; font-size:13px; font-weight:700; color:var(--text); line-height:1.2; }
.ov-eng-desc { font-size:11px; color:var(--muted); margin-top:3px; line-height:1.35; }
.ov-eng-body { display:flex; flex-wrap:wrap; gap:16px; padding:2px 0; min-height:30px; align-items:baseline; }
.ov-eng-metric { display:inline-flex; align-items:baseline; gap:5px; }
.ov-eng-num { font-family:'Syne',sans-serif; font-size:22px; font-weight:800; color:var(--text); font-variant-numeric:tabular-nums; }
.ov-eng-unit { font-size:11px; color:var(--muted); }
.ov-eng-soon { font-size:12px; color:var(--muted); font-style:italic; line-height:1.4; }
.ov-eng-foot { font-size:11px; color:var(--muted); border-top:1px solid var(--border); padding-top:9px; margin-top:auto; line-height:1.4; }

/* left column: schedule + "this month, handled" */
.ov-col-left { display:flex; flex-direction:column; gap:16px; min-width:0; }
.ov-handled-card { background:var(--card); border:1px solid var(--border); border-radius:14px; padding:16px 18px; }
.ov-h-head { margin-bottom:13px; }
.ov-h-title { font-family:'Syne',sans-serif; font-size:13px; font-weight:700; color:var(--text); }
.ov-h-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:14px; }
.ov-h-num { font-family:'Syne',sans-serif; font-size:24px; font-weight:800; color:var(--text); font-variant-numeric:tabular-nums; line-height:1; }
.ov-h-green { color:var(--green); text-shadow:0 0 14px rgba(0,230,118,0.25); }
.ov-h-lbl { font-size:11px; color:var(--muted); margin-top:5px; line-height:1.3; }

/* right rail: needs-attention card + activity feed */
.ov-rail { display:flex; flex-direction:column; gap:16px; }
.ov-needs-card { background:var(--card); border:1px solid var(--border); border-radius:14px; padding:13px 14px; }
.ov-nc-head { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-bottom:6px; }
.ov-nc-title { font-family:'Syne',sans-serif; font-size:12px; font-weight:700; color:var(--text); }
.ov-nc-count { font-size:10px; color:var(--gold); font-weight:600; white-space:nowrap; }
.ov-nc-row { display:grid; grid-template-columns:auto 1fr; align-items:center; gap:7px; padding:7px 0; border-top:1px solid rgba(30,42,56,0.5); cursor:pointer; }
.ov-nc-row:hover .ov-nc-name { color:var(--blue); }
.ov-nc-pri { font-size:9px; padding:1px 6px; align-self:start; }
.ov-nc-name { font-size:12px; font-weight:600; color:var(--text); }
.ov-nc-reason { grid-column:2; font-size:11px; color:var(--muted); line-height:1.35; }
.ov-nc-link { display:block; width:100%; margin-top:9px; background:var(--blue-glow); border:1px solid rgba(0,180,216,0.2); color:var(--blue); border-radius:7px; padding:7px; font-size:11px; font-weight:600; cursor:pointer; font-family:'DM Sans',sans-serif; transition:background .2s; }
.ov-nc-link:hover { background:rgba(0,180,216,0.18); }
.ov-nc-clear { font-size:11px; color:var(--green); padding:2px 0 4px; }

/* schedule list */
.ov-sched-wrap { padding-bottom:6px; }
.ov-sched { padding:2px 0; }
.ov-srow { display:grid; grid-template-columns:86px 1.3fr 1fr auto; align-items:center; gap:10px; padding:9px 16px; border-bottom:1px solid rgba(30,42,56,0.45); border-left:2px solid transparent; cursor:pointer; transition:background .15s; }
.ov-srow:last-child { border-bottom:none; }
.ov-srow:hover { background:rgba(255,255,255,0.02); }
.ov-srow:hover .ov-srow-name { color:var(--blue); }
.ov-srow-warn { border-left-color:var(--gold); }
.ov-srow-exc { border-left-color:var(--red); background:rgba(255,69,96,0.04); }
.ov-srow-next { border-left-color:var(--blue); }
.ov-srow-done { opacity:.55; }
.ov-srow-time { font-size:12px; font-weight:600; color:var(--text); font-variant-numeric:tabular-nums; display:flex; align-items:center; gap:6px; }
.ov-srow-name { font-size:13px; font-weight:600; color:var(--text); }
.ov-srow-svc { font-size:12px; color:var(--muted); }
.ov-next-chip { font-size:8px; font-weight:700; letter-spacing:.5px; text-transform:uppercase; color:var(--blue); background:var(--blue-glow); padding:1px 5px; border-radius:5px; }

/* campaign rows (demo port) — hover moved from inline onmouseover to CSS */
.ov-camp { transition:background 0.15s; }
.ov-camp:hover { background:rgba(0,230,118,0.04); }

/* ── Overview scroll areas (cards keep their height; content scrolls) ──
   Scrollbar styling comes from the global thin-scrollbar system at the top. */
.ov-scroll { overflow-y:auto; }
.ov-tscroll { max-height:340px; overflow-y:auto; }
.ov-tscroll thead th { position:sticky; top:0; background:var(--card); z-index:2; }
#ovNeedsSteps, #ovTreatSteps { max-height:208px; overflow-y:auto; padding-right:4px; }

/* ── Smart Fill candidates + review request rows (demo scale) ── */
.ov-cand { display:flex; align-items:flex-start; gap:10px; padding:9px 8px; border-bottom:1px solid rgba(30,42,56,0.45); border-radius:8px; }
.ov-cand:last-child { border-bottom:none; }
.ov-cand[data-action] { cursor:pointer; transition:background 0.15s; }
.ov-cand[data-action]:hover { background:rgba(255,255,255,0.03); }
.ov-cand-score { font-family:'Syne',sans-serif; font-size:12px; font-weight:800; color:var(--green); background:var(--green-glow); border:1px solid rgba(0,230,118,0.2); border-radius:7px; padding:3px 7px; flex-shrink:0; min-width:40px; text-align:center; }
.ov-cand-body { min-width:0; }
.ov-cand-name { font-size:13px; font-weight:600; color:var(--text); }
.ov-cand-why { font-size:11px; color:var(--muted); margin-top:2px; line-height:1.4; }
.ov-rev-row { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:9px 8px; border-bottom:1px solid rgba(30,42,56,0.45); }
.ov-rev-row:last-child { border-bottom:none; }
.ov-rev-who { min-width:0; }

/* ── Activity status dots (emoji icons removed) ── */
.ov-adot { width:9px; height:9px; border-radius:50%; flex-shrink:0; margin-top:6px; }

/* ── Schedule filter button menu (date + status groups) ── */
.ov-fmenu { display:none; position:absolute; top:calc(100% + 6px); right:0; background:var(--panel); border:1px solid var(--border); border-radius:10px; min-width:200px; box-shadow:0 12px 32px rgba(0,0,0,0.45); overflow:hidden; z-index:300; padding:4px 0; }
.ov-fmenu.open { display:block; }
.ov-fmenu-group { padding:8px 14px 4px; font-size:9px; font-weight:700; letter-spacing:1.4px; text-transform:uppercase; color:var(--dim); }
.ov-fmenu-item { padding:7px 14px; font-size:12px; color:var(--muted); cursor:pointer; transition:background 0.15s, color 0.15s; }
.ov-fmenu-item:hover { background:rgba(255,255,255,0.04); color:var(--text); }
.ov-fmenu-item.active { color:var(--blue); font-weight:600; }
.ov-fmenu-item.active::after { content:' ✓'; }

/* ── Overview schedule: "View all" footer + full-day modal (2026-06-15) ── */
#ovSchedViewAll { text-align:right; padding:10px 16px 14px; font-size:12px; font-weight:600; color:var(--blue); cursor:pointer; user-select:none; transition:color 0.15s; }
#ovSchedViewAll:hover { color:var(--text); }
.sched-daynav { background:var(--card); border:1px solid var(--border); color:var(--text); width:28px; height:28px; border-radius:8px; cursor:pointer; font-size:15px; line-height:1; display:flex; align-items:center; justify-content:center; transition:background 0.15s, border-color 0.15s; }
.sched-daynav:hover { background:rgba(255,255,255,0.05); border-color:var(--border-lit); }
#scheduleModalDate { color-scheme:dark; background:var(--card); border:1px solid var(--border); color:var(--text); border-radius:8px; padding:6px 10px; font-family:'DM Sans',sans-serif; font-size:12px; outline:none; }
#scheduleModalDate:focus { border-color:rgba(0,230,118,0.3); }
.sched-mstatus { font-size:11px; color:var(--muted); padding:4px 11px; border:1px solid var(--border); border-radius:999px; cursor:pointer; transition:background 0.15s, color 0.15s, border-color 0.15s; }
.sched-mstatus:hover { background:rgba(255,255,255,0.04); color:var(--text); }
.sched-mstatus.active { color:var(--blue); border-color:rgba(0,180,216,0.4); background:rgba(0,180,216,0.08); }

/* Wider full-day modal (2026-06-15 polish): roomier table + aligned controls. */
#scheduleModal .data-table th, #scheduleModal .data-table td { padding:12px 16px; }
#scheduleModal .data-table td { font-size:13px; }
#scheduleModal .sched-daynav { width:30px; height:30px; font-size:16px; }
#scheduleModalDate { font-size:13px; padding:7px 11px; }
.sched-mstatus { padding:5px 12px; font-size:11.5px; }

/* Live Activity collapse (2026-06-15): clickable header, chevron, compact summary.
   Expanded stays stretched (fills the right column, no dead gap). Collapsed hides
   the list AND stops stretching, so the card hugs its header + summary into a tidy
   compact panel instead of a tall card with an empty interior. */
.af-header { cursor:pointer; user-select:none; gap:10px; }
.af-head-right { display:flex; align-items:center; gap:9px; }
.af-chevron { color:var(--muted); font-size:10px; line-height:1; transition:transform 0.2s ease; }
.activity-feed.collapsed { align-self:start; }
.activity-feed.collapsed .af-chevron { transform:rotate(-90deg); }
.activity-feed.collapsed .af-items { display:none; }
.af-summary { display:none; padding:11px 14px; font-size:11.5px; color:var(--soft); border-top:1px solid rgba(30,42,56,0.4); }
.activity-feed.collapsed .af-summary:not(:empty) { display:block; }

/* ── Smart Fill Waitlist full modal: premium operational router rows (2026-06-15) ──
   .wl-row is interactive only when it carries data-action (live rows); static
   showcase rows render the same look but stay non-interactive. The score badge
   uses a dedicated tabular numeric class (NOT the Syne display font) so 96% / 88%
   align crisply and never stretch. */
.wl-row { display:flex; align-items:center; gap:13px; padding:11px 13px; border-radius:12px; border:1px solid transparent; transition:background 0.15s, border-color 0.15s; }
.wl-row + .wl-row { margin-top:3px; }
.wl-row[data-action] { cursor:pointer; }
.wl-row[data-action]:hover { background:rgba(255,255,255,0.03); border-color:rgba(0,180,216,0.28); }
.wl-row[data-action]:hover .wl-chev { color:var(--blue); transform:translateX(2px); }
.wl-row[data-action]:focus-visible { outline:none; border-color:rgba(0,180,216,0.5); box-shadow:0 0 0 3px rgba(0,180,216,0.18); }
.wl-row.viewed { opacity:0.6; }
.wl-score { font-family:'DM Sans',sans-serif; font-variant-numeric:tabular-nums; font-weight:700; font-size:13px; letter-spacing:0; color:var(--green); background:var(--green-glow); border:1px solid rgba(0,230,118,0.22); border-radius:8px; padding:6px 0; min-width:50px; text-align:center; flex-shrink:0; }
.wl-body { flex:1; min-width:0; }
.wl-line1 { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.wl-name { font-size:14px; font-weight:600; color:var(--text); }
.wl-why { font-size:12px; color:var(--muted); margin-top:3px; line-height:1.45; }
.wl-pill { font-size:11px; font-weight:600; padding:2px 9px; border-radius:999px; white-space:nowrap; }
.wl-u-pain { color:#ff9a9a; background:rgba(255,93,93,0.12); border:1px solid rgba(255,93,93,0.3); }
.wl-u-same { color:#f6bd6b; background:rgba(245,166,35,0.12); border:1px solid rgba(245,166,35,0.32); }
.wl-u-ready { color:var(--green); background:var(--green-glow); border:1px solid rgba(0,230,118,0.3); }
.wl-status { font-size:11px; color:var(--muted); white-space:nowrap; flex-shrink:0; }
.wl-chev { color:var(--dim); font-size:17px; line-height:1; flex-shrink:0; transition:color 0.15s, transform 0.15s; }
.wl-viewed { font-size:10px; font-weight:600; color:var(--soft); background:rgba(120,150,190,0.10); border:1px solid rgba(120,150,190,0.2); padding:2px 7px; border-radius:6px; white-space:nowrap; }
@keyframes wlPulse { 0% { box-shadow:0 0 0 0 rgba(0,180,216,0); } 30% { box-shadow:0 0 0 3px rgba(0,180,216,0.35); } 100% { box-shadow:0 0 0 0 rgba(0,180,216,0); } }
.wl-pulse { animation:wlPulse 1.2s ease 1; border-color:rgba(0,180,216,0.45) !important; }
/* Slot-anchored context: open-slot block, Fit Score label, fallback banner. */
.wl-slot { margin:12px 16px 2px; padding:13px 15px; border-radius:12px; background:rgba(0,180,216,0.06); border:1px solid rgba(0,180,216,0.18); }
.wl-slot-eye { font-size:9px; font-weight:700; letter-spacing:1.4px; color:var(--blue); }
.wl-slot-when { font-size:15px; font-weight:600; color:var(--text); margin-top:3px; }
.wl-slot-svc { font-size:12px; color:var(--soft); margin-top:2px; }
.wl-slot-reason { font-size:11px; color:var(--muted); margin-top:7px; display:flex; align-items:center; gap:6px; }
.wl-slot-dot { width:5px; height:5px; border-radius:50%; background:var(--gold); flex-shrink:0; }
.wl-fit { display:flex; align-items:center; gap:6px; margin:13px 16px 2px; font-size:11px; color:var(--soft); }
.wl-fallback { margin:0 16px 4px; padding:8px 11px; border-radius:9px; background:rgba(245,166,35,0.08); border:1px solid rgba(245,166,35,0.22); font-size:11.5px; color:var(--soft); }

/* (Overview size-up pass removed 2026-06-11 — cards stay at demo scale.) */

/* ============================================================================
   Default density (owner preference 2026-06-11): the dashboard renders at 90%
   so the "90% browser zoom" look IS the 100% default on desktop. CSS zoom does
   not scale viewport units, so vh-based shell heights are compensated below.
   Mobile (≤900px) stays 1:1 — shrinking phone text helps nobody.
   ========================================================================== */
@media (min-width: 901px) {
  /* text-rendering: at zoom≠1 fonts compute to fractional px and Chrome rounds
     each glyph advance UP, which reads as stretched/letter-spaced text.
     geometricPrecision keeps sub-pixel advances so spacing scales exactly. */
  body { zoom: 0.85; min-height: calc(100vh / 0.85); text-rendering: geometricPrecision; }
  .layout { min-height: calc(100vh / 0.9 - 65px); }
}

/* ============================================================================
   Settings refinement (2026-06-12) — honest state tags, quiet-hours emphasis,
   Sending Schedule section, locked safety rows.
   ========================================================================== */
.set-tag { display:inline-block; vertical-align:middle; font-size:9px; font-weight:700; letter-spacing:0.8px; text-transform:uppercase; padding:2px 8px; border-radius:10px; margin-left:6px; white-space:nowrap; }
.tag-local { background:rgba(0,180,216,0.10); color:var(--blue); border:1px solid rgba(0,180,216,0.22); }
.tag-plan { background:var(--gold-glow); color:var(--gold); border:1px solid rgba(255,184,48,0.25); }
.tag-safety { background:var(--green-glow); color:var(--green); border:1px solid rgba(0,230,118,0.28); }
.safety-card { border-color:rgba(255,184,48,0.32); }
.safety-card .settings-card-title { color:var(--text); }
.sched-intro { font-size:12px; color:var(--muted); margin:2px 0 14px; line-height:1.5; max-width:680px; }
.sc-lock { display:inline-flex; align-items:center; gap:5px; font-size:11px; font-weight:600; color:var(--muted); background:rgba(74,96,128,0.14); border:1px solid var(--border); border-radius:8px; padding:4px 10px; white-space:nowrap; }

/* ============================================================================
   Patients lookup (2026-06-12) — a CALM roster, not another dashboard.
   Quiet stats strip, search-first controls, five-column table, one row action.
   Everything scoped to #page-patients so shared primitives stay untouched.
   ========================================================================== */
/* Summary cards use the SAME plain treatment as the Overview cards (owner ask,
   2026-06-14: "compare with the overview — make them match"). Only the sub-text
   stays muted, since these cards carry a description, not a green up-trend. */
#page-patients .stat-change { color:var(--muted); }

/* controls: filter chips left, search + sort right */
.pt-controls { display:flex; justify-content:space-between; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:16px; }
.pt-tools { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.pt-chips { display:flex; flex-wrap:wrap; gap:8px; }
.pt-chip { background:var(--card); border:1px solid var(--border); color:var(--muted); border-radius:18px; padding:6px 13px; font-size:12px; font-weight:600; cursor:pointer; font-family:'DM Sans',sans-serif; transition:border-color .2s, color .2s, background .2s; white-space:nowrap; }
.pt-chip:hover { border-color:var(--border-lit); color:var(--text); }
.pt-chip.active { background:var(--blue-glow); border-color:rgba(0,180,216,0.35); color:var(--blue); }
.pt-chip-n { font-weight:700; margin-left:3px; opacity:0.75; font-variant-numeric:tabular-nums; }
.pt-search { background-color:rgba(255,255,255,0.03); border:1px solid var(--border-lit); border-radius:9px; padding:8px 13px 8px 34px; font-size:12px; color:var(--text); font-family:'DM Sans',sans-serif; outline:none; width:260px; max-width:100%; transition:border-color 0.2s, box-shadow 0.2s;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='13' height='13' viewBox='0 0 24 24' fill='none' stroke='%234A6080' stroke-width='2.4' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cline x1='21' y1='21' x2='16.5' y2='16.5'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:13px center; }
.pt-search:hover { border-color:rgba(0,180,216,0.3); }
.pt-search:focus { border-color:rgba(0,180,216,0.45); box-shadow:0 0 0 3px rgba(0,180,216,0.10); }
.pt-search::placeholder { color:var(--muted); }

/* roster rows: clean, slightly taller, name-first, no warning stripes —
   the status pill alone says who needs attention */
#page-patients .data-table td { padding:14px 16px; font-size:12.5px; }
#page-patients .data-table tbody tr { transition:background 0.15s; }
#page-patients .data-table tbody tr:hover td { background:rgba(255,255,255,0.028); }
.pt-name strong { font-size:13.5px; font-weight:600; color:var(--text); letter-spacing:0.1px; }
.pt-name { display:inline-flex; align-items:center; gap:11px; }
.pt-av { width:30px; height:30px; border-radius:50%; background:linear-gradient(135deg, rgba(0,180,216,0.20), rgba(0,230,118,0.14)); border:1px solid rgba(0,180,216,0.28); color:var(--blue); font-size:10.5px; font-weight:700; display:inline-flex; align-items:center; justify-content:center; flex-shrink:0; letter-spacing:0.4px; }
.pt-id { display:flex; flex-direction:column; gap:2px; min-width:0; }
.pt-id-top { display:flex; align-items:center; gap:7px; }
.pt-mini { font-size:9.5px; font-weight:600; color:var(--muted); background:rgba(74,96,128,0.14); border:1px solid var(--border); border-radius:8px; padding:1px 7px; white-space:nowrap; }
.pt-contact { color:var(--soft); font-size:11.5px; font-variant-numeric:tabular-nums; }
.pt-visit { font-size:12.5px; }
.pt-visit-sub { font-size:11px; color:var(--muted); margin-top:2px; white-space:nowrap; }

/* badges: one size, soft borders for contrast, scan dot on the Hurriyya status */
#page-patients .badge { padding:4px 10px; font-size:10px; letter-spacing:0.2px; border:1px solid transparent; }
#page-patients .badge.bd-gold  { border-color:rgba(255,184,48,0.28); }
#page-patients .badge.bd-blue  { border-color:rgba(0,180,216,0.24); }
#page-patients .badge.bd-green { border-color:rgba(0,230,118,0.22); }
#page-patients .badge.bd-grey  { border-color:var(--border); }
.pt-st::before { content:''; display:inline-block; width:5px; height:5px; border-radius:50%; background:currentColor; margin-right:6px; vertical-align:1px; opacity:0.85; }

/* last activity: what happened (named, soft) · when (muted) */
#page-patients .pt-activity { font-size:12px; }
.pt-act-what { color:var(--soft); font-weight:600; }
.pt-act-when { color:var(--muted); }
.pt-act-none { color:var(--muted); }

/* row actions: matched height, dark surfaces, deliberate hovers (spacing +
   centering come from the shared .action-btns table-cell rules) */
#page-patients .act-btn { padding:6px 13px; font-size:10.5px; border-radius:7px; line-height:1.4; }

/* pager footer: part of the card, not pasted on. Pagination (25 default,
   100 max) is what keeps the roster from stretching — no nested scrollbar. */
.pt-pager { display:flex; justify-content:space-between; align-items:center; gap:12px; flex-wrap:wrap; padding:10px 16px; border-top:1px solid var(--border); }
.pt-pager-info { font-size:11.5px; color:var(--muted); font-variant-numeric:tabular-nums; }
.pt-pager-controls { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.pt-page-num { font-size:11.5px; color:var(--soft); font-variant-numeric:tabular-nums; white-space:nowrap; }
.pt-page-btn { background:rgba(255,255,255,0.03); border:1px solid var(--border); color:var(--soft); border-radius:7px; padding:5px 12px; font-size:11px; font-weight:600; cursor:pointer; font-family:'DM Sans',sans-serif; transition:border-color .2s, color .2s, background .2s; }
.pt-page-btn:hover:not(:disabled) { border-color:var(--border-lit); color:var(--text); }
.pt-page-btn:disabled { opacity:0.4; cursor:default; }
@media (max-width:700px) { .pt-controls { align-items:flex-start; } .pt-search { width:100%; } .pt-tools { width:100%; } }

/* ============================================================================
   Honest preview/empty pages (Reviews, Results) — a calm on-theme card instead
   of fabricated data, and the Support "does / doesn't" lists. (2026-06-13)
   ========================================================================== */
.empty-page-card { background:linear-gradient(180deg, rgba(255,255,255,0.016), rgba(255,255,255,0) 55%), var(--card); border:1px solid var(--border-lit); border-radius:16px; padding:40px 28px; margin-top:18px; text-align:center; max-width:560px; box-shadow:inset 0 1px 0 rgba(255,255,255,0.04), 0 8px 24px rgba(0,0,0,0.26); }
.empty-page-ic { width:52px; height:52px; border-radius:14px; margin:0 auto 16px; display:flex; align-items:center; justify-content:center; background:var(--blue-glow); border:1px solid rgba(0,180,216,0.22); color:var(--blue); }
.empty-page-title { font-family:'Syne',sans-serif; font-size:16px; font-weight:700; color:var(--text); margin-bottom:8px; }
.empty-page-body { font-size:12.5px; color:var(--muted); line-height:1.6; max-width:440px; margin:0 auto; }
.empty-page-note { font-size:11.5px; color:var(--soft); line-height:1.55; margin-top:14px; padding-top:14px; border-top:1px solid var(--border); max-width:440px; margin-left:auto; margin-right:auto; }

.sup-do-label { font-size:10px; font-weight:700; letter-spacing:0.6px; text-transform:uppercase; margin:14px 0 8px; display:inline-flex; align-items:center; gap:6px; }
.sup-do-label::before { content:''; width:6px; height:6px; border-radius:50%; background:currentColor; }
.sup-do-yes { color:var(--green); }
.sup-do-no  { color:var(--gold); }
.sup-list { list-style:none; margin:0 0 4px; padding:0; display:flex; flex-direction:column; gap:7px; }
.sup-list li { font-size:12.5px; color:var(--muted); line-height:1.5; padding-left:16px; position:relative; }
.sup-list li::before { content:'—'; position:absolute; left:0; color:var(--border-lit); }
.sup-list li strong { color:var(--text); font-weight:600; }
.sup-note { font-size:11.5px; color:var(--soft); line-height:1.55; margin-top:14px; padding-top:12px; border-top:1px solid var(--border); }
.sup-note strong { color:var(--text); }

/* Preview banner — marks an entire page's content as example/non-live data so
   demo rows + cards are never mistaken for the clinic's real numbers. */
.preview-banner { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin:14px 0 4px; padding:10px 14px; border-radius:10px;
  background:rgba(0,180,216,0.06); border:1px dashed rgba(0,180,216,0.4); }
.preview-tag { flex-shrink:0; font-size:10px; font-weight:700; letter-spacing:0.6px; text-transform:uppercase; color:var(--blue);
  background:var(--blue-glow); border:1px solid rgba(0,180,216,0.3); border-radius:6px; padding:3px 8px; }
.preview-banner-text { font-size:12px; color:var(--soft); line-height:1.5; }
.preview-cell { font-size:10px; font-weight:600; color:var(--muted); border:1px dashed var(--border-lit); border-radius:6px; padding:3px 9px; }

/* Reminders — full-width premium log + secondary panels below (2026-06-13).
   Replaces the squeezed table+sidebar grid: the log breathes full width and the
   quick-stats / chart / upcoming panels sit in a 3-up row underneath. */
.rem-log { margin-bottom:20px; }
#page-reminders .rem-log .data-table td { padding:13px 16px; font-size:12.5px; vertical-align:middle; }
/* Header had padding-top:0 (unlike every other table at 8px), so the column names
   hugged the top. Give it a top pad in step with the roomier rows (td top is 13px)
   so the header reads like the other pages. Horizontal stays 16px to align cells. */
#page-reminders .rem-log .data-table th { padding:12px 16px 10px; }
#page-reminders .rem-log .data-table tbody tr { transition:background .15s; }
#page-reminders .rem-log .data-table tbody tr:hover td { background:rgba(255,255,255,0.028); }
/* Fixed layout so the column widths below are authoritative in EVERY body state.
   With auto layout, the loading / empty / error rows (a single colspan="7" cell)
   collapse the column structure and the header columns hug their own text — a
   lopsided header until data lands. Fixed layout honours the widths regardless,
   so the header reads correctly whether the body is a placeholder or 200 rows
   (verified: populated rows stay aligned with no cell overflow). */
#reminderTableEl { table-layout: fixed; }
/* sensible column widths so nothing feels cramped */
#reminderTableEl th:nth-child(1), #reminderTableEl td:nth-child(1) { width:19%; }
#reminderTableEl th:nth-child(2), #reminderTableEl td:nth-child(2) { width:20%; }
#reminderTableEl th:nth-child(3), #reminderTableEl td:nth-child(3) { width:14%; }
#reminderTableEl th:nth-child(4), #reminderTableEl td:nth-child(4) { width:15%; white-space:nowrap; }
#reminderTableEl th:nth-child(5), #reminderTableEl td:nth-child(5) { width:14%; }
#reminderTableEl th:nth-child(6), #reminderTableEl td:nth-child(6) { width:11%; }
#reminderTableEl th:nth-child(7), #reminderTableEl td:nth-child(7) { width:7%; white-space:nowrap; }
.rem-panels { display:grid; grid-template-columns:1.1fr 1.1fr 1fr; gap:16px; align-items:start; }
@media (max-width:1100px) { .rem-panels { grid-template-columns:1fr 1fr; } }
@media (max-width:720px) { .rem-panels { grid-template-columns:1fr; } }

/* Revenue Impact — honest value separation note + "not available" soft value */
.rs-note { font-size:12px; color:var(--soft); line-height:1.55; background:var(--card); border:1px solid var(--border); border-radius:10px; padding:11px 14px; margin:0 0 20px; }
.rs-note strong { color:var(--text); font-weight:600; }
#page-revenue .stat-val.rs-soft { font-size:16px; color:var(--muted); text-shadow:none; font-weight:600; }
#page-revenue .data-table td { font-size:12.5px; vertical-align:middle; }

/* ============================================================================
   Revenue Impact HERO — the cumulative Booked Value Trend is the proof moment.
   Premium dark card, bright mint area+line chart, 30/60/90 toggle, current
   total, and per-workflow contributions. (2026-06-13)
   ========================================================================== */
.rs-hero { background:linear-gradient(180deg, rgba(0,230,118,0.05), rgba(0,230,118,0) 42%), var(--card);
  border:1px solid var(--border-lit); border-radius:16px; padding:20px 22px; margin-bottom:22px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,0.04), 0 12px 32px rgba(0,0,0,0.3); }
.rs-hero-head { display:flex; align-items:flex-start; justify-content:space-between; gap:14px; flex-wrap:wrap; }
.rs-hero-title { font-family:'Syne',sans-serif; font-size:16px; font-weight:700; color:var(--text); }
.rs-hero-sub { font-size:12px; color:var(--muted); margin-top:3px; }
/* 30/60/90 range toggle */
.rs-range { display:inline-flex; background:rgba(0,0,0,0.22); border:1px solid var(--border); border-radius:9px; padding:3px; gap:2px; flex-shrink:0; }
.rs-range-btn { background:none; border:none; color:var(--muted); font-size:11.5px; font-weight:600; font-family:'DM Sans',sans-serif; padding:5px 12px; border-radius:6px; cursor:pointer; transition:background .15s, color .15s; white-space:nowrap; }
.rs-range-btn:hover { color:var(--text); }
.rs-range-btn.active { background:var(--green-glow); color:var(--green); }
/* big current total */
.rs-hero-total { display:flex; align-items:baseline; gap:10px; flex-wrap:wrap; margin:16px 0 6px; }
.rs-hero-total-val { font-family:var(--num-font); font-size:34px; font-weight:800; color:var(--green); line-height:1.05;
  font-variant-numeric:tabular-nums lining-nums; font-feature-settings:"tnum" 1,"lnum" 1; }
.rs-hero-total-sub { font-size:12px; color:var(--muted); }
/* the chart canvas */
.rs-chart { height:220px; width:100%; margin:6px 0 4px; }
.rs-chart svg { display:block; }
.rs-chart-empty { height:200px; display:flex; align-items:center; justify-content:center; text-align:center; color:var(--muted); font-size:12.5px; padding:0 20px; }
/* per-workflow contributions */
.rs-contrib { display:grid; grid-template-columns:repeat(3,1fr); gap:12px; margin-top:14px; padding-top:16px; border-top:1px solid var(--border); }
.rs-contrib-item { display:flex; align-items:center; gap:10px; }
.rs-contrib-dot { width:8px; height:8px; border-radius:50%; flex-shrink:0; }
.rs-dot-green { background:var(--green); }
.rs-dot-blue  { background:var(--blue); }
.rs-dot-gold  { background:var(--gold); }
.rs-contrib-label { font-size:11px; color:var(--muted); letter-spacing:0.3px; }
.rs-contrib-val { font-size:14px; font-weight:700; color:var(--text); margin-top:1px; }
@media (max-width:640px) { .rs-contrib { grid-template-columns:1fr; gap:10px; } .rs-hero-total-val { font-size:28px; } }

/* activity icon accents (the af-icon takes these) */
.ov-ic-slate { background:rgba(74,96,128,0.18); color:var(--muted); }
.ov-ic-teal  { background:var(--blue-glow); color:var(--blue); }
.ov-ic-green { background:var(--green-glow); color:var(--green); }
.ov-act-open { cursor:pointer; }
.ov-act-open:hover { background:rgba(255,255,255,0.02); }

@media (max-width:1100px) { .ov-engines { grid-template-columns:repeat(2,1fr); } }

/* ============================================================================
   Login page (front door): premium themed card on the dark navy base. Uses
   theme tokens; no new asset files. (2026-06-15)
   ========================================================================== */
/* Front door background = the approved scene image (assets/login-scene.webp, a
   self-hosted asset; CSP img-src 'self'). Its centre is masked to dark so the real,
   functional card sits in the centre while the image's dental-operatory + flow-line
   scenery shows at the left/right edges. Shown on wide screens only, where `cover`
   keeps the baked-in card centred under the mask; smaller screens use a clean dark
   field (where cover would otherwise reveal the image's baked card edges). */
/* The dashboard zooms <body> to 0.85 on desktop; the standalone login renders at
   native scale, so opt out (otherwise the 100vh wrapper shrinks and leaves a gap). */
.login-body { min-height:100vh; zoom:1; }
.login-wrap { position:relative; min-height:100vh; display:flex; flex-direction:column; align-items:center; justify-content:center; padding:48px 24px; box-sizing:border-box; overflow:hidden;
  background:radial-gradient(1000px 700px at 50% 28%, rgba(0,180,216,0.05), transparent 60%), var(--bg); }
.login-bg { position:absolute; inset:0; pointer-events:none; overflow:hidden;
  background:url('../assets/login-scene.webp') center center / cover no-repeat; }
/* A very soft veil for text legibility; light enough that the scene stays visible. */
.login-bg::after { content:""; position:absolute; inset:0; background:radial-gradient(1200px 820px at 50% 45%, rgba(8,12,18,0.08), rgba(8,12,18,0.40) 100%); }
@media (max-width:1000px) { .login-bg { display:none; } }

.login-card { position:relative; z-index:2; width:100%; max-width:560px; display:flex; flex-direction:column;
  background:linear-gradient(180deg, rgba(13,20,28,0.90), rgba(10,15,21,0.94)); -webkit-backdrop-filter:blur(18px); backdrop-filter:blur(18px);
  border:1px solid rgba(120,170,190,0.16); border-radius:22px; padding:44px 50px 32px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,0.05), 0 40px 100px rgba(0,0,0,0.6); }

.login-head { text-align:center; }
.login-brand { display:flex; align-items:center; justify-content:center; gap:11px; font-family:'Syne',sans-serif; font-size:30px; font-weight:800; color:var(--text); letter-spacing:.005em; }
.login-mark { width:30px; height:30px; display:inline-flex; }
.login-mark svg { width:30px; height:30px; }
.login-mark rect { fill:var(--green); }
.login-mark rect:nth-child(3n+2) { fill:#2BE8C6; }
.login-word { line-height:1; }
.login-sub { font-size:13.5px; color:var(--soft); margin-top:8px; }

.login-divider-mark { display:flex; align-items:center; gap:14px; margin:20px 0 16px; }
.login-divider-mark::before, .login-divider-mark::after { content:""; height:1px; flex:1; background:var(--border); }
.login-shield { width:36px; height:36px; border-radius:50%; display:flex; align-items:center; justify-content:center; color:var(--green); background:var(--green-glow); border:1px solid rgba(0,230,118,0.25); flex-shrink:0; }
.login-shield svg { width:17px; height:17px; }

.login-title { text-align:center; font-family:'Syne',sans-serif; font-size:25px; font-weight:700; color:var(--text); margin-bottom:6px; }
.login-welcome-sub { text-align:center; font-size:13.5px; color:var(--soft); margin-bottom:24px; }

.login-label { display:block; font-size:13px; font-weight:600; color:var(--text); margin-bottom:8px; }
.login-input-row { position:relative; display:flex; align-items:center; margin-bottom:16px; }
.login-ic { position:absolute; left:14px; top:50%; transform:translateY(-50%); color:var(--muted); display:flex; pointer-events:none; }
.login-ic svg { width:17px; height:17px; }
.login-input { width:100%; box-sizing:border-box; padding:13px 14px; font-size:15px; font-family:'DM Sans',sans-serif;
  background:var(--bg); border:1px solid var(--border-lit); border-radius:11px; color:var(--text); outline:none; transition:border-color .15s, box-shadow .15s; }
.login-input.has-ic { padding-left:42px; }
.login-input.has-toggle { padding-right:46px; }
.login-input::placeholder { color:var(--muted); }
.login-input:focus-visible { border-color:var(--blue); box-shadow:0 0 0 3px var(--blue-glow); }
.login-input:disabled { opacity:.6; cursor:not-allowed; }

.login-toggle { position:absolute; right:8px; top:50%; transform:translateY(-50%); background:transparent; border:0; color:var(--muted); cursor:pointer; padding:7px; border-radius:8px; display:flex; }
.login-toggle svg { width:18px; height:18px; }
.login-toggle:hover { color:var(--blue); }
.login-toggle:focus-visible { color:var(--blue); outline:none; box-shadow:0 0 0 2px var(--blue-glow); }
.login-toggle .ic-eye-off { display:none; }
.login-toggle[aria-pressed="true"] .ic-eye { display:none; }
.login-toggle[aria-pressed="true"] .ic-eye-off { display:flex; }

.login-row-between { display:flex; align-items:center; justify-content:space-between; margin:2px 0 20px; }
.login-remember { display:inline-flex; align-items:center; gap:9px; cursor:pointer; font-size:13px; color:var(--soft); user-select:none; }
.login-check { position:absolute; opacity:0; width:0; height:0; }
.login-check-box { width:18px; height:18px; border-radius:5px; border:1px solid var(--border-lit); background:var(--bg); display:inline-flex; align-items:center; justify-content:center; color:#04140B; transition:background .15s, border-color .15s; flex-shrink:0; }
.login-check-box svg { width:12px; height:12px; opacity:0; }
.login-check:checked + .login-check-box { background:var(--green); border-color:var(--green); }
.login-check:checked + .login-check-box svg { opacity:1; }
.login-check:focus-visible + .login-check-box { box-shadow:0 0 0 3px var(--green-glow); }
.login-remember-txt { line-height:1; }

.login-link { background:transparent; border:0; padding:0; font-family:'DM Sans',sans-serif; font-size:13px; font-weight:600; color:var(--green); cursor:pointer; }
.login-link:hover { filter:brightness(1.12); text-decoration:underline; }
.login-link:focus-visible { outline:none; box-shadow:0 0 0 2px var(--green-glow); border-radius:4px; }

.login-error { font-size:13px; color:var(--red); background:rgba(255,69,96,0.08); border:1px solid rgba(255,69,96,0.28); border-radius:10px; padding:10px 12px; line-height:1.45; margin-bottom:14px; }
.login-note { font-size:12.5px; color:var(--soft); background:var(--blue-glow); border:1px solid rgba(0,180,216,0.22); border-radius:10px; padding:10px 12px; line-height:1.45; margin-bottom:14px; }

.login-btn { width:100%; display:flex; align-items:center; justify-content:center; gap:9px; padding:15px; border:0; border-radius:12px; cursor:pointer;
  font-size:15px; font-weight:700; font-family:'DM Sans',sans-serif; color:#04140B; background:var(--green); background-image:linear-gradient(180deg, #2BEA86, #00C264);
  box-shadow:0 12px 34px rgba(0,230,118,0.34), inset 0 1px 0 rgba(255,255,255,0.25); transition:filter .15s, box-shadow .15s, transform .05s; }
.login-btn:hover { filter:brightness(1.04); box-shadow:0 16px 44px rgba(0,230,118,0.45), inset 0 1px 0 rgba(255,255,255,0.25); }
.login-btn:active { transform:translateY(1px); }
.login-btn:focus-visible { outline:none; box-shadow:0 0 0 3px var(--green-glow); }
.login-btn:disabled { opacity:.7; cursor:default; filter:none; }
.login-btn-arrow { display:inline-flex; }
.login-btn-arrow svg { width:17px; height:17px; }

.login-or { display:flex; align-items:center; gap:12px; margin:18px 0; color:var(--muted); font-size:12px; }
.login-or::before, .login-or::after { content:""; height:1px; flex:1; background:var(--border); }

.login-sso { width:100%; display:flex; align-items:center; justify-content:center; gap:9px; padding:13px; border:1px solid var(--border-lit); border-radius:11px;
  background:transparent; color:var(--soft); font-size:14px; font-weight:600; font-family:'DM Sans',sans-serif; cursor:pointer; transition:border-color .15s, color .15s; }
.login-sso:hover:not(:disabled) { border-color:var(--blue); color:var(--text); }
.login-sso:disabled { opacity:.55; cursor:not-allowed; }
.login-sso-ic { display:inline-flex; }
.login-sso-ic svg { width:16px; height:16px; }

.login-foot { display:flex; align-items:flex-start; justify-content:space-between; gap:16px; margin-top:24px; padding-top:18px; border-top:1px solid var(--border); }
.login-foot-left { display:flex; align-items:flex-start; gap:9px; }
.login-foot-ic { color:var(--muted); display:flex; margin-top:1px; }
.login-foot-ic svg { width:15px; height:15px; }
.login-foot-text { display:flex; flex-direction:column; gap:2px; }
.login-foot-strong { font-size:12px; color:var(--soft); font-weight:600; }
.login-foot-sub { font-size:11px; color:var(--muted); line-height:1.45; }
.login-foot-right { display:flex; flex-direction:column; gap:2px; align-items:flex-end; text-align:right; flex-shrink:0; }

.login-trusted { position:relative; z-index:2; display:flex; align-items:center; gap:8px; margin-top:24px; color:var(--muted); font-size:12px; }
.login-trusted-ic { display:flex; color:var(--muted); }
.login-trusted-ic svg { width:14px; height:14px; }

.login-theme { position:fixed; top:20px; right:20px; z-index:10; }

/* Light theme: flip the card + inputs off the hardcoded dark glass. */
:root[data-theme="light"] .login-card { background:linear-gradient(180deg, rgba(255,255,255,0.94), rgba(255,255,255,0.97)); box-shadow:0 30px 80px rgba(20,40,70,0.12); }
:root[data-theme="light"] .login-input { background:#F6F8FB; }
:root[data-theme="light"] .login-check-box { background:#F6F8FB; }
:root[data-theme="light"] .login-btn { color:#FFFFFF; }
/* The scene is a dark hero photo; it stays visible in light theme, with a LIGHT card
   on top (dark-hero + light-card). The card flips with the theme; the scene does not. */
:root[data-theme="light"] .login-card { background:linear-gradient(180deg, rgba(255,255,255,0.96), rgba(255,255,255,0.98)); -webkit-backdrop-filter:none; backdrop-filter:none; border-color:rgba(20,40,70,0.10); box-shadow:0 40px 100px rgba(0,0,0,0.45); }
:root[data-theme="light"] .login-trusted, :root[data-theme="light"] .login-trusted-ic { color:#C3CEDB; }

@media (max-width:560px) {
  .login-wrap { padding:32px 16px; }
  .login-card { padding:30px 22px; border-radius:16px; }
  .login-brand { font-size:26px; }
  .login-title { font-size:22px; }
  .login-foot { flex-direction:column; gap:12px; }
  .login-foot-right { align-items:flex-start; text-align:left; }
  .login-theme { top:14px; right:14px; }
}

/* ============================================================================
   First-run onboarding: welcome modal, guided tour, Launch Checklist. (2026-06-15)
   ========================================================================== */
.onb-overlay { position:fixed; inset:0; z-index:700; display:flex; align-items:center; justify-content:center;
  padding:24px; box-sizing:border-box; background:rgba(8,12,18,0.48); backdrop-filter:blur(2px); -webkit-backdrop-filter:blur(2px); }
.onb-card { width:100%; max-width:340px; background:linear-gradient(180deg, var(--card), var(--panel));
  border:1px solid var(--border-lit); border-radius:16px; padding:28px 26px 18px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,0.05), 0 24px 70px rgba(0,0,0,0.5); }
.onb-brand { font-family:'Syne',sans-serif; font-size:12px; font-weight:800; letter-spacing:0.06em; color:var(--green); text-transform:uppercase; margin-bottom:10px; }
.onb-welcome-h { font-family:'Syne',sans-serif; font-size:22px; font-weight:800; color:var(--text); margin-bottom:8px; }
.onb-welcome-sub { font-size:13.5px; color:var(--soft); line-height:1.55; margin-bottom:18px; }
.onb-actions { display:flex; flex-direction:column; gap:9px; }
.onb-actions .onb-btn { width:100%; }
.onb-btn { font-family:'DM Sans',sans-serif; font-size:13.5px; font-weight:600; border-radius:9px; padding:10px 16px; cursor:pointer; border:1px solid transparent; transition:filter .15s, border-color .15s, color .15s; }
.onb-btn-primary { background:var(--green); color:var(--bg); box-shadow:0 6px 16px var(--green-glow); }
.onb-btn-primary:hover { filter:brightness(1.06); }
.onb-btn-ghost { background:transparent; border-color:var(--border-lit); color:var(--text); }
.onb-btn-ghost:hover { border-color:var(--blue); color:var(--blue); }
.onb-btn:focus-visible { outline:none; box-shadow:0 0 0 3px var(--blue-glow); }
.onb-skip { display:block; margin:14px auto 0; background:none; border:0; color:var(--muted); font-size:12px; font-family:'DM Sans',sans-serif; cursor:pointer; padding:4px; }
.onb-skip:hover { color:var(--soft); }
.onb-progress { font-size:11px; font-weight:700; letter-spacing:0.4px; text-transform:uppercase; color:var(--muted); margin-bottom:8px; }
.onb-bar { height:4px; border-radius:3px; background:var(--border); overflow:hidden; margin-bottom:16px; }
.onb-bar span { display:block; height:100%; background:var(--green); border-radius:3px; transition:width .25s ease; }

/* Welcome modal: premium size + spacing (2026-06-15 polish). Wider card,
   balanced headline, side-by-side buttons so they no longer feel oversized. */
.onb-card.onb-welcome { max-width:540px; padding:34px 34px 24px; }
.onb-welcome .onb-brand { font-size:12.5px; margin-bottom:16px; }
.onb-card.onb-welcome .onb-welcome-h { font-size:26px; line-height:1.18; margin-bottom:12px; white-space:nowrap; }
.onb-card.onb-welcome .onb-welcome-sub { font-size:15px; line-height:1.6; margin-bottom:26px; }
.onb-welcome .onb-actions { flex-direction:row; gap:12px; }
.onb-welcome .onb-actions .onb-btn { width:auto; flex:1; padding:12px 18px; }
.onb-welcome .onb-skip { margin-top:18px; }
@media (max-width:520px){
  .onb-card.onb-welcome { max-width:100%; padding:26px 22px 18px; }
  .onb-card.onb-welcome .onb-welcome-h { font-size:23px; white-space:normal; text-wrap:balance; }
  .onb-welcome .onb-actions { flex-direction:column; }
  .onb-welcome .onb-actions .onb-btn { width:100%; flex:none; }
}

/* Guided tour: non-blocking floating coach card (no backdrop; the page stays visible). */
.onb-coach { position:fixed; z-index:200; right:24px; bottom:24px; width:340px; max-width:calc(100vw - 32px);
  background:linear-gradient(180deg, var(--card), var(--panel)); border:1px solid var(--border-lit); border-radius:14px;
  padding:16px 18px 14px; box-shadow:inset 0 1px 0 rgba(255,255,255,0.05), 0 18px 48px rgba(0,0,0,0.5); }
.onb-coach-top { display:flex; align-items:center; justify-content:space-between; margin-bottom:8px; }
.onb-coach-top .onb-progress { margin-bottom:0; }
.onb-coach-x { background:none; border:0; color:var(--muted); font-size:18px; line-height:1; cursor:pointer; padding:0 2px; }
.onb-coach-x:hover { color:var(--text); }
.onb-coach-h { font-family:'Syne',sans-serif; font-size:16px; font-weight:700; color:var(--text); margin:2px 0 6px; }
.onb-coach-body { font-size:13px; color:var(--soft); line-height:1.55; }
.onb-coach-nav { display:flex; align-items:center; justify-content:space-between; gap:10px; margin-top:16px; }
.onb-coach-right { display:flex; gap:8px; }
.onb-btn-text { background:none; border:0; color:var(--muted); padding:8px 4px; }
.onb-btn-text:hover { color:var(--soft); }
@media (max-width:560px){
  .onb-coach { right:0; left:0; bottom:0; width:auto; max-width:none; border-radius:14px 14px 0 0; border-bottom:0; padding:16px 18px 18px; }
}
.onb-help-btn { display:inline-flex; align-items:center; justify-content:center; flex-shrink:0; width:30px; height:30px; border-radius:8px; cursor:pointer; background:var(--card); border:1px solid var(--border); color:var(--soft); font-size:14px; font-weight:700; font-family:'DM Sans',sans-serif; transition:border-color .15s, color .15s; }
.onb-help-btn:hover { border-color:var(--blue); color:var(--blue); }
.onb-help-btn:focus-visible { outline:none; box-shadow:0 0 0 2px var(--blue-glow); }
.nav-item.tour-pulse { background:var(--blue-glow); box-shadow:inset 0 0 0 1px rgba(0,180,216,0.55); border-radius:8px; }
.onb-ov-card { background:linear-gradient(180deg, var(--card), var(--panel)); border:1px solid var(--border-lit); border-radius:14px; padding:18px 20px; margin-top:18px; box-shadow:inset 0 1px 0 rgba(255,255,255,0.03); }
.onb-cl-title { font-family:'Syne',sans-serif; font-size:15px; font-weight:700; color:var(--text); display:flex; align-items:center; gap:8px; }
.onb-cl-title::before { content:""; width:7px; height:7px; border-radius:50%; background:var(--green); box-shadow:0 0 0 3px var(--green-glow); flex-shrink:0; }
.onb-cl-intro { font-size:12.5px; color:var(--muted); line-height:1.5; margin-top:3px; }
.onb-cl-progress { display:flex; align-items:center; gap:10px; margin:13px 0 4px; }
.onb-cl-progress .onb-bar { flex:1; margin:0; }
.onb-cl-count { font-size:12px; font-weight:700; color:var(--soft); white-space:nowrap; }
.onb-cl-group { font-size:10.5px; font-weight:700; letter-spacing:0.5px; text-transform:uppercase; color:var(--muted); margin:18px 0 6px; }
.onb-cl-item { display:flex; align-items:flex-start; gap:12px; padding:10px 0; border-top:1px solid var(--border); }
.onb-cl-main { flex:1; min-width:0; }
.onb-cl-label { font-size:13px; color:var(--text); font-weight:600; }
.onb-cl-note { font-size:11.5px; color:var(--muted); line-height:1.45; margin-top:2px; }
.onb-cl-goto { font-size:11.5px; font-weight:600; color:var(--blue); background:none; border:0; cursor:pointer; padding:4px 0 0; font-family:'DM Sans',sans-serif; }
.onb-cl-goto:hover { text-decoration:underline; }
.onb-badge { flex-shrink:0; font-size:10px; font-weight:700; letter-spacing:0.3px; border-radius:6px; padding:3px 8px; white-space:nowrap; }
.onb-badge.ok { color:var(--green); background:var(--green-glow); border:1px solid rgba(0,230,118,0.3); }
.onb-badge.warn { color:var(--gold); background:var(--gold-glow); border:1px solid rgba(255,184,48,0.3); }
.onb-badge.mng { color:var(--blue); background:var(--blue-glow); border:1px solid rgba(0,180,216,0.3); }
.onb-badge.neutral { color:var(--soft); background:rgba(74,96,128,0.14); border:1px solid var(--border-lit); }
.onb-cl-safety { font-size:11.5px; color:var(--soft); line-height:1.55; margin-top:18px; padding-top:14px; border-top:1px solid var(--border); }
.onb-cl-actions { margin-top:14px; }
@media (max-width:480px){ .onb-card { padding:22px 18px; } .onb-actions { flex-direction:column; } .onb-actions .onb-btn { width:100%; } }
@media (max-width:560px)  { .ov-engines { grid-template-columns:1fr; } .ov-srow { grid-template-columns:64px 1fr auto; } .ov-srow-svc { display:none; } .ov-h-grid { grid-template-columns:repeat(2,1fr); } }

@media (max-width:980px) {
  .ov-grid { grid-template-columns:1fr; }
  .ov-week { grid-template-columns:repeat(2,1fr); }
  .ov-pr-grid { grid-template-columns:1fr; }
  .ov-activity-card #ovActivity { max-height:none; }
}
@media (max-width:600px) {
  .ov-hero { flex-direction:column; }
  .ov-hero-side { align-items:flex-start; }
  .ov-kpis { grid-template-columns:repeat(2,1fr); gap:12px; }
  .ov-sched-controls { width:100%; }
  .ov-sg-head { display:none; }
  .ov-sg-row { grid-template-columns:1fr auto; grid-template-areas:"time st" "name name" "svc svc"; row-gap:2px; padding:10px 8px; }
  .ov-sg-time { grid-area:time; }
  .ov-sg-st { grid-area:st; justify-self:end; }
  .ov-sg-name { grid-area:name; }
  .ov-sg-svc { grid-area:svc; }
  .ov-sg-val, .ov-sg-open { display:none; }
}
/* Freshness chip (topbar) — replaces the false "System Active". Green = fresh,
   amber = stale/reconnecting. */
.live-dot.stale { color:var(--gold); }
.live-dot.stale::before { background:var(--gold); animation:none; }
.live-dot.synced { color:var(--green); }
.live-dot.synced::before { background:var(--green); animation:none; }

/* ============================================================================
   OVERVIEW v2 — graph-rich clinic command center (2026-06-16).
   Static showcase zones. overview.js binders no-op when their containers are
   absent, so this markup IS the fallback (the codebase's progressive-binding
   pattern). All colors use existing tokens; one teal accent (#2DD4BF) is used
   only for the "Follow-Ups Completed" chart series + New-patient flow bars.
   ============================================================================ */
.ov2 { display:flex; flex-direction:column; gap:18px; margin-top:18px; }

/* --- topbar additions ------------------------------------------------------ */
.tb-help { width:30px; height:30px; border-radius:50%; border:1px solid var(--border); background:transparent; color:var(--soft); font-size:13px; font-weight:600; cursor:pointer; display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.tb-help:hover { border-color:var(--border-lit); color:var(--text); }
/* Light/dark theme toggle (topbar). Shows a sun in dark mode (tap to brighten),
   a moon in light mode (tap to darken) — pure CSS based on the data-theme attr. */
.tb-theme { width:30px; height:30px; border-radius:50%; border:1px solid var(--border); background:transparent; color:var(--soft); cursor:pointer; display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.tb-theme:hover { border-color:var(--border-lit); color:var(--text); }
.tb-theme .ic-moon { display:none; }
:root[data-theme="light"] .tb-theme .ic-sun { display:none; }
:root[data-theme="light"] .tb-theme .ic-moon { display:flex; }
.nav-badge:empty { display:none; }

/* --- KPI row --------------------------------------------------------------- */
.ov2-kpis { display:grid; grid-template-columns:repeat(7,1fr); gap:14px; }
.ov2-kpi { background:var(--card); border:1px solid var(--border); border-radius:14px; padding:15px 16px 14px; transition:border-color .2s, transform .2s; }
.ov2-kpi:hover { border-color:var(--border-lit); transform:translateY(-2px); }
.ov2-kpi-head { display:flex; align-items:center; gap:10px; margin-bottom:12px; }
.ov2-ico { width:34px; height:34px; border-radius:10px; display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.ov2-ico svg { width:18px; height:18px; stroke-width:2; }
.ov2-ico.sm { width:30px; height:30px; border-radius:9px; }
.ov2-ico.sm svg { width:15px; height:15px; }
.ico-blue { background:var(--blue-glow); color:var(--blue); }
.ico-green { background:var(--green-glow); color:var(--green); }
.ico-gold { background:var(--gold-glow); color:var(--gold); }
.ico-purple { background:rgba(139,92,246,0.13); color:var(--purple); }
.ico-teal { background:rgba(45,212,191,0.13); color:#2DD4BF; }
.ico-red { background:rgba(255,69,96,0.12); color:var(--red); }
.ov2-kpi-label { font-size:11px; color:var(--soft); line-height:1.3; margin-bottom:9px; }
.ov2-kpi-val { font-family:var(--num-font); font-size:23px; font-weight:700; color:var(--text); line-height:1; letter-spacing:0; }
.ov2-kpi-val.kv-blue { color:var(--blue); } .ov2-kpi-val.kv-green { color:var(--green); } .ov2-kpi-val.kv-gold { color:var(--gold); } .ov2-kpi-val.kv-purple { color:var(--purple); } .ov2-kpi-val.kv-teal { color:#2DD4BF; }
.ov2-kpi-sub { font-size:11px; color:var(--muted); margin-top:7px; }
.ov2-kpi-sub.up { color:var(--green); }
/* refined mono icons (opportunities + activity feeds): thin, single muted color, no tinted box */
.ov2-ico-m { display:inline-flex; align-items:center; justify-content:center; color:var(--soft); flex-shrink:0; }
.ov2-ico-m svg { width:16px; height:16px; stroke-width:1.7; }

/* --- generic card + heads -------------------------------------------------- */
.ov2-card { background:var(--card); border:1px solid var(--border); border-radius:14px; padding:18px 20px; display:flex; flex-direction:column; min-width:0; }
.ov2-head { display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:14px; }
.ov2-head .sec-sub { display:inline; margin-left:6px; color:var(--muted); font-weight:400; }
.ov2-link { font-size:12px; color:var(--blue); font-weight:600; cursor:pointer; white-space:nowrap; }
.ov2-range { font-size:12px; color:var(--soft); border:1px solid var(--border); border-radius:8px; padding:5px 11px; cursor:pointer; white-space:nowrap; }
.ov2-range:hover { border-color:var(--border-lit); color:var(--text); }

/* --- hero row -------------------------------------------------------------- */
.ov2-hero { display:grid; grid-template-columns:1.62fr 1fr; gap:16px; align-items:stretch; }
.ov2-chart-card { overflow:hidden; }
.ov2-chart { display:flex; flex-direction:column; min-height:0; }
.ov2-chart-frame { position:relative; width:100%; height:clamp(178px,22vh,214px); padding-left:26px; box-sizing:border-box; overflow:hidden; }
.ov2-chart-svg { width:100%; height:100%; display:block; }
.ov2-yax { position:absolute; left:0; top:0; bottom:0; width:24px; display:flex; flex-direction:column; justify-content:space-between; align-items:flex-end; padding:5px 0; box-sizing:border-box; }
.ov2-yax span { font-size:10px; color:var(--muted); font-family:var(--num-font); padding-right:5px; }
.ov2-xax { display:flex; justify-content:space-between; padding-left:26px; margin-top:8px; }
.ov2-xax span { font-size:11px; color:var(--soft); }
.ov2-axis { fill:var(--muted); font-family:var(--num-font); font-size:11px; }
.ov2-xaxis { fill:var(--soft); font-size:11px; text-anchor:middle; }
.ov2-grid { stroke:rgba(126,148,176,0.12); stroke-width:1; }
.ov2-legend { display:flex; flex-wrap:wrap; gap:7px 18px; margin-top:12px; justify-content:center; }
.ov2-legend span { font-size:11px; color:var(--soft); display:flex; align-items:center; gap:6px; }
.ov2-lg { width:9px; height:9px; border-radius:50%; display:inline-block; flex-shrink:0; }

/* --- recent activity ------------------------------------------------------- */
.ov2-ra-list { display:flex; flex-direction:column; }
.ov2-ra-item { display:flex; gap:11px; align-items:flex-start; padding:11px 0; border-bottom:1px solid rgba(30,42,56,0.5); }
.ov2-ra-item:last-child { border-bottom:none; padding-bottom:0; }
.ov2-ra-body { flex:1; min-width:0; }
.ov2-ra-text { font-size:12.5px; color:var(--text); line-height:1.4; }
.ov2-ra-sub { font-size:11px; color:var(--muted); margin-top:3px; }
.ov2-ra-time { font-size:11px; color:var(--muted); white-space:nowrap; flex-shrink:0; padding-top:1px; }

/* --- analytical grid ------------------------------------------------------- */
.ov2-analytics { display:grid; grid-template-columns:repeat(4,1fr); gap:16px; align-items:stretch; }

/* top opportunities */
.ov2-opps { display:flex; flex-direction:column; }
.ov2-opp { display:flex; align-items:center; gap:11px; padding:9px 0; border-bottom:1px solid rgba(30,42,56,0.5); }
.ov2-opp:last-child { border-bottom:none; }
.ov2-opp-label { flex:1; font-size:12.5px; color:var(--text); min-width:0; }
.ov2-opp-count { font-size:12.5px; color:var(--soft); font-family:var(--num-font); width:22px; text-align:right; }
.ov2-opp-val { font-size:12.5px; color:var(--text); font-weight:600; font-family:var(--num-font); width:62px; text-align:right; }

/* opportunity value donut */
.ov2-donut-wrap { display:flex; align-items:center; gap:18px; flex:1; }
.ov2-donut { position:relative; flex-shrink:0; width:130px; height:130px; }
.ov2-donut svg { width:130px; height:130px; }
.ov2-donut-center { position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center; pointer-events:none; }
.ov2-donut-total { font-family:var(--num-font); font-size:17px; font-weight:700; color:var(--text); letter-spacing:-0.3px; }
.ov2-donut-cap { font-size:10px; color:var(--muted); margin-top:2px; }
.ov2-dlegend { display:flex; flex-direction:column; gap:10px; flex:1; min-width:0; }
.ov2-dl { display:flex; align-items:center; gap:8px; font-size:12px; color:var(--soft); }
.ov2-dl-val { margin-left:auto; color:var(--text); font-family:var(--num-font); }
.ov2-dl-pct { color:var(--muted); font-family:var(--num-font); width:30px; text-align:right; }

/* patient flow */
.ov2-flow svg { width:100%; height:auto; display:block; }

/* message activity */
.ov2-msg { display:flex; flex-direction:column; gap:13px; flex:1; justify-content:center; }
.ov2-msg-row { display:flex; align-items:center; gap:12px; }
.ov2-msg-label { font-size:12px; color:var(--soft); width:64px; flex-shrink:0; }
.ov2-msg-bar { flex:1; height:8px; background:var(--dim); border-radius:5px; overflow:hidden; }
.ov2-msg-bar > div { height:100%; border-radius:5px; }
.ov2-msg-val { font-size:12.5px; color:var(--text); font-family:var(--num-font); width:36px; text-align:right; font-weight:600; }

/* --- operational grid ------------------------------------------------------ */
.ov2-ops { display:grid; grid-template-columns:1.35fr 1fr 1fr; gap:16px; align-items:stretch; }
.ov2-ops .data-table th { text-transform:uppercase; letter-spacing:.4px; }
.ov2-na-sub { font-size:11px; color:var(--muted); margin:-4px 0 9px; }
.ov2-na-list { display:flex; flex-direction:column; }
.ov2-na { display:flex; align-items:center; gap:11px; padding:9px 0; border-bottom:1px solid rgba(30,42,56,0.5); }
.ov2-na:last-child { border-bottom:none; }
.ov2-na-dot { width:8px; height:8px; border-radius:50%; flex-shrink:0; }
.ov2-na-label { flex:1; font-size:12.5px; color:var(--text); min-width:0; }
.ov2-na-name { font-size:12px; color:var(--soft); white-space:nowrap; }
.ov2-na-time { font-size:11px; color:var(--muted); white-space:nowrap; width:62px; text-align:right; }
.ov2-na-more { font-size:12px; color:var(--blue); cursor:pointer; padding-top:13px; margin-top:auto; }
.dot-red { background:var(--red); } .dot-gold { background:var(--gold); } .dot-blue { background:var(--blue); } .dot-green { background:var(--green); } .dot-purple { background:var(--purple); }

/* live activity inside ops grid (reuses .activity-feed; icon variant) */
.ov2-ops .activity-feed { padding:0; }
.ov2-la-list { padding:4px 20px 18px; }
.ov2-la-item { display:flex; align-items:center; gap:11px; padding:9px 0; border-bottom:1px solid rgba(30,42,56,0.5); }
.ov2-la-item:last-child { border-bottom:none; }
.ov2-la-text { flex:1; font-size:12.5px; color:var(--text); }
.ov2-la-time { font-size:11px; color:var(--muted); white-space:nowrap; }

/* --- floating support fab -------------------------------------------------- */
.ov2-fab { position:fixed; right:26px; bottom:26px; width:52px; height:52px; border-radius:50%; background:linear-gradient(135deg,var(--green),var(--blue)); border:none; display:flex; align-items:center; justify-content:center; cursor:pointer; box-shadow:0 6px 22px rgba(0,230,118,0.30); z-index:200; }
.ov2-fab svg { width:22px; height:22px; color:#042c1f; stroke-width:2; }
.ov2-fab:hover { transform:translateY(-2px); }

/* --- responsive ------------------------------------------------------------ */
@media (max-width:1400px) {
  .ov2-kpis { grid-template-columns:repeat(4,1fr); }
  .ov2-analytics { grid-template-columns:repeat(2,1fr); }
}
@media (max-width:1080px) {
  .ov2-hero { grid-template-columns:1fr; }
  .ov2-ops { grid-template-columns:1fr; }
}
@media (max-width:720px) {
  .ov2-kpis { grid-template-columns:repeat(2,1fr); }
  .ov2-analytics { grid-template-columns:1fr; }
  .ov2-donut-wrap { flex-direction:column; align-items:flex-start; }
}
