/* BioDosier Desk — operator instrument
   Dark-first, restrained product UI. System fonts only. Offline-safe. */

/* ---------------------------------------------------------------------------
   Tokens
   --------------------------------------------------------------------------- */
:root {
  color-scheme: dark light;

  /* Brand seed ~hue 200 (sky/teal), restrained product use */
  --primary: oklch(0.72 0.09 200);
  --primary-strong: oklch(0.62 0.11 200);
  --accent: oklch(0.78 0.07 55);

  /* Dark default — pure near-black surface, chroma 0 */
  --bg: oklch(0.10 0 0);
  --surface: oklch(0.15 0 0);
  --surface-raised: oklch(0.18 0 0);
  --surface-sunken: oklch(0.12 0 0);
  --ink: oklch(0.93 0 0);
  --muted: oklch(0.72 0 0);
  --faint: oklch(0.60 0 0); /* WCAG AA on --bg; do not lower */
  --border: oklch(0.28 0 0);
  --border-strong: oklch(0.38 0 0);
  --focus-ring: oklch(0.78 0.10 200);
  --danger: oklch(0.72 0.14 25);
  --warn: oklch(0.78 0.12 75);
  --ok: oklch(0.72 0.10 155);
  --stale: oklch(0.74 0.11 55);
  --on-primary: oklch(0.12 0 0);

  /* Verdict semantics — quiet chroma, readable chips */
  --verdict-cleared: oklch(0.72 0.10 155);
  --verdict-condemned: oklch(0.72 0.14 25);
  --verdict-watching: oklch(0.78 0.10 75);
  --verdict-null: oklch(0.55 0 0);

  --font-ui: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue",
    Arial, sans-serif;
  --font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas,
    "Liberation Mono", monospace;

  /* Fixed rem scale ~1.125–1.2 (product register) */
  --text-xs: 0.75rem;
  --text-sm: 0.8125rem;
  --text-base: 0.9375rem;
  --text-md: 1.0625rem;
  --text-lg: 1.25rem;
  --text-xl: 1.5rem;

  --space-1: 0.25rem;
  --space-2: 0.5rem;
  --space-3: 0.75rem;
  --space-4: 1rem;
  --space-5: 1.5rem;
  --space-6: 2rem;
  --space-7: 3rem;
  --space-8: 4rem;

  --radius: 6px;
  --radius-sm: 4px;
  --max-width: 90rem;
  --header-h: 3.25rem;
  --row-h: 2.125rem;

  --z-sticky: 10;
  --z-dropdown: 20;
  --z-header: 30;

  --ease: cubic-bezier(0.16, 1, 0.3, 1);
  --dur: 160ms;
}

@media (prefers-color-scheme: light) {
  :root {
    --bg: oklch(0.985 0 0);
    --surface: oklch(1 0 0);
    --surface-raised: oklch(0.97 0 0);
    --surface-sunken: oklch(0.96 0 0);
    --ink: oklch(0.18 0 0);
    --muted: oklch(0.40 0 0);
    --faint: oklch(0.45 0 0);
    --border: oklch(0.86 0 0);
    --border-strong: oklch(0.72 0 0);
    --primary: oklch(0.48 0.10 200);
    --primary-strong: oklch(0.40 0.11 200);
    --accent: oklch(0.52 0.10 55);
    --focus-ring: oklch(0.48 0.12 200);
    --danger: oklch(0.48 0.16 25);
    --warn: oklch(0.50 0.12 75);
    --ok: oklch(0.45 0.11 155);
    --stale: oklch(0.50 0.12 55);
    --on-primary: oklch(0.99 0 0);
    --verdict-cleared: oklch(0.42 0.11 155);
    --verdict-condemned: oklch(0.48 0.16 25);
    --verdict-watching: oklch(0.48 0.12 75);
    --verdict-null: oklch(0.50 0 0);
  }
}

/* ---------------------------------------------------------------------------
   Base
   --------------------------------------------------------------------------- */
*,
*::before,
*::after {
  box-sizing: border-box;
}

html {
  font-size: 16px;
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
  min-height: 100vh;
  font-family: var(--font-ui);
  font-size: var(--text-base);
  line-height: 1.5;
  color: var(--ink);
  background: var(--bg);
  -webkit-font-smoothing: antialiased;
}

body.is-loading .auth-ready,
body.is-loading .main-ready {
  opacity: 0.45;
  pointer-events: none;
}

[hidden] {
  display: none !important;
}

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.skip-link {
  position: absolute;
  top: -100%;
  left: var(--space-4);
  z-index: 100;
  padding: var(--space-2) var(--space-3);
  background: var(--primary);
  color: var(--on-primary);
  font-weight: 600;
  text-decoration: none;
  border-radius: var(--radius-sm);
}

.skip-link:focus {
  top: var(--space-2);
}

a {
  color: var(--primary);
  text-decoration-thickness: 1px;
  text-underline-offset: 0.15em;
}

a:hover {
  color: var(--primary-strong);
}

:focus {
  outline: none;
}

:focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: 2px;
}

/* ---------------------------------------------------------------------------
   Shell
   --------------------------------------------------------------------------- */
.shell {
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}

.shell-inner {
  width: 100%;
  max-width: var(--max-width);
  margin-inline: auto;
  padding-inline: var(--space-4);
}

@media (min-width: 720px) {
  .shell-inner {
    padding-inline: var(--space-6);
  }
}

/* ---------------------------------------------------------------------------
   Header
   --------------------------------------------------------------------------- */
.site-header {
  position: sticky;
  top: 0;
  z-index: var(--z-header);
  border-bottom: 1px solid var(--border);
  background: color-mix(in oklch, var(--bg) 92%, transparent);
  backdrop-filter: blur(8px);
}

@supports not (backdrop-filter: blur(8px)) {
  .site-header {
    background: var(--bg);
  }
}

.header-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-3) var(--space-4);
  min-height: var(--header-h);
  padding-block: var(--space-3);
}

.brand {
  display: flex;
  flex-direction: column;
  gap: 0.1rem;
  min-width: 0;
}

.brand-name {
  margin: 0;
  font-size: var(--text-md);
  font-weight: 600;
  letter-spacing: -0.01em;
  line-height: 1.2;
}

.brand-tag {
  margin: 0;
  font-size: var(--text-xs);
  color: var(--muted);
  line-height: 1.3;
}

.header-instruments {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2) var(--space-3);
  position: relative;
  flex: 1 1 auto;
  min-width: 0;
}

.header-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-3) var(--space-4);
  margin-inline-start: auto;
}

#version-stamp {
  margin: 0;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  line-height: 1.35;
  color: var(--muted);
  letter-spacing: 0.01em;
  white-space: nowrap;
}

/* Hidden when build telemetry is absent — avoids false "desk unavailable" */
#version-stamp[data-build-missing="true"],
#version-stamp[hidden] {
  display: none;
}

#version-stamp .version-hash {
  color: var(--ink);
  font-weight: 500;
}

#version-stamp .version-sep {
  color: var(--faint);
  margin-inline: 0.35em;
}

/* Freshness pill */
.freshness-pill {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  min-height: 2rem;
  padding: 0.25rem 0.65rem;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--ink);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 999px;
  cursor: pointer;
  transition: border-color var(--dur) var(--ease),
    background-color var(--dur) var(--ease);
}

.freshness-pill:hover {
  border-color: var(--border-strong);
  background: var(--surface-raised);
}

.freshness-pill[data-level="ok"] {
  border-color: color-mix(in oklch, var(--ok) 45%, var(--border));
}

.freshness-pill[data-level="stale"] {
  border-color: color-mix(in oklch, var(--stale) 50%, var(--border));
}

.freshness-pill[data-level="error"] {
  border-color: color-mix(in oklch, var(--danger) 50%, var(--border));
}

.freshness-dot {
  width: 0.5rem;
  height: 0.5rem;
  border-radius: 50%;
  background: var(--faint);
  flex-shrink: 0;
}

.freshness-pill[data-level="ok"] .freshness-dot {
  background: var(--ok);
}

.freshness-pill[data-level="stale"] .freshness-dot {
  background: var(--stale);
}

.freshness-pill[data-level="error"] .freshness-dot {
  background: var(--danger);
}

.freshness-panel {
  position: absolute;
  top: calc(100% + var(--space-2));
  left: 0;
  z-index: var(--z-dropdown);
  min-width: min(20rem, 90vw);
  max-width: 28rem;
  padding: var(--space-3);
  background: var(--surface-raised);
  border: 1px solid var(--border-strong);
  border-radius: var(--radius);
  box-shadow: 0 4px 12px oklch(0 0 0 / 0.35);
}

.freshness-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.freshness-item {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: var(--space-1) var(--space-3);
  font-size: var(--text-xs);
  font-family: var(--font-mono);
  line-height: 1.35;
}

.freshness-item-name {
  color: var(--ink);
}

.freshness-item-meta {
  color: var(--muted);
  text-align: end;
}

.freshness-item[data-stale="true"] .freshness-item-name {
  color: var(--stale);
}

.freshness-item[data-quiet="true"] .freshness-item-meta {
  color: var(--muted);
}

.freshness-actions {
  margin-top: var(--space-3);
  display: flex;
  gap: var(--space-2);
}

.freshness-actions .btn {
  min-height: 24px;
}

.freshness-empty {
  margin: 0;
  font-size: var(--text-sm);
  color: var(--muted);
}

.coverage-chip {
  margin: 0;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
  padding: 0.25rem 0.55rem;
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  background: var(--surface-sunken);
  white-space: nowrap;
  transition: color var(--dur) var(--ease), border-color var(--dur) var(--ease),
    background-color var(--dur) var(--ease);
}

.coverage-chip.is-ticked {
  color: var(--primary);
  border-color: color-mix(in oklch, var(--primary) 45%, var(--border));
  background: color-mix(in oklch, var(--primary) 12%, var(--surface-sunken));
}

.coverage-chip[data-stale="true"] {
  color: var(--stale);
  border-color: color-mix(in oklch, var(--stale) 40%, var(--border));
}

/* Quiet reconnect — non-alarmist, header instrument */
.live-reconnect {
  margin: 0;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--faint);
  padding: 0.2rem 0.45rem;
  border: 1px solid transparent;
  border-radius: var(--radius-sm);
  min-height: 1.5rem;
  line-height: 1.35;
}

.live-reconnect[data-state="reconnecting"] {
  color: var(--muted);
  border-color: var(--border);
  background: var(--surface-sunken);
}

/* As-of / staleness meta on live surfaces */
.as-of {
  margin: 0;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--faint);
  line-height: 1.35;
  min-height: 1.1em;
}

.as-of[data-stale="true"] {
  color: var(--stale);
}

.panel-as-of {
  margin-top: var(--space-2);
  padding-top: var(--space-2);
  border-top: 1px solid var(--border);
}

.panel-body[data-stale="true"] .spend-meta,
.panel-body[data-stale="true"] .spend-quota,
.panel-body[data-stale="true"] .spend-bar-fill {
  opacity: 0.55;
}

.table-meta[data-stale="true"] {
  color: var(--stale);
}

.spend-stale-note {
  margin: var(--space-1) 0 0;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--stale);
  line-height: 1.35;
}

.coverage-banner-nums .coverage-count {
  display: inline-block;
  transition: color var(--dur) var(--ease);
}

.coverage-banner-nums.is-ticked .coverage-count {
  color: var(--primary);
}

.coverage-banner[data-stale="true"] .coverage-banner-nums {
  color: var(--stale);
}

.coverage-banner .as-of {
  margin-top: var(--space-2);
}

.freshness-panel .as-of {
  margin-top: var(--space-3);
  padding-top: var(--space-2);
  border-top: 1px solid var(--border);
}

.table-meta .as-of-inline {
  color: var(--faint);
}

.mission-item[data-pending="true"] {
  opacity: 0.75;
}

.mission-item.is-rolling-back {
  outline: 1px solid color-mix(in oklch, var(--danger) 50%, var(--border));
  outline-offset: 2px;
  border-radius: var(--radius-sm);
}

/* ---------------------------------------------------------------------------
   Auth / buttons
   --------------------------------------------------------------------------- */
.auth-cluster {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2) var(--space-3);
}

#signed-in {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2) var(--space-3);
}

