/* ════════════════════════════════════════════════════════════════════════════
   status.v2.css — operator-console layout for /status (Slice B, 2026-07-12).

   Scoped to the Status surface only (loaded solely by templates/status.html). Uses
   design tokens from sleeppi-tokens.css / sleeppi-themes.css — NO hardcoded colours.
   Reorganises the page around operator questions: one verdict, curated actions, an
   O₂ card that says worn-vs-failed in prose, CPAP / platform / equipment cards, and a
   single collapsed "diagnostics & forensics" drawer for everything else.
   ════════════════════════════════════════════════════════════════════════════ */

/* ── verdict bar: one word + one sentence, top of page ─────────────────────────── */
.ops-verdict {
  display: flex; align-items: baseline; flex-wrap: wrap; gap: 6px 14px;
  border: 1px solid var(--border); border-left-width: 3px; border-radius: 4px;
  background: var(--bg2); padding: 10px 14px; margin-top: 10px;
}
.ops-verdict[data-state="healthy"]  { border-left-color: var(--ok); }
.ops-verdict[data-state="attention"] { border-left-color: var(--warn); }
.ops-verdict[data-state="degraded"] { border-left-color: var(--crit); }
.ops-verdict .vb-word {
  font-family: "DM Sans", system-ui, sans-serif; font-weight: 700;
  font-size: 20px; letter-spacing: .04em; text-transform: uppercase; line-height: 1;
}
.ops-verdict[data-state="healthy"]  .vb-word { color: var(--ok); }
.ops-verdict[data-state="attention"] .vb-word { color: var(--warn); }
.ops-verdict[data-state="degraded"] .vb-word { color: var(--crit); }
.ops-verdict .vb-copy { color: var(--text-sec); font-size: 13px; }
.ops-verdict .vb-gen  { color: var(--text-dim); font-size: 11px; margin-left: auto; }

/* ── console grid: cards, not equal-weight tables ─────────────────────────────── */
.ops-console {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
  gap: 10px; margin-top: 10px; align-items: start;
}
.ops-card { min-width: 0; }
.ops-card.span-2 { grid-column: 1 / -1; }
.ops-card .body { padding: 10px 12px; }
.ops-card .card-lead { font-size: 13px; color: var(--text); line-height: 1.5; }
.ops-card .card-sub  { font-size: 11px; color: var(--text-dim); margin-top: 6px; line-height: 1.5; }

/* ── actions today ─────────────────────────────────────────────────────────────── */
.ops-actions { list-style: none; margin: 0; padding: 0; font-size: 12.5px; }
.ops-actions li {
  display: flex; align-items: center; gap: 8px; padding: 7px 0;
  color: var(--text-sec); border-top: 1px solid var(--border-dim);
}
.ops-actions li:first-child { border-top: none; }
.ops-actions .act-text { flex: 1 1 auto; min-width: 0; }
.ops-actions .oa-ref {
  margin-left: auto; font-size: 8.5px; text-transform: uppercase; letter-spacing: .04em;
  color: var(--text-dim); flex: none; border: 1px solid var(--border-dim);
  border-radius: 2px; padding: 0 5px;
}
.ops-actions .d { width: 8px; height: 8px; border-radius: 50%; flex: none; }
.ops-actions .sev-error .d { background: var(--crit); }
.ops-actions .sev-warn  .d { background: var(--warn); }
.ops-empty-good {
  display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--ok);
  padding: 4px 0;
}
.ops-empty-good .tick { font-weight: 700; }

/* ── O₂ ingest card: worn-vs-failed prose + a muted forensic footnote ─────────── */
.o2-state-chip {
  font-size: 9px; text-transform: uppercase; letter-spacing: .05em; padding: 1px 7px;
  border: 1px solid var(--border); border-radius: 2px; color: var(--text-dim);
  white-space: nowrap;
}
.o2-state-chip[data-s="ok"]       { color: var(--sp-status-ok);   border-color: color-mix(in srgb, var(--sp-status-ok) 40%, transparent); }
.o2-state-chip[data-s="warning"]  { color: var(--warn);          border-color: color-mix(in srgb, var(--warn) 45%, transparent); font-weight: 600; }
.o2-state-chip[data-s="pending"]  { color: var(--c-spo2); }
.o2-state-chip[data-s="not worn"],
.o2-state-chip[data-s="unknown"]  { color: var(--sp-absent-o2-neutral); border-style: dashed; }
.o2-forensic {
  margin-top: 8px; font-size: 10.5px; color: var(--text-dim); line-height: 1.5;
  border-top: 1px dashed var(--border-dim); padding-top: 7px;
}
.o2-forensic b { color: var(--text-mut); font-weight: 600; }

/* ── node strip (CPAP + O₂ ingest path) ──────────────────────────────────────── */
.node-strip { font-size: 11px; line-height: 1.9; color: var(--text-mut); margin: 2px 0 8px; }
.node-strip .node { white-space: nowrap; }
.node-strip .node.ok   { color: var(--ok); }
.node-strip .node.warn { color: var(--warn); }
.node-strip .node.crit { color: var(--crit); }
.node-strip .node.idle { color: var(--idle); }
.node-strip .arrow { color: var(--text-dim); }

/* ── pills (last-night collected/pushed/parsed) ──────────────────────────────── */
.ops-pills { display: flex; flex-wrap: wrap; gap: 6px 10px; font-size: 11px; }
.ops-pills .pill { display: inline-flex; align-items: center; gap: 5px; color: var(--text-mut); }
.ops-pills .pill .d { width: 7px; height: 7px; border-radius: 50%; flex: none; background: var(--idle); }
.ops-pills .pill.ok .d { background: var(--ok); }
.ops-pills .pill .note { color: var(--text-dim); font-size: 10px; }

