/* ==================================================================
   Hot Boards — Admin "Mission Control" (owner-only)
   One-screen ops console: status, key numbers, data health, signups,
   errors, and safe one-click actions. Backend-gated by ADMIN_USER_IDS;
   the nav item only appears for an authorized owner.
   ================================================================== */
/* The container is #admin (index.html:397). This selector used to say
   "#adminView", which matches nothing — it never
   matched, so the whole console ran with zero horizontal padding and no
   max-width — text jammed against the window edge and stretched the full width
   of the monitor. That hurt legibility more than any type size on this page. */
#admin .adm-pad { padding: 24px 28px 56px; max-width: 1240px; margin: 0 auto; }

.adm-hd { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:16px; }
.adm-ttl { font-family:var(--font-display,"Oswald",sans-serif); font-size:21px; font-weight:700; letter-spacing:.08em; color:var(--text-strong); }
.adm-ttl b { color:var(--accent); }
.adm-hd-r { display:flex; align-items:center; gap:10px; }
.adm-ok { display:inline-flex; align-items:center; gap:7px; font-family:var(--font-display); font-size:14.5px; font-weight:600; letter-spacing:.04em; padding:5px 12px; border-radius:999px;
  background:var(--status-active-wash,rgba(88,192,140,.14)); border:1px solid rgba(88,192,140,.35); color:var(--status-active,#58C08C); }
.adm-ok.bad { background:var(--status-out-wash,rgba(222,91,65,.14)); border-color:rgba(222,91,65,.4); color:var(--status-out,#DE5B41); }
.adm-dot { width:8px; height:8px; border-radius:50%; background:currentColor; }
.adm-upd { font-family:var(--font-mono,"JetBrains Mono",monospace); font-size:12.5px; color:var(--text-muted); }
.adm-refresh-btn { font-family:var(--font-display); font-size:13.5px; font-weight:700; letter-spacing:.04em; text-transform:uppercase;
  color:var(--text-secondary); background:none; border:1px solid var(--border-strong); border-radius:7px; padding:7px 12px; cursor:pointer; }
.adm-refresh-btn:hover { color:var(--text-body); background:var(--surface-hover); }

/* ══════════════════════════════════════════════════════════════════════
   THE VERDICT BANNER — the one thing on this screen that must never lie.
   Every check reports into _healthTally() and this line states the result.
   Severity is carried by icon + wording + colour together, never colour
   alone, because the screen gets read fast and under pressure.
   ═══════════════════════════════════════════════════════════════════ */
.adm-verdict-banner { display:flex; align-items:center; gap:14px; padding:16px 18px; border-radius:12px;
  border:1px solid var(--border-strong); background:var(--surface-raised); margin-bottom:14px;
  box-shadow:var(--edge-top,inset 0 1px 0 rgba(255,255,255,.06)); }
.adm-vb-ico { display:flex; align-items:center; justify-content:center; width:38px; height:38px; flex:0 0 auto;
  border-radius:10px; background:rgba(255,255,255,.05); }
.adm-vb-ico svg { width:22px; height:22px; }
.adm-vb-txt { display:flex; flex-direction:column; gap:3px; min-width:0; }
.adm-vb-txt b { font-family:var(--font-display,"Oswald",sans-serif); font-size:23px; font-weight:700;
  letter-spacing:.01em; line-height:1.1; }
.adm-vb-txt span { font-size:14.5px; line-height:1.45; color:var(--text-muted); }

.adm-verdict-banner.wait .adm-vb-ico { color:var(--text-muted); }
.adm-verdict-banner.wait .adm-vb-txt b { color:var(--text-secondary); }

.adm-verdict-banner.ok { border-color:rgba(88,192,140,.4);
  background:linear-gradient(180deg,rgba(88,192,140,.11),transparent 70%),var(--surface-raised); }
.adm-verdict-banner.ok .adm-vb-ico { color:var(--status-active,#58C08C); background:rgba(88,192,140,.14); }
.adm-verdict-banner.ok .adm-vb-txt b { color:var(--status-active,#58C08C); }

.adm-verdict-banner.warn { border-color:rgba(226,184,94,.45);
  background:linear-gradient(180deg,rgba(226,184,94,.11),transparent 70%),var(--surface-raised); }
.adm-verdict-banner.warn .adm-vb-ico { color:var(--status-quest,#E2B85E); background:rgba(226,184,94,.15); }
.adm-verdict-banner.warn .adm-vb-txt b { color:var(--status-quest,#E2B85E); }

.adm-verdict-banner.bad { border-color:rgba(222,91,65,.5);
  background:linear-gradient(180deg,rgba(222,91,65,.13),transparent 70%),var(--surface-raised); }
.adm-verdict-banner.bad .adm-vb-ico { color:var(--status-out,#DE5B41); background:rgba(222,91,65,.16); }
.adm-verdict-banner.bad .adm-vb-txt b { color:var(--status-out,#DE5B41); }

/* An empty state that is NOT good news reads amber, so "nothing in this list"
   can't be mistaken for "nothing wrong". */
.adm-empty.warnish { color:var(--status-quest,#E2B85E); font-style:normal; }
.adm-empty.warnish b { color:var(--text-body); }
.adm-note-line { font-size:13.5px; color:var(--text-muted); padding:0 0 7px; margin-bottom:5px;
  border-bottom:1px solid var(--border-hair); }

.adm-strip { display:grid; grid-template-columns:repeat(4,1fr); gap:9px; margin-bottom:9px; }
.adm-tile { background:var(--surface-raised); border:1px solid var(--border-soft); border-radius:10px; padding:14px 16px; }
.adm-tile-l { font-family:var(--font-display); font-size:12.5px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:var(--text-muted); }
.adm-tile-s { display:flex; align-items:center; gap:6px; margin-top:5px; font-size:14.5px; font-weight:600; color:var(--status-active,#58C08C); }
.adm-tile-s.bad { color:var(--status-out,#DE5B41); }
.adm-tile-s.unk { color:var(--text-muted); }
.adm-tile-sub { font-family:var(--font-mono); font-size:11.5px; color:var(--text-muted); margin-top:3px; }

.adm-kpis { display:grid; grid-template-columns:repeat(4,1fr); gap:9px; margin-bottom:14px; }
.adm-kpi { background:var(--surface-card); border:1px solid var(--border-soft); border-radius:10px; padding:16px 18px; }
.adm-kpi-l { font-family:var(--font-display); font-size:12.5px; font-weight:600; letter-spacing:.06em; text-transform:uppercase; color:var(--text-muted); }
.adm-kpi-v { font-family:var(--font-mono); font-size:36px; font-weight:700; color:var(--text-strong); line-height:1.1; margin-top:3px; font-variant-numeric:tabular-nums; }

/* Section rule — groups ten same-weight cards into scannable bands. */
.adm-sec { font-family:var(--font-display,"Oswald",sans-serif); font-size:12.5px; font-weight:700;
  letter-spacing:.16em; text-transform:uppercase; color:var(--text-muted);
  margin:22px 0 9px; padding-bottom:6px; border-bottom:1px solid var(--border-hair);
  display:flex; align-items:center; gap:9px; }
.adm-sec:first-of-type { margin-top:4px; }

/* Keyboard reachability — this console is all buttons and it had no focus ring. */
#admin button:focus-visible,
#admin input:focus-visible,
#admin select:focus-visible,
#admin a:focus-visible { outline:2px solid var(--accent,#B68A4E); outline-offset:2px; border-radius:6px; }
.adm-kpi-d { font-size:12.5px; font-weight:600; color:var(--status-active,#58C08C); margin-top:1px; }
.adm-kpi-d.warn { color:var(--status-quest,#E2B85E); }
.adm-kpi-d.muted { color:var(--text-muted); }

.adm-cols { display:grid; grid-template-columns:1fr 1fr; gap:9px; margin-bottom:14px; }
.adm-card { background:var(--surface-raised); border:1px solid var(--border-soft); border-radius:12px; padding:18px 20px; }
.adm-card-h { font-family:var(--font-display); font-size:13.5px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:var(--accent); margin-bottom:10px; display:flex; justify-content:space-between; align-items:center; }
.adm-card-h a { font-family:var(--font-sans); font-size:12.5px; color:var(--text-muted); text-decoration:none; text-transform:none; letter-spacing:0; }
.adm-card-h a:hover { color:var(--text-body); }
.adm-row { display:flex; justify-content:space-between; gap:16px; font-size:14.5px; padding:7px 0; color:var(--text-secondary); }
.adm-row b { font-family:var(--font-mono); color:var(--text-body); font-weight:600; }
.adm-bar { height:7px; background:var(--surface-input); border-radius:4px; overflow:hidden; margin:4px 0 6px; }
.adm-bar span { display:block; height:100%; background:var(--status-active,#58C08C); }

.adm-issue { display:flex; gap:8px; align-items:baseline; padding:6px 0; border-top:1px solid var(--border-hair); font-size:14.5px; color:var(--text-secondary); }
.adm-issue:first-of-type { border-top:0; }
.adm-issue .tag { font-family:var(--font-mono); font-size:11.5px; font-weight:700; color:var(--text-muted); background:var(--surface-hover); border-radius:3px; padding:1px 5px; flex:0 0 auto; font-variant-numeric:tabular-nums; }
.adm-issue-t { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.adm-issue .t { font-family:var(--font-mono); color:var(--text-muted); font-size:12.5px; margin-left:auto; flex:0 0 auto; }
/* Live breakage vs a stale backlog — the distinction the old "24h" label erased. */
.adm-issue.fresh { color:var(--text-body); }
.adm-issue.fresh .tag { color:var(--status-quest,#E2B85E); background:var(--status-quest-wash,rgba(226,184,94,.14)); }
.adm-issue-new { font-family:var(--font-mono); font-size:11.5px; font-weight:700; letter-spacing:.07em;
  color:var(--status-out,#DE5B41); background:rgba(222,91,65,.14); border-radius:3px; padding:1px 5px; flex:0 0 auto; }
.adm-empty { font-size:14.5px; color:var(--text-muted); font-style:italic; padding:4px 0; }

.adm-u { display:flex; align-items:center; gap:9px; padding:5px 0; border-top:1px solid var(--border-hair); }
.adm-u:first-of-type { border-top:0; }
.adm-av { width:26px; height:26px; border-radius:50%; background:var(--accent-wash,rgba(182,138,78,.16)); color:var(--accent-hover,#D8AE6E); font-family:var(--font-display); font-weight:700; font-size:13.5px; display:flex; align-items:center; justify-content:center; flex:0 0 auto; }
.adm-un { font-size:14.5px; color:var(--text-body); font-weight:600; }
.adm-ue { font-family:var(--font-mono); font-size:11.5px; color:var(--text-muted); }
.adm-ut { font-family:var(--font-mono); font-size:11.5px; color:var(--text-muted); margin-left:auto; }

.adm-actions { display:flex; flex-wrap:wrap; gap:8px; margin-bottom:12px; }
.adm-btn { font-family:var(--font-display); font-size:13.5px; font-weight:600; letter-spacing:.03em; color:var(--accent-hover,#D8AE6E);
  background:none; border:1px solid rgba(182,138,78,.42); border-radius:7px; padding:9px 13px; cursor:pointer; display:inline-flex; align-items:center; gap:7px; transition:background .15s,border-color .15s; }
.adm-btn:hover { background:var(--accent-wash,rgba(182,138,78,.14)); border-color:var(--accent); }
.adm-btn:disabled { opacity:.5; cursor:default; }
.adm-btn svg { width:15px; height:15px; }

.adm-lookup { display:flex; gap:8px; align-items:center; margin-top:2px; flex-wrap:wrap; }
.adm-lookup input { font-family:var(--font-sans); font-size:15px; color:var(--text-body); background:var(--surface-input); border:1px solid var(--border-strong); border-radius:7px; padding:8px 11px; outline:none; min-width:220px; }
.adm-lookup input:focus { border-color:var(--accent); }
.adm-lookup-go { font-family:var(--font-display); font-size:13.5px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; color:var(--text-on-heat,#15110A); background:var(--accent-grad,linear-gradient(180deg,#C79A56,#A87C3E)); border:none; border-radius:7px; padding:8px 15px; cursor:pointer; }
.adm-lookup-res { margin-top:10px; font-size:14.5px; color:var(--text-secondary); }
.adm-lookup-res b { color:var(--text-body); font-family:var(--font-mono); }

.adm-deep { margin-top:14px; padding-top:10px; border-top:1px solid var(--border-soft); font-size:13.5px; color:var(--text-muted); display:flex; gap:14px; flex-wrap:wrap; align-items:center; }
.adm-deep a { color:var(--text-muted); text-decoration:none; }
.adm-deep a:hover { color:var(--accent-hover); }

.adm-msg { max-width:520px; margin:60px auto; text-align:center; color:var(--text-muted); font-size:16px; line-height:1.6; }
.adm-msg h3 { font-family:var(--font-display); font-size:25px; color:var(--text-strong); margin:0 0 8px; letter-spacing:.02em; }
.adm-note { font-family:var(--font-mono); font-size:12.5px; color:var(--text-muted); background:var(--surface-card); border:1px dashed var(--border-strong); border-radius:8px; padding:9px 12px; margin:12px 0 0; text-align:left; }

/* data sources table */
.adm-src-sub { font-family:var(--font-sans); font-size:12.5px; color:var(--text-muted); text-transform:none; letter-spacing:0; font-weight:400; margin-left:8px; }
.adm-src-wrap { overflow-x:auto; }
.adm-src { width:100%; border-collapse:collapse; font-size:14.5px; }
.adm-src th { font-family:var(--font-display); font-size:11.5px; font-weight:600; letter-spacing:.06em; text-transform:uppercase; color:var(--text-muted); text-align:left; padding:0 10px 6px 0; white-space:nowrap; }
.adm-src td { padding:8px 10px 8px 0; border-top:1px solid var(--border-hair); color:var(--text-secondary); vertical-align:top; }
.adm-src td b { color:var(--text-body); font-weight:600; }
.adm-src a { color:var(--accent-hover,#D8AE6E); text-decoration:none; }
.adm-src a:hover { text-decoration:underline; }
.adm-src-cad { font-family:var(--font-mono); font-size:11.5px; color:var(--text-muted); margin-top:2px; }
.adm-src-st { display:inline-flex; align-items:center; gap:6px; font-weight:600; font-size:13.5px; white-space:nowrap; }
.adm-src-st.ok { color:var(--status-active,#58C08C); }
.adm-src-st.warn { color:var(--status-quest,#E2B85E); }
.adm-src-st.bad { color:var(--status-out,#DE5B41); }
.adm-src-st.unk { color:var(--text-muted); }
.adm-src-check { font-family:var(--font-display); font-size:12.5px; font-weight:600; letter-spacing:.02em; color:var(--text-secondary);
  background:none; border:1px solid var(--border-strong); border-radius:6px; padding:5px 10px; cursor:pointer; white-space:nowrap; }
.adm-src-check:hover { color:var(--text-body); background:var(--surface-hover); }
.adm-src-check.ok { color:var(--status-active,#58C08C); border-color:rgba(88,192,140,.4); }
.adm-src-check.bad { color:var(--status-out,#DE5B41); border-color:rgba(222,91,65,.4); }
.adm-src-check:disabled { opacity:.6; cursor:default; }

/* Features panel — Ring-2 staging switches + Lab (Pro) grant list */
.adm-feat { display:flex; justify-content:space-between; align-items:center; gap:14px; padding:9px 0; border-top:1px solid var(--border-hair); }
.adm-feat:first-of-type { border-top:none; }
.adm-feat-l b { font-size:14.5px; color:var(--text-body); font-weight:600; }
.adm-feat-d { font-size:13.5px; color:var(--text-muted); margin-top:2px; }
.adm-seg { display:inline-flex; border:1px solid var(--border-strong); border-radius:7px; overflow:hidden; flex-shrink:0; }
.adm-seg-b { font-family:var(--font-display); font-size:12.5px; font-weight:600; letter-spacing:.03em; color:var(--text-muted);
  background:none; border:none; border-left:1px solid var(--border-strong); padding:6px 11px; cursor:pointer; white-space:nowrap; transition:background .12s,color .12s; }
.adm-seg-b:first-child { border-left:none; }
.adm-seg-b:hover { color:var(--text-body); background:var(--surface-hover); }
.adm-seg-b.on.st-off { color:var(--text-body); background:var(--surface-hover); }
.adm-seg-b.on.st-pro { color:var(--accent-hover,#D8AE6E); background:var(--accent-wash,rgba(182,138,78,.14)); }
.adm-seg-b.on.st-on { color:var(--status-active,#58C08C); background:rgba(88,192,140,.12); }
/* A known-dead flag (STAGED_FEATURES[].dead) -- orphaned in the DB with zero readers
   left in the app. Disabled switches alone read as "broken"; dim the whole row so it
   reads as "intentionally inert" instead. */
.adm-feat-dead { opacity:.55; }
.adm-seg-b:disabled { cursor:default; }
.adm-seg-b:disabled:hover { color:var(--text-muted); background:none; }
.adm-feat-lab { margin-top:10px; padding-top:9px; border-top:1px solid var(--border-hair); font-size:13.5px; color:var(--text-secondary); }
.adm-feat-lab-h { font-family:var(--font-display); font-size:12.5px; font-weight:600; letter-spacing:.06em; text-transform:uppercase; color:var(--text-muted); }
.adm-feat-id { font-family:var(--font-mono); font-size:12.5px; color:var(--text-body); background:var(--surface-input); border:1px solid var(--border-hair); border-radius:5px; padding:1px 6px; }
.adm-feat-note { font-size:12.5px; color:var(--text-muted); margin-top:5px; }
.adm-feat-note b { color:var(--text-muted); font-family:var(--font-mono); font-weight:600; }

/* ---- access requests (join form) ---- */
.adm-lead { display:flex; align-items:flex-start; gap:10px; padding:10px 0; border-top:1px solid var(--border-hair); }
.adm-lead:first-of-type { border-top:0; }
.adm-lead-m { min-width:0; flex:1 1 auto; }
.adm-lead-d { font-size:13.5px; color:var(--text-muted); margin-top:2px; }
.adm-lead-r { margin-left:auto; display:flex; flex-direction:column; align-items:flex-end; gap:6px; flex:0 0 auto; }
.adm-lead-r .adm-ut { margin-left:0; }
.adm-lead-st { font-family:var(--font-mono); font-size:11.5px; font-weight:700; letter-spacing:.06em; text-transform:uppercase;
  border-radius:4px; padding:1px 5px; margin-left:5px; white-space:nowrap; vertical-align:middle;
  color:var(--text-muted); background:var(--surface-hover); }
.adm-lead-st.st-requested { color:var(--accent-hover,#D8AE6E); background:var(--accent-wash,rgba(182,138,78,.16)); }
.adm-lead-st.st-active,
.adm-lead-st.st-customer { color:var(--status-active,#58C08C); background:rgba(88,192,140,.13); }
.adm-lead-st.st-expiring { color:#E0B44A; background:rgba(224,180,74,.13); }
.adm-lead-st.st-expired,
.adm-lead-st.st-churned { color:var(--text-muted); background:var(--surface-hover); }
/* "not in Kit" — the lead is safe in Postgres but never reached the sequence */
.adm-lead-st.st-warn { color:#DE5B41; background:rgba(222,91,65,.13); cursor:help; }
/* "no account match" - we cannot see their usage, so the lifecycle job holds
   activation emails for this lead until the nightly Clerk re-link finds them */
.adm-lead-st.st-unlinked { color:#E0B44A; background:rgba(224,180,74,.13); cursor:help; }
.adm-lead-b { font-family:var(--font-display); font-size:12.5px; font-weight:600; letter-spacing:.03em; white-space:nowrap;
  color:var(--accent-hover,#D8AE6E); background:none; border:1px solid rgba(182,138,78,.42); border-radius:6px;
  padding:5px 10px; cursor:pointer; transition:background .12s,border-color .12s,color .12s; }
.adm-lead-b:hover { background:var(--accent-wash,rgba(182,138,78,.14)); border-color:rgba(182,138,78,.7); }
.adm-lead-b.ghost { color:var(--text-muted); border-color:var(--border-strong); }
.adm-lead-b.ghost:hover { color:var(--text-body); background:var(--surface-hover); }

@media (max-width:820px){ .adm-strip,.adm-kpis{ grid-template-columns:repeat(2,1fr); } .adm-cols{ grid-template-columns:1fr; } }
@media (max-width:520px){ .adm-lead { flex-wrap:wrap; } .adm-lead-r { flex-direction:row; align-items:center; width:100%; margin-left:36px; } }

/* ══════════════════════════════════════════════════════════════════════
   NEEDS ATTENTION + PERSON LOOKUP  (ACCESS_AND_BILLING_SPEC.md §7)
   Design rule: the owner never opens Stripe, Supabase or Railway to
   answer a customer question. Every row here is actionable in place.
   ═══════════════════════════════════════════════════════════════════ */
.adm-attn { border-color:rgba(182,138,78,.3); }
.adm-attn-chips { display:flex; gap:7px; flex-wrap:wrap; margin-bottom:9px; }
.adm-chip { font-family:var(--font-mono); font-size:11.5px; font-weight:700; letter-spacing:.06em;
  text-transform:uppercase; border-radius:4px; padding:2px 7px; white-space:nowrap;
  color:var(--text-muted); background:var(--surface-hover); }
.adm-chip.on { color:var(--status-active,#58C08C); background:rgba(88,192,140,.13); }

.adm-attn-row { display:flex; align-items:center; gap:11px; flex-wrap:wrap;
  padding:9px 0; border-top:1px solid var(--border-hair); }
.adm-attn-row:first-of-type { border-top:0; }
.adm-attn-t { font-family:var(--font-display); font-size:11.5px; font-weight:700; letter-spacing:.06em;
  text-transform:uppercase; border-radius:4px; padding:2px 7px; white-space:nowrap; flex:0 0 auto;
  color:var(--text-muted); background:var(--surface-hover); }
.adm-attn-row.bad  .adm-attn-t { color:var(--status-out,#DE5B41); background:rgba(222,91,65,.14); }
.adm-attn-row.warn .adm-attn-t { color:var(--status-quest,#E2B85E); background:rgba(226,184,94,.14); }
.adm-attn-b { font-size:14.5px; color:var(--text-secondary); min-width:0; flex:1 1 200px; }
.adm-attn-b b { color:var(--text-body); font-family:var(--font-mono); font-weight:600; }

.adm-mini { font-family:var(--font-display); font-size:12.5px; font-weight:600; letter-spacing:.03em;
  white-space:nowrap; color:var(--accent-hover,#D8AE6E); background:none;
  border:1px solid rgba(182,138,78,.42); border-radius:6px; padding:5px 10px; cursor:pointer;
  margin-left:auto; flex:0 0 auto; transition:background .12s,border-color .12s,color .12s; }
.adm-mini:hover { background:var(--accent-wash,rgba(182,138,78,.14)); border-color:rgba(182,138,78,.7); }
.adm-mini.danger { color:var(--status-out,#DE5B41); border-color:rgba(222,91,65,.42); margin-left:0; }
.adm-mini.danger:hover { background:rgba(222,91,65,.12); border-color:rgba(222,91,65,.7); }

/* THE SENTENCE. First thing on the card, because it is the answer to the
   only question support ever actually asks. */
.adm-verdict { font-family:var(--font-sans); font-size:15px; line-height:1.5; font-weight:500;
  color:var(--text-body); background:var(--surface-hover); border-left:3px solid var(--border-strong);
  border-radius:0 8px 8px 0; padding:11px 13px; margin-bottom:12px; }
.adm-verdict.active           { border-left-color:var(--status-active,#58C08C); }
.adm-verdict.expired          { border-left-color:var(--status-quest,#E2B85E); }
.adm-verdict.paid_not_granted { border-left-color:var(--status-out,#DE5B41); background:rgba(222,91,65,.09); }
.adm-verdict.none             { border-left-color:var(--border-strong); }
/* UNKNOWN IS NOT CLEAR (CLAUDE.md §10). The backend now returns status
   "unknown" when a read that the sentence depends on actually FAILED -- e.g.
   the purchase record couldn't be read, so "never purchased" would be a guess
   dressed as a fact. Without a rule here it inherited the neutral base style
   and read as an ordinary, confident answer, which is the precise failure this
   status exists to prevent. Amber, matching `expired` and the warn banner. */
.adm-verdict.unknown          { border-left-color:var(--status-quest,#E2B85E);
  background:rgba(226,184,94,.09); }

.adm-person { font-size:14.5px; color:var(--text-secondary); line-height:1.65; margin-bottom:12px; }
.adm-dim { color:var(--text-muted); }
.adm-sub-h { font-family:var(--font-display); font-size:11.5px; font-weight:600; letter-spacing:.07em;
  text-transform:uppercase; color:var(--text-muted); margin:13px 0 5px;
  padding-top:9px; border-top:1px solid var(--border-hair); }

.adm-ent { display:flex; align-items:center; gap:9px; flex-wrap:wrap;
  padding:7px 0; border-top:1px solid var(--border-hair); font-size:14.5px; }
.adm-ent:first-of-type { border-top:0; }
.adm-ent.off { opacity:.55; }
.adm-ent-n { font-weight:600; color:var(--text-body); flex:0 0 auto; }
.adm-ent-m { font-family:var(--font-mono); font-size:12.5px; color:var(--text-muted); flex:0 0 auto; }
.adm-ent-x { font-family:var(--font-mono); font-size:12.5px; color:var(--text-muted);
  margin-left:auto; flex:0 0 auto; }
.adm-ent-x .warn, .adm-attn-b .warn { color:var(--status-quest,#E2B85E); }

.adm-grant-row { display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin-top:4px; }
.adm-grant-row select { font-family:var(--font-sans); font-size:14.5px; color:var(--text-body);
  background:var(--surface-input); border:1px solid var(--border-strong); border-radius:7px;
  padding:7px 10px; outline:none; }
.adm-grant-row select:focus { border-color:var(--accent); }
.adm-grant-row .adm-mini { margin-left:0; }

.adm-comp-row { display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin-top:4px; }
.adm-comp-row select, .adm-comp-row input { font-family:var(--font-sans); font-size:14.5px; color:var(--text-body);
  background:var(--surface-input); border:1px solid var(--border-strong); border-radius:7px;
  padding:7px 10px; outline:none; }
.adm-comp-row input { width:120px; }
.adm-comp-row input#admCompGameId { width:200px; }
.adm-comp-row select:focus, .adm-comp-row input:focus { border-color:var(--accent); }
.adm-comp-row .adm-mini { margin-left:0; }

/* ---- Phone (§7.5) -------------------------------------------------------
   "The 'I can't get in' text arrives on a Saturday from a stadium." So the
   support path -- verdict, entitlements, buttons -- has to work one-handed.
   Rows stack instead of truncating, and every control clears a 44px tap
   target rather than staying a desktop-sized 5px-padded button. */
@media (max-width:560px){
  .adm-strip, .adm-kpis { grid-template-columns:1fr 1fr; }
  .adm-attn-row { align-items:flex-start; gap:7px; }
  .adm-attn-b { flex:1 1 100%; }
  .adm-mini { margin-left:0; padding:10px 14px; font-size:14.5px; min-height:40px; }
  .adm-verdict { font-size:16px; padding:13px; }
  .adm-ent { align-items:flex-start; }
  .adm-ent-x { margin-left:0; flex:1 1 100%; }
  .adm-lookup input { min-width:0; flex:1 1 100%; }
  .adm-lookup-go { flex:1 1 100%; padding:12px 15px; min-height:44px; }
  .adm-grant-row select { flex:1 1 100%; padding:11px 10px; min-height:44px; }
  .adm-grant-row .adm-mini { flex:1 1 100%; }
  .adm-comp-row select, .adm-comp-row input { flex:1 1 100%; padding:11px 10px; min-height:44px; }
  .adm-comp-row .adm-mini { flex:1 1 100%; }
  .adm-deep { gap:10px; }
}

/* The specific fix for a failing setup check — so the answer isn't "go read the spec". */
.adm-fix { font-size:13.5px; line-height:1.5; color:var(--text-muted); margin-top:4px; }

/* Inline date editing — replaces prompt(), which returns null (indistinguishable
   from Cancel) whenever a browser suppresses dialogs, making the button look dead. */
.adm-inline-edit { display:inline-flex; align-items:center; gap:6px; flex-wrap:wrap; }
.adm-date { font-family:var(--font-mono); font-size:14.5px; color:var(--text-body);
  background:var(--surface-input); border:1px solid var(--border-strong); border-radius:6px;
  padding:6px 8px; outline:none; min-height:34px; }
.adm-date:focus { border-color:var(--accent); }
.adm-mini.ghost { color:var(--text-muted); border-color:var(--border-strong); }
.adm-mini.ghost:hover { color:var(--text-body); background:var(--surface-hover); }