#user-email {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--ink);
  max-width: 16rem;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 2.5rem;
  padding: 0.4rem 0.9rem;
  font-family: inherit;
  font-size: var(--text-sm);
  font-weight: 500;
  line-height: 1.2;
  border-radius: var(--radius-sm);
  border: 1px solid transparent;
  cursor: pointer;
  text-decoration: none;
  transition: background-color var(--dur) var(--ease),
    border-color var(--dur) var(--ease), color var(--dur) var(--ease);
}

.btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.btn-compact {
  min-height: 2rem;
  padding: 0.3rem 0.7rem;
  font-size: var(--text-xs);
}

.btn-primary {
  background: var(--primary);
  color: var(--on-primary);
  border-color: var(--primary);
}

.btn-primary:hover:not(:disabled) {
  background: var(--primary-strong);
  border-color: var(--primary-strong);
  color: var(--on-primary);
}

.btn-ghost {
  background: transparent;
  color: var(--ink);
  border-color: var(--border-strong);
}

.btn-ghost:hover:not(:disabled) {
  background: var(--surface-raised);
  border-color: var(--border-strong);
  color: var(--ink);
}

.btn-linkish {
  background: transparent;
  border: none;
  color: var(--primary);
  min-height: auto;
  padding: 0;
  font-size: inherit;
  font-weight: 500;
  cursor: pointer;
  text-decoration: underline;
  text-underline-offset: 0.15em;
}

.btn-linkish:hover:not(:disabled) {
  color: var(--primary-strong);
}

#signin-btn.btn-primary {
  text-decoration: none;
}

/* ---------------------------------------------------------------------------
   Main
   --------------------------------------------------------------------------- */
.site-main {
  flex: 1;
  padding-block: var(--space-5) var(--space-8);
}

.session-status {
  margin: 0 0 var(--space-4);
  font-size: var(--text-sm);
  color: var(--muted);
  font-family: var(--font-mono);
}

.session-status[data-state="error"] {
  color: var(--danger);
}

/* Gate — signed-out sell wall (letter column; light even on a dark OS) */
body.is-signed-out {
  --paper: oklch(0.975 0 0);
  --bg: oklch(0.975 0 0);
  --ink: oklch(0.16 0 0);
  --muted: oklch(0.38 0 0);
  --faint: oklch(0.48 0 0);
  --border: oklch(0.80 0 0);
  --border-strong: oklch(0.70 0 0);
  --primary: oklch(0.48 0.16 25);
  --primary-strong: oklch(0.42 0.16 25);
  --on-primary: oklch(0.99 0.01 90);
  --focus-ring: oklch(0.42 0.14 25);
  background: var(--bg);
  color: var(--ink);
}

body.is-signed-out .shell-inner {
  max-width: 40rem;
}

body.is-signed-out .site-header {
  background: var(--paper);
  backdrop-filter: none;
  border-bottom-color: var(--border);
}

body.is-signed-out .brand-name {
  font-size: 0.8125rem;
  font-weight: 650;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

body.is-signed-out .brand-tag,
body.is-signed-out #version-stamp,
body.is-signed-out .site-footer {
  display: none;
}

body.is-signed-out #signin-btn.btn-primary {
  min-height: 2.5rem;
  background: var(--primary);
  border-color: var(--primary);
  color: var(--on-primary);
  border-radius: var(--radius);
}

.gate {
  display: flex;
  flex-direction: column;
  max-width: 40rem;
  font-family: Georgia, "Iowan Old Style", "Palatino Linotype", Palatino,
    "Times New Roman", serif;
}

.gate h1 {
  margin: 0 0 1.25rem;
  font-size: clamp(1.85rem, 4vw, 2.35rem);
  font-weight: 600;
  letter-spacing: -0.02em;
  line-height: 1.2;
  text-wrap: balance;
  order: 2;
}

.gate-tape {
  order: 1;
  margin: 0 0 1.6rem;
}

.gate-tape ol {
  list-style: none;
  margin: 0;
  padding: 0.35rem 0;
  display: flex;
  flex-wrap: wrap;
  gap: 0.45rem 0.95rem;
  font-family: var(--font-mono);
  font-size: 0.78rem;
  letter-spacing: 0.04em;
  line-height: 1.6;
}

.gate-tape li {
  margin: 0;
  color: var(--ink);
}

.gate-tape li[data-gone] {
  color: var(--faint);
  text-decoration: line-through;
  text-decoration-thickness: 1px;
}

.gate-tape p {
  margin: 0.35rem 0 0;
  font-family: var(--font-ui);
  font-size: 0.72rem;
  color: var(--faint);
}

.gate > p {
  order: 3;
  margin: 0 0 1.15rem;
  font-size: 1.125rem;
  line-height: 1.62;
  color: var(--ink);
  max-width: 62ch;
}

.gate-close {
  order: 4;
  margin-top: 0.5rem;
  padding-top: 1.5rem;
  border-top: 1px solid var(--border);
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 1rem 1.25rem;
  font-family: var(--font-ui);
}

.gate-close p {
  margin: 0;
  font-size: 0.8125rem;
  color: var(--faint);
  max-width: 40ch;
  line-height: 1.45;
}

.gate-signin {
  text-decoration: none;
  min-height: 2.5rem;
}

.gate > p.gate-as-of {
  order: 5;
  margin: 1.5rem 0 0;
  font-family: var(--font-ui);
  font-size: 0.75rem;
  color: var(--faint);
}

.gate-note {
  font-size: var(--text-sm);
  color: var(--faint);
}

#product-switch,
#desk-link {
  text-decoration: none;
}

/* ---------------------------------------------------------------------------
   Desk layout
   --------------------------------------------------------------------------- */
.desk {
  display: flex;
  flex-direction: column;
  gap: var(--space-5);
}

/* Operator command strip on / — goals, pass bar, loop, plan, spend.
   Reuses control-panel vocabulary; denser so 7 goal rows stay readable. */
.desk-command {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

.desk-command-grid {
  gap: var(--space-3);
}

@media (min-width: 720px) {
  .desk-command-grid {
    grid-template-columns: repeat(2, 1fr);
  }

  .desk-command-grid > .desk-command-goals,
  .desk-command-grid > .desk-command-passbar,
  .desk-command-grid > .desk-command-loop {
    grid-column: 1 / -1;
  }
}

@media (min-width: 1100px) {
  .desk-command-grid {
    grid-template-columns: repeat(12, 1fr);
  }

  .desk-command-grid > .desk-command-goals,
  .desk-command-grid > .desk-command-passbar,
  .desk-command-grid > .desk-command-loop {
    grid-column: span 12;
  }

  .desk-command-grid > .desk-command-plan,
  .desk-command-grid > .desk-command-spend {
    grid-column: span 6;
  }
}

.desk-command .control-panel {
  padding: var(--space-3);
}

.goal-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.goal-row {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: var(--space-1) var(--space-2);
  align-items: baseline;
  line-height: 1.35;
  padding: var(--space-2) 0;
  border-bottom: 1px solid var(--border);
}

.goal-row:last-child {
  border-bottom: 0;
  padding-bottom: 0;
}

.goal-row-head {
  grid-column: 1 / -1;
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--space-1) var(--space-2);
}

.goal-n {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  color: var(--muted);
}

.goal-text {
  flex: 1 1 12rem;
  min-width: 0;
  color: var(--ink);
}

.goal-meta {
  grid-column: 1 / -1;
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--space-1) var(--space-3);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
}

.goal-value {
  color: var(--muted);
  font-weight: 500;
}

.goal-value[data-null="true"] {
  color: var(--faint);
  font-weight: 500;
}

.goal-moving[data-moving="true"] {
  color: var(--ink);
}

.goal-moving[data-moving="false"] {
  color: var(--warn);
}

.goal-row[data-stale="true"] .goal-value,
.goal-row[data-stale="true"] .goal-text {
  color: var(--stale);
}

.goal-row[data-gating="false"] .goal-text {
  color: var(--muted);
}

.desk-command-loop .panel-body {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--space-2) var(--space-4);
}

.loop-counts {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-3);
  margin: 0;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
}

.loop-count {
  color: var(--ink);
}

.loop-count[data-state="failed"] {
  color: var(--danger);
}

.loop-count[data-state="queued"],
.loop-count[data-state="active"],
.loop-count[data-state="running"],
.loop-count[data-state="in_flight"] {
  color: var(--ink);
}

.desk-command-loop .budget-floor-alert,
.desk-command-loop .panel-as-of {
  flex: 1 1 100%;
}

.loop-current {
  margin: 0;
  flex: 1 1 16rem;
  font-size: var(--text-sm);
  color: var(--ink);
  line-height: 1.4;
}

.loop-blocked {
  margin: var(--space-1) 0 0;
  font-size: var(--text-xs);
  color: var(--warn);
}

.budget-floor-alert {
  margin: 0 0 var(--space-3);
  padding: var(--space-2) var(--space-3);
  font-size: var(--text-sm);
  font-weight: 600;
  color: var(--warn);
  background: color-mix(in oklch, var(--warn) 12%, var(--surface));
  border: 1px solid color-mix(in oklch, var(--warn) 45%, var(--border));
  border-radius: var(--radius-sm);
}

#queue-mount .loop-count[data-state="queued"],
#queue-mount .loop-count[data-state="active"],
#queue-mount .loop-count[data-state="running"],
#queue-mount .loop-count[data-state="in_flight"] {
  color: var(--ink);
}

.queue-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--text-sm);
}

.queue-table caption {
  text-align: start;
  font-size: var(--text-xs);
  color: var(--faint);
  padding-bottom: var(--space-2);
}

.queue-table th {
  text-align: start;
  font-weight: 500;
  font-size: var(--text-xs);
  color: var(--faint);
  border-bottom: 1px solid var(--border);
  padding: var(--space-2) var(--space-3) var(--space-2) 0;
}

.queue-table td {
  padding: var(--space-2) var(--space-3) var(--space-2) 0;
  border-bottom: 1px solid var(--border);
  vertical-align: top;
}

.queue-what {
  max-width: 42rem;
}

.queue-state[data-state="failed"] {
  color: var(--danger);
}

.queue-blocked {
  font-size: var(--text-xs);
  color: var(--warn);
  padding-top: 0;
}

.queue-done,
.queue-failed {
  margin-top: var(--space-3);
  font-size: var(--text-sm);
}

.queue-done summary,
.queue-failed summary {
  cursor: pointer;
  color: var(--muted);
  min-height: 24px;
}

.queue-failed summary {
  color: var(--danger);
}

.passbar-label {
  margin: 0 0 var(--space-2);
  font-size: var(--text-sm);
  color: var(--muted);
  line-height: 1.4;
  max-width: 70ch;
}

.passbar-stats {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-4);
  margin: 0 0 var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--ink);
}

.passbar-hit {
  font-weight: 700;
  font-size: var(--text-md);
  letter-spacing: -0.02em;
}

.passbar-meter {
  position: relative;
  height: 0.5rem;
  background: var(--surface-sunken);
  border: 1px solid var(--border);
  border-radius: 999px;
  overflow: hidden;
  margin: var(--space-2) 0;
}

.passbar-meter[data-unmeasured="true"] {
  overflow: hidden;
}

.passbar-fill {
  height: 100%;
  background: var(--primary);
  border-radius: inherit;
  max-width: 100%;
  transition: width var(--dur) var(--ease);
}

.passbar-meter[data-stale="true"] .passbar-fill {
  background: var(--stale);
}

.passbar-tick {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 2px;
  margin-left: -1px;
  background: var(--ink);
  opacity: 0.85;
  pointer-events: none;
}

.passbar-reading {
  margin: var(--space-2) 0 0;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
}

.passbar-unmeasured {
  margin: 0;
  color: var(--faint);
}

.desk-command .panel-body[data-stale="true"] {
  color: var(--stale);
}

/* Control link on desk (admin only) */
.control-link:focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: 2px;
}

/* Control page (operator cockpit at /control) */
.control-page .cockpit {
  display: flex;
  flex-direction: column;
  gap: var(--space-5);
  padding-block: var(--space-4) var(--space-6);
}

.cockpit-header {
  max-width: 48rem;
}

.cockpit-title {
  margin: 0 0 var(--space-2);
  font-size: var(--text-xl);
  font-weight: 650;
  letter-spacing: -0.02em;
  line-height: 1.2;
  color: var(--ink);
  text-wrap: balance;
}