/* ── freshness / meta lines ──────────────────────────────────────────────────── */
.ops-meta-line { font-size: 10.5px; color: var(--text-dim); line-height: 1.6; margin-top: 6px; }
.ops-meta-line b { color: var(--text-mut); font-weight: 600; }

/* ── services rows (source-explicit) ─────────────────────────────────────────── */
.svc-list { list-style: none; margin: 0; padding: 0; font-size: 11.5px; }
.svc-list li {
  display: flex; align-items: center; gap: 8px; padding: 5px 0;
  border-top: 1px solid var(--border-dim);
}
.svc-list li:first-child { border-top: none; }
.svc-list .d { width: 8px; height: 8px; border-radius: 50%; flex: none; background: var(--idle); }
.svc-list li[data-tone="ok"]   .d { background: var(--ok); }
.svc-list li[data-tone="warn"] .d { background: var(--warn); }
.svc-list li[data-tone="crit"] .d { background: var(--crit); }
.svc-list .svc-unit { color: var(--text-sec); flex: 1 1 auto; min-width: 0; }
.svc-list .svc-state { color: var(--text-mut); flex: none; }
.svc-list li[data-tone="crit"] .svc-state { color: var(--crit); }
.svc-list .svc-src {
  flex: none; font-size: 8px; text-transform: uppercase; letter-spacing: .04em;
  color: var(--text-dim); border: 1px solid var(--border-dim); border-radius: 2px; padding: 0 4px;
}
.svc-list .svc-last { flex: none; color: var(--text-dim); font-size: 10px; min-width: 42px; text-align: right; }

/* ── equipment rows ──────────────────────────────────────────────────────────── */
.eq-list { list-style: none; margin: 0; padding: 0; font-size: 11.5px; }
.eq-list li { display: flex; align-items: center; gap: 8px; padding: 6px 0; border-top: 1px solid var(--border-dim); }
.eq-list li:first-child { border-top: none; }
.eq-list .eq-item { color: var(--text-sec); flex: none; min-width: 58px; }
.eq-list .eq-model { color: var(--text-dim); font-size: 10px; flex: 1 1 auto; min-width: 0; }
.eq-list .eq-impact { color: var(--text-mut); flex: none; font-size: 10.5px; }
.eq {
  font-size: 9px; text-transform: uppercase; letter-spacing: .04em; padding: 0 6px;
  border: 1px solid var(--border); border-radius: 2px; flex: none;
}
.eq[data-eq="ok"] { color: var(--sp-status-ok); border-color: color-mix(in srgb, var(--sp-status-ok) 40%, transparent); }
.eq[data-eq="watch"] { color: var(--sp-status-warn); border-color: color-mix(in srgb, var(--sp-status-warn) 45%, transparent); }
.eq[data-eq="overdue"] { color: var(--sp-autonomic-burden); border-color: color-mix(in srgb, var(--sp-autonomic-burden) 50%, transparent); font-weight: 600; }
.eq[data-eq="unknown"] { color: var(--text-dim); border-style: dashed; }

/* ── diagnostics & forensics drawer (collapsed by default) ───────────────────── */
.ops-forensics { border: 1px solid var(--border-dim); border-radius: 4px; background: var(--bg2); margin-top: 10px; }
.ops-forensics > summary {
  cursor: pointer; font-size: 11.5px; color: var(--text-mut); padding: 8px 12px;
  letter-spacing: .03em; list-style: none;
}
.ops-forensics > summary::-webkit-details-marker { display: none; }
.ops-forensics > summary::before { content: "▸ "; color: var(--text-mut); }
.ops-forensics[open] > summary::before { content: "▾ "; }
.ops-forensics[open] > summary { border-bottom: 1px solid var(--border-dim); color: var(--text-sec); }
.ops-forensics > summary .mut { color: var(--text-dim); font-weight: 400; }
.ops-forensics-body { padding: 10px 12px; display: grid; gap: 14px; }
.forensic-block h4 {
  margin: 0 0 6px; font-size: 10px; text-transform: uppercase; letter-spacing: .05em;
  color: var(--text-dim); font-weight: 600;
}

/* severity dot/tag reused inside the drawer diagnostics table */
.sev { display: inline-flex; align-items: center; gap: 5px; white-space: nowrap; }
.sev .d { width: 7px; height: 7px; border-radius: 50%; display: inline-block; flex: none; }
.sev-error .d { background: var(--crit); }  .sev-error { color: var(--crit); }
.sev-warn  .d { background: var(--warn); }  .sev-warn  { color: var(--warn); }
.sev-info  .d { background: var(--c-spo2); } .sev-info { color: var(--text-sec); }
.sev-muted .d { background: var(--sp-absent-o2-neutral); } .sev-muted { color: var(--text-dim); }
.reason-code {
  font-size: 8px; text-transform: uppercase; letter-spacing: .04em; color: var(--text-dim);
  border: 1px solid var(--border-dim); border-radius: 2px; padding: 0 4px; margin-left: 4px;
}

/* loading / error banner */
.ops-load { font-size: 11px; color: var(--text-dim); margin-top: 8px; }
.ops-load.err { color: var(--crit); }
.st-badge-err { color: var(--crit); }

/* generic muted count line */
.mut { color: var(--text-dim); }
.n-ok { color: var(--ok); } .n-warn { color: var(--warn); } .n-err { color: var(--crit); }
.n-mut { color: var(--sp-absent-o2-neutral); }