.cockpit-lede {
  margin: 0;
  font-size: var(--text-sm);
  color: var(--muted);
  max-width: 65ch;
  line-height: 1.45;
}

/* Control grid — shared vocabulary (page + any residual panels) */
.control-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-3);
}

.control-page .cockpit {
  display: flex;
  flex-direction: column;
  gap: var(--space-6);
  max-width: 72rem;
}

.control-page .cockpit-lede {
  display: none;
}

.control-now,
.control-board {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-6);
  padding-bottom: var(--space-5);
  border-bottom: 1px solid var(--border);
}

@media (min-width: 800px) {
  .control-now {
    grid-template-columns: minmax(0, 1fr) minmax(16rem, 22rem);
    align-items: start;
  }

  .control-board {
    grid-template-columns: 1fr 1fr;
    align-items: start;
  }
}

.control-now .panel-label,
.control-board .panel-label,
.control-more .panel-label {
  margin-bottom: var(--space-2);
}

.control-more {
  padding-top: var(--space-2);
}

.control-more > summary {
  cursor: pointer;
  color: var(--muted);
  font-size: var(--text-sm);
  min-height: 24px;
}

.control-more-body {
  display: flex;
  flex-direction: column;
  gap: var(--space-6);
  margin-top: var(--space-4);
}

.control-grid-page {
  gap: var(--space-4);
}

@media (min-width: 720px) {
  .control-grid {
    grid-template-columns: repeat(2, 1fr);
  }

  .control-grid-page > .control-panel-work,
  .control-grid-page > .control-panel-queue {
    grid-column: 1 / -1;
  }
}

@media (min-width: 1100px) {
  .control-grid-page {
    grid-template-columns: repeat(12, 1fr);
  }

  .control-grid-page > .control-panel {
    grid-column: span 6;
  }

  .control-grid-page > .control-panel-work,
  .control-grid-page > .control-panel-queue {
    grid-column: span 12;
  }

  .control-grid-page > .control-panel-spend {
    grid-column: span 6;
  }

  .control-grid-page > .control-panel-infra {
    grid-column: span 6;
  }

  .control-grid-page > .control-panel-missions {
    grid-column: span 12;
  }
}

@media (min-width: 1440px) {
  .control-grid-page > .control-panel:not(.control-panel-missions):not(
      .control-panel-work
    ):not(.control-panel-queue) {
    grid-column: span 4;
  }

  .control-grid-page > .control-panel-work,
  .control-grid-page > .control-panel-queue {
    grid-column: span 12;
  }

  .control-grid-page > .control-panel-spend {
    grid-column: span 4;
  }

  .control-grid-page > .control-panel-infra {
    grid-column: span 4;
  }

  .control-grid-page > .control-panel-missions {
    grid-column: span 12;
  }
}

.control-panel {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  min-height: 0;
  padding: var(--space-3);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
}

/* Session work owns the primary surface; infra is quiet secondary. */
.control-panel-work {
  background: var(--surface-raised);
  border-color: var(--border-strong);
  gap: var(--space-3);
  padding: var(--space-4) var(--space-3);
}

.control-panel-infra {
  background: var(--surface-sunken);
  opacity: 0.96;
}

.panel-label {
  margin: 0;
  font-size: var(--text-xs);
  font-weight: 600;
  font-family: var(--font-mono);
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--muted);
  display: flex;
  align-items: baseline;
  gap: var(--space-2);
  flex-wrap: wrap;
}

.panel-label-note {
  font-weight: 400;
  letter-spacing: 0;
  text-transform: none;
  color: var(--faint);
}

.panel-body {
  margin: 0;
  font-size: var(--text-sm);
  color: var(--ink);
  min-height: 2.5rem;
}

.panel-body[data-state="loading"],
.panel-body[data-state="empty"] {
  color: var(--muted);
}

.panel-body[data-state="error"] {
  color: var(--danger);
}

.control-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.control-list li {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--space-1) var(--space-2);
  line-height: 1.35;
}

.control-list .item-text {
  flex: 1 1 8rem;
  min-width: 0;
}

.control-list .item-meta {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--faint);
}

.state-badge {
  display: inline-block;
  font-family: var(--font-mono);
  font-size: 0.6875rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  padding: 0.1rem 0.4rem;
  border-radius: 999px;
  border: 1px solid var(--border);
  color: var(--muted);
  background: var(--surface-sunken);
  white-space: nowrap;
}

.state-badge[data-state="live"],
.state-badge[data-state="done"],
.state-badge[data-state="ok"] {
  color: var(--ok);
  border-color: color-mix(in oklch, var(--ok) 40%, var(--border));
}

.state-badge[data-state="partial"],
.state-badge[data-state="due"] {
  color: var(--warn);
  border-color: color-mix(in oklch, var(--warn) 40%, var(--border));
}

.state-badge[data-state="not_started"] {
  color: var(--muted);
  border-color: var(--border);
}

.state-badge[data-state="missed"],
.state-badge[data-state="fail"] {
  color: var(--danger);
  border-color: color-mix(in oklch, var(--danger) 40%, var(--border));
}

.state-badge[data-gating="false"] {
  color: var(--faint);
  border-color: var(--border);
  background: var(--surface-sunken);
}

.state-badge[data-state="open"] {
  color: var(--primary);
  border-color: color-mix(in oklch, var(--primary) 40%, var(--border));
}

.state-badge[data-state="running"],
.state-badge[data-state="in_flight"] {
  color: var(--ok);
  border-color: color-mix(in oklch, var(--ok) 55%, var(--border));
  background: color-mix(in oklch, var(--ok) 12%, var(--surface));
}

.state-badge[data-state="halted"],
.state-badge[data-state="failed"] {
  color: var(--danger);
  border-color: color-mix(in oklch, var(--danger) 55%, var(--border));
  background: color-mix(in oklch, var(--danger) 12%, var(--surface));
}

.state-badge[data-state="blocked"] {
  color: var(--warn);
  border-color: color-mix(in oklch, var(--warn) 50%, var(--border));
  background: color-mix(in oklch, var(--warn) 10%, var(--surface));
}

.state-badge[data-state="idle"] {
  color: var(--faint);
  border-color: var(--border);
}

.state-badge[data-state="stale"] {
  color: var(--stale);
  border-color: color-mix(in oklch, var(--stale) 45%, var(--border));
}

.plan-doc {
  margin: 0 0 0.5rem;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--faint);
}

/* Session work — build-run progress for this session */
.work-session-head {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  margin: 0 0 var(--space-3);
  padding-bottom: var(--space-3);
  border-bottom: 1px solid var(--border);
}

.work-session-start {
  margin: 0;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  color: var(--ink);
  letter-spacing: 0.01em;
}

.work-session-definition {
  margin: 0;
  font-size: var(--text-sm);
  color: var(--muted);
  line-height: 1.45;
  max-width: 75ch;
  text-wrap: pretty;
}

.work-totals {
  margin: 0;
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
}

.work-total-chip {
  display: inline-flex;
  align-items: baseline;
  gap: 0.35rem;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  padding: 0.2rem 0.5rem;
  border: 1px solid var(--border);
  border-radius: 999px;
  background: var(--surface);
  color: var(--muted);
}

.work-total-chip .work-total-n {
  font-weight: 700;
  color: var(--ink);
  font-size: var(--text-sm);
}

.work-total-chip .work-total-label {
  font-weight: 500;
  text-transform: lowercase;
}

.work-total-chip[data-mood="in_flight"] {
  border-color: color-mix(in oklch, var(--ok) 45%, var(--border));
  background: color-mix(in oklch, var(--ok) 10%, var(--surface));
}

.work-total-chip[data-mood="in_flight"] .work-total-n {
  color: var(--ok);
}

.work-total-chip[data-mood="blocked"] {
  border-color: color-mix(in oklch, var(--warn) 40%, var(--border));
}

.work-total-chip[data-mood="blocked"] .work-total-n {
  color: var(--warn);
}

.work-total-chip[data-mood="failed"] {
  border-color: color-mix(in oklch, var(--danger) 40%, var(--border));
}

.work-total-chip[data-mood="failed"] .work-total-n {
  color: var(--danger);
}

.work-goals-touched {
  margin: 0;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--faint);
}

.work-section {
  margin: 0 0 var(--space-3);
  min-width: 0;
}

.work-section:last-of-type {
  margin-bottom: var(--space-2);
}

.work-section-title {
  margin: 0 0 var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--muted);
}

.work-section[data-section="in_flight"] .work-section-title {
  color: var(--ok);
}

.work-section[data-section="blocked"] .work-section-title {
  color: var(--warn);
}

.work-section[data-section="failed"] .work-section-title {
  color: var(--danger);
}

.work-list {
  gap: var(--space-2);
}

.work-list-inflight {
  gap: var(--space-3);
}

.work-list-done {
  gap: var(--space-1);
}

.work-row {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--space-1) var(--space-2);
  padding: var(--space-2);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  background: var(--surface);
  min-width: 0;
}

.work-row[data-work-state="in_flight"] {
  padding: var(--space-3) var(--space-2);
  border-color: color-mix(in oklch, var(--ok) 50%, var(--border));
  background: color-mix(in oklch, var(--ok) 8%, var(--surface));
  box-shadow: 0 0 0 1px color-mix(in oklch, var(--ok) 18%, transparent);
}

.work-row[data-work-state="in_flight"] .work-state-badge {
  animation: work-inflight-pulse 2s var(--ease) infinite;
}

.work-row[data-work-state="blocked"] {
  border-color: color-mix(in oklch, var(--warn) 40%, var(--border));
  background: color-mix(in oklch, var(--warn) 6%, var(--surface));
}

.work-row[data-work-state="failed"] {
  border-color: color-mix(in oklch, var(--danger) 40%, var(--border));
  background: color-mix(in oklch, var(--danger) 6%, var(--surface));
}

.work-row[data-work-state="done"] {
  padding: 0.35rem var(--space-2);
  background: transparent;
  border-color: color-mix(in oklch, var(--border) 80%, transparent);
}

.work-row-main {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--space-1) var(--space-2);
  flex: 1 1 12rem;
  min-width: 0;
}

.work-row-title {
  font-size: var(--text-sm);
  font-weight: 550;
  color: var(--ink);
  line-height: 1.35;
  overflow-wrap: anywhere;
}

.work-row[data-work-state="in_flight"] .work-row-title {
  font-weight: 650;
  font-size: var(--text-base);
}

.work-row[data-work-state="done"] .work-row-title {
  font-weight: 500;
  font-size: var(--text-xs);
}

.work-goal-tag {
  display: inline-block;
  font-family: var(--font-mono);
  font-size: 0.6875rem;
  font-weight: 500;
  letter-spacing: 0.01em;
  padding: 0.05rem 0.35rem;
  border-radius: 999px;
  border: 1px solid var(--border);
  color: var(--muted);
  background: var(--surface-sunken);
  white-space: nowrap;
}

.work-goal-tag[data-attributed="true"] {
  color: var(--primary);
  border-color: color-mix(in oklch, var(--primary) 40%, var(--border));
}

.work-goal-tag[data-attributed="false"] {
  color: var(--faint);
  font-style: italic;
}

.work-receipt {
  display: block;
  flex: 1 1 100%;
  margin: 0;
  padding: 0;
  font-family: var(--font-mono);
  font-size: 0.6875rem;
  line-height: 1.4;
  color: var(--faint);
  overflow-wrap: anywhere;
  word-break: break-all;
}

.work-row[data-work-state="in_flight"] .work-receipt {
  color: var(--muted);
  font-size: var(--text-xs);
}

.work-row-detail {
  flex: 1 1 100%;
  margin: 0;
  font-size: var(--text-xs);
  color: var(--muted);
  line-height: 1.4;
  overflow-wrap: anywhere;
}

.work-cumulative {
  margin: 0;
  padding-top: var(--space-2);
  border-top: 1px dashed var(--border);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
  line-height: 1.4;
}

.work-receipt-full,
.work-row-detail-full {
  flex: 1 1 100%;
  margin: 0.15rem 0 0;
}

.work-receipt-full summary,
.work-row-detail-full summary {
  cursor: pointer;
  font-size: 0.6875rem;
  color: var(--faint);
  list-style: revert;
  padding: 0.15rem 0;
  -webkit-tap-highlight-color: transparent;
}

.work-receipt-full summary:hover,
.work-row-detail-full summary:hover,
.work-receipt-full summary:focus-visible,
.work-row-detail-full summary:focus-visible {
  color: var(--ink);
}

.work-receipt-raw,
.work-row-detail-raw {
  display: block;
  margin-top: 0.2rem;
  padding: var(--space-1) var(--space-2);
  font-family: var(--font-mono);
  font-size: 0.6875rem;
  line-height: 1.4;
  color: var(--muted);
  background: var(--surface-sunken);
  border-radius: var(--radius-sm);
  overflow-wrap: anywhere;
  word-break: break-all;
}

.work-row[data-work-state="done"] .work-row-detail {
  display: none;
}

.work-row-meta {
  flex: 1 1 100%;
}

.work-state-badge {
  min-width: 4.75rem;
  text-align: center;
}

@keyframes work-inflight-pulse {
  0%,
  100% {
    filter: brightness(1);
  }
  50% {
    filter: brightness(1.15);
  }
}

@media (prefers-reduced-motion: reduce) {
  .work-row[data-work-state="in_flight"] .work-state-badge {
    animation: none;
  }
}

/* Infrastructure liveness (demoted) */
.infra-description {
  margin: 0 0 var(--space-2);
  font-size: var(--text-xs);
  color: var(--faint);
  line-height: 1.4;
  max-width: 70ch;
}

.loop-summary,
.infra-summary {
  margin: 0 0 var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--muted);
}

.loop-summary[data-loop-mood="running"],
.infra-summary[data-loop-mood="running"] {
  color: var(--ok);
}

.loop-summary[data-loop-mood="halted"],
.infra-summary[data-loop-mood="halted"] {
  color: var(--danger);
}

.loop-list {
  gap: var(--space-3);
}

.job-row {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--space-1) var(--space-2);
  padding: var(--space-2);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  background: var(--surface);
}

.job-row[data-job-state="running"] {
  border-color: color-mix(in oklch, var(--ok) 45%, var(--border));
  background: color-mix(in oklch, var(--ok) 6%, var(--surface));
}

.job-row[data-job-state="halted"] {
  border-color: color-mix(in oklch, var(--danger) 45%, var(--border));
  background: color-mix(in oklch, var(--danger) 6%, var(--surface));
}

.job-row[data-job-state="idle"] {
  opacity: 0.92;
}

.job-row[data-job-state="fail"] {
  border-color: color-mix(in oklch, var(--danger) 35%, var(--border));
}

.job-state-badge {
  min-width: 4.5rem;
  text-align: center;
}

.job-progress {
  flex: 1 1 100%;
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  margin-block: var(--space-1);
}

.job-progress-label {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--ink);
  font-weight: 600;
}

.job-progress-meter {
  height: 0.4rem;
  background: var(--surface-sunken);
  border: 1px solid var(--border);
  border-radius: 999px;
  overflow: hidden;
}

.job-progress-fill {
  height: 100%;
  background: var(--ok);
  border-radius: inherit;
  max-width: 100%;
  transition: width var(--dur) var(--ease);
}

.job-row[data-job-state="running"] .job-progress-fill {
  box-shadow: 0 0 0 0 color-mix(in oklch, var(--ok) 40%, transparent);
  animation: job-pulse 1.8s var(--ease) infinite;
}

.job-progress.is-ticked .job-progress-label {
  color: var(--ok);
}

@keyframes job-pulse {
  0%,
  100% {
    filter: brightness(1);
  }
  50% {
    filter: brightness(1.18);
  }
}

.pool-summary {
  margin: 0 0 var(--space-2);
  font-size: var(--text-sm);
  color: var(--ink);
}

.spend-row-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.spend-row {
  display: grid;
  grid-template-columns: 4.5rem 7rem minmax(4rem, 1fr) auto;
  gap: var(--space-2);
  align-items: center;
  font-size: var(--text-sm);
}

.spend-row-name {
  font-weight: 600;
}

.spend-row-pct[data-null="true"] {
  color: var(--faint);
}

.spend-bar-fill[data-heat="ok"] {
  background: var(--ink);
  opacity: 0.35;
}

.spend-bar-fill[data-heat="warn"] {
  background: var(--warn);
}

.spend-bar-fill[data-heat="danger"] {
  background: var(--danger);
}

.goal-essay {
  margin: var(--space-1) 0 0;
  font-size: var(--text-xs);
}

.goal-essay summary {
  cursor: pointer;
  color: var(--muted);
  min-height: 24px;
}

.goal-essay-body {
  margin: var(--space-1) 0 0;
  color: var(--muted);
  font-weight: 400;
  max-width: 65ch;
}

/* Token spend — providers list; Claude quotas primary, others quieter */
.spend-provider-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

.spend-provider {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  padding: var(--space-2);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  background: var(--surface);
  min-width: 0;
}

.spend-provider--instrumented {
  background: var(--surface-raised);
  border-color: var(--border-strong);
  gap: var(--space-2);
  padding: var(--space-3) var(--space-2);
}

.spend-provider--unmeasured {
  background: var(--surface-sunken);
  border-style: dashed;
  opacity: 0.96;
}

.spend-provider-head {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
  margin: 0;
}

.spend-provider-name {
  margin: 0;
  font-family: var(--font-ui);
  font-size: var(--text-sm);
  font-weight: 600;
  line-height: 1.25;
  color: var(--ink);
  letter-spacing: 0;
  text-transform: none;
}

.spend-provider--instrumented .spend-provider-name {
  font-size: var(--text-base);
  font-weight: 700;
}

.spend-provider--unmeasured .spend-provider-name {
  font-weight: 600;
  color: var(--muted);
}

.spend-provider[data-stale="true"] .spend-provider-name {
  color: var(--stale);
}

.spend-windows {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

.spend-window {
  min-width: 0;
}

.spend-window[data-stale="true"] .spend-meta,
.spend-window[data-stale="true"] .spend-quota,
.spend-window[data-stale="true"] .spend-bar-fill {
  opacity: 0.55;
}

.spend-window[data-stale="true"] .spend-bar-fill.is-stale,
.spend-bar-fill.is-stale {
  background: var(--stale);
}

.spend-quota {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  font-weight: 600;
  color: var(--ink);
  margin: 0;
  line-height: 1.35;
}

.spend-provider--instrumented .spend-quota {
  font-size: var(--text-md);
  font-weight: 700;
  letter-spacing: -0.01em;
}

.spend-meta-stale {
  color: var(--stale);
}

.spend-bar {
  height: 0.4rem;
  background: var(--surface-sunken);
  border: 1px solid var(--border);
  border-radius: 999px;
  overflow: hidden;
  margin-block: var(--space-1) var(--space-2);
}

.spend-provider--instrumented .spend-bar {
  height: 0.45rem;
}

.spend-bar-fill {
  height: 100%;
  background: var(--primary);
  border-radius: inherit;
  max-width: 100%;
  transition: width var(--dur) var(--ease);
}

.spend-meta,
.spend-metric {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
  margin: 0;
  line-height: 1.4;
  word-break: break-word;
}

.spend-metric {
  color: var(--ink);
  font-weight: 500;
}

.spend-provider--unmeasured .spend-metric {
  color: var(--muted);
  font-weight: 400;
}

.spend-metric-cost {
  color: var(--muted);
}

.spend-unmeasured-label {
  margin: 0;
  font-family: var(--font-ui);
  font-size: var(--text-xs);
  font-weight: 600;
  color: var(--warn);
  line-height: 1.35;
}

.spend-note,
.spend-note-unmeasured {
  margin: 0;
  font-family: var(--font-ui);
  font-size: var(--text-xs);
  color: var(--muted);
  line-height: 1.4;
  word-break: break-word;
}

.spend-note-unmeasured {
  color: var(--faint);
}

/* Missions */
.mission-form {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  margin-top: var(--space-1);
}

.mission-form textarea {
  width: 100%;
  min-height: 3.25rem;
  resize: vertical;
  padding: var(--space-2) var(--space-3);
  font-family: inherit;
  font-size: var(--text-sm);
  line-height: 1.4;
  color: var(--ink);
  background: var(--surface-sunken);
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm);
}

.mission-form textarea::placeholder {
  color: var(--faint);
  opacity: 1;
}

.mission-form textarea:focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: 1px;
}

.mission-item {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: var(--space-2);
  padding-block: var(--space-1);
  border-bottom: 1px solid var(--border);
}

.mission-item:last-child {
  border-bottom: none;
}

.mission-item[data-status="done"] .mission-text {
  color: var(--faint);
  text-decoration: line-through;
}

.mission-text {
  flex: 1 1 10rem;
  min-width: 0;
  font-size: var(--text-sm);
  line-height: 1.4;
  white-space: pre-wrap;
  word-break: break-word;
}

.form-status {
  margin: var(--space-1) 0 0;
  font-size: var(--text-xs);
  font-family: var(--font-mono);
  color: var(--muted);
}

.form-status[data-state="error"] {
  color: var(--danger);
}

.form-status[data-state="ok"] {
  color: var(--ok);
}

/* Stage nav */
.stage-nav {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  border-bottom: 1px solid var(--border);
  padding-bottom: var(--space-2);
}

.stage-nav-link {
  display: inline-flex;
  align-items: center;
  min-height: 2.25rem;
  padding: 0.35rem 0.85rem;
  font-size: var(--text-sm);
  font-weight: 500;
  color: var(--muted);
  text-decoration: none;
  border: 1px solid transparent;
  border-radius: var(--radius-sm);
}

.stage-nav-link:hover {
  color: var(--ink);
  background: var(--surface);
}

.stage-nav-link[aria-current="page"] {
  color: var(--ink);
  background: var(--surface);
  border-color: var(--border-strong);
}

/* Stages */
.stage-header {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
  margin-bottom: var(--space-4);
}

@media (min-width: 900px) {
  .stage-header {
    flex-direction: row;
    align-items: flex-end;
    justify-content: space-between;
  }
}

.stage-title {
  margin: 0 0 var(--space-2);
  font-size: var(--text-xl);
  font-weight: 600;
  letter-spacing: -0.02em;
  line-height: 1.25;
  text-wrap: balance;
}

.stage-lede {
  margin: 0;
  color: var(--muted);
  max-width: 65ch;
  font-size: var(--text-sm);
}

/* Coverage banner — signature instrument reading */
.coverage-banner {
  flex: 0 1 22rem;
  min-width: min(100%, 16rem);
  padding: var(--space-3);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
}

.coverage-banner-label {
  margin: 0 0 var(--space-1);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
  letter-spacing: 0.03em;
  text-transform: uppercase;
}

.coverage-banner-nums {
  margin: 0 0 var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--text-md);
  font-weight: 600;
  color: var(--ink);
  letter-spacing: -0.02em;
  transition: color var(--dur) var(--ease);
}

.coverage-banner-nums .sep {
  color: var(--faint);
  font-weight: 400;
}

.coverage-meter {
  height: 0.4rem;
  background: var(--surface-sunken);
  border: 1px solid var(--border);
  border-radius: 999px;
  overflow: hidden;
  margin-bottom: var(--space-2);
}

.coverage-meter-fill {
  height: 100%;
  background: var(--primary);
  border-radius: inherit;
  max-width: 100%;
  transition: width var(--dur) var(--ease);
}

.coverage-banner-note {
  margin: 0;
  font-size: var(--text-xs);
  color: var(--muted);
  line-height: 1.4;
}

/* Table toolbar */
.table-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-3);
  margin-bottom: var(--space-3);
}

.filter-field {
  flex: 1 1 12rem;
  min-width: 0;
}

.filter-field input,
.sort-field select {
  width: 100%;
  min-height: 2.5rem;
  padding: 0.4rem 0.7rem;
  font-family: inherit;
  font-size: var(--text-sm);
  color: var(--ink);
  background: var(--surface);
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm);
}

.filter-field input::placeholder {
  color: var(--faint);
  opacity: 1;
}

.sort-field {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  flex: 0 1 auto;
}

.sort-label {
  font-size: var(--text-xs);
  font-family: var(--font-mono);
  color: var(--muted);
  white-space: nowrap;
}

.sort-field select {
  min-width: 11rem;
}

.table-meta {
  margin: 0;
  margin-inline-start: auto;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--faint);
}

/* Dossier table */
.today-mount[data-state="loading"],
.today-mount[data-state="empty"],
.today-mount[data-state="error"],
.dossiers-mount[data-state="loading"],
.dossiers-mount[data-state="empty"],
.dossiers-mount[data-state="error"],
.dossier-mount[data-state="loading"],
.dossier-mount[data-state="empty"],
.dossier-mount[data-state="error"],
.books-mount[data-state="loading"],
.books-mount[data-state="empty"],
.books-mount[data-state="error"] {
  padding: var(--space-5);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  background: var(--surface);
  color: var(--muted);
  font-size: var(--text-sm);
}

.today-mount[data-state="error"],
.dossiers-mount[data-state="error"],
.dossier-mount[data-state="error"],
.books-mount[data-state="error"] {
  color: var(--danger);
}

/* Today — dated dispatch strip (signature) + stored message */
.today-mount {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}

.today-dispatch-strip {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3) var(--space-5);
  padding: var(--space-3) var(--space-4);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
}

.today-dispatch-strip[data-stale="true"] {
  border-color: var(--stale);
}

.today-meta-cell {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
  min-width: 6.5rem;
  flex: 1 1 auto;
}

.today-meta-label {
  color: var(--faint);
  text-transform: uppercase;
  letter-spacing: 0.03em;
  font-weight: 600;
}

.today-meta-value {
  color: var(--ink);
  font-size: var(--text-sm);
  font-weight: 500;
  line-height: 1.35;
  word-break: break-word;
}

.today-meta-value[data-empty="true"] {
  color: var(--faint);
  font-weight: 400;
}

.today-meta-value[data-warn="true"] {
  color: var(--warn);
}

.today-meta-value[data-ok="true"] {
  color: var(--ok);
}

.today-meta-raw {
  display: block;
  margin-top: 0.1rem;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 400;
  color: var(--faint);
  letter-spacing: 0.01em;
  word-break: break-all;
}

.today-meta-asof .as-of {
  font-family: inherit;
  font-size: inherit;
  color: inherit;
}

.today-correction {
  margin: 0;
  padding: var(--space-3) var(--space-4);
  border: 1px solid var(--stale);
  border-radius: var(--radius);
  background: var(--surface-sunken);
  color: var(--warn);
  font-size: var(--text-sm);
  line-height: 1.45;
  width: 100%;
  max-width: min(75ch, 50rem);
}

.today-dispatch {
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  min-width: 0;
  width: 100%;
  max-width: min(75ch, 50rem); /* ~800px readable column on desktop */
}

.today-message-label {
  margin: 0;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--muted);
}

.today-message {
  margin: 0;
  width: 100%;
  max-width: min(75ch, 50rem); /* 70–75ch / ~700–800px desktop target */
  box-sizing: border-box;
  padding: var(--space-4);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  font-family: var(--font-mono);
  font-size: var(--text-base);
  line-height: 1.55;
  white-space: pre-wrap;
  word-break: break-word;
  color: var(--ink);
  overflow-x: auto;
}

.today-message[data-empty="true"] {
  color: var(--faint);
  font-style: normal;
}

.today-message:focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: 2px;
}

@media (min-width: 900px) {
  .today-dispatch,
  .today-message,
  .today-correction {
    max-width: min(75ch, 50rem);
  }

  .today-message {
    padding: var(--space-5);
    font-size: var(--text-base);
    line-height: 1.6;
  }
}

@media (max-width: 480px) {
  .today-dispatch-strip {
    gap: var(--space-3);
    padding: var(--space-3);
  }

  .today-meta-cell {
    min-width: calc(50% - var(--space-2));
    flex: 1 1 calc(50% - var(--space-2));
  }

  .today-dispatch,
  .today-message,
  .today-correction {
    max-width: 100%;
  }

  .today-message {
    padding: var(--space-3);
    font-size: var(--text-xs);
  }
}

.table-scroll {
  overflow-x: auto;
  border: 1px solid var(--border);
  border-radius: var(--radius);
  background: var(--surface);
  -webkit-overflow-scrolling: touch;
}

.dossier-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--text-sm);
  min-width: 36rem;
}

.dossier-table thead th {
  position: sticky;
  top: 0;
  z-index: var(--z-sticky);
  text-align: start;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--muted);
  background: var(--surface-raised);
  border-bottom: 1px solid var(--border);
  padding: var(--space-2) var(--space-3);
  white-space: nowrap;
}

.dossier-table tbody td {
  padding: 0.35rem var(--space-3);
  border-bottom: 1px solid var(--border);
  vertical-align: middle;
  height: var(--row-h);
}

.dossier-table tbody tr {
  cursor: pointer;
  transition: background-color var(--dur) var(--ease);
}

.dossier-table tbody tr:hover,
.dossier-table tbody tr:focus-within {
  background: var(--surface-raised);
}

.dossier-table tbody tr:last-child td {
  border-bottom: none;
}

.col-ticker {
  font-family: var(--font-mono);
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--ink);
  white-space: nowrap;
}

.col-name {
  color: var(--ink);
  max-width: 18rem;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.col-updated {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
  white-space: nowrap;
}

.col-complete {
  min-width: 5.5rem;
}

.complete-cell {
  display: flex;
  align-items: center;
  gap: var(--space-2);
}

.complete-bar {
  flex: 1 1 auto;
  height: 0.3rem;
  min-width: 2.5rem;
  background: var(--surface-sunken);
  border: 1px solid var(--border);
  border-radius: 999px;
  overflow: hidden;
}

.complete-bar-fill {
  height: 100%;
  background: var(--primary);
  border-radius: inherit;
  max-width: 100%;
}

.complete-pct {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
  min-width: 2.5rem;
  text-align: end;
}

.verdict-chip {
  display: inline-block;
  font-family: var(--font-mono);
  font-size: 0.6875rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  padding: 0.12rem 0.45rem;
  border-radius: 999px;
  border: 1px solid var(--border);
  white-space: nowrap;
}

.verdict-chip[data-verdict="CLEARED"] {
  color: var(--verdict-cleared);
  border-color: color-mix(in oklch, var(--verdict-cleared) 45%, var(--border));
}

.verdict-chip[data-verdict="CONDEMNED"] {
  color: var(--verdict-condemned);
  border-color: color-mix(in oklch, var(--verdict-condemned) 45%, var(--border));
}

.verdict-chip[data-verdict="WATCHING"] {
  color: var(--verdict-watching);
  border-color: color-mix(in oklch, var(--verdict-watching) 45%, var(--border));
}

.verdict-chip[data-verdict=""] {
  color: var(--verdict-null);
}

.verdict-chip[data-verdict="COMPLETE"] {
  color: var(--verdict-cleared);
  border-color: color-mix(in oklch, var(--verdict-cleared) 45%, var(--border));
}

.verdict-chip[data-verdict="NO_STOP"] {
  color: var(--verdict-watching);
  border-color: color-mix(in oklch, var(--verdict-watching) 45%, var(--border));
}

.load-more-wrap {
  display: flex;
  justify-content: center;
  padding: var(--space-3);
  border-top: 1px solid var(--border);
}

/* Dossier detail reader */
.dossier-back {
  margin-bottom: var(--space-4);
}

.dossier-hero {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  margin-bottom: var(--space-5);
  padding-bottom: var(--space-4);
  border-bottom: 1px solid var(--border);
}

.dossier-hero-top {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--space-2) var(--space-3);
}

.dossier-ticker {
  margin: 0;
  font-family: var(--font-mono);
  font-size: var(--text-xl);
  font-weight: 700;
  letter-spacing: 0.02em;
  line-height: 1.1;
}

.dossier-name {
  margin: 0;
  font-size: var(--text-md);
  font-weight: 500;
  color: var(--muted);
  max-width: 40rem;
}

.dossier-quote {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--space-3);
  margin-top: var(--space-2);
}

.dossier-last {
  font-family: var(--font-mono);
  font-size: var(--text-xl);
  font-weight: 700;
  letter-spacing: -0.02em;
  line-height: 1;
}

.dossier-change {
  font-family: var(--font-mono);
  font-size: var(--text-md);
  font-weight: 600;
}

.dossier-change[data-dir="up"] {
  color: var(--ok);
}

.dossier-change[data-dir="down"] {
  color: var(--danger);
}

.dossier-quote-asof {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
}

.quote-kpis {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-4);
  margin: var(--space-3) 0 0;
}

.quote-kpi {
  display: flex;
  flex-direction: column;
  gap: 0.1rem;
  min-width: 5.5rem;
}

.quote-kpi dt {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
  letter-spacing: 0.03em;
  text-transform: uppercase;
}

.quote-kpi dd {
  margin: 0;
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--ink);
}

.dossier-sticky {
  position: sticky;
  top: var(--header-h);
  z-index: 1;
  display: none;
  align-items: baseline;
  gap: var(--space-3);
  padding: var(--space-2) 0;
  margin: 0 0 var(--space-2);
  background: var(--bg);
  border-bottom: 1px solid var(--border);
}

.dossier-sticky.is-on {
  display: flex;
}

.dossier-sticky-ticker {
  font-family: var(--font-mono);
  font-weight: 700;
  letter-spacing: 0.02em;
}

.dossier-sticky-last {
  font-family: var(--font-mono);
  font-weight: 700;
}

.program-lede {
  margin: 0 0 var(--space-3);
  font-size: var(--text-md);
  font-weight: 600;
  text-wrap: pretty;
}

.swim-lanes {
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  gap: var(--space-3);
  align-items: start;
}

.swim-col-title {
  margin: 0 0 var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--muted);
}

.swim-col-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.swim-card {
  padding: var(--space-2);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  background: var(--surface);
  transition: background-color var(--dur) var(--ease);
}

.swim-card:hover {
  background: var(--surface-raised);
}

.swim-card-name {
  margin: 0;
  font-size: var(--text-sm);
  font-weight: 600;
  overflow-wrap: anywhere;
}

.swim-empty {
  color: var(--faint);
  font-size: var(--text-sm);
  list-style: none;
}

@media (max-width: 720px) {
  .swim-lanes {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

.swim-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--text-sm);
}

.swim-table caption {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
}

.swim-table th,
.swim-table td {
  padding: 0.45rem 0.4rem;
  border-bottom: 1px solid var(--border);
  vertical-align: middle;
}

.swim-table thead th {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--muted);
  text-align: center;
}

.swim-table thead th:first-child {
  text-align: left;
}

.swim-name {
  text-align: left;
  font-weight: 600;
  color: var(--ink);
  max-width: 22rem;
}

.swim-cites,
.swim-cite-one {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
  margin-top: 0.15rem;
  font-weight: 400;
  font-size: var(--text-xs);
}

.swim-cell {
  text-align: center;
  color: var(--faint);
  font-size: var(--text-xs);
}

.swim-cell.is-on {
  color: var(--primary);
}

.swim-pip {
  display: inline-block;
  font-size: 0.85rem;
  line-height: 1;
  transform: scale(0.85);
}

.swim-table tbody tr {
  transition: background-color var(--dur) var(--ease);
}

.swim-table tbody tr:hover {
  background: var(--surface);
}

.cal-group-title {
  margin: var(--space-3) 0 var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--muted);
}

.cal-when {
  display: flex;
  flex-direction: column;
  gap: 0.1rem;
}

.cal-rel {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
}

.cal-kind[data-kind] {
  display: inline-block;
  padding: 0.1rem 0.4rem;
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm);
  font-size: var(--text-xs);
}

.cal-past {
  margin-top: var(--space-4);
}

.tape-section {
  position: relative;
  z-index: calc(var(--z-header) + 1);
  background: var(--bg);
  isolation: isolate;
  scroll-margin-top: calc(var(--header-h) + 3rem);
}

.tape-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-4);
}

.tape-block-title {
  margin: 0 0 var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--muted);
}

.tape-dl {
  margin: 0;
}

.tape-dl-row {
  display: grid;
  grid-template-columns: 7.5rem minmax(0, 1fr);
  gap: var(--space-2);
  padding: 0.2rem 0;
  font-size: var(--text-sm);
}

.tape-dl-row dt {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
}

.tape-dl-row dd {
  margin: 0;
  font-family: var(--font-mono);
}

.tape-line,
.tape-note {
  margin: 0 0 var(--space-1);
  font-size: var(--text-sm);
}

.tape-note {
  color: var(--muted);
}

.tape-line .source-link,
.tape-note .source-link {
  color: inherit;
}

@media (max-width: 720px) {
  .tape-grid {
    grid-template-columns: 1fr;
  }
}

.cal-past summary {
  cursor: pointer;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--muted);
  min-height: 24px;
}

.quote-range {
  transition:
    color var(--dur) var(--ease),
    border-color var(--dur) var(--ease),
    background-color var(--dur) var(--ease);
}

.quote-vol {
  transform-box: fill-box;
  transform-origin: bottom;
  animation: quote-vol-in var(--dur) var(--ease) both;
}

@keyframes quote-vol-in {
  from {
    transform: scaleY(0.2);
    opacity: 0.4;
  }
  to {
    transform: scaleY(1);
    opacity: 1;
  }
}

.dossier-fold {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
  margin-top: var(--space-3);
}

.dossier-fold .calendar-section.is-fold {
  order: -1;
  margin: 0;
  padding: var(--space-3);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  min-width: 0;
}

.dossier-fold .cal-item {
  grid-template-columns: 1fr;
  gap: 0.15rem;
  padding: 0.35rem 0;
}

.dossier-fold .cal-when {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--space-2);
}

.dossier-fold .cal-title {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.dossier-fold .calendar-section.is-fold .cal-past {
  display: none;
}

@media (min-width: 960px) {
  .dossier-fold {
    grid-template-columns: minmax(0, 1.35fr) minmax(16rem, 22rem);
    align-items: start;
  }
  .dossier-fold .calendar-section.is-fold {
    order: 0;
  }
}

.dossier-pt,
.dossier-rating {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  font-weight: 600;
  color: var(--ink);
}

.dossier-rating {
  padding: 0.12rem 0.45rem;
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm);
}

.quote-more {
  margin-top: var(--space-2);
}

.quote-more summary {
  cursor: pointer;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--muted);
  min-height: 24px;
}

.research-hero .quote-section {
  margin: 0;
  padding: 0;
  border: 0;
}

.research-hero .quote-section .portal-section-title {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
}

.quote-ranges {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-1);
  margin: 0 0 var(--space-2);
}

.quote-range {
  min-height: 24px;
  min-width: 24px;
  padding: 0.2rem 0.55rem;
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm);
  background: transparent;
  color: var(--muted);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.02em;
  cursor: pointer;
}

.quote-range:hover,
.quote-range:focus-visible {
  color: var(--ink);
  border-color: var(--primary);
  outline: 2px solid var(--focus-ring);
  outline-offset: 2px;
}

.quote-range.is-active,
.quote-range[aria-pressed="true"] {
  color: var(--ink);
  border-color: var(--primary);
  background: var(--surface-raised);
}

.quote-readout {
  margin: 0 0 var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
  min-height: 1.2em;
}

.quote-plot {
  width: 100%;
  min-height: 200px;
}

.quote-plot svg {
  display: block;
  width: 100%;
  height: auto;
}

.quote-area {
  fill: var(--primary);
  fill-opacity: 0.16;
}

.quote-line {
  stroke: var(--primary);
  stroke-width: 1.75;
  stroke-linejoin: round;
  stroke-linecap: round;
}

.quote-vol {
  fill: var(--faint);
  fill-opacity: 0.7;
}

.quote-grid {
  stroke: var(--border);
  stroke-width: 1;
}

.quote-axis {
  fill: var(--muted);
  font-family: var(--font-mono);
  font-size: 10px;
}

.quote-last-pill {
  fill: var(--surface-raised);
  stroke: var(--primary);
  stroke-width: 1;
}

.quote-last-pill-text {
  fill: var(--ink);
  font-family: var(--font-mono);
  font-size: 11px;
  font-weight: 700;
}

.quote-cross {
  stroke: var(--faint);
  stroke-width: 1;
}

.quote-dot {
  fill: var(--ink);
}

@media (max-width: 720px) {
  .research-now-copy {
    display: none;
  }
  .quote-plot {
    min-height: 168px;
  }
  .verdict-vocab,
  .quote-more {
    display: none;
  }
  .quote-kpi.is-secondary {
    display: none;
  }
  .dossier-hero {
    gap: var(--space-2);
    margin-bottom: var(--space-3);
  }
  .dossier-fold .calendar-section.is-fold {
    padding: var(--space-2);
  }
  .dossier-fold .portal-section-title {
    margin: 0 0 var(--space-1);
    font-size: var(--text-sm);
  }
  .dossier-fold .cal-item {
    padding: 0.2rem 0;
  }
}

.program-board {
  display: flex;
  flex-direction: column;
  gap: var(--space-5);
}

.program-bucket-title {
  margin: 0 0 var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--muted);
}

.program-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--text-sm);
}

.program-table caption {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
}

.program-table th,
.program-table td {
  text-align: left;
  padding: 0.4rem 0.6rem 0.4rem 0;
  border-bottom: 1px solid var(--border);
  vertical-align: top;
}

.program-table tbody th {
  font-weight: 600;
  color: var(--ink);
  max-width: 28rem;
}

.program-table .mono {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
  white-space: nowrap;
}

.cal-spine {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
}

.cal-item {
  display: grid;
  grid-template-columns: 7.5rem 11rem minmax(0, 1fr);
  gap: var(--space-3);
  align-items: baseline;
  padding: 0.45rem 0;
  border-bottom: 1px solid var(--border);
}

.cal-date {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--ink);
}

.cal-kind {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
}

.cal-title {
  font-size: var(--text-sm);
  color: var(--ink);
  overflow-wrap: anywhere;
}

@media (max-width: 720px) {
  .cal-item {
    grid-template-columns: 1fr;
    gap: var(--space-1);
  }
}

@media (prefers-reduced-motion: reduce) {
  .quote-range,
  .quote-plot,
  .swim-table tbody tr,
  .quote-vol {
    transition: none;
    animation: none;
  }
}

.dossier-meta-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-3) var(--space-4);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
}

.dossier-complete-inline {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  min-width: 8rem;
}

.dossier-layout {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
}

@media (min-width: 960px) {
  .dossier-layout {
    grid-template-columns: minmax(0, 1fr) minmax(14rem, 18rem);
    align-items: start;
  }

  .dossier-toc {
    order: 2;
    position: sticky;
    top: calc(var(--header-h) + var(--space-4));
  }

  .dossier-sections {
    order: 1;
  }
}

.dossier-toc {
  padding: var(--space-3);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
}

.dossier-toc-title {
  margin: 0 0 var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--muted);
}

.dossier-toc-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

.dossier-toc-list a {
  display: block;
  padding: 0.25rem 0;
  font-size: var(--text-sm);
  color: var(--muted);
  text-decoration: none;
}

.dossier-toc-list a:hover {
  color: var(--primary);
}

.dossier-section {
  margin-bottom: var(--space-6);
  scroll-margin-top: calc(var(--header-h) + var(--space-4));
}

.dossier-section-title {
  margin: 0 0 var(--space-3);
  font-size: var(--text-lg);
  font-weight: 600;
  letter-spacing: -0.015em;
  line-height: 1.25;
  text-wrap: balance;
  padding-bottom: var(--space-2);
  border-bottom: 1px solid var(--border);
}

.dossier-section-content {
  margin: 0 0 var(--space-4);
  max-width: 72ch;
  font-size: var(--text-base);
  line-height: 1.55;
  white-space: pre-wrap;
  word-break: break-word;
  color: var(--ink);
}

/* Sources — first-class, not footnotes */
.sources-block {
  padding: var(--space-3);
  background: var(--surface-sunken);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
}

.sources-heading {
  margin: 0 0 var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--muted);
}

.sources-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.source-item {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0.15rem;
  font-size: var(--text-sm);
  padding-block: var(--space-1);
  border-bottom: 1px solid var(--border);
}

.source-item:last-child {
  border-bottom: none;
  padding-bottom: 0;
}

.source-label {
  color: var(--ink);
  font-weight: 500;
}

.source-meta {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--faint);
}

.source-link {
  font-size: var(--text-sm);
  word-break: break-all;
}

.sources-empty {
  margin: 0;
  font-size: var(--text-sm);
  color: var(--faint);
}

/* Books */
.books-gap {
  margin-bottom: var(--space-5);
  padding: var(--space-4);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
}

.books-gap-label {
  margin: 0 0 var(--space-1);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--muted);
}

.books-gap-value {
  margin: 0 0 var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--text-xl);
  font-weight: 600;
  letter-spacing: -0.02em;
  color: var(--ink);
}

.books-gap-value[data-empty="true"] {
  font-size: var(--text-md);
  font-weight: 500;
  color: var(--muted);
}

.books-gap-explain {
  margin: 0;
  max-width: 70ch;
  font-size: var(--text-sm);
  color: var(--muted);
  line-height: 1.45;
}

.books-status-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2) var(--space-3);
  margin-top: var(--space-3);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--faint);
}

.books-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
}

@media (min-width: 800px) {
  .books-grid {
    grid-template-columns: 1fr 1fr;
  }
}

.book-panel {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  padding: var(--space-4);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  min-height: 12rem;
}

.book-panel-title {
  margin: 0;
  font-size: var(--text-md);
  font-weight: 600;
  letter-spacing: -0.01em;
}

.book-panel-sub {
  margin: -0.5rem 0 0;
  font-size: var(--text-xs);
  font-family: var(--font-mono);
  color: var(--muted);
}

.book-metrics {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-4);
}

.book-metric {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
}

.book-metric-label {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--faint);
  text-transform: uppercase;
  letter-spacing: 0.03em;
}

.book-metric-value {
  font-family: var(--font-mono);
  font-size: var(--text-md);
  font-weight: 600;
  color: var(--ink);
}

.book-metric-value[data-null="true"] {
  color: var(--faint);
  font-weight: 500;
  font-size: var(--text-sm);
}

.book-empty {
  margin: 0;
  flex: 1;
  font-size: var(--text-sm);
  color: var(--muted);
  line-height: 1.45;
  max-width: 42ch;
}

.book-note {
  margin: var(--space-4) 0 0;
  padding: var(--space-3);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  line-height: 1.45;
  color: var(--faint);
  background: var(--surface-sunken);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  white-space: pre-wrap;
  word-break: break-word;
}

.positions-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--text-sm);
}

.positions-table th,
.positions-table td {
  text-align: start;
  padding: var(--space-2);
  border-bottom: 1px solid var(--border);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
}

.positions-table th {
  color: var(--muted);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.03em;
}

.positions-table td[data-null="true"] {
  color: var(--faint);
  font-weight: 400;
}

/* Empty / error helpers */
.state-block {
  margin: 0;
  max-width: 55ch;
  line-height: 1.45;
}

.state-block + .btn {
  margin-top: var(--space-3);
}

/* Footer */
.site-footer {
  border-top: 1px solid var(--border);
  padding-block: var(--space-4);
}

.site-footer p {
  margin: 0;
  font-size: var(--text-xs);
  color: var(--faint);
}

/* ---------------------------------------------------------------------------
   Reduced motion
   --------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }

  .site-header {
    backdrop-filter: none;
    background: var(--bg);
  }

  .coverage-chip.is-ticked,
  .coverage-banner-nums.is-ticked .coverage-count {
    /* Still update color instantly; no animated transition */
    transition: none !important;
  }

  .coverage-meter-fill,
  .spend-bar-fill,
  .job-progress-fill,
  .passbar-fill {
    transition: none !important;
  }

  .job-row[data-job-state="running"] .job-progress-fill {
    animation: none !important;
  }
}

/* ---------------------------------------------------------------------------
   Narrow mobile refinements (375)
   --------------------------------------------------------------------------- */
@media (max-width: 374px) {
  #version-stamp {
    white-space: normal;
  }

  #user-email {
    max-width: 10rem;
  }

  .dossier-table {
    min-width: 32rem;
  }
}

@media (max-width: 719px) {
  .header-row {
    align-items: flex-start;
  }

  .header-instruments {
    order: 3;
    flex: 1 1 100%;
  }

  .coverage-chip {
    white-space: normal;
  }

  .table-meta {
    margin-inline-start: 0;
    width: 100%;
  }
}

/* ---------------------------------------------------------------------------
   Plan page — edge-test live state (operator, doc 92 2026-08-20 slice)
   Additive only; reuses existing tokens/components (.control-panel, .panel-body,
   .control-list, .state-badge, .verdict-chip, .as-of, .table-scroll, .spend-bar).
   --------------------------------------------------------------------------- */
.plan-root {
  display: flex;
  flex-direction: column;
  gap: var(--space-5);
  padding-block: var(--space-4) var(--space-7);
}

.venture-strip {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  padding: var(--space-4);
  background: var(--surface-raised);
  border: 1px solid var(--border-strong);
  border-radius: var(--radius);
}

.venture-strip-top {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--space-3);
}

.venture-question {
  margin: 0;
  font-size: var(--text-lg);
  font-weight: 600;
  line-height: 1.35;
  max-width: 60ch;
}

.venture-badges {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
}

.venture-strip-bottom {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  padding-top: var(--space-2);
  border-top: 1px solid var(--border);
}

.gate-countdown {
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  gap: var(--space-2);
  font-family: var(--font-mono);
}

.gate-days {
  font-size: var(--text-lg);
  font-weight: 700;
  color: var(--ink);
}

.gate-countdown[data-urgent="true"] .gate-days {
  color: var(--danger);
}

.gate-countdown[data-urgent="true"] {
  padding: var(--space-1) var(--space-2);
  background: color-mix(in oklch, var(--danger) 14%, var(--surface));
  border: 1px solid color-mix(in oklch, var(--danger) 45%, var(--border));
  border-radius: var(--radius-sm);
}

.gate-date {
  font-size: var(--text-sm);
  color: var(--muted);
}

.venture-meta {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  flex-wrap: wrap;
}

.deployed-sha {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--faint);
}

.capital-line {
  margin: 0;
  font-size: var(--text-sm);
  color: var(--muted);
}

.page-error {
  margin: 0;
  padding: var(--space-3);
  border: 1px solid color-mix(in oklch, var(--danger) 50%, var(--border));
  border-radius: var(--radius-sm);
  background: color-mix(in oklch, var(--danger) 12%, var(--surface));
  color: var(--danger);
  font-size: var(--text-sm);
}

/* Null-law: an explicit "we don't know" state, visually distinct from a real value —
   never a bare dash, never styled to look like a normal measured figure. */
.null-state {
  font-style: italic;
  color: var(--faint);
}

.null-state::before {
  content: "— ";
  font-style: normal;
}

.next-action-text {
  margin: 0 0 var(--space-1);
  font-size: var(--text-md);
  font-weight: 600;
}

.next-action-meta {
  margin: 0;
}

/* Blockers — loud when overdue, but never by color alone (badge text says OVERDUE). */
.blocker-list {
  gap: var(--space-3);
}

.blocker-row {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  padding: var(--space-2) var(--space-3);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  background: var(--surface);
}

.blocker-row[data-overdue="true"] {
  border-color: color-mix(in oklch, var(--danger) 55%, var(--border));
  background: color-mix(in oklch, var(--danger) 10%, var(--surface));
  animation: plan-overdue-pulse 2.4s ease-in-out infinite;
}

@keyframes plan-overdue-pulse {
  0%,
  100% {
    box-shadow: 0 0 0 0 color-mix(in oklch, var(--danger) 35%, transparent);
  }
  50% {
    box-shadow: 0 0 0 3px color-mix(in oklch, var(--danger) 20%, transparent);
  }
}

.blocker-head {
  display: flex;
  align-items: baseline;
  gap: var(--space-2);
  flex-wrap: wrap;
}

.blocker-component {
  font-weight: 600;
}

.blocker-effect {
  margin: 0;
  font-size: var(--text-sm);
  color: var(--ink);
}

.blocker-meta {
  margin: 0;
}

.state-block-verified-empty {
  color: var(--ok);
}

.state-block-unavailable {
  color: var(--warn);
}

.panel-body[data-state="unavailable"] {
  color: var(--warn);
}

/* Playbook verdicts — the money answer, given real visual weight. */
.playbooks-mount {
  min-height: 0;
}

.playbook-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--text-sm);
  min-width: 48rem;
}

.playbook-table thead th {
  position: sticky;
  top: 0;
  z-index: var(--z-sticky);
  text-align: start;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--muted);
  background: var(--surface);
  padding: var(--space-2) var(--space-3);
  border-bottom: 1px solid var(--border-strong);
  white-space: nowrap;
}

.playbook-table td {
  padding: var(--space-2) var(--space-3);
  border-bottom: 1px solid var(--border);
  vertical-align: top;
}

.playbook-table tbody tr:last-child td {
  border-bottom: none;
}

.playbook-premise {
  margin: var(--space-1) 0 0;
  max-width: 32ch;
}

.verdict-chip[data-null="true"] {
  font-style: italic;
  border-style: dashed;
  white-space: normal;
}

/* Phases and slices — the progress spine. Phase is the only framed group;
   slice rows follow control-list density, not nested cards. */
.phase-block {
  padding: var(--space-3);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  background: var(--surface);
  margin-bottom: var(--space-3);
}

.phase-block:last-child {
  margin-bottom: 0;
}

.phase-summary {
  display: flex;
  align-items: baseline;
  gap: var(--space-2);
  flex-wrap: wrap;
  cursor: pointer;
  font-weight: 600;
}

.phase-name {
  font-size: var(--text-base);
}

.phase-objective {
  margin: var(--space-2) 0 var(--space-3);
  color: var(--muted);
  font-size: var(--text-sm);
  max-width: 75ch;
}

.slice-list {
  gap: var(--space-2);
  margin-top: var(--space-2);
}

.slice-row {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  padding-block: var(--space-2);
  border-bottom: 1px solid var(--border);
  background: transparent;
}

.slice-row:last-child {
  border-bottom: none;
  padding-bottom: 0;
}

.slice-head {
  display: flex;
  align-items: baseline;
  gap: var(--space-2);
  flex-wrap: wrap;
}

.slice-note {
  margin: 0;
  font-size: var(--text-sm);
  color: var(--muted);
}

.slice-detail {
  font-size: var(--text-xs);
}

.slice-detail summary {
  cursor: pointer;
  color: var(--primary);
  font-family: var(--font-mono);
}

.slice-acceptance,
.slice-death {
  margin: var(--space-1) 0 0;
  color: var(--muted);
}

.slice-meta {
  margin: 0;
}

/* Goals — unmeasured must look unmeasured. */
.plan-goal-list {
  gap: var(--space-3);
}

.plan-goal-row {
  padding-bottom: var(--space-2);
  border-bottom: 1px solid var(--border);
}

.plan-goal-row:last-child {
  border-bottom: none;
  padding-bottom: 0;
}

.plan-goal-kpi {
  margin: var(--space-1) 0 0;
}

.plan-goal-trend {
  margin: var(--space-1) 0 0;
  font-family: var(--font-mono);
  font-size: var(--text-sm);
}

/* Reference — collapsed by default, real content behind disclosure. */
.plan-reference {
  border-top: 1px solid var(--border);
  padding-top: var(--space-4);
}

.reference-details summary {
  cursor: pointer;
  font-weight: 600;
  color: var(--muted);
  font-size: var(--text-sm);
}

.reference-block {
  margin-top: var(--space-3);
}

.reference-block h3 {
  margin: 0 0 var(--space-2);
  font-size: var(--text-xs);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--faint);
}

.reference-econ {
  margin: 0;
  font-size: var(--text-sm);
}

/* Plan-page badge states the rest of the desk does not yet name. */
.state-badge[data-state="complete"] {
  color: var(--ok);
  border-color: color-mix(in oklch, var(--ok) 40%, var(--border));
}

.state-badge[data-state="in_progress"] {
  color: var(--ok);
  border-color: color-mix(in oklch, var(--ok) 55%, var(--border));
  background: color-mix(in oklch, var(--ok) 12%, var(--surface));
}

.state-badge[data-state="degraded"] {
  color: var(--warn);
  border-color: color-mix(in oklch, var(--warn) 40%, var(--border));
}

.state-badge[data-state="not_measured"] {
  color: var(--faint);
  border-color: var(--border);
  border-style: dashed;
  font-style: italic;
}

.state-badge[data-state="unavailable"] {
  color: var(--faint);
  border-color: var(--border);
  border-style: dashed;
}

.state-badge[data-state="passed"] {
  color: var(--danger);
  border-color: color-mix(in oklch, var(--danger) 55%, var(--border));
  background: color-mix(in oklch, var(--danger) 12%, var(--surface));
}

.state-badge[data-state="registered"] {
  color: var(--muted);
  border-color: var(--border);
}

@media (max-width: 719px) {
  .venture-strip-top,
  .venture-strip-bottom {
    flex-direction: column;
    align-items: flex-start;
  }

  .venture-question {
    max-width: 100%;
  }
}

@media (prefers-reduced-motion: reduce) {
  .blocker-row[data-overdue="true"] {
    animation: none;
  }
}

/* Plan-page: contract-declared provenance is not a live measurement.
   Text ("declared") carries the meaning; color/italic only reinforce. */
.state-badge[data-origin="declared"] {
  color: var(--faint);
  border-color: var(--border);
  border-style: dashed;
  font-style: italic;
  background: var(--surface-sunken);
}

.state-origin-mark {
  font-family: var(--font-mono);
  font-size: 0.6875rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--faint);
  font-style: italic;
}

/* ---------------------------------------------------------------------------
   Investment portal (Today board + ticker research). Append-only: do not
   edit rules above. Other stages depend on them.
   --------------------------------------------------------------------------- */

.portal-section {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  margin: 0 0 var(--space-6);
  min-width: 0;
}

.portal-section-title {
  margin: 0;
  font-size: var(--text-lg);
  font-weight: 650;
  letter-spacing: -0.02em;
  line-height: 1.25;
  text-wrap: balance;
}

.portal-kicker {
  margin: 0 0 var(--space-2);
  font-size: var(--text-sm);
  font-weight: 650;
  color: var(--muted);
}

.portal-call-date {
  margin: 0 0 var(--space-4);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
}

.portal-null,
.portal-null-state {
  color: var(--faint);
  font-style: italic;
}

.portal-null-label {
  display: block;
  font-style: normal;
  font-size: var(--text-xs);
  font-family: var(--font-mono);
  letter-spacing: 0.02em;
  color: var(--muted);
}

.portal-null-state[data-null="true"],
.portal-section [data-null="true"],
.pick-card [data-null="true"],
.research-hero [data-null="true"] {
  color: var(--faint);
  font-style: italic;
}

.portal-dl {
  display: grid;
  grid-template-columns: minmax(8rem, 16rem) minmax(0, 1fr);
  gap: var(--space-2) var(--space-4);
  margin: 0;
}

.portal-dl-row {
  display: contents;
}

.portal-dl dt {
  margin: 0;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--muted);
  padding-top: 0.15rem;
}

.portal-dl dd {
  margin: 0;
  min-width: 0;
  font-size: var(--text-sm);
  color: var(--ink);
}

.portal-no-target {
  margin: 0;
  padding: var(--space-3) var(--space-4);
  border: 1px dashed var(--border-strong);
  border-radius: var(--radius);
  background: var(--surface-sunken);
  color: var(--ink);
  font-size: var(--text-sm);
  font-weight: 600;
  max-width: 72ch;
}

.portal-survival {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

.portal-survival-line {
  margin: 0;
  font-size: var(--text-sm);
  color: var(--ink);
}

.portal-source-link {
  font-size: var(--text-sm);
}

.portal-ticker-link,
.pick-ticker-link,
.research-ticker-link {
  font-family: var(--font-mono);
  font-weight: 700;
  letter-spacing: 0.02em;
  text-decoration: none;
  color: var(--ink);
}

.portal-ticker-link:hover,
.pick-ticker-link:hover,
.research-ticker-link:hover {
  color: var(--primary);
  text-decoration: underline;
}

.pick-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-5);
}

.pick-card {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
  padding: var(--space-5);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  min-width: 0;
}

.pick-card-head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--space-2) var(--space-3);
}

.pick-card-ticker {
  margin: 0;
  font-size: var(--text-xl);
  line-height: 1.1;
}

.pick-card-name {
  margin: 0;
  flex: 1 1 12rem;
  font-size: var(--text-md);
  color: var(--muted);
}

.pick-why-prose,
.pick-brief-prose {
  margin: 0 0 var(--space-2);
  max-width: 72ch;
  line-height: 1.55;
}

.pick-open {
  align-self: flex-start;
}

.research-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

.research-item {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  padding: var(--space-4) 0;
  border-bottom: 1px solid var(--border);
}

.research-item:last-child {
  border-bottom: none;
}

.research-item-head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--space-2) var(--space-3);
}

.research-name {
  color: var(--muted);
}

.research-bucket {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--faint);
}

.research-reason {
  margin: 0;
  max-width: 72ch;
  line-height: 1.5;
}

.research-open {
  font-size: var(--text-sm);
}

.portal-positions-scroll {
  max-width: 100%;
}

.portal-positions-table {
  min-width: 56rem;
}

.portal-exit-note,
.portal-exit-derived {
  margin: 0;
  font-size: var(--text-sm);
  color: var(--muted);
  max-width: 72ch;
  line-height: 1.45;
}

.portal-mark {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
}

.portal-mark[data-mark-state="stale"] .portal-mark-price {
  color: var(--stale);
}

.portal-mark-stale {
  color: var(--stale);
  font-weight: 650;
}

.portal-mark-live {
  color: var(--ok);
}

.action-chip {
  display: inline-block;
  font-family: var(--font-mono);
  font-size: 0.6875rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  padding: 0.12rem 0.45rem;
  border-radius: var(--radius-sm);
  border: 1px solid var(--border);
  color: var(--muted);
}

.action-chip[data-action="HOLD"] {
  color: var(--ink);
  border-color: var(--border-strong);
}

.action-chip[data-action="TRIM"] {
  color: var(--warn);
  border-color: color-mix(in oklch, var(--warn) 45%, var(--border));
  background: color-mix(in oklch, var(--warn) 10%, var(--surface));
}

.action-chip[data-action="SELL"] {
  color: var(--danger);
  border-color: color-mix(in oklch, var(--danger) 50%, var(--border));
  background: color-mix(in oklch, var(--danger) 10%, var(--surface));
}

.action-chip[data-null="true"] {
  font-style: italic;
  border-style: dashed;
  text-transform: none;
  letter-spacing: 0;
}

.perf-book {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  padding: var(--space-4) 0;
  border-top: 1px solid var(--border);
}

.perf-book-title {
  margin: 0;
  font-size: var(--text-md);
  font-weight: 650;
}

.perf-book-empty,
.perf-quarantine-note {
  margin: 0;
  max-width: 72ch;
  color: var(--muted);
  font-size: var(--text-sm);
  line-height: 1.45;
}

.perf-quarantine-list {
  margin: 0;
  padding-left: 1.2rem;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
}

.verdict-chip[data-verdict="RESEARCH_WORTHY"] {
  color: var(--verdict-cleared);
  border-color: color-mix(in oklch, var(--verdict-cleared) 45%, var(--border));
}

.verdict-chip[data-verdict="WATCH"] {
  color: var(--verdict-watching);
  border-color: color-mix(in oklch, var(--verdict-watching) 45%, var(--border));
}

.verdict-chip[data-verdict="DISQUALIFIED"] {
  color: var(--verdict-condemned);
  border-color: color-mix(in oklch, var(--verdict-condemned) 45%, var(--border));
}

.verdict-vocab {
  margin: 0;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
}

.research-hero {
  margin-bottom: var(--space-6);
}

.research-body {
  display: flex;
  flex-direction: column;
  min-width: 0;
}

.research-layout {
  align-items: start;
}

.thesis-prose {
  max-width: 72ch;
  font-size: var(--text-md);
  line-height: 1.7;
}

.thesis-prose p {
  margin: 0 0 var(--space-4);
  text-wrap: pretty;
}

.thesis-prose p:last-child {
  margin-bottom: 0;
}

.research-now {
  margin-top: var(--space-3);
  padding-top: var(--space-3);
  border-top: 1px solid var(--border);
}

.research-now-copy {
  margin: 0 0 var(--space-2);
  font-size: var(--text-sm);
  color: var(--muted);
  max-width: 65ch;
}

.research-now-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-3);
}

.research-now-label {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
  text-transform: uppercase;
  letter-spacing: 0.03em;
}

.research-now-engine {
  min-height: 24px;
  font-family: var(--font-ui);
  font-size: var(--text-sm);
  color: var(--ink);
  background: var(--surface);
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm);
  padding: 0.15rem 0.4rem;
}

.research-now-status {
  margin: var(--space-2) 0 0;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
  min-height: 1.2em;
}

.street-section,
.our-call-section {
  padding: var(--space-5);
  background: var(--surface-raised);
  border: 1px solid var(--border-strong);
  border-radius: var(--radius);
}

.street-kicker,
.our-call-kicker {
  margin: 0 0 var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

.street-lead,
.our-call-action {
  margin: 0 0 var(--space-3);
  font-size: var(--text-lg);
  color: var(--ink);
  line-height: 1.35;
}

.our-call-action[data-action="buy"],
.our-call-action[data-action="dont_buy"],
.our-call-action[data-action="wait"] {
  border-left: 3px solid var(--border-strong);
  padding-left: var(--space-3);
}

.street-split,
.street-foot,
.our-call-note,
.our-call-foot {
  margin: 0 0 var(--space-3);
  font-size: var(--text-sm);
  color: var(--muted);
  max-width: 65ch;
}

.street-notes,
.our-call-dates,
.our-call-kill {
  margin: 0 0 var(--space-4);
  padding-left: 1.2em;
  font-size: var(--text-sm);
  color: var(--ink);
}

.our-call-sub {
  margin: var(--space-4) 0 var(--space-2);
  font-size: var(--text-sm);
  font-weight: 600;
  color: var(--ink);
}

.our-call-why {
  margin: 0 0 var(--space-4);
  font-size: var(--text-md);
  color: var(--ink);
  max-width: 65ch;
  line-height: 1.5;
}

.thesis-meta {
  margin: 0 0 var(--space-3);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--faint);
}

.flip-section {
  padding: var(--space-5);
  background: var(--surface-raised);
  border: 1px solid var(--border-strong);
  border-radius: var(--radius);
}

.flip-list,
.gaps-list,
.evidence-list {
  margin: 0;
  padding-left: 1.2rem;
  max-width: 72ch;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  line-height: 1.5;
}

.evidence-claim {
  margin: 0;
  font-weight: 600;
}

.evidence-ref {
  margin: var(--space-1) 0 0;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
}

.event-analysis {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  padding: var(--space-4) 0;
  border-bottom: 1px solid var(--border);
  max-width: 72ch;
}

.event-analysis:last-child {
  border-bottom: none;
}

.event-headline {
  margin: 0;
  font-size: var(--text-md);
  font-weight: 650;
}

.event-date {
  margin: 0;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--muted);
}

.event-compact {
  margin: 0;
  line-height: 1.55;
}

.portal-back {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
}

@media (max-width: 719px) {
  .portal-dl {
    grid-template-columns: 1fr;
    gap: var(--space-1);
  }

  .portal-dl dt {
    padding-top: var(--space-2);
  }

  .pick-card {
    padding: var(--space-4);
  }

  .flip-section {
    padding: var(--space-4);
  }

  .portal-positions-table {
    min-width: 48rem;
  }
}

@media (max-width: 480px) {
  .pick-card-ticker {
    font-size: var(--text-lg);
  }

  .thesis-prose {
    font-size: var(--text-base);
    max-width: 100%;
  }
}

/* Cockpit restructure additions (docs/plans/analyst_desk_v1.md) — ACTIONABLE / NOT READY /
   Machine. Append-only: reuses existing tokens, .as-of, .state-badge, .verdict-chip,
   .control-list, .table-scroll from styles.css. No new palette, no restyling of existing
   selectors. */

.cockpit-actionable,
.cockpit-not-ready {
  margin-bottom: var(--space-6);
}

/* Rejected candidates -- retrospective (docs/plans/analyst_desk_v1.md). Reuses
   .positions-table, .table-scroll, .as-of, .state-block; no new palette. */
.cockpit-rejection-audit {
  margin-bottom: var(--space-6);
}

.rejection-disclaimer,
.rejection-caveat {
  color: var(--muted);
  max-width: 75ch;
}

.rejection-population {
  margin-top: var(--space-2);
}

.rejection-table td.rejection-reason {
  max-width: 32ch;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  cursor: help;
}

.rejection-table td.rejection-pending,
.rejection-table td.rejection-insufficient {
  color: var(--faint);
  font-style: italic;
  white-space: normal;
  max-width: 20ch;
}

.rejection-aggregate {
  margin-top: var(--space-4);
  padding-top: var(--space-3);
  border-top: 1px solid var(--border);
}

.rejection-aggregate-title {
  font-size: var(--text-sm);
  margin: 0 0 var(--space-2);
}

.rejection-aggregate-line {
  margin: 0 0 var(--space-1);
}

.decision-cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr));
  gap: var(--space-4);
}

.decision-card {
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  padding: var(--space-4);
}

.decision-card-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-2);
  margin-bottom: var(--space-3);
}

.decision-ticker {
  font-family: var(--font-mono);
  font-size: var(--text-lg);
  margin: 0;
}

.decision-levels {
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  padding: var(--space-3);
  margin-bottom: var(--space-3);
}

.decision-levels-collapsed {
  margin: 0;
  font-weight: 600;
}

.decision-no-stop-banner {
  font-size: var(--text-sm);
  font-weight: 600;
  color: var(--verdict-watching);
  border: 1px solid color-mix(in oklch, var(--verdict-watching) 45%, var(--border));
  border-radius: var(--radius-sm);
  padding: var(--space-2) var(--space-3);
  margin: 0 0 var(--space-3);
}

.decision-levels-staleness {
  font-size: var(--text-xs);
  color: var(--muted);
  margin: 0 0 var(--space-2);
}

.decision-levels-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr));
  gap: var(--space-2) var(--space-4);
  margin: 0;
}

.decision-levels-grid dt {
  font-size: var(--text-xs);
  color: var(--muted);
}

.decision-levels-grid dd {
  margin: 0;
  font-family: var(--font-mono);
  font-variant-numeric: tabular-nums;
}

.decision-levels-label {
  font-size: var(--text-xs);
  color: var(--muted);
  margin: var(--space-2) 0 0;
}

.decision-r-note {
  font-size: var(--text-sm);
  margin: var(--space-2) 0 0;
}

.decision-fields {
  margin: 0;
}

.decision-field {
  padding: var(--space-2) 0;
  border-top: 1px solid var(--border);
}

.decision-field:first-child {
  border-top: none;
}

.decision-field dt {
  font-size: var(--text-xs);
  color: var(--muted);
}

.decision-field dd {
  margin: 0;
}

.decision-field-missing {
  font-style: italic;
  color: var(--muted);
}

.decision-evidence-list {
  margin: 0;
  padding-left: var(--space-4);
}

.decision-expiry {
  font-size: var(--text-xs);
  color: var(--muted);
  margin-top: var(--space-3);
}

.decision-rate-note {
  font-size: var(--text-sm);
  color: var(--muted);
}

.decision-expired-strip {
  margin-top: var(--space-4);
  padding: var(--space-3);
  border: 1px dashed var(--border);
  border-radius: var(--radius-sm);
}

.not-ready-header {
  margin-bottom: var(--space-3);
}

.not-ready-summary {
  margin: 0;
}

.not-ready-decidable {
  font-weight: 700;
  font-size: var(--text-md);
}

.not-ready-histogram {
  margin-bottom: var(--space-3);
}

.not-ready-watch-note {
  font-size: var(--text-sm);
  color: var(--muted);
  margin: 0 0 var(--space-3);
}

.not-ready-table {
  width: 100%;
  border-collapse: collapse;
}

.not-ready-table th,
.not-ready-table td {
  text-align: left;
  padding: var(--space-2);
  border-bottom: 1px solid var(--border);
  font-size: var(--text-sm);
}

.not-ready-gap {
  font-family: var(--font-mono);
}

@media (prefers-reduced-motion: no-preference) {
  .decision-card {
    transition: border-color var(--dur-fast, 120ms) ease;
  }
}
