/* ════════════════════════════════════════════════════════
   THE LEGACY DESK — Visual System

   ────────────────────────────────────────────────────────
   Patches applied:
     legacy-v1: Visual rebrand from Ω Omega → The Legacy Desk
       - Palette: warm cyan/neon → charcoal + brass
       - Type:    Russo One → Cinzel + Cormorant Garamond
       - Glow:    removed text-shadow / box-shadow neons
       - New:     The Family panel (rotating roster)
   ──────────────────────────────────────────────────────── */

@import url('https://fonts.googleapis.com/css2?family=Cinzel:wght@400;500;600&family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;0,600;1,400;1,500&family=Outfit:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap');

/* ─── TOKENS ──────────────────────────────────────────── */
/* legacy-v1: charcoal foundation + Legacy Gold accent */
:root {
  /* Backgrounds — neutral charcoal, not warm */
  --bg-void: #0D0F10;          /* Obsidian */
  --bg-panel: #171A1D;         /* Panel charcoal */
  --bg-elev: #1C2023;          /* Surface charcoal */
  --bg-elevated: #22272B;
  --border: #2A2E33;           /* Dim divider */
  --border-bright: #6D5A36;    /* Soft brass border */

  /* Text */
  --text: #E8DFC9;
  --text-muted: #B8AF9A;
  --text-dim: #8A8377;

  /* Brass accent — slightly aged Legacy Gold */
  --brass: #B7924E;
  --brass-bright: #D5B06B;
  --brass-deep: #6D5A36;
  --brass-glow: rgba(183, 146, 78, 0.12);

  /* Account palette — gem tones, restrained */
  --combined: #B7924E;         /* Legacy gold */
  --combined-glow: rgba(183, 146, 78, 0.14);
  --mine: #8B3A30;             /* Deeper oxblood (Brad / Corbin) */
  --mine-glow: rgba(139, 58, 48, 0.20);
  --mine-bright: #A85045;
  --mom: #B86F75;              /* Dusty rose (Volkman) */
  --mom-glow: rgba(184, 111, 117, 0.16);
  --partner: #4A8580;          /* Teal-bronze */
  --partner-glow: rgba(74, 133, 128, 0.16);
  --kyleigh: #8C72AB;          /* Muted heather */
  --kyleigh-glow: rgba(140, 114, 171, 0.16);
  --clay: #4F6E96;             /* Muted slate blue */
  --clay-glow: rgba(79, 110, 150, 0.18);

  /* Semantic — restrained per style guide.
     Patch L polish V2 (2026-05-23): added explicit data tokens for
     numeric P&L legibility — brand-restrained colors are good for
     borders/dots/backgrounds but P&L numbers benefit from saturation.
     Use --data-pos / --data-neg for monetary or %-change text; keep
     --positive / --negative for non-numeric (dots, fills, backgrounds).
     --positive-bright bumped from #73B27B to #5FB36B per spec FIX B. */
  --positive: #4F8A57;         /* Bull green — borders/fills */
  --positive-bright: #5FB36B;  /* Brighter — for status text + bars */
  --negative: #A14F4F;         /* Bear red — borders/fills */
  --negative-soft: #C86A6A;    /* Existing soft red — kept for back-compat */
  --negative-bright: #E0605F;  /* NEW — saturated red for numbers */
  --data-pos: #5FB36B;         /* P&L UP — money/% text */
  --data-neg: #E0605F;         /* P&L DOWN — money/% text */
  --neutral: #D5B06B;          /* Gold highlight (replaces bright amber) */
  --warn: #C68A50;             /* Burnt brass */

  /* Active account theme — overridden per account on <body> */
  --accent: var(--combined);
  --accent-glow: var(--combined-glow);
}

/* Theme switches set on <body data-account="..."> */
body[data-account="combined"] { --accent: var(--combined); --accent-glow: var(--combined-glow); }
body[data-account="mine"]     { --accent: var(--mine);     --accent-glow: var(--mine-glow); --accent-bright: var(--mine-bright); }
body[data-account="mom"]      { --accent: var(--mom);      --accent-glow: var(--mom-glow); }
body[data-account="partner"]  { --accent: var(--partner);  --accent-glow: var(--partner-glow); }
body[data-account="kyleigh"]  { --accent: var(--kyleigh);  --accent-glow: var(--kyleigh-glow); }
body[data-account="clay"]     { --accent: var(--clay);     --accent-glow: var(--clay-glow); }

/* ─── RESET + BASE ────────────────────────────────────── */
* { box-sizing: border-box; margin: 0; padding: 0; }

html, body {
  background: var(--bg-void);
  color: var(--text);
  font-family: 'Outfit', sans-serif;
  font-weight: 400;
  font-size: 14px;
  line-height: 1.4;
  letter-spacing: 0.01em;
  min-height: 100vh;
  overflow-x: hidden;
}

a { color: var(--accent); text-decoration: none; }
a:hover { text-shadow: 0 0 8px var(--accent-glow); }

button { cursor: pointer; }

/* Background grid texture echoing the logo */
body::before {
  content: "";
  position: fixed;
  inset: 0;
  background-image:
    linear-gradient(rgba(255,255,255,0.012) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,0.012) 1px, transparent 1px);
  background-size: 48px 48px;
  pointer-events: none;
  z-index: 0;
}

body::after {
  content: "";
  position: fixed;
  inset: 0;
  background: radial-gradient(ellipse at top, transparent 30%, rgba(0,0,0,0.45) 100%);
  pointer-events: none;
  z-index: 0;
}

.page {
  position: relative;
  z-index: 1;
  max-width: 1480px;
  margin: 0 auto;
  padding: 0 28px;
}

/* ─── HEADER ──────────────────────────────────────────── */
header.top {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  padding: 18px 0 14px;
  border-bottom: 1px solid var(--border);
  gap: 32px;
}

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

.omega-mark {
  width: 32px;
  height: 32px;
  color: var(--accent);
  filter: drop-shadow(0 0 8px var(--accent-glow));
  flex-shrink: 0;
}

.brand-text { display: flex; flex-direction: column; line-height: 1; }

.brand-name {
  /* legacy-v1: stable brass identity, doesn't shift per-account */
  font-family: 'Cinzel', serif;
  font-size: 17px;
  font-weight: 500;
  letter-spacing: 0.16em;
  color: var(--text);
}

.brand-sub {
  /* legacy-v1: brass tone, sentence-friendly spacing */
  font-family: 'Outfit', sans-serif;
  font-size: 9.5px;
  letter-spacing: 0.32em;
  color: var(--brass-deep);
  margin-top: 5px;
  text-transform: uppercase;
}

/* Page tabs in the header */
.page-tabs {
  display: flex;
  gap: 0;
  justify-self: center;
  background: var(--bg-panel);
  border: 1px solid var(--border);
  border-radius: 4px;
  overflow: hidden;
}

.page-tab {
  padding: 10px 22px;
  font-family: 'Outfit', sans-serif;
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--text-muted);
  background: transparent;
  border: none;
  border-right: 1px solid var(--border);
  text-decoration: none;
  display: inline-block;
  transition: all 150ms;
}
.page-tab:last-child { border-right: none; }
.page-tab:hover { color: var(--text); }
.page-tab.active {
  background: var(--bg-elev);
  color: var(--accent);
  text-shadow: 0 0 8px var(--accent-glow);
}

/* Patch J: sub-tab strip — renders below the top nav only when the
   active page is inside the Market View hub (Brief / Alerts / Barometer
   / Research). Visually subordinate to the top row: smaller padding,
   lighter weight, underline-on-active rather than the top row's
   filled-cell treatment. */
.page-tabs-sub {
  display: flex;
  gap: 0;
  padding: 6px 32px;
  background: var(--bg-void);
  border-bottom: 1px solid var(--border);
  align-items: center;
}

.page-tab-sub {
  padding: 6px 16px;
  font-family: 'Outfit', sans-serif;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--text-muted);
  background: transparent;
  border: none;
  text-decoration: none;
  display: inline-block;
  border-bottom: 1px solid transparent;
  transition: all 150ms;
}

.page-tab-sub:hover { color: var(--text); }

.page-tab-sub.active {
  color: var(--accent);
  border-bottom-color: var(--accent);
  text-shadow: 0 0 6px var(--accent-glow);
}

/* System status (right side of header) */
.system-status {
  display: flex;
  align-items: center;
  gap: 16px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--text-muted);
  letter-spacing: 0.06em;
}

.status-item { display: flex; align-items: center; gap: 8px; }

.status-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--positive);
  box-shadow: 0 0 8px var(--positive);
  animation: pulse 2.4s ease-in-out infinite;
}

.regime-tag {
  padding: 4px 10px;
  border: 1px solid var(--neutral);
  color: var(--neutral);
  font-size: 10px;
  letter-spacing: 0.12em;
  border-radius: 2px;
}

@keyframes pulse {
  0%, 100% { opacity: 1; }
  50%      { opacity: 0.4; }
}

/* ─── ACCOUNT SWITCHER ────────────────────────────────── */
.sub-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 14px 0;
  border-bottom: 1px solid var(--border);
  margin-bottom: 24px;
}

.account-switch { display: flex; gap: 4px; }

.acc-btn {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 6px 12px;
  font-family: 'Outfit', sans-serif;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-muted);
  background: transparent;
  border: 1px solid transparent;
  border-radius: 2px;
  text-decoration: none;
  display: inline-flex;
  transition: all 150ms;
}
.acc-btn:hover { color: var(--text); border-color: var(--border-bright); }
.acc-btn.active {
  color: var(--text);
  background: var(--bg-elev);
  border-color: var(--border-bright);
}

.color-chip {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  display: inline-block;
}
/* legacy-v1: chips use solid fill, no glow per style guide */
.chip-combined { background: var(--combined); }
.chip-mine     { background: var(--mine); }
.chip-mom      { background: var(--mom); }
.chip-partner  { background: var(--partner); }
.chip-kyleigh  { background: var(--kyleigh); }
.chip-clay     { background: var(--clay); }

.session-info {
  display: flex;
  align-items: center;
  gap: 16px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--text-muted);
  letter-spacing: 0.06em;
}
.session-info .num { color: var(--text); font-weight: 600; }

.logout-link {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.18em;
  color: var(--text-dim);
  text-transform: uppercase;
  text-decoration: none;
  padding: 6px 12px;
  border: 1px solid transparent;
  border-radius: 2px;
  transition: all 150ms;
}
.logout-link:hover {
  color: var(--text-muted);
  border-color: var(--border-bright);
  text-shadow: none;
}

/* ─── PANELS ──────────────────────────────────────────── */
.panel {
  background: var(--bg-panel);
  border: 1px solid var(--border);
}

.panel-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 16px 22px;
  border-bottom: 1px solid var(--border);
}

.panel-title {
  font-family: 'Cinzel', serif;
  font-size: 13px;
  letter-spacing: 0.14em;
  color: var(--text);
  text-transform: uppercase;
}

.panel-title-meta {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--text-muted);
  letter-spacing: 0.06em;
}

.section-eyebrow {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.28em;
  color: var(--text-muted);
  text-transform: uppercase;
  margin-bottom: 14px;
  display: flex;
  align-items: center;
  gap: 12px;
}
.section-eyebrow::before {
  content: "";
  width: 18px;
  height: 1px;
  background: var(--accent);
  display: inline-block;
}

/* ─── PHASE 1 PLACEHOLDERS ─────────────────────────────── */
.phase1-stub {
  background: var(--bg-panel);
  border: 1px solid var(--border);
  padding: 60px 40px;
  text-align: center;
  margin: 30px 0;
  position: relative;
  overflow: hidden;
}

.phase1-stub::before {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse at center, var(--accent-glow) 0%, transparent 60%);
  opacity: 0.5;
  pointer-events: none;
}

.phase1-watermark {
  width: 220px;
  height: 220px;
  color: var(--accent);
  opacity: 0.06;
  margin: 0 auto 20px;
  display: block;
  position: relative;
  z-index: 1;
}

.phase1-title {
  font-family: 'Cinzel', serif;
  font-size: 22px;
  letter-spacing: 0.12em;
  color: var(--text);
  margin-bottom: 16px;
  text-transform: uppercase;
  position: relative;
  z-index: 1;
}

.phase1-msg {
  font-family: 'Outfit', sans-serif;
  font-size: 14px;
  color: var(--text-muted);
  max-width: 540px;
  margin: 0 auto 24px;
  line-height: 1.55;
  position: relative;
  z-index: 1;
}

.phase1-meta {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.22em;
  color: var(--text-dim);
  text-transform: uppercase;
  position: relative;
  z-index: 1;
}

.phase1-meta .accent {
  color: var(--accent);
  text-shadow: 0 0 8px var(--accent-glow);
}

.phase1-roadmap {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 14px;
  margin: 30px 0;
  position: relative;
  z-index: 1;
}

.phase1-roadmap-item {
  background: var(--bg-elev);
  border: 1px solid var(--border);
  padding: 14px 16px;
  text-align: left;
}

.phase1-roadmap-num {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.22em;
  color: var(--accent);
  text-transform: uppercase;
  margin-bottom: 6px;
}

.phase1-roadmap-name {
  font-family: 'Outfit', sans-serif;
  font-size: 12px;
  font-weight: 600;
  color: var(--text);
  margin-bottom: 4px;
}

.phase1-roadmap-status {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  color: var(--text-muted);
  letter-spacing: 0.04em;
}

.phase1-roadmap-item.current {
  border-color: var(--accent);
  background: linear-gradient(135deg, var(--accent-glow) 0%, var(--bg-elev) 80%);
}
.phase1-roadmap-item.current .phase1-roadmap-status {
  color: var(--accent);
}

/* ─── LOGIN PAGE ──────────────────────────────────────── */
.login-shell {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  z-index: 1;
}

.login-card {
  width: 380px;
  background: var(--bg-panel);
  border: 1px solid var(--border-bright);
  padding: 48px 40px;
  position: relative;
  overflow: hidden;
}

.login-card::before {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse at top, var(--accent-glow) 0%, transparent 60%);
  pointer-events: none;
  opacity: 0.4;
}

.login-mark {
  display: flex;
  flex-direction: column;
  align-items: center;
  margin-bottom: 36px;
  position: relative;
  z-index: 1;
}

.login-mark svg {
  width: 56px;
  height: 56px;
  color: var(--accent);
  filter: drop-shadow(0 0 12px var(--accent-glow));
  margin-bottom: 14px;
}

.login-mark-name {
  font-family: 'Cinzel', serif;
  font-size: 22px;
  letter-spacing: 0.14em;
  color: var(--text);
  text-shadow: 0 0 12px var(--accent-glow);
}

.login-mark-sub {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.4em;
  color: var(--text-muted);
  margin-top: 6px;
  text-transform: uppercase;
}

.login-form {
  display: flex;
  flex-direction: column;
  gap: 14px;
  position: relative;
  z-index: 1;
}

.login-label {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.28em;
  color: var(--text-muted);
  text-transform: uppercase;
  margin-bottom: -6px;
}

.login-input {
  background: var(--bg-void);
  border: 1px solid var(--border-bright);
  color: var(--text);
  font-family: 'JetBrains Mono', monospace;
  font-size: 14px;
  letter-spacing: 0.04em;
  padding: 14px 16px;
  outline: none;
  transition: border-color 150ms, box-shadow 150ms;
}

.login-input:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 3px var(--accent-glow);
}

.login-button {
  background: var(--accent);
  color: var(--bg-void);
  border: none;
  font-family: 'Cinzel', serif;
  font-size: 12px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  padding: 14px 16px;
  cursor: pointer;
  transition: all 200ms;
  margin-top: 6px;
}

.login-button:hover {
  filter: brightness(1.15);
  box-shadow: 0 0 24px var(--accent-glow);
}

.login-error {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--negative);
  letter-spacing: 0.06em;
  padding: 10px 14px;
  background: rgba(255, 77, 109, 0.08);
  border: 1px solid rgba(255, 77, 109, 0.3);
  margin-top: 6px;
}

/* ─── FOOTER ──────────────────────────────────────────── */
.footer-meta {
  text-align: center;
  padding: 32px 0;
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.22em;
  color: var(--text-dim);
  text-transform: uppercase;
}

/* ─── ANIMATIONS ──────────────────────────────────────── */
.fade-in { animation: fade 600ms ease-out backwards; }
.fade-in:nth-child(1) { animation-delay: 0ms; }
.fade-in:nth-child(2) { animation-delay: 80ms; }
.fade-in:nth-child(3) { animation-delay: 160ms; }
.fade-in:nth-child(4) { animation-delay: 240ms; }

@keyframes fade {
  from { opacity: 0; transform: translateY(8px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* ─── RESPONSIVE (basic phase 1) ──────────────────────── */
@media (max-width: 900px) {
  header.top {
    grid-template-columns: 1fr;
    gap: 16px;
  }
  .page-tabs { justify-self: stretch; overflow-x: auto; }
  .page-tabs-sub { overflow-x: auto; padding: 6px 12px; }
  .system-status { flex-wrap: wrap; }
  .sub-header { flex-direction: column; align-items: stretch; gap: 14px; }
  .account-switch { overflow-x: auto; padding-bottom: 4px; }
  .session-info { flex-wrap: wrap; }
  .login-card { width: calc(100vw - 40px); padding: 32px 24px; }
}


/* ════════════════════════════════════════════════════════
   PHASE 2 — DURABILITY PAGE
   ──────────────────────────────────────────────────────── */

.durability-page { margin-bottom: 36px; }

.durability-flash {
  padding: 12px 18px;
  margin-bottom: 20px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  letter-spacing: 0.04em;
  border: 1px solid var(--border-bright);
  border-left: 3px solid var(--accent);
}
.flash-success { color: var(--positive); border-left-color: var(--positive); background: rgba(0,232,156,0.06); }
.flash-error   { color: var(--negative); border-left-color: var(--negative); background: rgba(255,77,109,0.06); }
.flash-info    { color: var(--text); }

.durability-status {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  background: var(--bg-panel);
  border: 1px solid var(--border);
  margin-bottom: 28px;
}

.dur-status-cell {
  padding: 16px 20px;
  border-right: 1px solid var(--border);
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.dur-status-cell:last-child { border-right: none; }
.dur-status-cell.action-cell { justify-content: center; }

.dur-status-label {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.22em;
  color: var(--text-muted);
  text-transform: uppercase;
}

.dur-status-value {
  font-family: 'JetBrains Mono', monospace;
  font-size: 14px;
  font-weight: 600;
  color: var(--text);
  letter-spacing: 0.02em;
}
.dur-status-value.ok   { color: var(--positive); }
.dur-status-value.warn { color: var(--neutral); }
.dur-status-value.fail { color: var(--negative); }

.dur-status-meta {
  font-size: 11px;
  color: var(--text-muted);
  font-weight: 400;
  margin-left: 4px;
}

.dur-status-dim { color: var(--text-dim); }

.dur-action-btn {
  background: var(--accent);
  color: var(--bg-void);
  border: none;
  font-family: 'Cinzel', serif;
  font-size: 11px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  padding: 10px 18px;
  cursor: pointer;
  transition: all 200ms;
  border-radius: 2px;
}
.dur-action-btn:hover {
  filter: brightness(1.15);
  box-shadow: 0 0 16px var(--accent-glow);
}

/* Durability grid */
.durability-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 22px;
}

.dur-panel {
  background: var(--bg-panel);
  border: 1px solid var(--border);
}

.dur-panel-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 14px 22px;
  border-bottom: 1px solid var(--border);
}

.dur-panel-title {
  font-family: 'Cinzel', serif;
  font-size: 12px;
  letter-spacing: 0.14em;
  color: var(--text);
  text-transform: uppercase;
}

.dur-panel-meta {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  color: var(--text-muted);
  letter-spacing: 0.06em;
}

.dur-snapshot-list { display: flex; flex-direction: column; max-height: 440px; overflow-y: auto; }

.dur-snapshot-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 14px 22px;
  border-bottom: 1px solid var(--border);
}
.dur-snapshot-row:last-child { border-bottom: none; }
.dur-snapshot-row:hover { background: var(--bg-elev); }

.dur-snap-info { display: flex; flex-direction: column; gap: 4px; }

.dur-snap-date {
  font-family: 'Cinzel', serif;
  font-size: 13px;
  letter-spacing: 0.04em;
  color: var(--text);
}

.dur-snap-tab {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  color: var(--text-muted);
  letter-spacing: 0.04em;
}

.dur-restore-btn {
  background: transparent;
  border: 1px solid var(--border-bright);
  color: var(--text-muted);
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  padding: 6px 14px;
  cursor: pointer;
  border-radius: 2px;
  transition: all 150ms;
}
.dur-restore-btn:hover {
  color: var(--accent);
  border-color: var(--accent);
  text-shadow: 0 0 8px var(--accent-glow);
}

/* Audit log */
.dur-audit-list { display: flex; flex-direction: column; max-height: 440px; overflow-y: auto; }

.dur-audit-row {
  display: grid;
  grid-template-columns: 130px 70px 80px 1fr;
  align-items: center;
  gap: 10px;
  padding: 10px 22px;
  border-bottom: 1px solid rgba(28,28,42,0.5);
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
}
.dur-audit-row:last-child { border-bottom: none; }
.dur-audit-row:hover { background: var(--bg-elev); }

.dur-audit-time { color: var(--text-muted); font-size: 10px; }
.dur-audit-acct { color: var(--text); font-weight: 500; }
.dur-audit-op {
  color: var(--text-muted);
  font-size: 10px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  font-weight: 600;
}
.dur-audit-op.restore { color: var(--neutral); }
.dur-audit-target { color: var(--text-muted); font-size: 10px; word-break: break-all; }

.dur-empty {
  padding: 36px 28px;
  text-align: center;
  color: var(--text-muted);
}
.dur-empty p { margin: 0 0 8px; font-family: 'Outfit', sans-serif; font-size: 13px; }
.dur-empty-meta { color: var(--text-dim); font-size: 12px; }

/* Restore confirmation modal */
.dur-modal-backdrop {
  position: fixed;
  inset: 0;
  background: rgba(8, 8, 13, 0.85);
  z-index: 100;
  align-items: center;
  justify-content: center;
  backdrop-filter: blur(4px);
}

.dur-modal {
  width: 480px;
  max-width: calc(100vw - 40px);
  background: var(--bg-panel);
  border: 1px solid var(--negative);
  box-shadow: 0 0 48px rgba(255, 77, 109, 0.25);
  padding: 32px 32px 24px;
  position: relative;
}

.dur-modal::before {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse at top, rgba(255, 77, 109, 0.12) 0%, transparent 60%);
  pointer-events: none;
}

.dur-modal-title {
  font-family: 'Cinzel', serif;
  font-size: 18px;
  letter-spacing: 0.12em;
  color: var(--negative);
  text-transform: uppercase;
  margin-bottom: 16px;
  position: relative;
}

.dur-modal-body {
  font-family: 'Outfit', sans-serif;
  font-size: 13px;
  color: var(--text-muted);
  line-height: 1.55;
  margin-bottom: 18px;
  position: relative;
}

.dur-modal-body strong { color: var(--text); }

.dur-modal-date {
  font-family: 'JetBrains Mono', monospace;
  color: var(--accent);
  font-weight: 600;
}

.dur-modal-input {
  width: 100%;
  background: var(--bg-void);
  border: 1px solid var(--border-bright);
  color: var(--text);
  font-family: 'JetBrains Mono', monospace;
  font-size: 14px;
  letter-spacing: 0.18em;
  padding: 12px 16px;
  outline: none;
  margin-bottom: 18px;
  text-transform: uppercase;
}
.dur-modal-input:focus {
  border-color: var(--negative);
  box-shadow: 0 0 0 3px rgba(255, 77, 109, 0.18);
}

.dur-modal-actions { display: flex; gap: 10px; justify-content: flex-end; }

.dur-modal-cancel,
.dur-modal-confirm {
  font-family: 'Cinzel', serif;
  font-size: 11px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  padding: 10px 18px;
  border-radius: 2px;
  border: 1px solid transparent;
  cursor: pointer;
  transition: all 150ms;
}

.dur-modal-cancel {
  background: transparent;
  color: var(--text-muted);
  border-color: var(--border-bright);
}
.dur-modal-cancel:hover { color: var(--text); border-color: var(--text-muted); }

.dur-modal-confirm {
  background: var(--negative);
  color: var(--bg-void);
  border: none;
}
.dur-modal-confirm:hover {
  filter: brightness(1.1);
  box-shadow: 0 0 16px rgba(255, 77, 109, 0.35);
}

@media (max-width: 900px) {
  .durability-status { grid-template-columns: 1fr 1fr; }
  .durability-grid   { grid-template-columns: 1fr; }
  .dur-audit-row { grid-template-columns: 1fr 1fr; gap: 6px; }
}


/* ════════════════════════════════════════════════════════
   PHASE 3 — SNAPSHOT-BASED COMMAND CENTER
   ──────────────────────────────────────────────────────── */

/* Snapshot meta strip — at top of Command Center */
.snapshot-meta-strip {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 18px;
  margin-bottom: 18px;
  background: var(--bg-elev);
  border: 1px solid var(--border);
  border-left: 2px solid var(--accent);
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  letter-spacing: 0.04em;
}
.snap-label {
  color: var(--text-muted);
  text-transform: uppercase;
  letter-spacing: 0.18em;
  font-size: 9px;
}
.snap-value {
  color: var(--accent);
  font-weight: 600;
}
.snap-sep { color: var(--text-dim); }
.snap-meta { color: var(--text-muted); }
.snap-meta-right { margin-left: auto; color: var(--text-muted); font-size: 10px; }
.snap-link {
  color: var(--accent);
  text-decoration: none;
  margin-left: 4px;
  border-bottom: 1px dotted var(--accent);
}
.snap-link:hover { text-shadow: 0 0 6px var(--accent-glow); }

/* Hero block */
.cc-hero {
  position: relative;
  padding: 24px 0 28px;
  margin-bottom: 24px;
  overflow: hidden;
}

.hero-watermark {
  position: absolute;
  right: -80px;
  top: 50%;
  transform: translateY(-50%);
  width: 380px;
  height: 380px;
  opacity: 0.035;
  color: var(--accent);
  pointer-events: none;
}

.cc-hero-grid {
  display: grid;
  grid-template-columns: 1.4fr 1fr;
  gap: 36px;
  position: relative;
  z-index: 1;
}

.cc-income-box, .cc-cash-box {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.cc-bar-label {
  font-size: 13px;
  color: var(--text);
  font-weight: 500;
  letter-spacing: 0.04em;
}

.cc-note {
  font-family: 'Outfit', sans-serif;
  font-size: 12px;
  color: var(--text-muted);
  line-height: 1.5;
  padding: 12px 16px;
  background: var(--bg-panel);
  border: 1px solid var(--border);
  border-left: 2px solid var(--text-dim);
}

/* Income metric pair */
.income-pair {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
}

.metric-card {
  background: var(--bg-panel);
  border: 1px solid var(--border);
  padding: 18px 20px;
  position: relative;
  overflow: hidden;
}

.metric-card.primary { border-left: 2px solid var(--accent); }
.metric-card.primary::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(135deg, var(--accent-glow) 0%, transparent 60%);
  pointer-events: none;
}

.metric-label {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.22em;
  color: var(--text-muted);
  text-transform: uppercase;
  margin-bottom: 10px;
}

.metric-value {
  font-family: 'JetBrains Mono', monospace;
  font-size: 26px;
  font-weight: 700;
  letter-spacing: 0.01em;
  color: var(--text);
  position: relative;
  z-index: 1;
}

.metric-value.positive { color: var(--positive); }
.metric-value.accent   { color: var(--accent-bright, var(--accent)); text-shadow: 0 0 12px var(--accent-glow); }

.metric-meta {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  color: var(--text-muted);
  margin-top: 8px;
  letter-spacing: 0.04em;
  position: relative;
  z-index: 1;
}

/* Goal pace */
.goal-bar-card {
  background: var(--bg-panel);
  border: 1px solid var(--border);
  padding: 16px 20px;
}

.goal-row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  margin-bottom: 10px;
}

.bar-pct {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--accent);
  letter-spacing: 0.06em;
}

.goal-progress {
  height: 8px;
  background: var(--bg-elev);
  border: 1px solid var(--border);
  position: relative;
  overflow: hidden;
}

.goal-fill {
  height: 100%;
  background: linear-gradient(90deg, var(--accent), var(--positive));
  position: relative;
  box-shadow: 0 0 12px var(--accent-glow);
}

.goal-meta {
  display: flex;
  justify-content: space-between;
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--text-muted);
  margin-top: 8px;
  letter-spacing: 0.04em;
}

.goal-meta-only {
  font-family: 'Outfit', sans-serif;
  font-size: 13px;
  color: var(--text-muted);
  text-align: center;
  padding: 6px 0;
  line-height: 1.5;
}

/* Available Cash strip — per-subaccount tile row above hero grid.
   Each tile shows Available (headline), Total Cash, Committed, and
   a one-line breakdown of where the committed cash sits. */
.cc-cash-strip {
  margin-bottom: 24px;
}

.cc-cash-tiles {
  display: grid;
  /* Cap each tile at 320px so single-subaccount views (Volkman, Partnership)
     don't stretch one tile to full page width. justify-content:start keeps
     remaining row space empty rather than padding the tiles. */
  grid-template-columns: repeat(auto-fit, minmax(240px, 320px));
  justify-content: start;
  gap: 14px;
  margin-top: 10px;
}

/* Auto-scroll variant — applied by the template when tile count >= 5
   (combined view's 6 subaccounts wraps to 2 rows otherwise, pushing
   Income + Capital sections below the fold). Same marquee pattern as
   the watchlist: two identical sets in the track, translate by -50%
   over 60s, hover/focus pauses, edge fade-mask, reduced-motion opt-out. */
.cc-cash-tiles.auto-scroll {
  display: block;
  overflow: hidden;
  position: relative;
  -webkit-mask-image: linear-gradient(to right, transparent 0, black 3%, black 97%, transparent 100%);
          mask-image: linear-gradient(to right, transparent 0, black 3%, black 97%, transparent 100%);
}

.cc-cash-track {
  display: flex;
  width: max-content;
  animation: cc-cash-marquee 60s linear infinite;
}

.cc-cash-set {
  display: flex;
  gap: 14px;
  padding-right: 14px;  /* matches gap so duplicates butt up cleanly */
}

.cc-cash-tiles.auto-scroll:hover .cc-cash-track,
.cc-cash-tiles.auto-scroll:focus-within .cc-cash-track {
  animation-play-state: paused;
}

.cc-cash-tiles.auto-scroll .cc-cash-tile {
  flex: 0 0 280px;
  max-width: 280px;
}

@keyframes cc-cash-marquee {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}

@media (prefers-reduced-motion: reduce) {
  .cc-cash-tiles.auto-scroll .cc-cash-track {
    animation: none;
  }
  .cc-cash-tiles.auto-scroll {
    overflow-x: auto;
    -webkit-mask-image: none;
            mask-image: none;
  }
}

.cc-cash-tile {
  background: var(--bg-panel);
  border: 1px solid var(--border);
  padding: 14px 18px;
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.cc-cash-tile-title {
  font-family: 'Cinzel', serif;
  font-size: 11px;
  color: var(--text-muted);
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.cc-cash-tile-headline {
  font-family: 'JetBrains Mono', monospace;
  font-size: 24px;
  font-weight: 500;
  letter-spacing: 0.02em;
  margin-top: 2px;
}

.cc-cash-tile-sub {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  color: var(--text-muted);
  letter-spacing: 0.12em;
  margin-bottom: 6px;
}

.cc-cash-tile-meta {
  display: flex;
  flex-direction: column;
  gap: 3px;
  border-top: 1px solid var(--border);
  padding-top: 8px;
}

.cc-cash-tile-meta-row {
  display: flex;
  justify-content: space-between;
  font-size: 12px;
  color: var(--text-muted);
}

.cc-cash-tile-meta-row .mono {
  font-family: 'JetBrains Mono', monospace;
  color: var(--text);
}

.cc-cash-tile-detail {
  font-size: 11px;
  color: var(--text-muted);
  font-style: italic;
  margin-top: 6px;
  line-height: 1.4;
}

.cc-cash-tile-detail .muted {
  color: var(--text-muted);
  opacity: 0.7;
}

/* Monthly Income card — per-month row with bar + amount */
.cc-monthly-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: 4px;
}

.cc-month-row {
  display: grid;
  grid-template-columns: 56px 1fr 96px;
  align-items: center;
  gap: 12px;
  padding: 4px 0;
}

.cc-month-current {
  background: rgba(213, 178, 121, 0.06);
  margin: 0 -10px;
  padding: 4px 10px;
  border-left: 2px solid var(--accent);
}

.cc-month-label {
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  color: var(--text-muted);
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.cc-month-bar {
  height: 6px;
  background: var(--bg-elev);
  border: 1px solid var(--border);
  position: relative;
  overflow: hidden;
}

.cc-month-fill {
  height: 100%;
  background: linear-gradient(90deg, var(--positive), var(--positive-bright));
  box-shadow: 0 0 6px rgba(95, 179, 107, 0.3);
}

.cc-month-fill.negative {
  background: linear-gradient(90deg, var(--negative), var(--negative-bright));
  box-shadow: 0 0 6px rgba(224, 96, 95, 0.3);
}

.cc-month-amount {
  font-family: 'JetBrains Mono', monospace;
  font-size: 13px;
  text-align: right;
  letter-spacing: 0.02em;
  font-weight: 500;
}

/* Status strip */
.status-strip-simple {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  background: var(--bg-panel);
  border: 1px solid var(--border);
  margin: 0 0 28px;
}

.status-cell {
  padding: 16px 22px;
  border-right: 1px solid var(--border);
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.status-cell:last-child { border-right: none; }

.status-cell-label {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.22em;
  color: var(--text-muted);
  text-transform: uppercase;
}

.status-cell-value {
  font-family: 'JetBrains Mono', monospace;
  font-size: 18px;
  font-weight: 600;
  color: var(--text);
}

/* Position rows */
.panel-empty {
  padding: 36px 28px;
  text-align: center;
  color: var(--text-muted);
}
.panel-empty p { margin: 0 0 8px; font-family: 'Outfit', sans-serif; font-size: 13px; }
.panel-empty-meta { color: var(--text-dim); font-size: 12px; }

.positions-group-label {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.22em;
  color: var(--text-dim);
  text-transform: uppercase;
  padding: 12px 22px 6px;
  background: var(--bg-elev);
  border-bottom: 1px solid var(--border);
}

.position-row {
  display: grid;
  grid-template-columns: 80px 80px 160px 1fr 100px 80px 100px;
  align-items: center;
  padding: 12px 22px;
  border-bottom: 1px solid var(--border);
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  gap: 6px;
}
.position-row:last-child { border-bottom: none; }

.desk-positions-legacy {
  display: none;
}

.desk-bias-summary,
.bias-summary-strip {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 8px;
  padding: 14px 22px;
  border-bottom: 1px solid var(--border);
  background: var(--bg-elev);
}

.desk-bias-count,
.bias-summary-cell {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 9px 11px;
  border: 1px solid var(--border);
  background: var(--bg-void);
}

.desk-bias-count em,
.bias-summary-cell em {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  font-style: normal;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--text-muted);
}

.desk-bias-count strong,
.bias-summary-cell strong {
  font-family: 'JetBrains Mono', monospace;
  font-size: 16px;
  color: var(--text);
}

.desk-bias-count.bullish,
.bias-summary-cell.bullish { border-left: 2px solid var(--positive); }
.desk-bias-count.neutral,
.bias-summary-cell.neutral { border-left: 2px solid var(--brass); }
.desk-bias-count.bearish,
.bias-summary-cell.bearish { border-left: 2px solid var(--negative); }
.desk-bias-count.stale,
.bias-summary-cell.stale { border-left: 2px solid var(--warn); }
.desk-bias-count.untracked,
.bias-summary-cell.untracked { border-left: 2px solid var(--text-dim); }

.desk-bias-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(420px, 1fr));
  gap: 0;
}

.desk-bias-account {
  border-right: 1px solid var(--border);
  border-bottom: 1px solid var(--border);
}

.desk-bias-row {
  display: grid;
  grid-template-columns: minmax(130px, 1.1fr) 92px 120px 70px minmax(150px, 1.2fr) 86px;
  align-items: center;
  gap: 10px;
  padding: 11px 14px;
  border-bottom: 1px solid var(--border);
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
}
.desk-bias-row:last-child { border-bottom: none; }
.desk-bias-row:hover { background: var(--bg-elev); }
.desk-bias-row-bullish { box-shadow: inset 3px 0 0 var(--positive); }
.desk-bias-row-bearish { box-shadow: inset 3px 0 0 var(--negative); }
.desk-bias-row-stale { box-shadow: inset 3px 0 0 var(--warn); }
.desk-bias-row-untracked { box-shadow: inset 3px 0 0 var(--text-dim); }

.desk-bias-ticker,
.portfolio-ticker-mark {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  min-width: 0;
}

.desk-logo-wrap,
.portfolio-logo-wrap {
  width: 28px;
  height: 28px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 28px;
  border: 1px solid var(--border-bright);
  border-radius: 50%;
  background: var(--bg-void);
  overflow: hidden;
}

.portfolio-logo-lg {
  width: 42px;
  height: 42px;
  flex-basis: 42px;
}

.desk-logo,
.portfolio-logo {
  width: 100%;
  height: 100%;
  object-fit: contain;
  background: #fff;
}

.desk-logo-fallback,
.portfolio-logo-fallback {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 100%;
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  color: var(--brass-bright);
  background: var(--bg-elev);
}

.desk-bias-pill,
.bias-pill,
.desk-age-pill,
.age-pill,
.desk-bias-chip,
.bias-chip {
  display: inline-flex;
  align-items: center;
  width: fit-content;
  max-width: 100%;
  padding: 3px 7px;
  border: 1px solid var(--border);
  border-radius: 2px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  line-height: 1.2;
  color: var(--text-muted);
  background: var(--bg-void);
}

.desk-bias-pill-bullish,
.bias-pill-bullish { color: var(--positive-bright); border-color: var(--positive); }
.desk-bias-pill-bearish,
.bias-pill-bearish { color: var(--negative-bright); border-color: var(--negative); }
.desk-bias-pill-neutral,
.bias-pill-neutral { color: var(--brass-bright); border-color: var(--brass-deep); }
.desk-bias-pill-stale,
.bias-pill-stale { color: var(--warn); border-color: var(--warn); }
.desk-bias-pill-untracked,
.bias-pill-untracked { color: var(--text-dim); border-color: var(--border); }

.desk-bias-price,
.desk-bias-pnl {
  text-align: right;
  white-space: nowrap;
}

.desk-bias-chips,
.bias-chip-cell {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  min-width: 0;
}

.desk-age-fresh,
.age-fresh { color: var(--positive-bright); border-color: var(--positive); }
.desk-age-stale,
.age-stale { color: var(--warn); border-color: var(--warn); }
.desk-age-old,
.age-old,
.desk-age-missing,
.age-missing { color: var(--text-dim); border-color: var(--border); }

.bias-layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 300px;
  gap: 16px;
  align-items: start;
}

.bias-subaccount-title {
  padding: 10px 14px;
  border-bottom: 1px solid var(--border);
  background: var(--bg-elev);
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--text-muted);
}
.bias-subaccount-title span { color: var(--accent); margin-left: 6px; }

.bias-detail-panel {
  position: sticky;
  top: 82px;
  padding: 16px;
  border: 1px solid var(--border);
  background: var(--bg-panel);
}

.bias-detail-head {
  display: flex;
  align-items: center;
  gap: 12px;
}

.bias-detail-kicker {
  font-family: 'Cinzel', serif;
  font-size: 18px;
  letter-spacing: 0.16em;
  color: var(--text);
}
.bias-detail-sub,
.bias-detail-title {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  color: var(--text-muted);
  letter-spacing: 0.08em;
}
.bias-detail-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  margin: 14px 0;
}
.bias-detail-grid span {
  padding: 8px;
  border: 1px solid var(--border);
  background: var(--bg-void);
}
.bias-detail-grid em {
  display: block;
  font-style: normal;
  font-size: 9px;
  color: var(--text-dim);
}
.bias-detail-section { margin-top: 12px; }
.bias-wheel-card {
  margin: 14px 0;
  padding: 12px;
  border: 1px solid var(--border-bright);
  background: var(--bg-void);
}
.bias-wheel-next {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px;
  padding-bottom: 10px;
  border-bottom: 1px solid var(--border);
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
}
.bias-wheel-stats,
.bias-wheel-roi {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  margin-top: 10px;
}
.bias-wheel-stats span,
.bias-wheel-roi span {
  min-width: 0;
  padding: 7px;
  border: 1px solid var(--border);
  background: var(--bg-panel);
}
.bias-wheel-stats em,
.bias-wheel-roi em {
  display: block;
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  font-style: normal;
  color: var(--text-dim);
  letter-spacing: 0.12em;
}
.bias-wheel-stats strong,
.bias-wheel-roi strong {
  display: block;
  margin-top: 2px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
}
.bias-wheel-stats small {
  display: block;
  margin-top: 2px;
  color: var(--text-dim);
  font-size: 10px;
}
.bias-wheel-roi .muted {
  grid-column: 1 / -1;
  text-align: center;
}
.bias-wheel-foot {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px;
  margin-top: 10px;
}
.bias-detail-action {
  display: block;
  margin-top: 16px;
  padding: 8px 10px;
  border: 1px solid var(--border-bright);
  text-align: center;
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
}

@media (max-width: 1100px) {
  .desk-bias-grid,
  .bias-layout { grid-template-columns: 1fr; }
  .desk-bias-row { grid-template-columns: minmax(130px, 1fr) 86px 1fr; }
  .desk-bias-chips,
  .desk-age-pill { display: none; }
  .bias-detail-panel { position: static; }
}

@media (max-width: 760px) {
  .desk-bias-summary,
  .bias-summary-strip { grid-template-columns: 1fr 1fr; }
  .desk-bias-row { grid-template-columns: 1fr; align-items: start; }
  .desk-bias-price,
  .desk-bias-pnl { text-align: left; }
}

.ticker-cell {
  font-family: 'Cinzel', serif;
  font-size: 12px;
  color: var(--text);
  letter-spacing: 0.04em;
}

/* v2026-07-02 (Watch nav P1.1): Portfolio ticker/logo click-through to the Watch focus drill */
.watch-link { color: inherit; text-decoration: none; }
.watch-link:hover span, .watch-link:hover strong { text-decoration: underline; }

.position-meta {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  color: var(--text-dim);
  letter-spacing: 0.04em;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.tag-pill {
  display: inline-block;
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  padding: 2px 6px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  border: 1px solid var(--border-bright);
  color: var(--text-muted);
  border-radius: 2px;
}
.tag-pill.csp    { color: #4A8580; border-color: rgba(74,133,128,0.3); }
.tag-pill.cc     { color: #8C72AB; border-color: rgba(140,114,171,0.3); }
.tag-pill.spread { color: #D5B06B; border-color: rgba(213,176,107,0.3); }

@media (max-width: 1100px) {
  .cc-hero-grid       { grid-template-columns: 1fr; }
  .status-strip-simple { grid-template-columns: 1fr 1fr; }
  .position-row       { grid-template-columns: 70px 80px 1fr auto; gap: 8px; }
  .position-row > *:nth-child(n+5) { display: none; }
  .snapshot-meta-strip { flex-wrap: wrap; }
  .snap-meta-right     { margin-left: 0; width: 100%; padding-top: 4px; }
}

@media (max-width: 700px) {
  .income-pair { grid-template-columns: 1fr; }
}


/* ════════════════════════════════════════════════════════
   PHASE 4 — PORTFOLIO ENTRY UI
   ════════════════════════════════════════════════════════ */

/* Clay account — soft accent for form areas */
body[data-account="clay"] {
  --accent-soft: rgba(59, 130, 246, 0.1);
}

/* Account dot colors used in pills */
.dot-brad, .acct-pill-dot.dot-brad { background: #5A2520; }
.dot-mom, .acct-pill-dot.dot-mom { background: #B86F75; }
.dot-partner, .acct-pill-dot.dot-partner { background: #4A8580; }
.dot-kyleigh, .acct-pill-dot.dot-kyleigh { background: #8C72AB; }
.dot-clay, .acct-pill-dot.dot-clay { background: #4F6E96; }

.acct-pill-dot {
  display: inline-block;
  width: 8px; height: 8px;
  border-radius: 50%;
  margin-right: 8px;
  vertical-align: middle;
}

/* ─── Flash messages ─── */
.flash {
  padding: 14px 22px;
  margin-bottom: 18px;
  border-left: 3px solid var(--accent);
  background: var(--bg-elev);
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  letter-spacing: 0.04em;
}
.flash-success { border-left-color: var(--positive); color: var(--positive); }
.flash-error { border-left-color: var(--negative); color: var(--negative); }
.flash-info { border-left-color: var(--accent); color: var(--accent); }

/* ─── Portfolio header (account pills + sub-nav) ─── */
.portfolio-header {
  margin-bottom: 26px;
}

.portfolio-title-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding-bottom: 16px;
  border-bottom: 1px solid var(--border);
  margin-bottom: 14px;
}

.portfolio-title {
  font-family: 'Cinzel', serif;
  font-size: 13px;
  letter-spacing: 0.3em;
  color: var(--text-muted);
}

.portfolio-acct-pills {
  display: flex;
  gap: 8px;
}

.acct-pill {
  display: inline-flex;
  align-items: center;
  padding: 6px 14px;
  background: var(--bg-panel);
  border: 1px solid var(--border);
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  letter-spacing: 0.05em;
  color: var(--text-muted);
  text-decoration: none;
  text-transform: uppercase;
  transition: all 0.15s;
}
.acct-pill:hover { border-color: var(--border-bright); color: var(--text); }
.acct-pill.active {
  background: var(--bg-elev);
  border-color: var(--accent);
  color: var(--accent);
  box-shadow: 0 0 8px var(--accent-glow);
}

.portfolio-subnav {
  display: flex;
  gap: 0;
  border-bottom: 1px solid var(--border);
}

.subnav-tab {
  padding: 12px 22px;
  font-family: 'Cinzel', serif;
  font-size: 11px;
  letter-spacing: 0.18em;
  color: var(--text-muted);
  text-decoration: none;
  text-transform: uppercase;
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
  transition: all 0.15s;
}
.subnav-tab:hover { color: var(--text); }
.subnav-tab.active {
  color: var(--accent);
  border-bottom-color: var(--accent);
  background: var(--accent-soft);
}

/* ─── Entry forms ─── */
.entry-form-wrap {
  background: var(--bg-panel);
  border: 1px solid var(--border);
  padding: 22px 26px;
  margin-bottom: 24px;
}

.form-section-title {
  font-family: 'Cinzel', serif;
  font-size: 11px;
  letter-spacing: 0.22em;
  color: var(--text);
  text-transform: uppercase;
  margin-bottom: 18px;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--border);
}
.form-section-title.danger { color: var(--negative); }
.form-section-title .muted { color: var(--text-muted); font-weight: normal; letter-spacing: 0.04em; }

.entry-form, .entry-form-compact {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.form-row {
  display: flex;
  gap: 14px;
  align-items: flex-end;
  flex-wrap: wrap;
}

.form-field {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 120px;
}
.form-field.flex-grow { flex-grow: 1; }

.form-field label {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.18em;
  color: var(--text-muted);
  text-transform: uppercase;
}

.form-field input[type="text"],
.form-field input[type="number"],
.form-field input[type="date"],
.form-field select {
  background: var(--bg);
  border: 1px solid var(--border);
  color: var(--text);
  padding: 9px 12px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  letter-spacing: 0.02em;
  outline: none;
  transition: border-color 0.15s;
}
.form-field input:focus,
.form-field select:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 1px var(--accent-glow);
}

.form-meta {
  font-family: 'Outfit', sans-serif;
  font-size: 11px;
  color: var(--text-dim);
  font-style: italic;
  padding: 6px 0;
}

.btn-primary,
.btn-primary-sm,
.btn-danger {
  font-family: 'Cinzel', serif;
  font-size: 11px;
  letter-spacing: 0.16em;
  padding: 9px 22px;
  text-transform: uppercase;
  border: 1px solid var(--accent);
  color: var(--bg);
  background: var(--accent);
  cursor: pointer;
  transition: all 0.15s;
  white-space: nowrap;
}
.btn-primary:hover { box-shadow: 0 0 16px var(--accent-glow); }
.btn-primary-sm {
  padding: 7px 16px;
  font-size: 10px;
  letter-spacing: 0.12em;
}
.btn-danger {
  border-color: var(--negative);
  background: var(--negative);
  color: white;
}
.btn-danger:hover { box-shadow: 0 0 16px rgba(255, 71, 87, 0.4); }

.btn-mini, .btn-mini-link {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  padding: 4px 12px;
  background: transparent;
  border: 1px solid var(--border-bright);
  color: var(--text-muted);
  cursor: pointer;
  letter-spacing: 0.04em;
  text-decoration: none;
  display: inline-block;
}
.btn-mini:hover { color: var(--accent); border-color: var(--accent); }
.btn-mini-link:hover { color: var(--accent); border-color: var(--accent); }

.btn-icon-delete {
  background: transparent;
  border: none;
  color: var(--text-dim);
  font-size: 16px;
  cursor: pointer;
  padding: 0 6px;
}
.btn-icon-delete:hover { color: var(--negative); }

/* ─── Data tables ─── */
.data-panel {
  background: var(--bg-panel);
  border: 1px solid var(--border);
  margin-bottom: 24px;
}

.data-panel-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 14px 22px;
  border-bottom: 1px solid var(--border);
}

.data-panel-title {
  font-family: 'Cinzel', serif;
  font-size: 11px;
  letter-spacing: 0.22em;
  color: var(--text);
  text-transform: uppercase;
}

.data-panel-meta {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  color: var(--text-muted);
  letter-spacing: 0.05em;
}

.breakdown-strip {
  padding: 10px 22px;
  background: var(--bg-elev);
  border-bottom: 1px solid var(--border);
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
}
.breakdown-label {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.16em;
  color: var(--text-muted);
  text-transform: uppercase;
}
.breakdown-pill {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  padding: 4px 10px;
  background: var(--bg);
  border: 1px solid var(--border);
  color: var(--text-muted);
}
.breakdown-pill strong { color: var(--text); }

.data-table {
  width: 100%;
  border-collapse: collapse;
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
}
.data-table thead th {
  background: var(--bg-elev);
  padding: 10px 14px;
  text-align: left;
  font-size: 9px;
  letter-spacing: 0.16em;
  color: var(--text-muted);
  text-transform: uppercase;
  font-weight: normal;
  border-bottom: 1px solid var(--border);
}
.data-table thead th.numeric { text-align: right; }

.data-table tbody td {
  padding: 10px 14px;
  border-bottom: 1px solid var(--border);
  color: var(--text);
}
.data-table tbody td.numeric { text-align: right; }
.data-table tbody td.mono { font-family: 'JetBrains Mono', monospace; }
.data-table tbody td.muted { color: var(--text-muted); }
/* Ticker cells inside data tables: use bright body text instead of the
   per-account accent color. The accent on dark themes (mine=#8B3A30
   oxblood, mom=#B86F75 dusty rose) is too dark for table-row legibility.
   The Cinzel serif + slight bold already gives the ticker visual weight
   without needing color identity. */
.data-table tbody td.ticker-cell { color: var(--text); font-weight: 600; }

.data-table tbody tr:hover { background: var(--bg-elev); }
.data-table.compact thead th, .data-table.compact tbody td {
  padding: 7px 12px;
  font-size: 11px;
}

.amount-positive { color: var(--positive); }
.amount-negative { color: var(--negative); }

.data-empty {
  padding: 32px 22px;
  text-align: center;
  font-family: 'Outfit', sans-serif;
  font-size: 13px;
  color: var(--text-muted);
}
.data-empty a { color: var(--accent); }

.row-actions {
  display: flex;
  gap: 6px;
  align-items: center;
}

/* Inline form (expand-collapse close/sell sub-rows) */
.inline-form-row {
  display: none;
}
.inline-form-row.open {
  display: table-row;
  animation: slideDown 0.15s ease-out;
}
.inline-form-row > td {
  background: var(--bg-elev);
  padding: 14px 22px !important;
  border-top: 1px solid var(--accent);
}
.inline-form {
  display: flex;
  gap: 12px;
  align-items: flex-end;
  flex-wrap: wrap;
}
.inline-form label {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.14em;
  color: var(--text-muted);
  margin-right: -8px;
  align-self: center;
  text-transform: uppercase;
}
.inline-form input, .inline-form select {
  background: var(--bg);
  border: 1px solid var(--border);
  color: var(--text);
  padding: 6px 10px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  outline: none;
}
.inline-form input:focus, .inline-form select:focus { border-color: var(--accent); }
.inline-label {
  font-family: 'Cinzel', serif;
  font-size: 10px;
  letter-spacing: 0.2em;
  color: var(--accent);
  text-transform: uppercase;
  margin-right: 8px;
  align-self: center;
}

@keyframes slideDown {
  from { opacity: 0; transform: translateY(-4px); }
  to { opacity: 1; transform: translateY(0); }
}

/* Type pills (CSP, CC, etc) */
.type-pill {
  display: inline-block;
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  padding: 2px 7px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  border: 1px solid;
  border-radius: 2px;
}
.type-pill.type-csp, .type-pill.csp { color: #4A8580; border-color: rgba(74,133,128,0.3); }
.type-pill.type-cc, .type-pill.cc { color: #8C72AB; border-color: rgba(140,114,171,0.3); }
.type-pill.type-long_call { color: #73B27B; border-color: rgba(115,178,123,0.3); }
.type-pill.type-long_put { color: #C86A6A; border-color: rgba(200,106,106,0.3); }
.type-pill.type-deposit, .type-pill.type-roll_credit { color: var(--positive); border-color: rgba(0,232,156,0.3); }
.type-pill.type-withdrawal, .type-pill.type-transfer_out, .type-pill.type-roll_debit { color: var(--negative); border-color: rgba(255,107,107,0.3); }
.type-pill.type-option_open { color: #4A8580; border-color: rgba(74,133,128,0.3); }
.type-pill.type-option_close, .type-pill.type-spread_close { color: #8C72AB; border-color: rgba(140,114,171,0.3); }
.type-pill.type-share_buy { color: #C86A6A; border-color: rgba(200,106,106,0.3); }
.type-pill.type-share_sell { color: #73B27B; border-color: rgba(115,178,123,0.3); }
.type-pill.type-spread_open, .type-pill.spread { color: #D5B06B; border-color: rgba(213,176,107,0.3); }
.type-pill.type-manual_set { color: var(--text-muted); border-color: var(--border-bright); }

/* ─── Transfers grid (Kyleigh + Clay side by side) ─── */
.transfers-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 20px;
}

.transfer-panel {
  background: var(--bg-panel);
  border: 1px solid var(--border);
  padding: 20px 22px;
}

.transfer-panel-header {
  display: flex;
  align-items: center;
  gap: 10px;
  padding-bottom: 14px;
  margin-bottom: 16px;
  border-bottom: 1px solid var(--border);
}

.transfer-name {
  display: inline-block;
  width: 12px; height: 12px;
  border-radius: 50%;
}

.transfer-title {
  font-family: 'Cinzel', serif;
  font-size: 14px;
  letter-spacing: 0.18em;
  color: var(--text);
  text-transform: uppercase;
  flex-grow: 1;
}

.transfer-balance {
  font-family: 'JetBrains Mono', monospace;
  font-size: 18px;
  font-weight: 600;
  color: var(--accent);
}

.transfer-ledger {
  margin-top: 16px;
}

/* ─── Settings ─── */
.settings-grid {
  display: grid;
  grid-template-columns: 1fr 1.3fr;
  gap: 20px;
}

.danger-wrap {
  border-color: rgba(255, 71, 87, 0.3);
  background: linear-gradient(180deg, rgba(255,71,87,0.04), var(--bg-panel));
}

.danger-text {
  font-family: 'Outfit', sans-serif;
  font-size: 13px;
  color: var(--text-muted);
  line-height: 1.6;
  margin-bottom: 14px;
}
.danger-text strong { color: var(--accent); }

@media (max-width: 1100px) {
  .transfers-grid { grid-template-columns: 1fr; }
  .settings-grid { grid-template-columns: 1fr; }
  .form-row { flex-wrap: wrap; }
  .portfolio-subnav { overflow-x: auto; }
}



/* ════════════════════════════════════════════════════════
   PHASE 4 POLISH — Smart delete, edit, undo
   ════════════════════════════════════════════════════════ */

/* Mini button variants */
.btn-mini-danger {
  border-color: #A14F4F;
  color: #C86A6A;
  background: rgba(255, 71, 87, 0.08);
}
.btn-mini-danger:hover {
  border-color: var(--negative);
  color: white;
  background: var(--negative);
}

.btn-mini-warn {
  border-color: #D5B06B;
  color: #E2C282;
  background: rgba(213, 176, 107, 0.08);
}
.btn-mini-warn:hover {
  border-color: #D5B06B;
  color: var(--bg);
  background: #D5B06B;
}

/* Inline form metadata text */
.inline-meta {
  font-family: 'Outfit', sans-serif;
  font-size: 11px;
  color: var(--text-dim);
  font-style: italic;
  align-self: center;
  margin-left: 8px;
}

/* Modal overlay */
.modal-backdrop {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.7);
  backdrop-filter: blur(4px);
  z-index: 1000;
  align-items: center;
  justify-content: center;
}
.modal-backdrop.open {
  display: flex;
  animation: modalFade 0.15s ease-out;
}

@keyframes modalFade {
  from { opacity: 0; }
  to { opacity: 1; }
}

.modal {
  background: var(--bg-panel);
  border: 1px solid var(--border-bright);
  box-shadow: 0 0 60px rgba(255, 71, 87, 0.15);
  width: 90%;
  max-width: 580px;
  max-height: 80vh;
  display: flex;
  flex-direction: column;
}

.modal-header {
  padding: 16px 22px;
  border-bottom: 1px solid var(--border);
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-family: 'Cinzel', serif;
  font-size: 13px;
  letter-spacing: 0.16em;
  color: var(--negative);
  text-transform: uppercase;
}

.modal-close {
  background: transparent;
  border: none;
  color: var(--text-muted);
  font-size: 22px;
  cursor: pointer;
  line-height: 1;
}
.modal-close:hover { color: var(--text); }

.modal-body {
  padding: 22px;
  overflow-y: auto;
  flex-grow: 1;
}

.modal-body p {
  font-family: 'Outfit', sans-serif;
  color: var(--text);
  font-size: 14px;
  margin: 0 0 16px;
  line-height: 1.5;
}

.modal-section-title {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.18em;
  color: var(--text-muted);
  text-transform: uppercase;
  margin: 16px 0 10px;
}

.modal-cash-ul {
  list-style: none;
  padding: 0;
  margin: 0 0 14px;
  background: var(--bg-elev);
  border: 1px solid var(--border);
}
.modal-cash-ul li {
  padding: 8px 14px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--text);
  border-bottom: 1px solid var(--border);
}
.modal-cash-ul li:last-child { border-bottom: none; }

.modal-checkbox {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  font-family: 'Outfit', sans-serif;
  font-size: 13px;
  color: var(--text);
  cursor: pointer;
  padding: 10px 14px;
  background: var(--bg-elev);
  border-left: 2px solid var(--accent);
}
.modal-checkbox input[type="checkbox"] {
  margin-top: 3px;
  cursor: pointer;
}
.modal-checkbox .muted {
  display: block;
  font-size: 11px;
  color: var(--text-muted);
  margin-top: 2px;
}

.modal-meta {
  font-family: 'Outfit', sans-serif;
  font-size: 13px;
  color: var(--text-muted);
  font-style: italic;
  padding: 10px 0;
}

.modal-footer {
  padding: 14px 22px;
  border-top: 1px solid var(--border);
  display: flex;
  justify-content: flex-end;
  gap: 10px;
}

/* Audit log section */
.audit-help-text {
  padding: 14px 22px;
  background: var(--bg-elev);
  border-bottom: 1px solid var(--border);
  font-family: 'Outfit', sans-serif;
  font-size: 12px;
  color: var(--text-muted);
  line-height: 1.5;
  margin: 0;
}
.audit-help-text strong { color: var(--accent); }

.audit-op {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  letter-spacing: 0.04em;
  color: var(--text-muted);
}
.audit-op-undoable { color: var(--text); }



/* ════════════════════════════════════════════════════════
   FAMILY TAGLINES & TRIBUTE
   ════════════════════════════════════════════════════════ */

/* Login page — small tagline under "Command Console" */
.login-tagline {
  font-family: 'Outfit', sans-serif;
  font-size: 10px;
  letter-spacing: 0.16em;
  color: var(--text-muted);
  margin-top: 8px;
  text-transform: uppercase;
  font-weight: 300;
  text-align: center;
  font-style: italic;
}

/* legacy-v1: Command Center / Desk — family tribute with brass framing */
.family-tribute {
  position: relative;
  text-align: center;
  padding: 30px 22px 26px;
  margin: 24px 0 22px;
  background: var(--bg-panel);
  border: 1px solid var(--border);
  border-top: 1px solid var(--brass-deep);
  border-bottom: 1px solid var(--brass-deep);
  overflow: hidden;
}

.family-tribute::before,
.family-tribute::after {
  content: "";
  position: absolute;
  top: 50%;
  width: 110px;
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--brass-deep), transparent);
  opacity: 0.7;
}
.family-tribute::before { left: 18px; }
.family-tribute::after  { right: 18px; }

.tribute-line-primary {
  display: flex;
  justify-content: center;
  align-items: baseline;
  gap: 22px;
  flex-wrap: wrap;
}

.tribute-name {
  /* legacy-v1: stable brass identity, no per-account glow shift */
  font-family: 'Cinzel', serif;
  font-size: 17px;
  font-weight: 500;
  letter-spacing: 0.34em;
  color: var(--brass);
  text-transform: uppercase;
}

.tribute-sep {
  /* legacy-v1: brass diamond ornament */
  font-family: 'Cormorant Garamond', serif;
  font-size: 14px;
  color: var(--brass-deep);
  letter-spacing: 0;
}

.tribute-line-secondary {
  /* legacy-v1: italic Cormorant — quiet, not all-caps */
  font-family: 'Cormorant Garamond', serif;
  font-size: 14px;
  font-style: italic;
  letter-spacing: 0.05em;
  color: var(--text-muted);
  margin-top: 14px;
  text-transform: none;
  font-weight: 400;
}

/* Rotating family roster — lives inside .family-tribute as the second
   line. Replaces the standalone .family-panel (retired 2026-05-30). */
.tribute-roster {
  position: relative;
  margin-top: 14px;
  text-align: center;
}

.tribute-roster-track {
  position: relative;
  min-height: 38px;
}

.tribute-roster-member {
  position: absolute;
  inset: 0;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: baseline;
  gap: 14px;
  opacity: 0;
  transition: opacity 0.6s ease;
  pointer-events: none;
}

.tribute-roster-member.active {
  opacity: 1;
  pointer-events: auto;
}

.tribute-roster-name {
  font-family: 'Cormorant Garamond', serif;
  font-size: 24px;
  font-weight: 500;
  color: var(--brass);
  letter-spacing: 0.03em;
}

.tribute-roster-relation {
  font-family: 'Outfit', sans-serif;
  font-size: 13px;
  font-weight: 400;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--text-muted);
}

.tribute-roster-dots {
  display: flex;
  justify-content: center;
  gap: 6px;
  margin-top: 10px;
}

.tribute-roster-dot {
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--border-bright);
  cursor: pointer;
  opacity: 0.6;
  transition: all 0.2s;
}

.tribute-roster-dot:hover { opacity: 0.9; }

.tribute-roster-dot.active {
  background: var(--brass);
  opacity: 1;
}

/* Trading page tagline — bigger, more declarative */
.trading-tagline {
  text-align: center;
  padding: 26px 22px 28px;
  margin: 0 0 28px;
  background:
    radial-gradient(ellipse at center, var(--accent-glow) 0%, transparent 60%),
    var(--bg-panel);
  border: 1px solid var(--border);
  border-left: 2px solid var(--accent);
  border-right: 2px solid var(--accent);
}

.tagline-primary {
  font-family: 'Cinzel', serif;
  font-size: 18px;
  letter-spacing: 0.18em;
  color: var(--accent-bright, var(--accent));
  text-transform: uppercase;
  text-shadow: 0 0 18px var(--accent-glow);
  line-height: 1.4;
}

.tagline-secondary {
  font-family: 'Outfit', sans-serif;
  font-size: 12px;
  letter-spacing: 0.18em;
  color: var(--text-muted);
  margin-top: 12px;
  text-transform: uppercase;
  font-weight: 300;
}

@media (max-width: 700px) {
  .tribute-line-primary { gap: 8px; }
  .tribute-name { font-size: 11px; letter-spacing: 0.22em; }
  .family-tribute::before, .family-tribute::after { display: none; }
  .tagline-primary { font-size: 14px; letter-spacing: 0.12em; }
}



/* ════════════════════════════════════════════════════════
   POLISH ROUND 3
   ════════════════════════════════════════════════════════ */

/* Dropdown options — fix readability on dark theme.
   Browsers default <option> to system colors which often render
   as light gray on white (terrible on dark UI). Force dark bg + light text. */
.form-field select option,
.inline-form select option {
  background: #171A1D;
  color: #E8DFC9;
  font-family: 'JetBrains Mono', monospace;
  font-size: 13px;
  padding: 6px 10px;
}
.form-field select option:checked,
.inline-form select option:checked {
  background: #22272B;
  color: var(--accent-bright, var(--accent));
}
.form-field select option:hover,
.inline-form select option:hover {
  background: #22272B;
}

/* Pill-theme classes — let right-pill carry its own dot color
   regardless of the global accent. Used on Portfolio entry pills. */
.acct-pill.pill-theme-mine .acct-pill-dot,
.acct-pill .dot-mine    { background: #5A2520; }
.acct-pill.pill-theme-mom .acct-pill-dot,
.acct-pill .dot-mom     { background: #B86F75; }
.acct-pill.pill-theme-partner .acct-pill-dot,
.acct-pill .dot-partner { background: #4A8580; }
.acct-pill.pill-theme-combined .acct-pill-dot,
.acct-pill .dot-combined { background: #4F8A57; }



/* ════════════════════════════════════════════════════════
   PHASE 4.5 — CAPITAL PROGRESSION + CASH BREAKDOWN
   ════════════════════════════════════════════════════════ */

/* "Live" indicator on snapshot meta strip */
.snapshot-meta-strip.live .snap-label { color: var(--positive); }
.snapshot-meta-strip.live .snap-label::before {
  content: "● ";
  color: var(--positive);
  animation: pulse 2s ease-in-out infinite;
}

@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.4; }
}

/* Cash breakdown card — sub-account list */
.cash-breakdown-card {
  background: var(--bg-panel);
  border: 1px solid var(--border);
  padding: 14px 18px;
}

/* ─── Phase 4.5+ — Active Wheels card grid ─── */
.wheels-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(290px, 1fr));
  gap: 14px;
  padding: 14px;
}

.wheel-card {
  background: linear-gradient(180deg, var(--bg-elev) 0%, var(--bg-panel) 100%);
  border: 1px solid var(--border-bright);
  border-left: 3px solid var(--accent);
  padding: 16px 18px 14px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  position: relative;
  transition: border-color 0.15s, box-shadow 0.15s;
}
.wheel-card:hover {
  border-left-color: var(--accent);
  box-shadow: 0 0 24px rgba(255, 255, 255, 0.04);
}
.wheel-card.phase-active_csp_phase {
  border-left-color: var(--neutral);
}
.wheel-card.phase-active_holding {
  border-left-color: var(--accent);
}

.wheel-card-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
}
.wheel-card-ticker {
  font-family: 'Cinzel', serif;
  font-size: 24px;
  letter-spacing: 0.04em;
  color: var(--text);
  line-height: 1;
}
.wheel-card-spot {
  font-family: 'JetBrains Mono', monospace;
  font-size: 13px;
  text-align: right;
  line-height: 1.1;
}
.wheel-card-spot .spot-price {
  font-weight: 600;
}
.wheel-card-spot .spot-change {
  display: block;
  font-size: 10px;
  opacity: 0.85;
}
.wheel-card-spot .spot-change.up { color: var(--positive); }
.wheel-card-spot .spot-change.down { color: var(--negative); }

.wheel-card-sub {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--text-muted);
  margin-top: -6px;
}

.wheel-card-stat-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
  margin-top: 6px;
}
.wheel-stat {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.wheel-stat-label {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--text-muted);
}
.wheel-stat-value {
  font-family: 'JetBrains Mono', monospace;
  font-size: 17px;
  font-weight: 600;
  color: var(--text);
}
.wheel-stat-sub {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
}

/* Prominent 'next contract' line — shows the soonest-expiring open
   CSP / CC with strike + expiry date. Sits just above the
   PREMIUM / shares stat grid so it reads as the position's headline
   actionable contract. Brad: 'prominently display strike + date'. */
.wheel-card-next {
  display: flex;
  align-items: baseline;
  gap: 8px;
  margin: 10px 0 4px;
  padding: 6px 10px;
  background: var(--bg-elev);
  border-left: 2px solid var(--accent);
  font-family: 'JetBrains Mono', monospace;
}

.wheel-next-type {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.14em;
  padding: 2px 7px;
  border-radius: 2px;
  border: 1px solid var(--border-bright);
  color: var(--text-muted);
}

.wheel-next-type-cc {
  border-color: rgba(213, 176, 107, 0.55);
  color: var(--neutral, #d5b079);
}

.wheel-next-type-csp {
  border-color: rgba(95, 179, 107, 0.55);
  color: var(--positive-bright);
}

.wheel-next-strike {
  font-size: 18px;
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--text);
}

.wheel-next-contracts {
  font-size: 12px;
  color: var(--text-muted);
  letter-spacing: 0.02em;
}

.wheel-next-sep {
  color: var(--text-muted);
  opacity: 0.5;
}

.wheel-next-exp {
  font-size: 13px;
  color: var(--text);
  letter-spacing: 0.02em;
  margin-left: auto;
}

.wheel-next-exp.dte-near {
  color: var(--warn, #d5b079);
}

.wheel-next-exp.dte-past {
  color: var(--negative-bright);
}

/* Strike Appreciation / "If assigned" line on wheel cards. Renders
   above the pill foot. Color carries the actionable signal:
     OTM (default white)  → strike appreciation theoretical;
                              shares safely below assignment zone
     ITM (green)          → at least one CC is in assignment
                              territory; gain is likely to realize
   Class applied by the spot-loader JS once /api/spot-prices returns. */
.wheel-card-assign {
  display: flex;
  align-items: baseline;
  gap: 10px;
  margin-top: 10px;
  padding: 6px 10px;
  background: var(--bg-elev);
  border-left: 2px solid var(--border-bright);
  font-family: 'JetBrains Mono', monospace;
}

.wheel-assign-label {
  font-size: 10px;
  color: var(--text-muted);
  letter-spacing: 0.14em;
  text-transform: uppercase;
}

.wheel-assign-value {
  font-size: 15px;
  font-weight: 600;
  letter-spacing: -0.02em;
  /* default = OTM = white text (theoretical assignment gain). The
     spot-loader JS adds .itm to turn it green when the position is
     actually in assignment territory. */
  color: var(--text);
}

.wheel-card-assign.itm {
  border-left-color: var(--positive-bright);
}

.wheel-card-assign.itm .wheel-assign-value {
  color: var(--positive-bright);
  text-shadow: 0 0 8px rgba(95, 179, 107, 0.25);
}

.wheel-assign-pct {
  font-size: 11px;
  font-weight: 400;
  margin-left: 4px;
  opacity: 0.85;
  letter-spacing: 0.02em;
}

.wheel-assign-zone {
  margin-left: auto;
  font-size: 9px;
  font-weight: 500;
  letter-spacing: 0.14em;
  padding: 2px 7px;
  border: 1px solid var(--border-bright);
  color: var(--text-muted);
  border-radius: 2px;
}

/* ROI strip — sits just below the If-Assigned line. Premium yield
   to date + steady-state weekly pace. Capital denominator shown to
   the right so Brad can sense-check the math. */
.wheel-card-roi {
  display: flex;
  align-items: baseline;
  gap: 10px;
  margin-top: 6px;
  padding: 4px 10px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--text-muted);
}

.wheel-roi-cell {
  display: inline-flex;
  align-items: baseline;
  gap: 5px;
}

.wheel-roi-label {
  font-size: 9px;
  letter-spacing: 0.12em;
  color: var(--text-muted);
  opacity: 0.8;
}

.wheel-roi-value {
  font-size: 13px;
  font-weight: 600;
  letter-spacing: -0.02em;
}

.wheel-roi-sep {
  color: var(--text-muted);
  opacity: 0.4;
}

.wheel-roi-cap {
  margin-left: auto;
  font-size: 10px;
  color: var(--text-muted);
  opacity: 0.7;
  letter-spacing: 0.02em;
  font-style: italic;
}

.wheel-card-assign.itm .wheel-assign-zone {
  border-color: var(--positive-bright);
  color: var(--positive-bright);
}

/* DTE pill — yellow tint when ≤ 7 days, red when past expiry */
.wheel-dte-pill {
  font-variant-numeric: tabular-nums;
}
.wheel-dte-pill.dte-near {
  border-color: var(--warn, #d5b079);
  color: var(--warn, #d5b079);
}
.wheel-dte-pill.dte-past {
  border-color: var(--negative-bright);
  color: var(--negative-bright);
}

.wheel-card-foot {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
  margin-top: 4px;
}
.wheel-pill {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.12em;
  padding: 3px 8px;
  border: 1px solid var(--border-bright);
  color: var(--text-muted);
  border-radius: 2px;
}
.wheel-pill.csp-pill {
  border-color: rgba(0, 232, 156, 0.4);
  color: var(--positive);
}
.wheel-pill.cc-pill {
  border-color: rgba(213, 176, 107, 0.4);
  color: var(--neutral);
}
.wheel-card-status {
  margin-left: auto;
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--text-muted);
}

.wheel-card-events-toggle {
  display: block;
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.14em;
  color: var(--text-muted);
  text-transform: uppercase;
  cursor: pointer;
  padding-top: 8px;
  border-top: 1px solid var(--border);
  user-select: none;
}
.wheel-card-events-toggle:hover { color: var(--text); }

.wheel-card-events {
  display: none;
  flex-direction: column;
  gap: 4px;
  padding-top: 6px;
}
.campaign-toggle:checked ~ .wheel-card-events { display: flex; }

/* ═══════════════════════════════════════════════════════
   WATCHLIST · live spot prices on Command tab
   ═══════════════════════════════════════════════════════ */
.watchlist-section { margin: 18px 0 24px 0; }
.watchlist-header {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin-bottom: 12px;
  padding: 0 4px;
}
.watchlist-header .section-eyebrow { margin: 0; }
.watchlist-meta { font-size: 10px; font-style: italic; }
/* Auto-scrolling marquee. Two identical sets inside .watchlist-track;
   the track translates left by exactly one set's width (50% of the
   total track) so the second set arrives precisely where the first
   set started — seamless infinite loop with no visible jump.
   Hover / focus pauses. Soft fade-mask on left+right edges so cards
   appear to drift in/out gracefully rather than hard-clipping. */
.watchlist-grid {
  overflow: hidden;
  position: relative;
  -webkit-mask-image: linear-gradient(to right, transparent 0, black 4%, black 96%, transparent 100%);
          mask-image: linear-gradient(to right, transparent 0, black 4%, black 96%, transparent 100%);
}

.watchlist-track {
  display: flex;
  width: max-content;
  animation: watchlist-marquee 90s linear infinite;
}

.watchlist-set {
  display: flex;
  gap: 10px;
  padding-right: 10px;  /* matches gap so duplicates butt up cleanly */
}

.watchlist-grid:hover .watchlist-track,
.watchlist-grid:focus-within .watchlist-track {
  animation-play-state: paused;
}

@keyframes watchlist-marquee {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}

/* Honor reduced-motion preference — no infinite movement for users
   who set the OS-level setting. */
@media (prefers-reduced-motion: reduce) {
  .watchlist-track {
    animation: none;
  }
  .watchlist-grid {
    overflow-x: auto;
    -webkit-mask-image: none;
            mask-image: none;
  }
}

.watchlist-card {
  flex: 0 0 200px;
  background: var(--bg-panel);
  border: 1px solid var(--border);
  border-left: 3px solid var(--border-bright);
  padding: 12px 14px;
  transition: all 0.15s;
}
.watchlist-card:hover {
  border-color: var(--border-bright);
  background: var(--bg-elev);
}
.watchlist-card.positive { border-left-color: var(--positive); }
.watchlist-card.negative { border-left-color: var(--negative); }
.watch-ticker-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 8px;
}
.watch-ticker {
  font-family: 'Cinzel', serif;
  font-size: 18px;
  font-weight: 600;
  letter-spacing: 0.06em;
  color: var(--text);
}
.watch-pills { display: flex; gap: 4px; }
.watch-pill {
  font-family: 'JetBrains Mono', monospace;
  font-size: 8px;
  letter-spacing: 0.08em;
  padding: 1px 5px;
  border: 1px solid var(--border-bright);
  color: var(--text-muted);
  text-transform: uppercase;
}
.watch-pill.csp { color: #4A8580; border-color: rgba(74, 133, 128, 0.4); }
.watch-pill.cc  { color: #B86F75; border-color: rgba(184, 111, 117, 0.4); }
.watch-pill.sh  { color: var(--positive); border-color: rgba(0, 232, 156, 0.4); }
.watch-pill.spr { color: #D5B06B; border-color: rgba(213, 176, 107, 0.4); }
.watch-price {
  font-family: 'JetBrains Mono', monospace;
  font-size: 22px;
  font-weight: 600;
  color: var(--text);
  letter-spacing: -0.02em;
}
.watch-change {
  font-family: 'JetBrains Mono', monospace;
  font-size: 13px;
  margin-top: 3px;
}
.watchlist-card.positive .watch-change { color: var(--positive); }
.watchlist-card.negative .watch-change { color: var(--negative); }
.watch-meta {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--text-dim);
  margin-top: 8px;
  letter-spacing: 0.04em;
}

.sub-breakdown-card {
  padding: 16px 20px;
  margin-top: 14px;
}
.sub-breakdown-card .data-table {
  width: 100%;
  font-size: 11px;
}
.sub-breakdown-card .data-table th {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.18em;
  color: var(--text-muted);
  text-transform: uppercase;
  padding: 6px 8px;
  border-bottom: 1px solid var(--border-bright);
  text-align: left;
}
.sub-breakdown-card .data-table th.numeric { text-align: right; }
.sub-breakdown-card .data-table td {
  padding: 7px 8px;
  border-bottom: 1px solid rgba(255, 255, 255, 0.04);
}
.sub-breakdown-card .data-table td.numeric { text-align: right; }
.sub-breakdown-card .data-table tr:last-child td { border-bottom: none; }
.sub-breakdown-legend {
  font-size: 10px;
  margin-top: 10px;
  font-style: italic;
}

.cash-breakdown-title {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.22em;
  color: var(--text-muted);
  text-transform: uppercase;
  margin-bottom: 10px;
}

.cash-breakdown-list {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.cash-breakdown-row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  padding: 5px 0;
  border-bottom: 1px solid rgba(255, 255, 255, 0.04);
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
}
.cash-breakdown-row:last-child { border-bottom: none; }

.cash-breakdown-label {
  color: var(--text);
  letter-spacing: 0.04em;
}
.cash-breakdown-label .muted {
  color: var(--text-dim);
  font-size: 10px;
}

.cash-breakdown-value {
  color: var(--text);
  font-weight: 600;
}

/* Capital progression bar — has a baseline marker at 50% (deposited line) */
.goal-progress {
  position: relative;
}

.goal-baseline-marker {
  position: absolute;
  left: 50%;
  top: -2px;
  bottom: -2px;
  width: 1px;
  background: var(--text-muted);
  opacity: 0.6;
}
.goal-baseline-marker::before {
  content: "deposited";
  position: absolute;
  left: 4px;
  top: -14px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 8px;
  color: var(--text-muted);
  letter-spacing: 0.1em;
  text-transform: uppercase;
}



/* ════════════════════════════════════════════════════════
   PHASE 4.5 — CLOSED HISTORY TOGGLE & FILTER
   ════════════════════════════════════════════════════════ */

.history-toggle-wrap {
  margin-top: 28px;
}

.history-toggle-header {
  padding: 10px 0 14px;
  border-top: 1px dashed var(--border);
}

.history-toggle-link {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--text-muted);
  text-decoration: none;
  padding: 6px 12px;
  border: 1px solid transparent;
  transition: color 0.15s, border-color 0.15s;
  display: inline-block;
}
.history-toggle-link:hover {
  color: var(--accent);
  border-color: var(--border);
}
.history-toggle-link.active {
  color: var(--accent);
  border-color: var(--accent);
  background: var(--accent-glow);
}

.history-filter-bar {
  background: var(--bg-elev);
  border: 1px solid var(--border);
  padding: 12px 16px;
  margin-bottom: 0;
}

.history-filter-form {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}

.history-filter-form label {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.18em;
  color: var(--text-muted);
  text-transform: uppercase;
}

.history-filter-form select,
.history-filter-form input[type="text"] {
  background: var(--bg-panel);
  border: 1px solid var(--border);
  color: var(--text);
  padding: 5px 10px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
}

/* Status pills for closed positions */
.status-pill {
  display: inline-block;
  padding: 2px 8px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  border: 1px solid var(--border);
}
.status-pill.status-closed   { color: var(--text); border-color: var(--text-muted); }
.status-pill.status-expired  { color: var(--positive); border-color: var(--positive); }
.status-pill.status-assigned { color: var(--neutral); border-color: var(--neutral); }
.status-pill.status-rolled   { color: var(--accent); border-color: var(--accent); }

/* Amount pos/neg colors for P&L cells */
.amount-positive { color: var(--positive) !important; }
.amount-negative { color: var(--negative) !important; }



/* ══════════════════════════════════════════════════════════
   PHASE 4.5 — Campaign cards, audit enrichment, auto-handle
   ══════════════════════════════════════════════════════════ */

/* ─── Auto-handle strip in close form ─── */
.auto-handle-strip {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin-top: 10px;
  padding: 8px 14px;
  background: var(--bg-elev);
  border-left: 2px solid var(--accent);
  font-family: 'Outfit', sans-serif;
  font-size: 11px;
  color: var(--text-muted);
}
.auto-handle-arrow {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.1em;
  color: var(--accent);
  text-transform: uppercase;
}
.auto-handle-text { color: var(--text); flex: 1 1 auto; min-width: 200px; }
.auto-handle-text strong { color: var(--accent); font-weight: 600; }
.auto-handle-radio-label {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.08em;
  color: var(--text);
  display: inline-flex;
  align-items: center;
  gap: 4px;
  cursor: pointer;
}
.auto-handle-radio-label input[type="radio"] {
  accent-color: var(--accent);
  margin: 0;
}

/* ─── Audit log enrichment ─── */
.audit-table .audit-row td {
  vertical-align: top;
  padding-top: 10px;
  padding-bottom: 10px;
}
.audit-expand-toggle { display: none; }
.audit-row-label {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: start;
  gap: 12px;
  cursor: pointer;
  padding: 0;
}
.audit-row-label .audit-op { padding-top: 1px; }
.audit-target {
  font-family: 'Outfit', sans-serif;
  line-height: 1.35;
}
.audit-target-headline {
  font-size: 13px;
  color: var(--text);
  font-weight: 500;
}
.audit-target-detail {
  font-size: 10px;
  color: var(--text-muted);
  letter-spacing: 0.02em;
  margin-top: 2px;
}
.audit-expand-chevron {
  color: var(--text-muted);
  font-size: 10px;
  transition: transform 0.15s ease;
  user-select: none;
  margin-top: 2px;
}
.audit-expand-toggle:checked ~ .audit-row-label .audit-expand-chevron {
  transform: rotate(180deg);
}
.audit-expand-content {
  display: none;
  margin-top: 10px;
  padding: 10px 14px;
  background: var(--bg-panel);
  border: 1px solid var(--border);
  border-left: 2px solid var(--accent);
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  color: var(--text-muted);
  line-height: 1.4;
  max-height: 320px;
  overflow: auto;
}
.audit-expand-toggle:checked ~ .audit-expand-content {
  display: block;
}
.audit-json {
  margin: 0;
  white-space: pre-wrap;
  word-break: break-word;
  font-size: 10px;
  color: var(--text-muted);
}

/* ─── Campaign cards ─── */
.campaigns-panel { margin-bottom: 24px; }
.campaigns-list {
  display: flex;
  flex-direction: column;
}
.campaign-card {
  border-bottom: 1px solid var(--border);
}
.campaign-card:last-child { border-bottom: none; }

.campaign-toggle { display: none; }

.campaign-card-header {
  display: block;
  padding: 14px 22px;
  cursor: pointer;
  transition: background 0.12s ease;
}
.campaign-card-header:hover { background: var(--bg-elev); }
.campaign-closed-header { cursor: default; }
.campaign-closed-header:hover { background: transparent; }

.campaign-title-row {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 6px;
}
.campaign-ticker {
  font-family: 'JetBrains Mono', monospace;
  font-size: 14px;
  font-weight: 700;
  color: var(--text);
  letter-spacing: 0.04em;
}
.campaign-sub {
  font-family: 'Outfit', sans-serif;
  font-size: 11px;
  color: var(--text-muted);
}
.campaign-status {
  display: inline-block;
  padding: 1px 7px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  border: 1px solid var(--border);
  margin-left: auto;
}
.campaign-status.status-active_csp_phase {
  color: var(--neutral);
  border-color: var(--neutral);
}
.campaign-status.status-active_holding {
  color: var(--accent);
  border-color: var(--accent);
}
.campaign-status.status-closed {
  color: var(--text-muted);
  border-color: var(--text-muted);
}
.campaign-chevron {
  color: var(--text-muted);
  font-size: 10px;
  margin-left: 8px;
  transition: transform 0.15s ease;
}
.campaign-toggle:checked ~ .campaign-card-header .campaign-chevron {
  transform: rotate(180deg);
}

.campaign-rollup-line {
  font-family: 'Outfit', sans-serif;
  font-size: 11px;
  color: var(--text);
  line-height: 1.5;
}
.campaign-rollup-line.muted { color: var(--text-muted); }
.campaign-rollup-line strong { font-weight: 600; }

.campaign-events {
  display: none;
  padding: 10px 28px 14px;
  background: var(--bg-elev);
  border-top: 1px dashed var(--border);
}
.campaign-toggle:checked ~ .campaign-events {
  display: block;
}
.campaign-events-title {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--text-muted);
  margin-bottom: 6px;
}
.campaign-event-row {
  display: grid;
  grid-template-columns: 90px 140px 1fr;
  gap: 10px;
  padding: 4px 0;
  font-size: 11px;
  border-bottom: 1px dotted var(--border);
}
.campaign-event-row:last-child { border-bottom: none; }
.campaign-event-date {
  font-size: 10px;
}
.campaign-event-type {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.04em;
  color: var(--accent);
  text-transform: uppercase;
}
.campaign-event-detail {
  font-size: 10px;
}

/* ─── Maintenance section on Settings ─── */
.maintenance-wrap {
  border-top: 2px solid var(--border);
  padding-top: 22px;
  margin-top: 22px;
}
.maintenance-text {
  font-family: 'Outfit', sans-serif;
  font-size: 12px;
  color: var(--text-muted);
  line-height: 1.5;
  margin-bottom: 12px;
}
.maintenance-actions {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
}

/* ─── Page-section header for retrofix etc. ─── */
.page-content {
  padding: 24px;
}
.page-section-header {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin-bottom: 12px;
}
.page-section-header h1 {
  font-family: 'Cinzel', serif;
  font-size: 22px;
  letter-spacing: 0.04em;
  color: var(--text);
  margin: 0;
}

.trading-row-section {
  margin: 18px 0 24px 0;
}

.trading-row-header {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin-bottom: 12px;
  padding: 0 4px;
}

.trading-row-eyebrow {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.18em;
  color: var(--text-muted);
  text-transform: uppercase;
}

.trading-row-meta {
  display: flex;
  align-items: center;
  gap: 8px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  color: var(--text-dim);
}

.trading-status-dot {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--positive);
  box-shadow: 0 0 6px var(--positive);
  transition: all 0.2s;
}
.trading-status-dot[data-state="stale"] {
  background: #B7924E;
  box-shadow: 0 0 6px rgba(183, 146, 78, 0.5);
}
.trading-status-dot[data-state="dead"] {
  background: var(--negative);
  box-shadow: 0 0 6px var(--negative);
}

.trading-row-error {
  background: rgba(255, 77, 109, 0.05);
  border: 1px solid rgba(255, 77, 109, 0.2);
  color: var(--negative);
  padding: 10px 14px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  margin-bottom: 12px;
}

.trading-row-table-wrap {
  overflow-x: auto;
  background: var(--bg-panel);
  border: 1px solid var(--border);
}

.trading-row-table {
  width: 100%;
  min-width: 1900px;
  border-collapse: collapse;
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
}

.trading-row-table thead th {
  text-align: left;
  padding: 10px 10px;
  background: var(--bg-elev);
  color: var(--text-muted);
  font-size: 9px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  font-weight: 500;
  border-bottom: 1px solid var(--border-bright);
  white-space: nowrap;
  position: sticky;
  top: 0;
  z-index: 1;
}

.trading-row-table tbody td {
  padding: 8px 10px;
  border-bottom: 1px solid var(--border);
  color: var(--text);
  white-space: nowrap;
}

.trading-row-table tbody tr:hover {
  background: var(--bg-elev);
}

/* Column-specific styles */
.trading-row-table .col-ticker {
  font-family: 'Cinzel', serif;
  font-size: 12px;
  letter-spacing: 0.04em;
  color: var(--text);
}

.trading-row-table .col-num {
  text-align: right;
  font-variant-numeric: tabular-nums;
}

.trading-row-table .cell-pct.positive { color: var(--positive); }
.trading-row-table .cell-pct.negative { color: var(--negative); }

.trading-row-table .col-loc { color: var(--text-muted); }
.trading-row-table .loc-in     { color: var(--text); }
.trading-row-table .loc-above  { color: #B7924E; }   /* warning yellow — above box */
.trading-row-table .loc-below  { color: var(--negative); }
.trading-row-table .loc-none   { color: var(--text-dim); }

.trading-row-table .col-time { color: var(--text-muted); }
.trading-row-table .col-side { color: var(--text-muted); }

.trading-row-table .col-dir { color: var(--text-muted); }
.trading-row-table .dir-bullish  { color: var(--positive); }
.trading-row-table .dir-bearish  { color: var(--negative); }

.trading-row-table .col-as { color: var(--text); }

.trading-row-table .col-bias { color: var(--text-muted); font-size: 10px; }
.trading-row-table .bias-strong-bullish { color: var(--positive); font-weight: 600; }
.trading-row-table .bias-bullish        { color: var(--positive); }
.trading-row-table .bias-slight-bullish { color: var(--positive); opacity: 0.7; }
.trading-row-table .bias-neutral        { color: var(--text-muted); }
.trading-row-table .bias-slight-bearish { color: var(--negative); opacity: 0.7; }
.trading-row-table .bias-bearish        { color: var(--negative); }
.trading-row-table .bias-strong-bearish { color: var(--negative); font-weight: 600; }

.trading-row-table .col-sign { color: var(--text-muted); }
.trading-row-table .sign-positive { color: var(--positive); }
.trading-row-table .sign-negative { color: var(--negative); }

/* ──────────────────────────────────────────────────────────
   TRADING CARD GRID — Day 2 ship
   Replaces the trading-row-table block from Day 1.
   Reuses existing design tokens. No new colors introduced.
   ────────────────────────────────────────────────────────── */

.trading-cards-section {
  margin: 18px 0 24px 0;
}

.trading-cards-header {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin-bottom: 12px;
  padding: 0 4px;
}

.trading-cards-eyebrow {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.18em;
  color: var(--text-muted);
  text-transform: uppercase;
}

.trading-cards-meta {
  display: flex;
  align-items: center;
  gap: 8px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  color: var(--text-dim);
}

.trading-cards-error {
  background: rgba(255, 77, 109, 0.05);
  border: 1px solid rgba(255, 77, 109, 0.2);
  color: var(--negative);
  padding: 10px 14px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  margin-bottom: 12px;
}

/* Status dot — same as Day 1 */
.trading-status-dot {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--positive);
  box-shadow: 0 0 6px var(--positive);
  transition: all 0.2s;
}
.trading-status-dot[data-state="stale"] {
  background: #B7924E;
  box-shadow: 0 0 6px rgba(183, 146, 78, 0.5);
}
.trading-status-dot[data-state="dead"] {
  background: var(--negative);
  box-shadow: 0 0 6px var(--negative);
}

/* ─── Card grid ────────────────────────────────────────── */
.trading-cards-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 12px;
}
@media (max-width: 1100px) {
  .trading-cards-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
@media (max-width: 700px) {
  .trading-cards-grid {
    grid-template-columns: 1fr;
  }
}

/* ─── v8.3 (Patch 2): Ticker search bar ───────────────────── */
.trading-cards-search {
  position: relative;
  margin: 0 4px 12px;
  max-width: 420px;
}
.trading-search-input {
  width: 100%;
  background: rgba(255, 255, 255, 0.02);
  border: 1px solid rgba(184, 175, 154, 0.18);
  border-radius: 4px;
  color: var(--text-muted);
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  letter-spacing: 0.04em;
  padding: 8px 32px 8px 12px;
  outline: none;
  transition: border-color 0.15s, box-shadow 0.15s, color 0.15s;
}
.trading-search-input::placeholder {
  color: rgba(184, 175, 154, 0.45);
}
.trading-search-input:focus {
  border-color: var(--accent);
  box-shadow: 0 0 6px var(--accent-glow);
  color: var(--accent-bright, var(--accent));
}
.trading-search-clear {
  position: absolute;
  top: 50%;
  right: 6px;
  transform: translateY(-50%);
  width: 22px;
  height: 22px;
  background: transparent;
  border: none;
  color: var(--text-muted);
  font-size: 18px;
  line-height: 1;
  cursor: pointer;
  padding: 0;
  border-radius: 3px;
  transition: color 0.15s, background 0.15s;
}
.trading-search-clear:hover {
  color: var(--accent);
  background: rgba(184, 175, 154, 0.08);
}

/* Hidden cards: collapsed entirely so the grid reflows into a tight result set. */
.tcard.tcard-hidden {
  display: none !important;
}

/* "No tickers match X" inline message. */
.trading-cards-empty {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--text-dim, var(--text-muted));
  padding: 16px 4px;
  letter-spacing: 0.04em;
}

/* ─── Single card ─────────────────────────────────────── */
.tcard {
  background: var(--bg-panel);
  border: 1px solid var(--border);
  border-left: 3px solid var(--border-bright);
  padding: 12px 14px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  transition: border-color 0.15s;
}
.tcard:hover {
  border-color: var(--border-bright);
}

/* Bias stripe — left-edge color encoding */
.tcard.stripe-bullish-strong { border-left-color: var(--positive); }
.tcard.stripe-bullish        { border-left-color: var(--positive); opacity: 1; }
.tcard.stripe-bullish-faint  { border-left-color: var(--positive); opacity: 0.7; }
.tcard.stripe-neutral        { border-left-color: var(--border-bright); }
.tcard.stripe-bearish-faint  { border-left-color: var(--negative); opacity: 0.7; }
.tcard.stripe-bearish        { border-left-color: var(--negative); }
.tcard.stripe-bearish-strong { border-left-color: var(--negative); }

/* Card opacity faint variants — use a softer text instead of card opacity
   so the bias stripe alone doesn't fade the entire card. */
.tcard.stripe-bullish-faint,
.tcard.stripe-bearish-faint {
  opacity: 1;
}

/* ─── Header ──────────────────────────────────────────── */
.tcard-header {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.tcard-title-row {
  display: flex;
  align-items: baseline;
  gap: 8px;
}

.tcard-ticker {
  font-family: 'Cinzel', serif;
  font-size: 16px;
  letter-spacing: 0.04em;
  color: var(--text);
}

.tcard-spot {
  font-family: 'JetBrains Mono', monospace;
  font-size: 13px;
  color: var(--text);
  font-variant-numeric: tabular-nums;
}

.tcard-pct {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  font-variant-numeric: tabular-nums;
}
.tcard-pct.positive { color: var(--positive); }
.tcard-pct.negative { color: var(--negative); }
.tcard-pct.muted    { color: var(--text-dim); }

.tcard-time {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  color: var(--text-dim);
  text-align: right;
  margin-top: -16px;
  align-self: flex-end;
}

/* ─── Pills row ───────────────────────────────────────── */
.tcard-pills {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
}

.tpill {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.04em;
  padding: 2px 6px;
  border: 1px solid var(--border-bright);
  color: var(--text-muted);
  background: transparent;
  text-transform: uppercase;
  border-radius: 0;
  white-space: nowrap;
}

.tpill-thesis.tpill-bullish-strong,
.tpill-thesis.tpill-bullish {
  color: var(--positive);
  border-color: rgba(0, 232, 156, 0.4);
  font-weight: 500;
}
.tpill-thesis.tpill-bullish-faint {
  color: var(--positive);
  border-color: rgba(0, 232, 156, 0.25);
  opacity: 0.75;
}
.tpill-thesis.tpill-bearish-strong,
.tpill-thesis.tpill-bearish {
  color: var(--negative);
  border-color: rgba(255, 77, 109, 0.4);
  font-weight: 500;
}
.tpill-thesis.tpill-bearish-faint {
  color: var(--negative);
  border-color: rgba(255, 77, 109, 0.25);
  opacity: 0.75;
}
.tpill-thesis.tpill-neutral {
  color: var(--text-muted);
}

.tpill-pb { color: var(--text-muted); }
.tpill-gex { color: #4A8580; border-color: rgba(74, 133, 128, 0.4); }
.tpill-as { color: #B7924E; border-color: rgba(183, 146, 78, 0.4); }

/* ─── Section blocks ──────────────────────────────────── */
.tcard-section {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.tcard-eyebrow {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.12em;
  color: var(--text-dim);
  text-transform: uppercase;
}

.tcard-empty {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  color: var(--text-dim);
  font-style: italic;
  padding: 2px 0;
}

/* ─── Levels ──────────────────────────────────────────── */
.tcard-levels {
  display: flex;
  flex-direction: column;
}

.tcard-level-row,
.tcard-level-spot {
  display: grid;
  grid-template-columns: 80px 1fr;
  gap: 10px;
  font-size: 11px;
  padding: 1px 0;
  font-variant-numeric: tabular-nums;
}

.tcard-level-row {
  color: var(--text-dim);
}

.tcard-level-spot {
  color: var(--text);
  font-weight: 500;
  border-top: 1px solid var(--border);
  border-bottom: 1px solid var(--border);
  padding: 3px 0;
  margin: 3px 0;
}

.tcard-level-price {
  text-align: right;
  font-family: 'JetBrains Mono', monospace;
}

.tcard-level-label {
  color: var(--text-dim);
  font-size: 10px;
  align-self: center;
  font-family: 'JetBrains Mono', monospace;
}

.tcard-level-spot .tcard-level-label {
  color: var(--text-dim);
}

/* ─── OI ledger ───────────────────────────────────────── */
.tcard-oi-row {
  display: grid;
  grid-template-columns: 38px 1fr auto;
  gap: 8px;
  padding: 1px 0;
  font-size: 11px;
}

.tcard-oi-time { color: var(--text-dim); }
.tcard-oi-label { color: var(--text-muted); }
.tcard-oi-strike {
  color: var(--text-dim);
  font-size: 10px;
  text-align: right;
  font-variant-numeric: tabular-nums;
}

.tcard-oi-row.tcard-bias-bullish .tcard-oi-label { color: var(--positive); }
.tcard-oi-row.tcard-bias-bearish .tcard-oi-label { color: var(--negative); }
.tcard-oi-row.tcard-bias-neutral .tcard-oi-label { color: var(--text-muted); }

.tcard-oi-row.is-latest .tcard-oi-label { font-weight: 500; }

/* ─── Flow ledger ─────────────────────────────────────── */
.tcard-flow-row {
  display: grid;
  grid-template-columns: 38px 1fr 56px 32px;
  gap: 8px;
  padding: 1px 0;
  font-size: 11px;
  align-items: center;
}

.tcard-flow-time { color: var(--text-dim); }
.tcard-flow-strike { color: var(--text-muted); }
.tcard-flow-notional {
  color: var(--text-dim);
  text-align: right;
  font-variant-numeric: tabular-nums;
}
.tcard-flow-dte {
  font-size: 9px;
  text-align: right;
  font-family: 'JetBrains Mono', monospace;
}

.tcard-flow-row.tcard-bias-bullish .tcard-flow-strike { color: var(--positive); }
.tcard-flow-row.tcard-bias-bearish .tcard-flow-strike { color: var(--negative); }

.tcard-flow-row.is-latest .tcard-flow-strike { font-weight: 500; }
.tcard-flow-row.is-latest .tcard-flow-notional {
  color: var(--text);
  font-weight: 500;
}

.tcard-dte-short  { color: #B7924E; }   /* 0DTE — yellow warning */
.tcard-dte-mid    { color: var(--text-muted); }  /* 1-6DTE — neutral */
.tcard-dte-long   { color: var(--positive); font-weight: 500; }  /* 7+DTE — green */
.tcard-dte-unknown { color: var(--text-dim); }

/* ════════════════════════════════════════════════════════
   legacy-v1: The Family — rotating roster panel
   Sits below the family-tribute. Loaded from family_roster.yaml.
   Names rotate every 6.5s with crossfade; click dots to jump.
   ──────────────────────────────────────────────────────── */

.family-panel {
  background: var(--bg-panel);
  border: 1px solid var(--border);
  border-top: 1px solid var(--brass-deep);
  padding: 26px 22px 24px;
  margin: 0 0 22px;
  position: relative;
  min-height: 200px;
}

.family-panel-label {
  font-family: 'Cinzel', serif;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.36em;
  text-transform: uppercase;
  color: var(--brass);
  margin-bottom: 22px;
  text-align: center;
  position: relative;
}

.family-panel-label::before,
.family-panel-label::after {
  content: "";
  position: absolute;
  top: 50%;
  width: 56px;
  height: 1px;
  background: var(--brass-deep);
  opacity: 0.6;
}
.family-panel-label::before { left: 50%; margin-left: -130px; }
.family-panel-label::after  { left: 50%; margin-left: 75px; }

.family-track {
  position: relative;
  min-height: 110px;
}

.family-card {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  justify-content: center;
  opacity: 0;
  transition: opacity 1.2s ease-in-out;
  pointer-events: none;
}

.family-card.active {
  opacity: 1;
  pointer-events: auto;
}

.family-name {
  font-family: 'Cormorant Garamond', serif;
  font-size: 26px;
  font-weight: 500;
  color: var(--brass);
  letter-spacing: 0.03em;
  text-align: center;
  line-height: 1.2;
  margin-bottom: 14px;
}

.family-relation {
  font-family: 'Outfit', sans-serif;
  font-size: 10px;
  font-weight: 400;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--text-muted);
  text-align: center;
}

.family-dots {
  display: flex;
  justify-content: center;
  gap: 7px;
  margin-top: 18px;
  flex-wrap: wrap;
}

.family-dot {
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--border-bright);
  cursor: pointer;
  transition: background 250ms;
  opacity: 0.5;
}

.family-dot:hover { opacity: 0.85; }

.family-dot.active {
  background: var(--brass);
  opacity: 1;
}

@media (max-width: 980px) {
  .family-name { font-size: 21px; }
  .family-panel-label::before,
  .family-panel-label::after { display: none; }
}

/* ════════════════════════════════════════════════════════
   RESEARCH PAGE — appended for Patch 11.3

   The rebuild progress + per-ticker BotState surface.
   Uses existing Legacy Desk tokens (--bg-panel, --brass,
   --text-muted, etc.) — no new color variables.

   Three sections:
     1. Canonical compute status grid (top, top-level rebuild progress)
     2. Per-ticker BotState cards (middle, current state)
     3. Roadmap (bottom, what's next)
   ──────────────────────────────────────────────────────── */


/* ─── Canonical compute status grid ─────────────────────────────── */

.research-canonicals {
  margin-top: 16px;
  padding: 18px 20px;
  background: var(--bg-panel);
  border: 1px solid var(--border);
}

.research-canonicals-eyebrow {
  font-family: 'Cinzel', serif;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 2.5px;
  color: var(--brass);
  margin-bottom: 14px;
  text-transform: uppercase;
}

.research-canonicals-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
  gap: 8px;
}

.research-canonical-cell {
  padding: 10px 12px;
  background: var(--bg-elev);
  border: 1px solid var(--border);
  border-left: 3px solid var(--text-dim);
}

.research-canonical-cell.research-canonical-live {
  border-left-color: #5C8A4F;        /* muted green for live */
}
.research-canonical-cell.research-canonical-partial {
  border-left-color: var(--brass);   /* brass for partial */
}
.research-canonical-cell.research-canonical-stub {
  border-left-color: var(--text-dim); /* dim for stubbed */
  opacity: 0.7;
}
.research-canonical-cell.research-canonical-error {
  border-left-color: #8B3A30;        /* oxblood for error */
}

.research-canonical-name {
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  color: var(--text);
  font-weight: 500;
  margin-bottom: 4px;
}

.research-canonical-status {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  color: var(--text-muted);
  letter-spacing: 0.8px;
}

.research-canonical-status .num {
  color: var(--text);
  font-weight: 600;
}


/* ─── Per-ticker grid ───────────────────────────────────────────── */

.research-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 12px;
  margin-top: 12px;
}

.research-card {
  padding: 14px 16px;
  background: var(--bg-panel);
  border: 1px solid var(--border);
  border-left: 3px solid var(--brass);
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.research-card.research-card-error {
  border-left-color: #8B3A30;
}

.research-card-header {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  padding-bottom: 8px;
  border-bottom: 1px solid var(--border);
}

.research-card-title-row {
  display: flex;
  gap: 10px;
  align-items: baseline;
}

.research-card-ticker {
  font-family: 'Cinzel', serif;
  font-weight: 500;
  font-size: 17px;
  letter-spacing: 2px;
  color: var(--brass-bright);
}

.research-card-spot {
  font-family: 'JetBrains Mono', monospace;
  font-size: 14px;
  color: var(--text);
  font-weight: 500;
}

.research-card-progress {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--text-muted);
  letter-spacing: 0.5px;
}

.research-card-progress .num {
  color: var(--brass-bright);
  font-weight: 600;
}

.research-card-section {
  padding-bottom: 6px;
}

.research-card-section + .research-card-section {
  padding-top: 8px;
  border-top: 1px solid var(--border);
}

.research-card-eyebrow {
  font-family: 'Cinzel', serif;
  font-size: 9.5px;
  font-weight: 500;
  letter-spacing: 2px;
  color: var(--brass);
  text-transform: uppercase;
  margin-bottom: 6px;
}

.research-card-row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  padding: 2px 0;
}

.research-card-label {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--text-muted);
}

.research-card-value {
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  color: var(--text);
  font-weight: 500;
}

.research-card-value.positive {
  color: #6FA85C;
}

.research-card-value.negative {
  color: #B8503F;
}

.research-card-value.muted {
  color: var(--text-muted);
}

.research-card-pending {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  color: var(--text-dim);
  line-height: 1.5;
  word-break: break-word;
}

.research-card-error {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: #B8503F;
  padding: 8px 0;
}

/* Inline status pills */
.research-live {
  color: #6FA85C;
  font-family: 'JetBrains Mono', monospace;
  font-weight: 600;
  text-transform: lowercase;
}
.research-stub {
  color: var(--text-dim);
  font-family: 'JetBrains Mono', monospace;
  font-weight: 500;
  text-transform: lowercase;
}


/* ─── Roadmap section ───────────────────────────────────────────── */

.research-roadmap {
  margin-top: 16px;
  padding: 16px 20px;
  background: var(--bg-panel);
  border: 1px solid var(--border);
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.research-roadmap-row {
  display: grid;
  grid-template-columns: 70px 1fr 2fr;
  gap: 16px;
  align-items: baseline;
  padding: 6px 0;
  border-bottom: 1px solid var(--border);
}

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

.research-roadmap-status {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 1.5px;
  text-align: center;
  padding: 3px 8px;
  border: 1px solid var(--border);
}

.research-roadmap-status.research-live {
  color: #6FA85C;
  border-color: #5C8A4F;
}

.research-roadmap-status.research-stub {
  color: var(--text-muted);
  border-color: var(--border);
  text-transform: uppercase;
}

.research-roadmap-name {
  font-family: 'JetBrains Mono', monospace;
  font-size: 13px;
  color: var(--brass-bright);
  font-weight: 500;
}

.research-roadmap-desc {
  font-family: 'Cormorant Garamond', serif;
  font-size: 14px;
  color: var(--text-muted);
  font-style: italic;
}


/* ─── Patch L Phase 4: Income opportunities landing ───
   Background grade scan writes compact grades to Redis (income:grade:*);
   the landing page reads + groups by tier. Tier bands stack top→bottom
   in priority order. AVOID uses native <details> for collapse-by-default. */

.income-opp-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 18px;
  margin-top: 8px;
  margin-bottom: 18px;
  padding: 10px 14px;
  border-bottom: 1px solid var(--brass-deep);
}
.income-opp-freshness {
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  color: var(--brass-deep);
  flex: 1;
}
.income-opp-graded-at {
  color: var(--brass-bright);
}
.income-opp-search {
  display: flex;
  gap: 6px;
}
.income-opp-search-input {
  width: 160px;
  padding: 5px 8px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 13px;
  background: var(--bg-void);
  border: 1px solid var(--brass-deep);
  color: var(--text-color);
  border-radius: 3px;
}
.income-opp-search-input:focus {
  outline: none;
  border-color: var(--brass-bright);
}
.income-opp-search-btn {
  padding: 5px 14px;
  font-family: 'Cinzel', serif;
  font-size: 11px;
  letter-spacing: 1.5px;
  text-transform: uppercase;
  background: transparent;
  border: 1px solid var(--brass-deep);
  color: var(--brass-bright);
  cursor: pointer;
  border-radius: 3px;
}
.income-opp-search-btn:hover {
  background: var(--bg-panel);
}

/* Tier band — header + rows. Non-AVOID bands use a plain div; AVOID
   uses native <details> for collapse-by-default. CSS targets the
   summary either way via .income-band-summary. */
.income-band {
  margin-bottom: 14px;
  border: 1px solid var(--brass-deep);
  border-radius: 3px;
  background: var(--bg-panel);
}
.income-band-summary {
  display: flex;
  align-items: baseline;
  gap: 14px;
  padding: 9px 16px;
  font-family: 'Cinzel', serif;
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: var(--brass-bright);
  border-bottom: 1px solid var(--brass-deep);
  list-style: none;
  cursor: default;
}
.income-band > summary.income-band-summary {
  /* AVOID's <details> > <summary> gets the disclosure cursor */
  cursor: pointer;
}
.income-band-summary::-webkit-details-marker { display: none; }
.income-band-label {
  flex: 1;
}
.income-band-count {
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0;
  color: var(--text-color);
  padding: 1px 8px;
  border: 1px solid var(--brass-deep);
  border-radius: 10px;
  background: var(--bg-void);
}
.income-band-body {
  padding: 4px 0;
}
.income-opp-row {
  display: grid;
  grid-template-columns: 100px 110px 1fr;
  align-items: center;
  gap: 16px;
  padding: 8px 16px;
  border-bottom: 1px solid rgba(109,90,54,0.25);
  font-family: 'JetBrains Mono', monospace;
  font-size: 13px;
  color: var(--text-color);
  text-decoration: none;
}
.income-opp-row:last-child { border-bottom: none; }
.income-opp-row:hover {
  background: rgba(213,176,107,0.06);
  color: var(--brass-bright);
}
.income-opp-row-ticker {
  font-weight: 600;
  letter-spacing: 0.5px;
  color: var(--brass-bright);
}
.income-opp-row-roc {
  color: var(--positive-bright);
  font-size: 12px;
}
.income-opp-row-driver {
  color: var(--text-muted);
  font-size: 12px;
  font-style: italic;
}

/* Tier-specific band tints (left border, matches income card banner) */
.income-band-ultimate { border-left: 4px solid var(--brass-bright); }
.income-band-strong   { border-left: 4px solid var(--positive-bright); }
.income-band-standard { border-left: 4px solid var(--positive-bright); opacity: 0.95; }
.income-band-stalk    { border-left: 4px solid var(--brass-deep); }
.income-band-anchor   { border-left: 4px solid var(--warn); }
.income-band-cc-strong   { border-left: 4px solid var(--negative-soft); }
.income-band-cc-standard { border-left: 4px solid var(--negative-soft); opacity: 0.95; }
.income-band-avoid    { border-left: 4px solid var(--negative-soft); opacity: 0.75; }
.income-band-avoid .income-band-summary { color: var(--negative-soft); }

.income-band-ultimate .income-opp-row-roc {
  color: var(--brass-bright);
  font-weight: 600;
}

.income-opp-empty {
  padding: 24px 16px;
  border: 1px dashed var(--brass-deep);
  border-radius: 3px;
  font-family: 'Cormorant Garamond', serif;
  font-style: italic;
  color: var(--text-muted);
  margin-bottom: 18px;
}

/* ─── Patch L C3 page redesign (2026-05-20) ─────────────────────────
   Verdict line + ROC tier coloring + earnings caution chip + LOW ROC
   tag. Compact additions on top of the existing income-opp styling. */

.income-opp-verdict {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
  margin: 12px 0 8px 0;
  padding: 10px 14px;
  background: rgba(213,176,107,0.04);
  border-left: 3px solid var(--brass-bright);
  font-family: 'JetBrains Mono', monospace;
}
.income-opp-verdict-headline {
  color: var(--text-color);
  font-size: 13px;
  letter-spacing: 0.3px;
}

/* Chips — shared across verdict bar + row caution markers. */
.income-chip-warn,
.income-chip-caution {
  display: inline-block;
  padding: 2px 8px;
  border-radius: 2px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.5px;
  text-transform: uppercase;
  white-space: nowrap;
}
.income-chip-warn {
  background: rgba(208,107,107,0.12);
  color: var(--negative-soft);
  border: 1px solid rgba(208,107,107,0.35);
}
.income-chip-caution {
  background: rgba(213,176,107,0.10);
  color: var(--warn);
  border: 1px solid rgba(213,176,107,0.30);
}

/* Row-level: ROC tier styling. Override the existing
   .income-opp-row-roc base. */
.income-opp-row-roc-love {
  color: var(--brass-bright) !important;
  font-weight: 700;
  font-size: 13px !important;
}
.income-opp-row-roc-normal {
  color: var(--positive-bright);
}
.income-opp-row-roc-low {
  color: var(--text-muted);
  font-style: italic;
}
.income-opp-row-roc-unknown {
  color: var(--text-muted);
}

.income-opp-row-low-tag {
  margin-left: 6px;
  padding: 1px 5px;
  background: rgba(109,90,54,0.18);
  border-radius: 2px;
  font-size: 9px;
  letter-spacing: 1px;
  color: var(--brass-deep);
  vertical-align: middle;
}

/* LOW ROC rows render slightly muted so they don't compete visually
   with LOVE-tier plays. */
.income-opp-row-low {
  opacity: 0.78;
}
.income-opp-row-love {
  background: rgba(213,176,107,0.03);
}

/* The row grid needs to make room for the optional earnings chip on
   the right edge. Auto-collapses when no chip is present. */
.income-opp-row {
  grid-template-columns: 100px 130px 1fr auto;
}
.income-opp-row-earnings-chip {
  justify-self: end;
}

.income-landing-shortcuts {
  margin-top: 24px;
  padding-top: 12px;
  border-top: 1px solid var(--brass-deep);
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
}
.income-landing-shortcuts-label {
  color: var(--brass-deep);
  letter-spacing: 1.5px;
  text-transform: uppercase;
  margin-bottom: 6px;
  font-size: 11px;
}
.income-landing-shortcuts ul {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
}
.income-landing-shortcuts a {
  color: var(--brass-bright);
  text-decoration: none;
}
.income-landing-shortcuts a:hover { color: var(--text-color); }


/* ─── Patch L Phase 3: Income card — tier banner + trade card ───
   Status banner color-coded by conviction tier; trade card uses
   native <details> disclosures for scannable one-line + expandable
   detail; collapsible disclosures share alerts-detail-row styling. */

.income-tier-banner {
  margin-top: 12px;
  margin-bottom: 18px;
  padding: 14px 18px;
  border-radius: 4px;
  border-left: 4px solid var(--brass-deep);
  background: var(--bg-panel);
}
.income-tier-banner-row {
  display: flex;
  align-items: baseline;
  gap: 14px;
  margin-bottom: 8px;
}
.income-tier-banner-ticker {
  font-family: 'Cinzel', serif;
  font-size: 22px;
  font-weight: 600;
  color: var(--brass-bright);
  letter-spacing: 1.5px;
}
.income-tier-banner-status {
  font-family: 'JetBrains Mono', monospace;
  font-size: 14px;
  font-weight: 600;
  letter-spacing: 1px;
  text-transform: uppercase;
  color: var(--text-color);
}
.income-tier-banner-priority {
  font-family: 'Cinzel', serif;
  font-size: 13px;
  font-weight: 600;
  margin-left: auto;
  color: var(--brass-bright);
  letter-spacing: 2px;
}
.income-tier-banner-meta {
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  color: var(--brass-deep);
  margin-bottom: 6px;
}
.income-tier-banner-prose {
  font-family: 'Cormorant Garamond', serif;
  font-size: 15px;
  font-style: italic;
  color: var(--text-color);
  line-height: 1.5;
}

/* Tier-specific banner colors */
.income-tier-ultimate {
  border-left-color: var(--brass-bright);
  background: linear-gradient(90deg, rgba(213,176,107,0.18), var(--bg-panel) 60%);
}
.income-tier-strong {
  border-left-color: var(--positive-bright);
  background: linear-gradient(90deg, rgba(115,178,123,0.16), var(--bg-panel) 60%);
}
.income-tier-standard {
  border-left-color: var(--positive-bright);
}
.income-tier-stalk {
  border-left-color: var(--brass-deep);
  opacity: 0.85;
}
.income-tier-review {
  border-left-color: var(--brass-deep);
  opacity: 0.85;
}
.income-tier-avoid {
  border-left-color: var(--negative-soft);
  background: linear-gradient(90deg, rgba(200,106,106,0.18), var(--bg-panel) 60%);
}
.income-tier-anchor {
  border-left-color: var(--warn);
  background: linear-gradient(90deg, rgba(198,138,80,0.20), var(--bg-panel) 60%);
}
.income-tier-cc-strong {
  border-left-color: var(--negative-soft);
  background: linear-gradient(90deg, rgba(200,106,106,0.14), var(--bg-panel) 60%);
}
.income-tier-cc-standard {
  border-left-color: var(--negative-soft);
}
.income-tier-neutral {
  border-left-color: var(--brass-deep);
  opacity: 0.85;
}

/* Trade card — wraps the candidate(s); collapsible per-candidate details */
.income-trade-card {
  margin-bottom: 18px;
  padding: 12px 18px;
  border: 1px solid var(--brass-deep);
  border-radius: 4px;
  background: var(--bg-panel);
}
.income-trade-card-title {
  font-family: 'Cinzel', serif;
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 3px;
  text-transform: uppercase;
  color: var(--brass-deep);
  margin-bottom: 10px;
}
.income-trade-detail {
  margin-bottom: 6px;
}
.income-trade-summary {
  cursor: pointer;
  padding: 8px 6px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 13px;
  color: var(--text-color);
  list-style: none;
  display: flex;
  gap: 10px;
  align-items: baseline;
  border-bottom: 1px solid transparent;
}
.income-trade-summary::-webkit-details-marker { display: none; }
.income-trade-summary:hover { color: var(--brass-bright); }
.income-trade-summary-icon { font-size: 14px; }
.income-trade-summary-text { flex: 1; }
.income-trade-detail[open] .income-trade-summary {
  border-bottom-color: var(--brass-deep);
}
.income-trade-detail-body {
  padding: 8px 14px 4px 28px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
}
.income-trade-row {
  display: flex;
  gap: 12px;
  padding: 3px 0;
}
.income-trade-row-label {
  color: var(--brass-deep);
  min-width: 140px;
  text-align: right;
}
.income-trade-row-value {
  color: var(--text-color);
  flex: 1;
}

/* Disclosures (Fundamentals / EM / Location / Risk / VMC / Data health) */
.income-disclosure {
  margin-bottom: 8px;
  border: 1px solid var(--brass-deep);
  border-radius: 3px;
  background: var(--bg-panel);
}
.income-disclosure-summary {
  cursor: pointer;
  padding: 9px 16px;
  font-family: 'Cinzel', serif;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: var(--brass-bright);
  list-style: none;
}
.income-disclosure-summary::-webkit-details-marker { display: none; }
.income-disclosure-summary::before {
  content: "▸ ";
  color: var(--brass-deep);
}
.income-disclosure[open] .income-disclosure-summary::before {
  content: "▾ ";
}
.income-disclosure-body {
  padding: 6px 16px 12px 16px;
  border-top: 1px solid var(--brass-deep);
}


/* ─────────────────────────────────────────────────────────────────
   Patch L income card visual polish (2026-05-23)
   Pure presentation extensions over the existing income-* classes:
   readability fixes, status-colored section bars, Town 4x4 bar grid,
   hero-styled level rows. No data/logic change. Reuses existing
   color tokens (--positive / --warn / --negative / --clay / --brass).
   ───────────────────────────────────────────────────────────────── */

/* FIX 1 — banner prose: drop italic + larger + lighter. The 15px
   Cormorant ITALIC was the readability killer Brad flagged. */
.income-tier-banner-prose {
  font-size: 17px;
  font-style: normal;
  color: var(--text);
  line-height: 1.45;
}

/* FIX 2 — banner meta: brass-deep (#6D5A36) on the dark panel was
   near-invisible. Dim labels, bright values; template wraps values
   in .meta-val so the cream pops against the muted-gray labels. */
.income-tier-banner-meta {
  font-size: 13px;
  color: var(--text-dim);
  display: flex;
  gap: 18px;
  flex-wrap: wrap;
  margin-bottom: 8px;
}
.income-tier-banner-meta .meta-val {
  color: var(--text);
  font-weight: 600;
}
.income-tier-banner-meta .income-freshness {
  color: var(--text-dim);
}

/* FIX 3 (V2 — 2026-05-23) — left-accent-only section bars. Pre-fix,
   every disclosure had a full colored border which made all of them
   look the same (uniform = flat). The mockup's eye-jump came from a
   DIM neutral full border + a single bold colored LEFT stripe, so
   color is concentrated in one place. Override the V1 base treatment
   here so the existing .income-disclosure rule earlier in this file
   (var(--brass-deep) border) doesn't bleed through. */
.income-disclosure {
  border: 1px solid var(--border);
  border-left: 3px solid var(--brass);
  border-radius: 0 4px 4px 0;
  background: var(--bg-panel);
}
.income-disclosure--good    { border-left-color: var(--positive-bright); }
.income-disclosure--warn    { border-left-color: var(--warn); }
.income-disclosure--bad     { border-left-color: var(--negative-bright); }
.income-disclosure--info    { border-left-color: var(--clay); }
.income-disclosure--neutral { border-left-color: var(--brass); }
.income-disclosure--good  .income-disclosure-summary { color: var(--positive-bright); }
.income-disclosure--warn  .income-disclosure-summary { color: var(--warn); }
.income-disclosure--bad   .income-disclosure-summary { color: var(--negative-bright); }
.income-disclosure-summary .sec-icon {
  display: inline-block;
  margin-right: 8px;
  width: 16px;
  text-align: center;
  font-size: 14px;
  vertical-align: -1px;
}

/* FIX C (V2 — 2026-05-23) — values brighter+heavier than labels.
   Pre-V2 labels were var(--brass-deep) and values var(--text-color)
   — too close in weight + brightness. Push the gap so the eye lands
   on the data, not the noun. */
.income-trade-row-label {
  color: var(--text-dim);
  font-weight: 400;
}
.income-trade-row-value {
  color: var(--text);
  font-weight: 600;
}
.income-trade-row-value strong {
  color: var(--text);
  font-weight: 700;
}
.income-trade-row-value em {
  color: var(--text-dim);
  font-style: italic;
  font-weight: 400;
}

/* Distance text on level rows: number color = data tokens; bright
   green for at/below-MOS, bright red for above. */
.income-level-row--support .income-level-row-distance { color: var(--data-pos); font-weight: 600; }
.income-level-row--resistance .income-level-row-distance { color: var(--data-neg); font-weight: 600; }

/* FIX 4 — Town Big Five 4x4 growth grid. Pure-CSS bar visualization
   (no chart library — matches the flat aesthetic). Color-coded:
   green ≥ 10%/yr, brass-bright 5-10%/yr, red < 5%/yr (or no data
   → muted brass). Hover definitions live on .town-growth-grid-label
   via title= so OCF / sales / etc. get the operator-facing
   plain-English explanation. */
.town-growth-grid {
  display: grid;
  grid-template-columns: 90px repeat(4, 1fr);
  gap: 6px 12px;
  margin: 10px 0 12px 0;
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
}
.town-growth-grid-header {
  color: var(--brass-deep);
  text-align: center;
  font-size: 10px;
  letter-spacing: 2px;
  text-transform: uppercase;
  font-family: 'Cinzel', serif;
}
.town-growth-grid-header.tgh-label {
  text-align: left;
}
.town-growth-grid-label {
  color: var(--text);
  border-bottom: 1px dotted var(--brass-deep);
  cursor: help;
  align-self: center;
  font-size: 12px;
}
.town-growth-grid-cell {
  position: relative;
  height: 22px;
  background: rgba(109, 90, 54, 0.12);
  border-radius: 2px;
  overflow: hidden;
}
.town-growth-grid-bar {
  position: absolute;
  left: 0; top: 0; bottom: 0;
  opacity: 0.45;
}
.town-growth-grid-bar.tgrid-good { background: var(--data-pos); }
.town-growth-grid-bar.tgrid-ok   { background: var(--brass-bright); }
.town-growth-grid-bar.tgrid-bad  { background: var(--data-neg); }
.town-growth-grid-val {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--text);
  font-size: 11px;
  z-index: 1;
  font-weight: 600;
}
.town-growth-grid-val.tgv-na {
  color: var(--brass-deep);
  font-style: italic;
  font-weight: 400;
}
.town-mos-above { color: var(--data-neg); font-weight: 600; }
.town-mos-below { color: var(--data-pos); font-weight: 700; }

/* FIX E (V2 — 2026-05-23) — Potter Box as a proportional VISUAL.
   Pre-V2 the LOCATION section dumped 7 label:value rows for roof /
   spot / center / floor / range / touches / supply / demand — a
   monotone word wall. Replace the first three (roof / spot / floor)
   with a vertical box where the spot dot sits at its actual % up the
   range. Reads like a price ladder; pairs with the swing-levels
   ladder below. Keeps the rest (range / touches / supply / demand)
   as a small caption beneath. */
.potter-box-visual {
  display: grid;
  grid-template-columns: 60px 1fr 1fr;
  gap: 14px 12px;
  align-items: stretch;
  margin: 8px 0 10px 0;
  font-family: 'JetBrains Mono', monospace;
}
.potter-box-frame {
  grid-column: 2;
  grid-row: 1 / span 3;
  position: relative;
  width: 56px;
  justify-self: center;
  border: 1px solid var(--brass-bright);
  background: rgba(183, 146, 78, 0.04);
  min-height: 130px;
}
.potter-box-center-line {
  position: absolute;
  left: -4px; right: -4px;
  height: 0;
  border-top: 1px dashed var(--brass-deep);
}
.potter-box-spot {
  position: absolute;
  left: 50%;
  width: 14px;
  height: 14px;
  margin-left: -7px;
  margin-top: -7px;
  border-radius: 50%;
  background: var(--brass-bright);
  border: 2px solid var(--bg-panel);
  box-shadow: 0 0 0 1px var(--brass-bright), 0 0 8px rgba(213, 176, 107, 0.35);
}
.potter-box-marker {
  font-size: 11px;
  color: var(--text-dim);
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 2px;
}
.potter-box-marker .pbm-name {
  font-family: 'Cinzel', serif;
  font-size: 9px;
  letter-spacing: 1.5px;
  text-transform: uppercase;
  color: var(--brass-deep);
}
.potter-box-marker .pbm-price {
  font-size: 14px;
  font-weight: 700;
  color: var(--text);
}
.potter-box-marker .pbm-delta {
  font-size: 10px;
  color: var(--text-dim);
}
.potter-box-marker--roof { grid-row: 1; grid-column: 3; align-items: flex-start; justify-content: flex-start; }
.potter-box-marker--center { grid-row: 2; grid-column: 3; align-items: flex-start; justify-content: center; }
.potter-box-marker--floor { grid-row: 3; grid-column: 3; align-items: flex-start; justify-content: flex-end; }
.potter-box-marker--spot { grid-row: 2; grid-column: 1; align-items: flex-end; justify-content: center; text-align: right; }
.potter-box-marker--spot .pbm-name { color: var(--brass-bright); }
.potter-box-marker--spot .pbm-price { color: var(--brass-bright); font-size: 15px; }
.potter-box-caption {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--text-dim);
  margin: 0 0 10px 0;
  display: flex;
  gap: 14px;
  flex-wrap: wrap;
}
.potter-box-caption .pbc-val { color: var(--text); font-weight: 600; }

/* FIX 5 — level row: the PRICE is the hero. JetBrains Mono 19px
   bold cream sits front-and-center; tier dots colored by tier;
   subtle support/resistance row tint groups them visually. */
.income-level-row {
  display: grid;
  grid-template-columns: 36px 96px 1fr 90px;
  gap: 12px;
  align-items: center;
  padding: 7px 10px;
  margin: 3px 0;
  border-radius: 3px;
  font-family: 'JetBrains Mono', monospace;
}
.income-level-row--support {
  background: rgba(79, 138, 87, 0.08);
}
.income-level-row--resistance {
  background: rgba(161, 79, 79, 0.08);
}
.income-level-row-label {
  font-weight: 700;
  text-align: center;
  letter-spacing: 1px;
  font-size: 12px;
}
.income-level-row--support .income-level-row-label { color: var(--data-pos); }
.income-level-row--resistance .income-level-row-label { color: var(--data-neg); }

/* Patch L polish V2 FIX D (2026-05-23): spot marker between
   resistance-above and support-below — visual separator that
   anchors the chart-reading order. */
.income-level-spot-marker {
  text-align: center;
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  font-weight: 600;
  color: var(--brass-bright);
  letter-spacing: 2px;
  margin: 6px 0;
  padding: 4px 0;
  border-top: 1px dashed var(--brass-deep);
  border-bottom: 1px dashed var(--brass-deep);
}
.income-level-row-price {
  font-size: 19px;
  font-weight: 700;
  color: var(--text);
  letter-spacing: 0.5px;
}
.income-level-row-meta {
  color: var(--text-dim);
  font-size: 11px;
  line-height: 1.3;
}
.income-level-row-meta .lvl-dots {
  letter-spacing: 1px;
  margin-right: 6px;
  font-size: 12px;
}
.income-level-row-meta .lvl-dots.tier-a { color: var(--brass-bright); }
.income-level-row-meta .lvl-dots.tier-b { color: var(--brass); }
.income-level-row-meta .lvl-dots.tier-c { color: var(--brass-deep); }
.income-level-row-distance {
  text-align: right;
  font-size: 11px;
  color: var(--text-dim);
  font-weight: 500;
}


/* ─── Patch L Phase 1: VMC multi-TF confluence grid ───
   6 timeframe columns × N signal rows. The visual goal is a quick
   eyeball confluence test — multiple lit cells in a row instantly
   reads as "this signal has multi-TF agreement". */

.vmc-grid {
  width: 100%;
  margin-top: 6px;
  border-collapse: collapse;
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
}

.vmc-grid th,
.vmc-grid td {
  text-align: center;
  padding: 3px 4px;
  border: 1px solid var(--brass-deep);
}

.vmc-grid-rowlabel {
  text-align: right !important;
  color: var(--brass-bright);
  font-size: 10.5px;
  white-space: nowrap;
}

th.vmc-grid-rowlabel {
  /* Empty top-left corner — no border-bottom shadow */
  border-top-color: transparent;
  border-left-color: transparent;
}

.vmc-grid-tf {
  color: var(--brass-bright);
  text-transform: uppercase;
  font-size: 10px;
  letter-spacing: 0.5px;
}

.vmc-grid-tf.vmc-tf-na {
  color: var(--text-muted);
  opacity: 0.5;
}

.vmc-cell {
  color: var(--text-muted);
  min-width: 22px;
  font-size: 13px;
  line-height: 1.0;
}

/* Lit cells. Gold uses the brass-bright token; anchor uses warn (burnt
   brass) for a dark-red-orange tone distinct from "negative". */
.vmc-fire-gold {
  background: rgba(213, 176, 107, 0.18);
  color: var(--brass-bright);
}

.vmc-fire-anchor {
  background: rgba(198, 138, 80, 0.20);
  color: var(--warn);
}

.vmc-fire-green {
  background: rgba(115, 178, 123, 0.18);
  color: var(--positive-bright);
}

.vmc-fire-red {
  background: rgba(200, 106, 106, 0.18);
  color: var(--negative-soft);
}

.vmc-mf-inflow {
  color: var(--positive-bright);
}

.vmc-mf-outflow {
  color: var(--negative-soft);
}

.vmc-mf-neutral {
  color: var(--text-muted);
}


/* ─── Patch C: Research warming-up state ─── */
/* Distinguishes "producer hasn't written this ticker yet" (neutral
   skeleton) from "build raised an exception" (existing red card). */
.research-card-warming-up {
  opacity: 0.55;
  border-style: dashed;
  animation: research-warming-pulse 2.4s ease-in-out infinite;
}

.research-card-warming-up-msg {
  font-size: 0.85em;
  padding: 0.6em 0.8em;
  color: var(--research-warming-color, #888);
  font-style: italic;
}

@keyframes research-warming-pulse {
  0%, 100% { opacity: 0.55; }
  50%      { opacity: 0.75; }
}

/* ─── Patch C.7: refresh control bar ─── */
/* Sticky at the bottom of the viewport while any card is warming up.
   Shows countdown and lets the user stop or trigger refresh-now. */
.research-refresh-bar {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  z-index: 100;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 1.5em;
  padding: 0.7em 1.2em;
  background: rgba(20, 22, 30, 0.94);
  border-top: 1px solid rgba(255, 255, 255, 0.12);
  font-size: 0.9em;
  color: #ccc;
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
}

.research-refresh-msg {
  font-variant-numeric: tabular-nums;
}

.research-refresh-msg #research-rrt {
  font-weight: 600;
  color: #fff;
}

.research-refresh-btn {
  padding: 0.35em 0.9em;
  background: transparent;
  border: 1px solid #555;
  color: #ccc;
  cursor: pointer;
  font-size: 0.85em;
  border-radius: 3px;
  transition: background 0.15s, border-color 0.15s;
}

.research-refresh-btn:hover {
  background: rgba(255, 255, 255, 0.06);
  border-color: #888;
  color: #fff;
}

/* ─── Patch D.3: walls disclosure ─── */
/* Ticker card's WALLS section is a <details> element. Collapsed shows
   the front-DTE walls. Click/keyboard-activate to reveal t7/t30/t60. */
.research-card-walls-disclosure {
  /* Inherits .research-card-section spacing; overrides default <details> */
}

.research-card-walls-summary {
  cursor: pointer;
  list-style: none;
  /* Suppress the default browser disclosure triangle (we draw our own
     in the eyebrow row via .research-walls-chevron). */
}

.research-card-walls-summary::-webkit-details-marker {
  display: none;
}

.research-walls-chevron {
  display: inline-block;
  margin-left: 0.4em;
  font-size: 0.8em;
  color: var(--research-warming-color, #888);
  transition: transform 0.2s ease;
}

details[open] .research-walls-chevron {
  transform: rotate(180deg);
}

.research-walls-extra {
  /* Slight indent for the t7/t30/t60 rows so the visual hierarchy
     reads "summary row → expansion rows below". */
  padding-left: 0.6em;
  border-left: 1px solid rgba(255, 255, 255, 0.08);
  margin-left: 0.2em;
}


/* ════════════════════════════════════════════════════════
   v11.7 (Patch H.4): Alerts feed page styles.
   Reuses tokens from :root (lines 17-63):
     --bg-void / --bg-panel / --bg-elev / --border / --border-bright
     --text / --text-muted / --text-dim
     --brass / --brass-bright / --brass-deep
     --positive / --positive-bright / --negative / --negative-soft
     --warn (LCB)  --partner (credit)  --mine (conviction)
   ════════════════════════════════════════════════════════ */

.alerts-page {
  display: flex;
  flex-direction: column;
  gap: 16px;
  padding: 24px 40px;
  font-family: 'Outfit', sans-serif;
}

.alerts-eyebrow {
  font-family: 'Cinzel', serif;
  font-size: 11px;
  letter-spacing: 4px;
  text-transform: uppercase;
  color: var(--brass-deep);
  padding-bottom: 8px;
  border-bottom: 1px solid var(--border);
  margin-bottom: 4px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.alerts-eyebrow-meta {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--text-dim);
  letter-spacing: 0;
  text-transform: none;
}

.alerts-status-strip {
  display: flex;
  gap: 18px;
  padding: 14px 18px;
  background: var(--bg-panel);
  border: 1px solid var(--border);
  font-family: 'JetBrains Mono', monospace;
  font-size: 13px;
  color: var(--text-muted);
  align-items: center;
}
.alerts-status-pill { display: inline-flex; align-items: center; gap: 6px; }
.alerts-status-pill-label {
  color: var(--text-dim);
  font-size: 11px;
  letter-spacing: 2px;
  text-transform: uppercase;
}
.alerts-status-pill-value {
  color: var(--brass-bright);
  font-weight: 500;
}
.alerts-status-dot {
  width: 8px; height: 8px;
  border-radius: 50%;
  background: var(--text-dim);
  margin-right: 4px;
  display: inline-block;
}
.alerts-status-dot.live {
  background: var(--positive);
  box-shadow: 0 0 6px rgba(79, 138, 87, 0.6);
}
.alerts-status-dot.off { background: #5F5E5A; box-shadow: none; }
.alerts-status-divider { color: var(--border); }
.alerts-status-spacer { flex: 1; }
.alerts-status-engines {
  cursor: help;
  border-bottom: 1px dotted var(--brass-deep);
}

.alerts-section-header {
  font-family: 'Cinzel', serif;
  font-size: 12px;
  letter-spacing: 4px;
  color: var(--brass-deep);
  text-transform: uppercase;
  margin: 16px 0 10px 0;
  padding-bottom: 6px;
  border-bottom: 1px solid var(--border);
  display: flex;
  justify-content: space-between;
  align-items: baseline;
}
.alerts-section-count {
  color: var(--text-dim);
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  letter-spacing: 0;
  text-transform: none;
}

.alerts-cards { display: flex; flex-direction: column; gap: 8px; }

.alerts-section-historical { margin-top: 4px; }
.alerts-collapsed-summary {
  background: var(--bg-panel);
  border: 1px solid var(--border);
  padding: 12px 18px;
  cursor: pointer;
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  color: var(--text-dim);
  list-style: none;
}
.alerts-collapsed-summary::-webkit-details-marker { display: none; }
.alerts-collapsed-summary:hover { background: var(--bg-elev); }
.alerts-chevron-collapse {
  color: var(--brass-deep);
  display: inline-block;
  transition: transform 0.15s;
}
details[open] .alerts-chevron-collapse { transform: rotate(90deg); }
.alerts-collapsed-action { color: var(--brass-deep); }
details[open] .alerts-collapsed-summary { margin-bottom: 8px; }

.alerts-empty {
  background: var(--bg-panel);
  border: 1px solid var(--border);
  padding: 40px 24px;
  text-align: center;
  font-family: 'Outfit', sans-serif;
  margin-bottom: 8px;
}
.alerts-empty.alerts-empty-soft { padding: 24px; opacity: 0.85; }
.alerts-empty-icon {
  font-size: 32px;
  color: var(--brass-deep);
  margin-bottom: 12px;
}
.alerts-empty-title {
  font-family: 'Cinzel', serif;
  font-size: 14px;
  letter-spacing: 3px;
  color: var(--text-muted);
  margin-bottom: 8px;
  text-transform: uppercase;
}
.alerts-empty-message {
  font-size: 13px;
  color: var(--text-dim);
  max-width: 520px;
  margin: 0 auto;
  line-height: 1.6;
}
.alerts-empty-message code {
  color: var(--brass-bright);
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
}

/* Card structure */
.alert-card {
  display: block;
  background: var(--bg-panel);
  border: 1px solid var(--border);
  border-left: 4px solid var(--border-bright);
  padding: 14px 18px;
  text-decoration: none;
  color: inherit;
  transition: background 0.15s ease, border-color 0.15s ease;
}
.alert-card:hover {
  background: var(--bg-elev);
  border-color: var(--border-bright);
  text-shadow: none;
}
.alert-card-engine-lcb        { border-left-color: var(--warn); }
.alert-card-engine-v25d       { border-left-color: var(--brass-bright); }
.alert-card-engine-credit     { border-left-color: var(--partner); }
.alert-card-engine-conviction { border-left-color: var(--mine); }
.alert-card-engine-unknown    { border-left-color: var(--border-bright); }

.alert-card-recent {
  animation: alertCardPulse 2.5s ease-in-out infinite;
}
@keyframes alertCardPulse {
  0%, 100% { box-shadow: inset 4px 0 0 0 rgba(213, 176, 107, 0); }
  50%      { box-shadow: inset 4px 0 0 0 rgba(213, 176, 107, 0.45); }
}
.alert-card-old { opacity: 0.65; }

.alert-card-row1 {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  color: var(--text-dim);
  margin-bottom: 6px;
}
.alert-card-row1-left { display: inline-flex; gap: 8px; align-items: baseline; }
.alert-card-time { color: var(--text-muted); }
.alert-card-relative { color: var(--brass-deep); }

.alert-card-badge {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  padding: 2px 8px;
  letter-spacing: 1px;
}
.alert-card-badge.badge-active {
  background: rgba(213, 176, 107, 0.08);
  color: var(--brass-bright);
  border: 1px solid var(--brass-deep);
}

.alert-card-row2 {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-bottom: 6px;
}
.alert-card-engine {
  font-family: 'Outfit', sans-serif;
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 1px;
}
.alert-card-engine-text-lcb        { color: var(--warn); }
.alert-card-engine-text-v25d       { color: var(--brass-bright); }
.alert-card-engine-text-credit     { color: var(--partner); }
.alert-card-engine-text-conviction { color: var(--negative-soft); }

.alert-card-ticker {
  font-family: 'JetBrains Mono', monospace;
  font-size: 16px;
  color: var(--text);
  font-weight: 500;
}
.alert-card-chevron { font-family: 'JetBrains Mono', monospace; font-size: 12px; }
.alert-card-chevron.positive { color: var(--positive-bright); }
.alert-card-chevron.negative { color: var(--negative-soft); }

.alert-card-row3 {
  font-family: 'JetBrains Mono', monospace;
  font-size: 13px;
  color: var(--text-muted);
  margin-bottom: 4px;
}

.alert-card-row4 {
  font-family: 'Outfit', sans-serif;
  font-size: 12px;
  color: var(--brass-deep);
  font-style: italic;
  padding-left: 12px;
}

/* Make .num inherit its parent's color so the row1 timestamp etc. stay
   muted rather than picking up a bright global override. */
.alerts-page .num,
.alerts-detail-page .num { color: inherit; font-family: 'JetBrains Mono', monospace; }


/* ════════════════════════════════════════════════════════
   v11.7 (Patch H.5): Alert detail page styles.
   ════════════════════════════════════════════════════════ */

.alerts-detail-page {
  display: flex;
  flex-direction: column;
  gap: 12px;
  padding: 24px 40px;
  font-family: 'Outfit', sans-serif;
  max-width: 960px;
}

.alerts-detail-back {
  color: var(--brass-deep);
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  text-decoration: none;
  margin-bottom: 8px;
  display: inline-block;
}
.alerts-detail-back:hover { color: var(--brass); text-shadow: none; }

.alerts-detail-eyebrow {
  font-family: 'Cinzel', serif;
  font-size: 11px;
  letter-spacing: 4px;
  color: var(--brass-deep);
  text-transform: uppercase;
  padding-bottom: 8px;
  border-bottom: 1px solid var(--border);
  margin-bottom: 4px;
}

.alerts-detail-header {
  background: var(--bg-panel);
  border: 1px solid var(--border);
  border-left: 4px solid var(--border-bright);
  padding: 20px 24px;
}
.alerts-detail-engine {
  font-family: 'Outfit', sans-serif;
  font-size: 18px;
  font-weight: 500;
  letter-spacing: 1px;
  margin-bottom: 4px;
}
.alerts-detail-ticker-line {
  display: flex;
  align-items: baseline;
  gap: 16px;
  margin-bottom: 8px;
}
.alerts-detail-ticker {
  font-family: 'JetBrains Mono', monospace;
  font-size: 28px;
  color: var(--text);
  font-weight: 500;
}
.alerts-detail-classification {
  font-family: 'JetBrains Mono', monospace;
  font-size: 13px;
  color: var(--brass-bright);
}
.alerts-detail-meta {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--text-dim);
  margin-top: 8px;
  word-break: break-all;
}

/* GH #55: confluence badges — recorded flow + daily-trendline context. */
.alerts-detail-badges {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: 10px 0 16px 0;
}
.alerts-detail-badge {
  display: inline-block;
  padding: 3px 10px;
  border: 1px solid var(--brass-deep);
  border-radius: 12px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  background: rgba(0, 0, 0, 0.2);
  color: var(--brass-bright);
}
.alerts-detail-badge-pos { color: #73B27B; border-color: rgba(115, 178, 123, 0.45); }
.alerts-detail-badge-neg { color: #C86A6A; border-color: rgba(200, 106, 106, 0.45); }
.alerts-detail-badge-info { color: var(--brass-bright); border-color: rgba(213, 176, 107, 0.40); }
.alerts-detail-badge-neutral { color: var(--brass-deep); border-color: var(--brass-deep); }

.alerts-detail-parent-link,
.alerts-detail-children {
  display: inline-block;
  margin-top: 10px;
  padding: 4px 10px;
  background: rgba(213, 176, 107, 0.08);
  color: var(--brass-bright);
  border: 1px solid var(--brass-deep);
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  text-decoration: none;
}
.alerts-detail-parent-link:hover {
  background: rgba(213, 176, 107, 0.18);
  text-shadow: none;
}
.alerts-detail-children { padding: 6px 12px; }
.alerts-detail-children a { padding: 0; background: transparent; border: 0; color: var(--brass-bright); }

.alerts-detail-section {
  background: var(--bg-panel);
  border: 1px solid var(--border);
  padding: 18px 22px;
}
.alerts-detail-section-title {
  font-family: 'Cinzel', serif;
  font-size: 11px;
  letter-spacing: 4px;
  color: var(--brass-deep);
  text-transform: uppercase;
  margin-bottom: 14px;
  padding-bottom: 6px;
  border-bottom: 1px solid var(--border);
}

/* Patch H.9: native-tooltip help indicator next to section titles.
   Smaller and less letter-spaced than the parent so the (?) reads as
   secondary metadata, not part of the heading text. */
.help-icon {
  font-family: 'Cinzel', serif;
  font-size: 0.75em;
  letter-spacing: 0;
  color: var(--brass-deep);
  margin-left: 6px;
  cursor: help;
  opacity: 0.7;
}

.alerts-detail-struct-grid {
  display: grid;
  grid-template-columns: 140px 1fr;
  gap: 6px 16px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 13px;
}
.alerts-detail-label { color: var(--text-dim); }
.alerts-detail-value { color: var(--text); }
.alerts-detail-dte-tag {
  color: var(--warn);
  font-size: 10px;
  letter-spacing: 1px;
  padding-left: 6px;
}
.alerts-detail-dte-untagged { color: var(--brass-deep); font-style: italic; }

/* H.10: position: relative makes this the anchor for the absolutely-
   positioned #chart-tooltip below. */
.alerts-detail-chart-area {
  padding: 8px 0;
  position: relative;
}
.alerts-pnl-chart {
  width: 100%;
  height: 180px;
  display: block;
  background: var(--bg-panel);
  border: 0;
}

/* H.10: invisible hit-target circles emitted by _build_pnl_svg for
   every track sample point. r=10 transparent so the chart line still
   reads clean, but the hover area is generous on small charts. */
.chart-data-point-target {
  cursor: crosshair;
}

/* H.10: styled tooltip that JS positions above the hovered data point.
   transform centers horizontally over the point (left is set to the
   point's midpoint by JS). pointer-events:none keeps the tooltip from
   stealing hover when it overlaps a different hit target. */
.chart-tooltip-styled {
  position: absolute;
  background: var(--bg-void);
  border: 1px solid var(--brass-deep);
  padding: 4px 8px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 0.85em;
  white-space: nowrap;
  pointer-events: none;
  z-index: 100;
  transform: translateX(-50%);
  transition: opacity 0.1s ease;
}
.chart-tooltip-styled .tooltip-elapsed {
  color: var(--brass-deep);
  margin-right: 8px;
}
.chart-tooltip-styled .tooltip-pnl {
  color: var(--text);
}
.alerts-detail-chart-stats {
  display: flex;
  gap: 24px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  margin-top: 12px;
  padding-top: 10px;
  border-top: 1px dashed var(--border);
}
.alerts-detail-chart-stat-label {
  color: var(--text-dim);
  font-size: 10px;
  letter-spacing: 1px;
  text-transform: uppercase;
  display: block;
}
.alerts-detail-chart-stat-value {
  color: var(--text);
  font-size: 14px;
  font-weight: 500;
}
.alerts-detail-chart-stat-value.pos { color: var(--positive-bright); }
.alerts-detail-chart-stat-value.neg { color: var(--negative-soft); }

.alerts-detail-outcomes {
  width: 100%;
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  border-collapse: collapse;
}
.alerts-detail-outcomes th {
  color: var(--brass-deep);
  font-weight: 400;
  text-transform: uppercase;
  letter-spacing: 2px;
  font-size: 10px;
  padding: 6px 8px;
  text-align: left;
  border-bottom: 1px solid var(--border);
}
.alerts-detail-outcomes td {
  padding: 8px;
  border-bottom: 1px solid var(--border);
  color: var(--text-muted);
}
.alerts-detail-outcomes tr:last-child td { border-bottom: none; }
.alerts-detail-outcomes .pt-yes { color: var(--brass-bright); font-weight: 500; }
.alerts-detail-outcomes .pt-no { color: var(--border); }
.alerts-detail-outcomes .pnl-pos { color: var(--positive-bright); }
.alerts-detail-outcomes .pnl-neg { color: var(--negative-soft); }
.alerts-detail-outcomes .pnl-pending { color: var(--text-dim); font-style: italic; }
/* Patch H.10: horizon reached but pnl never computed — distinct from
   genuinely pending. Same muted look (no scolding red); spec note:
   tone over alarm. */
.alerts-detail-outcomes .pnl-na { color: var(--brass-deep); font-style: italic; }
.alerts-detail-outcomes .pnl-zero { color: var(--text-muted); }

.alerts-detail-features-grid {
  display: grid;
  grid-template-columns: 200px 1fr 200px 1fr;
  gap: 4px 16px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
}
.alerts-detail-fname { color: var(--text-dim); padding: 4px 0; }
.alerts-detail-fval { color: var(--text); padding: 4px 0; word-break: break-all; }

.alerts-detail-section details summary {
  cursor: pointer;
  color: var(--brass);
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  letter-spacing: 1px;
  padding: 8px 0;
  list-style: none;
}
.alerts-detail-section details summary::-webkit-details-marker { display: none; }
.alerts-detail-section details summary::before {
  content: "▶";
  color: var(--brass-deep);
  padding-right: 8px;
  display: inline-block;
}
.alerts-detail-section details[open] summary::before { content: "▼"; }
.alerts-detail-section details summary:hover { color: var(--brass-bright); }
.alerts-detail-raw {
  background: var(--bg-void);
  border: 1px solid var(--border);
  padding: 12px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--text-muted);
  overflow-x: auto;
  line-height: 1.5;
  white-space: pre-wrap;
  word-break: break-all;
}


/* ════════════════════════════════════════════════════════
   v11.7 (Patch H.8): Enriched badge variants + row 5
   tracking summary. Adds .badge-eval / .badge-expired /
   .badge-positive / .badge-negative on top of H.4's .badge-active,
   plus .alert-card-row5 + .track-bar / .track-bar-fill.
   ════════════════════════════════════════════════════════ */

.alert-card-badge.badge-eval {
  background: transparent;
  color: var(--brass-deep);
  border: 1px solid var(--brass-deep);
}
.alert-card-badge.badge-expired {
  background: transparent;
  color: var(--text-dim);
  border: 1px solid var(--border);
}
.alert-card-badge.badge-positive {
  background: rgba(79, 138, 87, 0.12);
  color: var(--positive-bright);
  border: 1px solid var(--positive);
}
.alert-card-badge.badge-negative {
  background: rgba(161, 79, 79, 0.12);
  color: var(--negative-soft);
  border: 1px solid var(--negative);
}

.alert-card-row5 {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--text-dim);
  padding-top: 8px;
  margin-top: 4px;
  border-top: 1px dashed var(--border);
  display: flex;
  gap: 14px;
  align-items: center;
  flex-wrap: wrap;
}
.alert-card-row5 .track-bar {
  display: inline-block;
  height: 4px;
  width: 80px;
  background: var(--border);
  position: relative;
  overflow: hidden;
  vertical-align: middle;
}
/* Bar fill = min(elapsed_seconds / TRACKING_HORIZON_SECONDS, 1.0).
   3-day horizon in V1 (single value for all engines). */
.alert-card-row5 .track-bar-fill {
  height: 100%;
  background: linear-gradient(90deg, var(--positive) 0%, var(--positive-bright) 100%);
}
.alert-card-row5-current.positive { color: var(--positive-bright); }
.alert-card-row5-current.negative { color: var(--negative-soft); }
.alert-card-row5-pt-hit {
  color: var(--brass-bright);
  font-weight: 500;
}

/* Patch H.10: stalled state — muted, italicized so it reads as a
   status note rather than a card metric. brass-deep matches the
   "secondary metadata" tone used by .help-icon. */
.alert-card-row5-stalled {
  color: var(--brass-deep);
  font-style: italic;
  font-size: 0.9em;
  margin-left: 6px;
}

/* ════════════════════════════════════════════════════════
   v11.7 (Patch M.7): EM brief panel + header strip styles.
   Sticky panel with opaque background + z-index ensures clean
   overlay during the cards grid 5s repaints (QC fix #4 in spec).
   ════════════════════════════════════════════════════════ */

.em-brief-header-strip {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 24px;
  background: var(--bg-panel);
  border: 1px solid var(--border);
  border-left: 3px solid var(--brass-bright);
  margin: 0 24px 12px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
}
.em-refresh-all-btn {
  background: rgba(213, 176, 107, 0.10);
  color: var(--brass-bright);
  border: 1px solid var(--brass-deep);
  padding: 6px 14px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  cursor: pointer;
  transition: background 0.15s;
}
.em-refresh-all-btn:hover:not(:disabled) {
  background: rgba(213, 176, 107, 0.20);
}
.em-refresh-all-btn:disabled {
  opacity: 0.6;
  cursor: not-allowed;
}
.em-ticker-input {
  background: var(--bg-void);
  color: var(--text);
  border: 1px solid var(--border);
  padding: 6px 12px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  width: 320px;
  min-width: 200px;
}
.em-ticker-input:focus {
  outline: none;
  border-color: var(--brass-bright);
}
.em-refresh-status {
  color: var(--text-dim);
  font-size: 11px;
  margin-left: auto;
}

/* Panel — sticky, overlays grid cleanly during repaints */
.em-brief-panel {
  position: sticky;
  top: 0;
  z-index: 5;
  background: var(--bg-panel);
  border: 1px solid var(--border);
  border-left: 4px solid var(--brass-bright);
  margin: 0 24px 12px;
  font-family: 'Outfit', sans-serif;
  transition: max-height 0.2s ease, opacity 0.15s ease;
  max-height: 80vh;
  overflow-y: auto;
}
.em-brief-panel-empty {
  padding: 14px 18px;
  border-left-color: var(--brass-deep);
  border-style: dashed;
}
.em-brief-empty-message {
  color: var(--brass-deep);
  font-size: 12px;
  font-family: 'JetBrains Mono', monospace;
  text-align: center;
}

.em-brief-panel-loading { position: relative; }
.em-brief-loading {
  position: absolute; inset: 0;
  background: rgba(13, 15, 16, 0.72);
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  z-index: 10;
}
.em-brief-spinner {
  width: 28px; height: 28px;
  border: 3px solid var(--border);
  border-top-color: var(--brass-bright);
  border-radius: 50%;
  animation: emBriefSpin 0.7s linear infinite;
  margin-bottom: 12px;
}
@keyframes emBriefSpin { to { transform: rotate(360deg); } }
.em-brief-loading-caption {
  color: var(--text-muted);
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
}

.em-brief-panel-error {
  padding: 24px 18px;
  text-align: center;
  border-left-color: var(--negative);
  position: relative;
}
.em-brief-error-icon { font-size: 24px; color: var(--negative-soft); }
.em-brief-error-title {
  font-family: 'Cinzel', serif;
  font-size: 14px;
  letter-spacing: 3px;
  color: var(--text);
  margin: 8px 0 4px;
}
.em-brief-error-message {
  color: var(--text-dim);
  font-size: 12px;
}

.em-brief-panel-populated {
  padding: 16px 22px;
}
.em-brief-panel-header {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 10px;
  border-bottom: 1px solid var(--border);
  padding-bottom: 8px;
}
.em-brief-panel-ticker {
  font-family: 'JetBrains Mono', monospace;
  font-size: 18px;
  color: var(--text);
  font-weight: 500;
}
.em-brief-refresh, .em-brief-dismiss {
  background: transparent;
  border: 1px solid var(--border);
  color: var(--brass-deep);
  padding: 4px 10px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  cursor: pointer;
}
.em-brief-refresh:hover, .em-brief-dismiss:hover {
  color: var(--brass-bright);
  border-color: var(--brass-deep);
}
.em-brief-dismiss { margin-left: auto; }

.em-brief-partial-warning {
  background: rgba(213, 176, 107, 0.08);
  color: var(--brass-bright);
  border: 1px solid var(--brass-deep);
  padding: 8px 12px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  margin-bottom: 10px;
}

.em-brief-section {
  padding: 10px 0;
  border-bottom: 1px solid var(--border);
}
.em-brief-section:last-child { border-bottom: none; }
.em-brief-section-title {
  font-family: 'Cinzel', serif;
  font-size: 10px;
  letter-spacing: 4px;
  color: var(--brass-deep);
  text-transform: uppercase;
  margin-bottom: 8px;
}

.em-brief-engine-no-trade { border-left-color: var(--negative); }
.em-brief-engine-strong   { border-left-color: var(--positive); }
.em-brief-engine-neutral  { border-left-color: var(--brass-bright); }

.em-brief-engine-label {
  font-family: 'Outfit', sans-serif;
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 1px;
  color: var(--text);
}
.em-brief-meta {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--text-dim);
  margin-top: 4px;
}

.em-brief-bias-pill {
  display: inline-block;
  padding: 4px 10px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  border: 1px solid var(--border);
}
.em-brief-bias-bull { color: var(--positive-bright); border-color: var(--positive); }
.em-brief-bias-bear { color: var(--negative-soft); border-color: var(--negative); }
.em-brief-bias-neutral { color: var(--brass-bright); border-color: var(--brass-deep); }

.em-brief-levels-grid {
  display: grid;
  grid-template-columns: 140px 1fr;
  gap: 4px 16px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
}
.em-brief-label { color: var(--text-dim); }
.em-brief-value { color: var(--text); }

.em-brief-dealer-row, .em-brief-vol-row {
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  color: var(--text-muted);
  padding: 2px 0;
}
.em-brief-dealer-row .positive { color: var(--positive-bright); }
.em-brief-dealer-row .negative { color: var(--negative-soft); }

.em-brief-signals {
  list-style: none;
  padding: 0;
  margin: 0;
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  color: var(--text-muted);
}
.em-brief-signals li { padding: 2px 0; }

.em-brief-na {
  color: var(--text-dim);
  font-style: italic;
  font-size: 11px;
}

.em-brief-footer {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  color: var(--text-dim);
  text-align: center;
  margin-top: 12px;
  padding-top: 8px;
  border-top: 1px dashed var(--border);
}

/* Make tcard click-target visually obvious */
.tcard-clickable {
  cursor: pointer;
}
.tcard-clickable:focus-visible {
  outline: 2px solid var(--brass-bright);
  outline-offset: -2px;
}

/* ════════════════════════════════════════════════════════
   v11.7 (Patch I V0): Barometer page styles.
   Three stacked tables (per-engine, per-engine x direction,
   per-ticker) with monospace numerals and pos/neg pnl coloring.
   ════════════════════════════════════════════════════════ */

.barometer-page {
  padding: 20px 24px 40px;
  max-width: 1280px;
  margin: 0 auto;
}

.barometer-eyebrow {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  color: var(--brass-deep);
  letter-spacing: 2px;
  font-family: 'Cinzel', serif;
  font-size: 0.78em;
  text-transform: uppercase;
  padding-bottom: 14px;
  border-bottom: 1px solid var(--brass-deep);
  margin-bottom: 24px;
}
.barometer-eyebrow-meta {
  color: var(--brass-bright);
  letter-spacing: 0;
  font-family: 'JetBrains Mono', monospace;
  font-size: 0.92em;
  text-transform: none;
}

/* v11.7 (Patch I V1, commit 1): time-window chip selector. */
.barometer-window-bar {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
  margin: -8px 0 24px;
  padding-bottom: 16px;
  border-bottom: 1px solid rgba(140, 110, 60, 0.18);
}
.barometer-window-chip {
  display: inline-block;
  padding: 5px 12px;
  border: 1px solid var(--brass-deep);
  border-radius: 2px;
  color: var(--brass-deep);
  font-family: 'JetBrains Mono', monospace;
  font-size: 0.82em;
  text-decoration: none;
  letter-spacing: 0.5px;
  transition: background-color 0.15s, color 0.15s;
}
.barometer-window-chip:hover {
  background: rgba(140, 110, 60, 0.12);
  color: var(--brass-bright);
}
.barometer-window-chip.active {
  background: var(--brass-deep);
  color: var(--bg-void);
  font-weight: 600;
}

.barometer-section { margin-bottom: 28px; }
.barometer-section-title {
  font-family: 'Cinzel', serif;
  font-size: 0.92em;
  letter-spacing: 3px;
  text-transform: uppercase;
  color: var(--brass-bright);
  margin-bottom: 10px;
}

.barometer-table {
  width: 100%;
  border-collapse: collapse;
  font-family: 'JetBrains Mono', monospace;
  font-size: 0.92em;
  background: var(--bg-panel);
}
.barometer-table th,
.barometer-table td {
  padding: 8px 12px;
  text-align: right;
  border-bottom: 1px solid var(--border, #2a2d31);
  white-space: nowrap;
}
.barometer-table th {
  color: var(--brass-deep);
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 1px;
  font-size: 0.78em;
  background: rgba(0, 0, 0, 0.18);
}
.barometer-table tbody tr:hover { background: rgba(255, 255, 255, 0.025); }
.barometer-table .barometer-col-text { text-align: left; }
.barometer-table .num { font-variant-numeric: tabular-nums; }
.barometer-table .pnl-pos { color: var(--positive-bright); }
.barometer-table .pnl-neg { color: var(--negative-soft); }
.barometer-headline-cell .pnl-pos { color: var(--positive-bright); }
.barometer-headline-cell .pnl-neg { color: var(--negative-soft); }
.barometer-small-sample {
  color: var(--brass-deep);
  font-style: italic;
  font-size: 0.85em;
}
.barometer-engines-list {
  color: var(--brass-deep);
  font-size: 0.85em;
  letter-spacing: 0.5px;
}

.barometer-empty {
  padding: 24px;
  text-align: center;
  color: var(--brass-deep);
  font-style: italic;
  background: var(--bg-panel);
  border: 1px dashed var(--brass-deep);
}

.barometer-note {
  color: var(--brass-deep);
  font-style: italic;
  font-size: 0.82em;
  padding: 6px 4px;
}

/* v11.7 (Patch I V1, commit 2): per-horizon breakdown table. Engine
   divider rows separate each engine's horizon time-series so the table
   scans as a stack of sub-tables. Engine name on data rows muted so
   the eye groups by divider rather than by repeated cell text. */
.barometer-horizon-table .barometer-engine-divider td {
  background: rgba(140, 110, 60, 0.10);
  color: var(--brass-bright);
  font-family: 'Cinzel', serif;
  letter-spacing: 2px;
  text-transform: uppercase;
  font-size: 0.78em;
  padding: 8px 10px;
  border-top: 1px solid var(--brass-deep);
}
.barometer-horizon-table .barometer-muted {
  color: rgba(140, 110, 60, 0.45);
  font-size: 0.78em;
}
.barometer-col-sub {
  display: inline-block;
  font-family: 'JetBrains Mono', monospace;
  font-size: 0.72em;
  font-weight: 400;
  color: var(--brass-deep);
  letter-spacing: 0.4px;
  text-transform: lowercase;
}
.barometer-col-win-at,
.barometer-col-pt-by {
  border-left: 1px solid rgba(140, 110, 60, 0.18);
}

/* v11.7 (Patch I V1, commit 3): regime conditioning blocks. Each
   dimension renders as a sub-table titled with the dimension's label.
   Stacked vertically inside the parent section so all 6 cuts are
   visible at once for quick visual scan across dimensions. */
.barometer-regime-block {
  margin: 18px 0 28px;
}
.barometer-regime-title {
  font-family: 'Cinzel', serif;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: var(--brass-bright);
  font-size: 0.82em;
  padding: 6px 0 8px;
  border-bottom: 1px solid rgba(140, 110, 60, 0.25);
  margin-bottom: 6px;
}
/* Patch Q.1: PER ENGINE trade-type groups (directional / long options / credit) */
.barometer-engine-group {
  margin: 14px 0 26px;
}
.barometer-engine-group-title {
  font-family: 'Cinzel', serif;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: var(--brass-bright);
  font-size: 0.82em;
  padding: 6px 0 4px;
  border-bottom: 1px solid rgba(140, 110, 60, 0.25);
}
.barometer-engine-group-caption {
  margin-bottom: 8px;
}
.barometer-regime-table th,
.barometer-regime-table td {
  font-size: 0.92em;
}
.barometer-regime-empty {
  padding: 8px 6px;
  font-size: 0.86em;
}

/* v11.7 (Patch I V1, commit 4): per-ticker drill-down. Ticker links on
   the leaderboard, the drill-down table, and the PT-flag triplet. */
.barometer-ticker-link {
  color: var(--brass-bright);
  text-decoration: none;
  border-bottom: 1px dotted var(--brass-deep);
  padding-bottom: 1px;
}
.barometer-ticker-link:hover {
  color: var(--gold);
  border-bottom-color: var(--gold);
}
/* v11.7 (Patch I V2, Task 1.4): engine drill-down links on /barometer. */
.barometer-engine-link {
  color: var(--brass-bright);
  text-decoration: none;
}
.barometer-engine-link:hover { text-decoration: underline; }

.barometer-drilldown-link {
  color: var(--brass-deep);
  font-size: 0.86em;
  text-decoration: none;
}
.barometer-drilldown-link:hover {
  color: var(--brass-bright);
}
.barometer-drilldown-table {
  font-size: 0.86em;
}
.barometer-drilldown-table td,
.barometer-drilldown-table th {
  padding: 6px 8px;
}
.barometer-pt-flags {
  font-family: 'JetBrains Mono', monospace;
  letter-spacing: 1px;
}
.barometer-pt-hit {
  color: var(--positive-bright, var(--brass-bright));
  font-weight: 600;
}
.barometer-pt-miss {
  color: rgba(140, 110, 60, 0.35);
}

/* v11.7 (Patch I V1, commit 5): methodology partial. Collapsible
   help panel at the bottom of the barometer pages. Default state
   open; collapsed state persists via localStorage. */
.barometer-methodology {
  margin: 36px 0 24px;
  border-top: 1px solid var(--brass-deep);
  padding-top: 18px;
}
.barometer-methodology-summary {
  font-family: 'Cinzel', serif;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: var(--brass-bright);
  font-size: 0.86em;
  padding: 8px 4px;
  cursor: pointer;
  list-style: none;
  outline: none;
}
.barometer-methodology-summary::-webkit-details-marker { display: none; }
.barometer-methodology-summary::before {
  content: "▸  ";
  display: inline-block;
  color: var(--brass-deep);
  transition: transform 0.15s;
}
.barometer-methodology[open] .barometer-methodology-summary::before {
  content: "▾  ";
}
.barometer-methodology-summary:hover {
  color: var(--gold);
}
.barometer-methodology-body {
  padding: 12px 4px 8px;
  color: var(--text-primary);
  font-size: 0.92em;
  line-height: 1.55;
  max-width: 920px;
}
.barometer-methodology-section {
  margin-bottom: 22px;
}
.barometer-methodology-section h4 {
  font-family: 'Cinzel', serif;
  letter-spacing: 1.5px;
  color: var(--brass-bright);
  font-size: 0.92em;
  margin: 0 0 8px;
  text-transform: uppercase;
}
.barometer-methodology-section p,
.barometer-methodology-section ul {
  margin: 0 0 8px;
}
.barometer-methodology-section ul {
  padding-left: 22px;
}
.barometer-methodology-section li {
  margin-bottom: 4px;
}
.barometer-methodology-section code {
  font-family: 'JetBrains Mono', monospace;
  font-size: 0.9em;
  background: rgba(140, 110, 60, 0.10);
  padding: 1px 5px;
  border-radius: 2px;
  color: var(--brass-bright);
}
.barometer-methodology-section strong {
  color: var(--brass-bright);
}
.barometer-methodology-section em {
  color: var(--brass-deep);
  font-style: italic;
}
.barometer-methodology-dl {
  display: grid;
  grid-template-columns: minmax(140px, max-content) 1fr;
  gap: 6px 18px;
  margin: 0;
}
.barometer-methodology-dl dt {
  font-family: 'JetBrains Mono', monospace;
  color: var(--brass-bright);
  font-weight: 600;
  font-size: 0.9em;
  padding-top: 1px;
}
.barometer-methodology-dl dd {
  margin: 0;
}

.barometer-error {
  background: rgba(161, 79, 79, 0.08);
  border-left: 3px solid var(--negative);
  padding: 12px 16px;
  margin-bottom: 22px;
}
.barometer-error-title {
  font-family: 'Cinzel', serif;
  letter-spacing: 2px;
  color: var(--negative-soft);
  font-size: 0.85em;
  margin-bottom: 4px;
}
.barometer-error-body {
  color: var(--text-color, #d4d4d4);
  font-size: 0.92em;
  font-family: 'JetBrains Mono', monospace;
}

/* v11.7 (Patch I V2): engine drill-down tree styling */
.barometer-headline-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 16px;
  margin: 8px 0 16px 0;
}
.barometer-headline-cell {
  text-align: center;
  padding: 12px 8px;
  background: var(--bg-elevated);
  border-left: 2px solid var(--brass-deep);
}
.barometer-headline-num {
  font-size: 1.6em;
  font-weight: 600;
  color: var(--text);
}
.barometer-headline-label {
  font-size: 0.7em;
  letter-spacing: 0.1em;
  color: var(--brass-deep);
  margin-top: 4px;
}
.barometer-drilldown-child {
  background: rgba(255,255,255,0.02);
}
.barometer-drilldown-indent {
  color: var(--brass-deep);
  margin-right: 6px;
  opacity: 0.7;
}
.barometer-alert-link {
  color: var(--brass-bright);
  text-decoration: none;
}
.barometer-alert-link:hover { text-decoration: underline; }
.barometer-back {
  color: var(--brass-deep);
  text-decoration: none;
  margin-right: 12px;
}
.barometer-back:hover { color: var(--brass-bright); }
.pt-hit { font-weight: 700; }
.pt-hit-1 { color: var(--positive); }
.pt-hit-2 { color: var(--positive-bright); }
.pt-hit-3 { color: var(--brass-bright); }

/* v11.7 (Patch I V2, Task 1.6): regime filter banner on the engine
   drill-down page. Subtle, brass-toned — matches the .barometer-note
   aesthetic but with a left border to make the active-filter state
   visually distinct. 'clear' link blends into the eyebrow palette. */
.barometer-regime-filter {
  background: rgba(140, 110, 60, 0.07);
  border-left: 3px solid var(--brass-deep);
  color: var(--brass-deep);
  font-size: 0.85em;
  font-style: italic;
  padding: 7px 14px;
  margin-bottom: 14px;
}
.barometer-regime-filter b {
  font-style: normal;
  color: var(--brass-bright);
}
.barometer-regime-filter a {
  color: var(--brass-deep);
  text-decoration: none;
  opacity: 0.8;
}
.barometer-regime-filter a:hover {
  color: var(--brass-bright);
  opacity: 1;
}

/* v11.7 (Patch N): INCOME LEDGER barometer section */
.barometer-income-ledger-table td.num {
  white-space: nowrap;
}
.barometer-income-ledger-table .barometer-muted {
  margin-left: 4px;
  opacity: 0.6;
  font-size: 0.85em;
}

/* ───────────────────────────────────────────────────────────
   Multi-tenor dealer EM brief (Task 7).
   Reuses income-card token language: --brass-bright, --data-pos,
   --data-neg, --warn, Cinzel + JetBrains Mono fonts.
   Spec: docs/superpowers/specs/2026-05-23-multi-tenor-dealer-em-brief-design.md
         sec 4.7 + sec 4.8.
   ─────────────────────────────────────────────────────────── */

.dealer-brief-page {
  padding: 16px;
  max-width: 920px;
  margin: 0 auto;
}

/* Header strip */
.dealer-brief-header-strip {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 12px 16px;
  background: var(--bg-panel);
  border: 1px solid var(--brass-deep);
  border-radius: 4px;
  margin-bottom: 16px;
  flex-wrap: wrap;
}
.dealer-brief-header-left { display: flex; align-items: baseline; gap: 12px; }
.dealer-brief-header-right { display: flex; align-items: center; gap: 12px; }
.dealer-brief-ticker {
  font-family: 'Cinzel', serif;
  font-size: 1.6em;
  color: var(--brass-bright);
}
.dealer-brief-spot {
  font-family: 'JetBrains Mono', monospace;
  font-size: 1.3em;
  color: var(--text);
}

/* Tenor chips */
.dealer-brief-tenor-chips { display: flex; gap: 4px; flex-wrap: wrap; }
.dealer-brief-tenor-chip {
  display: inline-block;
  padding: 4px 10px;
  border: 1px solid var(--brass-deep);
  border-radius: 12px;
  color: var(--text);
  text-decoration: none;
  font-size: 0.85em;
  font-family: 'JetBrains Mono', monospace;
}
.dealer-brief-tenor-chip:hover { background: var(--bg-elevated); }
.dealer-brief-tenor-chip-active {
  background: var(--brass-bright);
  color: var(--bg-void);
  font-weight: 600;
}

/* Freshness eyebrow */
.dealer-brief-eyebrow {
  font-size: 0.85em;
  color: var(--brass-deep);
  font-family: 'JetBrains Mono', monospace;
}
.dealer-brief-eyebrow.fresh-live { color: var(--data-pos); }
.dealer-brief-eyebrow.fresh-normal { color: var(--text); }
.dealer-brief-eyebrow.fresh-aging { color: var(--brass-deep); font-style: italic; }
.dealer-brief-eyebrow.fresh-stale { color: var(--warn); font-weight: 600; }
.dealer-brief-live-dot {
  display: inline-block;
  width: 6px; height: 6px;
  background: var(--data-pos);
  border-radius: 50%;
  margin-right: 4px;
  vertical-align: middle;
}

/* Refresh button */
.dealer-brief-refresh-btn {
  padding: 4px 12px;
  border: 1px solid var(--brass-deep);
  background: transparent;
  color: var(--brass-bright);
  border-radius: 4px;
  cursor: pointer;
  font-family: 'JetBrains Mono', monospace;
}
.dealer-brief-refresh-btn:disabled { opacity: 0.5; cursor: not-allowed; }
.dealer-brief-refresh-btn:hover:not(:disabled) { background: var(--bg-elevated); }

/* Error card */
.dealer-brief-error-card {
  padding: 16px;
  background: var(--bg-panel);
  border-left: 4px solid var(--warn);
  border-radius: 4px;
  margin-bottom: 16px;
  font-family: 'Cormorant Garamond', serif;
  color: var(--text);
}

/* Headline card - bias-color tint */
.dealer-brief-headline-card {
  padding: 20px;
  border-radius: 4px;
  margin-bottom: 12px;
  border-left: 6px solid var(--brass-deep);
}
.dealer-brief-headline-bullish { border-left-color: var(--data-pos); background: rgba(95, 179, 107, 0.05); }
.dealer-brief-headline-bearish { border-left-color: var(--data-neg); background: rgba(224, 96, 95, 0.05); }
.dealer-brief-headline-neutral { border-left-color: var(--brass-deep); background: rgba(120, 90, 40, 0.05); }
.dealer-brief-headline-text {
  font-family: 'Cinzel', serif;
  font-size: 1.3em;
  color: var(--text);
}
.dealer-brief-regime-caution-chip {
  display: inline-block;
  margin-top: 8px;
  padding: 2px 8px;
  background: var(--warn);
  color: var(--bg-void);
  border-radius: 3px;
  font-size: 0.85em;
  font-family: 'JetBrains Mono', monospace;
}

/* Bias + regime lines */
.dealer-brief-bias-line {
  padding: 8px 12px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 1.05em;
  color: var(--text);
}
.dealer-brief-regime-line {
  padding: 4px 12px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 0.9em;
  color: var(--brass-deep);
  margin-bottom: 12px;
}
.dealer-brief-regime-opposed {
  color: var(--warn);
  font-style: italic;
}

/* Glance signals */
.dealer-brief-glance-signals {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 12px;
  background: var(--bg-panel);
  border-radius: 4px;
  margin-bottom: 12px;
}
.dealer-brief-glance-row {
  display: flex;
  gap: 12px;
  padding: 4px 0;
  font-family: 'Cormorant Garamond', serif;
  font-size: 1.05em;
}
.dealer-brief-glance-emoji {
  font-family: 'JetBrains Mono', monospace;
  min-width: 24px;
}
.dealer-brief-glance-pos .dealer-brief-glance-emoji { color: var(--data-pos); }
.dealer-brief-glance-neg .dealer-brief-glance-emoji { color: var(--data-neg); }

/* Levels card */
.dealer-brief-levels-card {
  padding: 12px;
  background: var(--bg-panel);
  border-radius: 4px;
  margin-bottom: 12px;
}
.dealer-brief-levels-title {
  font-family: 'Cinzel', serif;
  color: var(--brass-bright);
  margin-bottom: 8px;
  text-transform: uppercase;
  letter-spacing: 2px;
  font-size: 0.85em;
}
.dealer-brief-levels-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 8px;
  margin-bottom: 12px;
}
.dealer-brief-level-row {
  display: flex;
  justify-content: space-between;
  padding: 4px 0;
  font-family: 'JetBrains Mono', monospace;
}
.dealer-brief-level-label { color: var(--brass-deep); }
.dealer-brief-level-value { color: var(--text); }
.dealer-brief-level-dist { color: var(--brass-deep); font-size: 0.85em; }

/* GEX strip SVG */
.dealer-brief-gex-strip { display: block; margin: 8px auto 0; }
.dealer-brief-gex-strip-sparse {
  padding: 12px;
  font-family: 'Cormorant Garamond', serif;
  font-style: italic;
  color: var(--brass-deep);
  text-align: center;
}
.gex-axis-label {
  font-family: 'JetBrains Mono', monospace;
  font-size: 0.7em;
  fill: var(--brass-deep);
}
.gex-zero-line { stroke: var(--brass-deep); stroke-width: 1; opacity: 0.4; }
.gex-bar-non-wall { fill: var(--brass-deep); opacity: 0.5; }
.gex-bar-wall-bullish { fill: var(--data-pos); }
.gex-bar-wall-bearish { fill: var(--data-neg); }
.gex-bar-wall-neutral { fill: var(--brass-bright); }
.gex-spot-marker { stroke: var(--text); stroke-width: 1.5; }
.gex-flip-marker { stroke: var(--warn); stroke-width: 1.5; stroke-dasharray: 3 3; }
.gex-label {
  font-family: 'JetBrains Mono', monospace;
  font-size: 0.65em;
  fill: var(--brass-deep);
}

/* Full breakdown disclosure */
.dealer-brief-full-breakdown {
  margin-top: 12px;
  padding: 8px 12px;
  background: var(--bg-panel);
  border-radius: 4px;
}
.dealer-brief-full-breakdown-summary {
  font-family: 'Cinzel', serif;
  color: var(--brass-bright);
  cursor: pointer;
  font-size: 0.9em;
  text-transform: uppercase;
  letter-spacing: 2px;
}
.dealer-brief-full-breakdown-body {
  padding-top: 8px;
}
.dealer-brief-breakdown-row {
  display: flex;
  gap: 12px;
  padding: 2px 0;
  font-family: 'Cormorant Garamond', serif;
  font-size: 0.95em;
}
.dealer-brief-breakdown-emoji {
  font-family: 'JetBrains Mono', monospace;
  min-width: 24px;
}
.dealer-brief-breakdown-dim { opacity: 0.45; font-style: italic; }

/* ───────────────────────────────────────────────────────────
   Patch O.1 — multi-tenor dealer brief INSIDE the inline modal
   (em-brief panel, distinct from the full-page .dealer-brief-*
   styles above). Adds tenor chips, freshness eyebrow, colored
   headline, glance signals, full-breakdown details. Reuses
   existing tokens. The GEX strip macro injects with its own
   .dealer-brief-gex-strip class already styled above.
   ─────────────────────────────────────────────────────────── */
.em-brief-multitenor .em-brief-mt-header {
  display: flex; flex-direction: column; gap: 8px;
  padding: 10px 12px;
  border-bottom: 1px solid var(--brass-deep);
}
.em-brief-mt-titlerow { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.em-brief-mt-spot { font-family: 'JetBrains Mono', monospace; color: var(--text); font-size: 0.95em; margin-left: 6px; }
.em-brief-tenor-chips { display: flex; gap: 4px; flex-wrap: wrap; }
.em-brief-tenor-chip {
  padding: 3px 9px; border: 1px solid var(--brass-deep);
  border-radius: 12px; background: transparent; color: var(--text);
  font-size: 0.8em; font-family: 'JetBrains Mono', monospace;
  cursor: pointer;
}
.em-brief-tenor-chip:hover { background: var(--bg-elevated); }
.em-brief-tenor-chip-active {
  background: var(--brass-bright); color: var(--bg-void); font-weight: 600;
}
.em-brief-eyebrow {
  margin-left: auto;
  font-family: 'JetBrains Mono', monospace; font-size: 0.78em;
  color: var(--brass-deep);
}
.em-brief-eyebrow.fresh-live { color: var(--data-pos); }
.em-brief-eyebrow.fresh-normal { color: var(--text); }
.em-brief-eyebrow.fresh-aging { color: var(--brass-deep); font-style: italic; }
.em-brief-eyebrow.fresh-stale { color: var(--warn); font-weight: 600; }
.em-brief-live-dot {
  display: inline-block; width: 6px; height: 6px;
  background: var(--data-pos); border-radius: 50%;
  margin-right: 4px; vertical-align: middle;
}
.em-brief-mt-headline {
  padding: 14px 16px; border-left: 6px solid var(--brass-deep);
  border-radius: 4px; margin: 8px 12px;
}
.em-brief-mt-headline-bullish { border-left-color: var(--data-pos); background: rgba(95, 179, 107, 0.05); }
.em-brief-mt-headline-bearish { border-left-color: var(--data-neg); background: rgba(190, 90, 90, 0.05); }
.em-brief-mt-headline-neutral { border-left-color: var(--brass-deep); background: rgba(120, 90, 40, 0.05); }
.em-brief-mt-headline-text {
  font-family: 'Cinzel', serif; font-size: 1.05em; color: var(--text);
}
.em-brief-regime-caution-chip {
  display: inline-block; margin-top: 6px; padding: 2px 7px;
  background: var(--warn); color: var(--bg-void);
  border-radius: 3px; font-size: 0.78em;
  font-family: 'JetBrains Mono', monospace;
}
.em-brief-mt-bias-line {
  padding: 4px 16px; font-family: 'JetBrains Mono', monospace;
  font-size: 0.95em; color: var(--text);
}
.em-brief-mt-regime-line {
  padding: 2px 16px 6px; font-family: 'JetBrains Mono', monospace;
  font-size: 0.82em; color: var(--brass-deep);
}
.em-brief-mt-regime-opposed { color: var(--warn); font-style: italic; }
.em-brief-mt-glance {
  padding: 8px 16px;
  display: flex; flex-direction: column; gap: 4px;
}
.em-brief-mt-glance-row {
  display: flex; gap: 10px; padding: 2px 0;
  font-family: 'Cormorant Garamond', serif; font-size: 0.98em;
}
.em-brief-mt-glance-emoji { font-family: 'JetBrains Mono', monospace; min-width: 22px; }
.em-brief-mt-glance-pos .em-brief-mt-glance-emoji { color: var(--data-pos); }
.em-brief-mt-glance-neg .em-brief-mt-glance-emoji { color: var(--data-neg); }
.em-brief-mt-levels-card { padding: 8px 16px; }
.em-brief-mt-level-dist { color: var(--brass-deep); font-size: 0.85em; }
.em-brief-mt-breakdown {
  margin: 4px 12px 8px; padding: 6px 10px;
  background: var(--bg-elevated); border-radius: 4px;
}
.em-brief-mt-breakdown-summary {
  font-family: 'Cinzel', serif; color: var(--brass-bright);
  font-size: 0.82em; text-transform: uppercase; letter-spacing: 1.5px;
  cursor: pointer;
}
.em-brief-mt-breakdown-body { padding-top: 6px; }
.em-brief-mt-breakdown-row {
  display: flex; gap: 10px; padding: 1px 0;
  font-family: 'Cormorant Garamond', serif; font-size: 0.9em;
}
.em-brief-mt-breakdown-emoji { font-family: 'JetBrains Mono', monospace; min-width: 22px; }
.em-brief-mt-breakdown-dim { opacity: 0.45; font-style: italic; }

/* ───────────────────────────────────────────────────────────
   Patch O.3 — Schwab refresh_token countdown tile in the header.
   Sits inside .system-status alongside SNAPSHOT MODE / PHASE 4.
   Same fresh-* tier semantics as dealer-brief eyebrow (live ->
   normal -> aging -> stale) but composed onto the .status-item
   layout. Title attribute on the span shows the absolute expiry
   ISO timestamp on hover.
   ─────────────────────────────────────────────────────────── */
.schwab-token-tile {
  font-family: 'JetBrains Mono', monospace;
  font-size: 0.78em;
  letter-spacing: 0.5px;
  cursor: help;
}
.schwab-token-tile.fresh-live { color: var(--data-pos); }
.schwab-token-tile.fresh-normal { color: var(--text); }
.schwab-token-tile.fresh-aging { color: var(--brass-deep); font-style: italic; }
.schwab-token-tile.fresh-stale { color: var(--warn); font-weight: 600; }
.schwab-token-tile.fresh-unknown { color: var(--brass-deep); opacity: 0.6; }

/* Patch Q — income blocker note + recently-surfaced watchlist */
.income-opp-row-blocker {
  font-family: "JetBrains Mono", monospace;
  font-size: 0.78em;
  color: var(--warn);
  opacity: 0.85;
  margin-left: 0.5em;
}
.income-watchlist {
  margin-top: 1.5rem;
  border-top: 1px solid var(--brass-deep);
  padding-top: 0.75rem;
}
.income-watchlist-title {
  font-family: "Cinzel", serif;
  letter-spacing: 2px;
  color: var(--brass-deep);
  font-size: 0.85em;
  margin-bottom: 0.5rem;
}
.income-watchlist-row {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 1rem;
  align-items: baseline;
  padding: 0.4rem 0.25rem;
  border-bottom: 1px solid rgba(120, 90, 40, 0.15);
  text-decoration: none;
  color: var(--text-color);
}
.income-watchlist-row:hover { background: var(--bg-panel); }
.income-watchlist-ticker {
  font-family: "JetBrains Mono", monospace;
  font-weight: 600;
  min-width: 4em;
}
.income-watchlist-meta { font-size: 0.85em; opacity: 0.9; }
.income-watchlist-last {
  font-size: 0.8em;
  color: var(--brass-deep);
  font-style: italic;
  margin-left: auto;
}

/* Patch R (Discovery): Discovery tab — dark monospace cards, left-border by type. */
.discovery-wrap { max-width: 1120px; margin: 0 auto; padding: 1rem; }
.discovery-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; margin-bottom: 1rem; }
.discovery-head h1 { margin-bottom: 0.2rem; }
.discovery-updated { color: #9b9b93; font-size: 0.85em; }
.discovery-status { border: 1px solid rgba(155,155,147,0.35); color: #b8b2a4; border-radius: 999px;
  padding: 4px 10px; font-size: 0.76rem; white-space: nowrap; font-family: "JetBrains Mono", monospace; }
.discovery-status.is-fresh { border-color: rgba(95,208,132,0.45); color: var(--positive-bright); }
.discovery-status.is-aging { border-color: rgba(216,168,74,0.55); color: #d8a84a; }
.discovery-status.is-stale { border-color: rgba(194,73,73,0.55); color: var(--negative-soft); }
.discovery-empty { color: #9b9b93; font-style: italic; padding: 2rem 0; }
.discovery-section { margin-bottom: 2rem; }
.discovery-section-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; margin-bottom: 0.75rem; }
.discovery-section-head h2 { margin-bottom: 0.2rem; }
.discovery-section-head p { margin: 0; color: #9b9b93; font-size: 0.84rem; }
.discovery-summary { display: grid; grid-template-columns: repeat(3, minmax(110px, 150px)) minmax(220px, 1fr);
  gap: 0.75rem; margin: 0 0 1.25rem; align-items: stretch; }
.discovery-summary-metric, .discovery-summary-note { background: rgba(18,19,20,0.86); border: 1px solid rgba(120,92,45,0.35);
  border-radius: 6px; padding: 0.75rem 0.85rem; font-family: "JetBrains Mono", monospace; }
.discovery-summary-metric b { display: block; color: var(--text); font-size: 1.3rem; line-height: 1; }
.discovery-summary-metric span, .discovery-summary-note { color: #9b9b93; font-size: 0.8rem; }
.discovery-summary-note { display: flex; align-items: center; }
.discovery-spotlight { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.75rem; }
.discovery-spotlight-card { display: grid; gap: 0.24rem; text-decoration: none; color: var(--text);
  background: rgba(18,19,20,0.9); border: 1px solid rgba(120,92,45,0.45); border-left: 4px solid var(--brass-deep);
  border-radius: 6px; padding: 0.8rem 0.9rem; font-family: "JetBrains Mono", monospace; min-height: 108px; }
.discovery-spotlight-card.is-insider { border-left-color: #d98a44; }
.discovery-spotlight-card.is-upgrade { border-left-color: #3a6e33; }
.discovery-spotlight-card.is-downgrade { border-left-color: #7a3a36; }
.discovery-spotlight-card strong { font-size: 1.12rem; }
.discovery-spotlight-card em { color: #e5dfd1; font-style: normal; font-size: 0.86rem; }
.discovery-spotlight-card span:last-child { color: #9b9b93; font-size: 0.76rem; }
.discovery-sort { display: flex; gap: 4px; }
.discovery-sort button { background: none; border: 1px solid var(--brass-deep); color: var(--brass-deep);
  padding: 2px 10px; cursor: pointer; font: inherit; border-radius: 2px; }
.discovery-sort button.active { background: var(--brass-deep); color: var(--bg-void); }
.discovery-card { background: var(--bg-panel); border-left: 4px solid var(--brass-deep);
  padding: 0.6rem 0.9rem; margin-bottom: 0.5rem; font-family: "JetBrains Mono", monospace;
  color: var(--text); text-decoration: none; border-radius: 4px; min-height: 118px; }
.discovery-card:hover, .discovery-spotlight-card:hover { border-color: rgba(213,176,107,0.72); background: rgba(24,25,26,0.96); }
/* Discovery-specific amber/green/red left-borders per Patch R spec — intentionally
   distinct from --warn/--positive/--mine; do not "fix" to the nearest token.
   #d98a44 is the insider left-border (SPIKE pill is its own #3a2a14/#e8b86d, Patch R v2). */
.discovery-card.insider { border-left-color: #d98a44; }
.discovery-card.upgrade { border-left-color: #3a6e33; }
.discovery-card.downgrade { border-left-color: #7a3a36; }
.dc-top { display: flex; align-items: center; gap: 0.6rem; }
.dc-type { font-size: 0.7em; letter-spacing: 0.1em; color: #9b9b93; }
.dc-ticker { font-weight: 600; font-size: 1.05em; }
.dc-pill { font-size: 0.7em; padding: 1px 6px; border-radius: 3px; }
.dc-pill.spike { background: #3a2a14; color: #e8b86d; }
.dc-pill.cluster { background: var(--brass-bright); color: var(--bg-void); }
.dc-detail { margin-top: 0.3rem; }
.dc-foot { margin-top: 0.3rem; font-size: 0.8em; color: #9b9b93;
  border-top: 1px dotted var(--brass-deep); padding-top: 0.3rem; }
.dc-arrow { color: #9b9b93; font-size: 0.9em; }
.discovery-card .up { color: var(--positive-bright); }
.discovery-card .down { color: var(--negative-soft); }

/* Patch R v2 (Discovery): 2-column responsive grids + price callouts */
.discovery-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.75rem; }
@media (max-width: 900px) {
  .discovery-summary { grid-template-columns: repeat(3, 1fr); }
  .discovery-summary-note { grid-column: 1 / -1; }
  .discovery-spotlight { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 720px) {
  .discovery-head, .discovery-section-head { display: grid; }
  .discovery-grid, .discovery-spotlight, .discovery-summary { grid-template-columns: 1fr; }
  .discovery-summary-note { grid-column: auto; }
}
.discovery-subhead { color: #9b9b93; font-size: 0.85em; letter-spacing: 0.08em;
  text-transform: uppercase; margin: 0.5rem 0 0.4rem; }
.dc-callout { margin-top: 0.35rem; font-size: 1.15em; font-weight: 600; }
.dc-callout .dc-now { color: #9b9b93; font-size: 0.78em; font-weight: 400; margin-left: 0.5rem; }
/* keep green/red on the analyst callout's upside % (beats the grey .dc-now above by specificity) */
.dc-callout .dc-now.up { color: var(--positive-bright); }
.dc-callout .dc-now.down { color: var(--negative-soft); }
.dc-callout .dc-pt { color: var(--text); }

/* The Squawk Box (Project B-2) - brass-digest palette, intentionally a warm
   morning-brief tone distinct from the live --positive/--negative/--brass tokens. */
.squawk-panel { background: var(--bg-panel, #12100a); border: 1px solid #5a4a26; border-radius: 8px; margin-bottom: 14px; font-family: 'JetBrains Mono', ui-monospace, monospace; }
.squawk-header { display: flex; justify-content: space-between; align-items: center; padding: 11px 16px; border-bottom: 1px solid #2e2814; cursor: pointer; }
.squawk-title { color: #e8c878; font-size: 14px; font-weight: 700; letter-spacing: 1px; }
.squawk-stamp { color: #8a7c52; font-size: 12px; }
.squawk-stale { color: #d6a84a; font-style: italic; }
.squawk-toggle { color: #8a7c52; margin-left: 8px; }
.squawk-body { padding: 14px 16px; }
.squawk-empty { color: #8a948c; font-size: 13px; font-style: italic; }
.squawk-section-label { color: #7c8a82; font-size: 11px; letter-spacing: 1px; margin: 4px 0 8px; }
.squawk-dim { color: #5d6b63; }
/* OI Confirmation table — Patch B-2 redesign (2026-06-02) */
.squawk-oi-legend { color: #6f7d72; font-size: 10.5px; margin: 2px 0 9px; }
.squawk-oi-legend-bar { display: inline-block; width: 34px; height: 8px; border-radius: 2px; background: #7fd089; opacity: .32; vertical-align: middle; margin: 0 5px -1px 0; }
.squawk-oi-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 0 24px; margin-bottom: 16px; }
.squawk-oi-head { display: grid; grid-template-columns: 84px 116px 1fr 56px; gap: 0 10px; color: #5d6b63; font-size: 10px; letter-spacing: 1px; padding-bottom: 5px; border-bottom: 1px solid #2e2814; margin-bottom: 5px; }
.squawk-oi-row { display: grid; grid-template-columns: 84px 116px 1fr 56px; gap: 0 10px; align-items: center; font-size: 13px; line-height: 1.5; font-variant-numeric: tabular-nums; }
.squawk-oi-row > span { white-space: nowrap; }
.squawk-oi-flow.pos { color: #7fd089; } .squawk-oi-flow.neg { color: #d98a82; }
.squawk-oi-tk { color: #f1f6f2; }
.squawk-oi-price.pos { color: #7fd089; } .squawk-oi-price.neg { color: #d98a82; }
.squawk-oi-bar { position: relative; display: flex; align-items: center; height: 16px; }
.squawk-oi-bar i { position: absolute; left: 0; top: 0; bottom: 0; border-radius: 2px; opacity: .30; }
.squawk-oi-bar i.pos { background: #7fd089; } .squawk-oi-bar i.neg { background: #d98a82; }
.squawk-oi-bar b { position: relative; font-weight: 400; color: #9aa49d; padding-left: 5px; }
.squawk-oi-chip { grid-column: 1 / -1; justify-self: start; background: #3a3320; color: #e8c878; font-size: 9px; padding: 1px 6px; border-radius: 3px; margin: 1px 0 3px; }
@media (max-width: 760px) { .squawk-oi-cols { grid-template-columns: 1fr; } }
.squawk-buckets { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 8px 18px; font-size: 13px; }
@media (max-width: 900px) { .squawk-buckets { grid-template-columns: 1fr 1fr; } }
@media (max-width: 560px) { .squawk-buckets { grid-template-columns: 1fr; } }
.squawk-stalk-legend { color: #6f7d72; font-size: 10.5px; margin: 2px 0 9px; }
.squawk-stalk-pct { color: #8f9a91; }
.squawk-div-mark { font-size: 11px; }
.squawk-pers-chip { background: #3a3320; color: #e8c878; font-size: 9px; padding: 0 4px; border-radius: 3px; margin-left: 3px; }
.squawk-bucket-title { font-weight: 700; margin-bottom: 3px; }
.squawk-bucket-pos .squawk-bucket-title { color: #7fd089; }
.squawk-bucket-warn .squawk-bucket-title { color: #e8c878; }
.squawk-bucket-dim .squawk-bucket-title { color: #9aa49d; }
.squawk-bucket-neg .squawk-bucket-title { color: #d98a82; }
.squawk-stalk-row { color: #cdd6d0; line-height: 1.6; }

/* Project B-1: Setups Forming zone — desk dark/brass palette; per-card COLOR
   carries the setup DIRECTION (bull = green, bear = red) so a bear setup never
   reads bullish. Tier (aligned vs brewing) is shown by the badge TEXT, not color. */
.setups-zone { background: var(--bg-panel, #0e1311); border: 1px solid #2a3a33; border-radius: 8px; margin-bottom: 14px; font-family: 'JetBrains Mono', ui-monospace, monospace; }
.setups-header { display: flex; justify-content: space-between; align-items: center; padding: 11px 16px; border-bottom: 1px solid #222c27; cursor: pointer; }
.setups-title { color: #e8c878; font-size: 14px; font-weight: 700; letter-spacing: 1px; }
.setups-meta { color: #8a7c52; font-size: 12px; }
.setups-toggle { color: #8a7c52; margin-left: 8px; }
.setups-body { padding: 12px 16px; display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 10px; }
.setups-empty { color: #8a948c; font-size: 13px; font-style: italic; grid-column: 1 / -1; }
.setups-card { background: #0e1311; border: 1px solid #2a3a33; border-left: 4px solid #4fae5a; border-radius: 6px; padding: 10px 12px; }
.setups-dir-bull { border-left-color: #4fae5a; }   /* green = bullish setup */
.setups-dir-bear { border-left-color: #d98a82; }   /* red = bearish setup */
.setups-card-head { display: flex; align-items: center; gap: 8px; font-size: 13px; }
.setups-badge { font-weight: 800; font-size: 11px; }
.setups-dir-bull .setups-badge { color: #7fd089; }
.setups-dir-bear .setups-badge { color: #e89a92; }
.setups-ticker { font-size: 17px; color: #f1f6f2; font-family: Georgia, serif; }
.setups-dir { font-size: 11px; font-weight: 700; }
.setups-dir-bull .setups-dir { color: #7fd089; }
.setups-dir-bear .setups-dir { color: #e89a92; }
.setups-chip-room { background: #3a2f12; color: #e8c878; font-size: 10px; padding: 1px 6px; border-radius: 3px; }
.setups-card-line { font-size: 14px; color: #e3ebe5; margin: 6px 0; }
.setups-dim { color: #7c8a82; }
.setups-legs { display: flex; gap: 6px; flex-wrap: wrap; }
.setups-leg { font-size: 11px; padding: 2px 7px; border-radius: 4px; background: #14201a; }
.setups-leg-agree { color: #7fd089; border: 1px solid #3a5a3a; }
.setups-leg-pending { color: #9aa49d; border: 1px solid #3a3a3a; }
.setups-leg-disagree { color: #d98a82; border: 1px solid #5a3a36; }
/* agree-leg color carries direction so a bear card's chips are red, not green */
.setups-dir-bull .setups-leg-agree { color: #7fd089; border-color: #3a5a3a; }
.setups-dir-bear .setups-leg-agree { color: #e89a92; border-color: #5a3a36; }
.setups-run-bias { margin-top: 8px; background: #1c2418; color: #cdd6d0; border: 1px solid #3a4a3a; border-radius: 5px; padding: 4px 10px; font-size: 12px; cursor: pointer; }
.setups-run-bias:hover { background: #243024; }
.setups-run-bias:disabled { opacity: 0.6; cursor: default; }

/* Project B-1: EM panel collapse */
.em-brief-wrap { position: relative; }
.em-brief-collapse { position: absolute; top: 6px; right: 8px; z-index: 6; background: transparent; color: #8a7c52; border: none; font-size: 14px; cursor: pointer; padding: 2px 6px; }
.em-brief-collapse:hover { color: #e8c878; }

/* Project B-1: raw card readability — boxed OI/Flow, bigger + brighter */
.tcard-box { border: 1px solid #2f3d36; border-radius: 6px; padding: 8px 10px; margin-top: 10px; }
.tcard-box .tcard-eyebrow { margin-top: 0; }
.tcard-oi-row, .tcard-flow-row { font-size: 13.5px; }
.tcard-oi-label, .tcard-flow-strike, .tcard-flow-notional { color: #dbe4dd; }
.tcard-bias-bullish .tcard-oi-label, .tcard-bias-bullish .tcard-flow-strike { color: #7fd089; }
.tcard-bias-bearish .tcard-oi-label, .tcard-bias-bearish .tcard-flow-strike { color: #e8978f; }
.tcard-flow-notional { font-weight: 600; }
/* Live OI/Flow Buildup — 2026-06-02 */
.oib-panel { background: var(--bg-panel, #12100a); border: 1px solid #5a4a26; border-radius: 8px; margin-bottom: 14px; font-family: 'JetBrains Mono', ui-monospace, monospace; }
.oib-header { display: flex; justify-content: space-between; align-items: center; padding: 11px 16px; border-bottom: 1px solid #2e2814; cursor: pointer; }
.oib-title { color: #e8c878; font-size: 14px; font-weight: 700; letter-spacing: 1px; }
.oib-modes { display: flex; align-items: center; gap: 6px; }
.oib-mode { background: transparent; border: 1px solid #2e2814; color: #8a7c52; font-size: 10px; padding: 2px 8px; border-radius: 4px; cursor: pointer; font-family: inherit; }
.oib-mode.is-active { color: #e8c878; border-color: #5a4a26; background: #1c1810; }
.oib-toggle { color: #8a7c52; margin-left: 6px; }
.oib-body { padding: 12px 16px; }
.oib-empty, .oib-none { color: #8a948c; font-size: 13px; font-style: italic; }
.oib-grid { display: grid; grid-template-columns: 340px 1fr; gap: 16px; }
.oib-list-head { display: grid; grid-template-columns: 1fr 50px 1.3fr 104px; gap: 0 8px; color: #5d6b63; font-size: 9.5px; letter-spacing: 1px; padding-bottom: 5px; border-bottom: 1px solid #2e2814; margin-bottom: 4px; border-left: 2px solid transparent; }
.oib-row { display: grid; grid-template-columns: 1fr 50px 1.3fr 104px; gap: 0 8px; align-items: center; font-size: 12px; line-height: 1.9; cursor: pointer; border-bottom: 1px solid #19160d; border-left: 2px solid transparent; }
.oib-row:hover { background: #15120b; }
.oib-row.is-sel { background: rgba(232, 200, 120, 0.08); border-left-color: #e8c878; }
.oib-row.oib-strk-extreme { border-left-color: #6e5526; }
.oib-row.oib-strk-high { border-left-color: #4a3c1e; }
.oib-row.oib-strk-moderate { border-left-color: #2a2412; }
.oib-row.is-sel { border-left-color: #e8c878; }
.oib-tk { color: #f1f6f2; }
.oib-mv.pos { color: #7fd089; } .oib-mv.neg { color: #d98a82; }
.oib-bias-bull { color: #7fd089; } .oib-bias-bear { color: #d98a82; } .oib-bias-mixed { color: #e8c878; }
.oib-cl { color: #9aa49d; }
.oib-dte { background: #241d10; color: #d8c79a; font-size: 9px; padding: 0 4px; border-radius: 3px; }
.oib-str { font-size: 9.5px; font-weight: 700; }
.oib-str-extreme { color: #d98a82; } .oib-str-high { color: #e8c878; } .oib-str-moderate { color: #9aa49d; }
.oib-peak { color: #d8c79a; text-align: right; font-variant-numeric: tabular-nums; }
.oib-detail { border-left: 1px solid #2e2814; padding-left: 16px; }
.oib-d-hd { display: flex; align-items: baseline; gap: 10px; margin-bottom: 4px; }
.oib-headline { font-size: 11px; font-weight: 700; letter-spacing: .5px; margin-left: auto; }
.oib-state-chip { font-size: 10px; font-weight: 700; letter-spacing: .5px; margin: 0 0 8px; }
.oib-read-block { color: #b9c2bb; font-size: 12px; margin: 0 0 9px; }
.oib-watch-block { color: #e8dcc0; font-size: 12.5px; margin: 0 0 10px; padding: 5px 0 5px 10px; border-left: 2px solid #5a4a26; }
.oib-block-label { display: block; color: #5d6b63; font-size: 9px; letter-spacing: 1px; text-transform: uppercase; margin-bottom: 2px; }
.oib-watch-label { color: #e8c878; }
.oib-ladders { display: grid; grid-template-columns: 1fr 1fr; gap: 0 18px; }
.oib-lad-h { color: #5d6b63; font-size: 9.5px; letter-spacing: 1px; margin-bottom: 3px; }
.oib-lad-row { display: grid; grid-template-columns: 48px 36px 30px 46px 46px 1fr; gap: 0 8px; align-items: center; font-size: 12px; line-height: 1.7; font-variant-numeric: tabular-nums; }
.oib-lad-row.oib-pos span:first-child { color: #7fd089; } .oib-lad-row.oib-neg span:first-child { color: #d98a82; }
.oib-vol { color: #6f7d72; }
.oib-lad-flow { text-align: right; }
.oib-flow-strong { color: #e8c878; font-weight: 700; }
.oib-flow-muted { color: #6f6a55; }
.oib-stamp { color: #8a7c52; font-size: 11px; }
.oib-stamp.is-stale { color: #d6a84a; font-style: italic; }
.oib-gone-note { display: none; color: #8a7c52; font-style: italic; font-size: 11px; }
.oib-detail-card.oib-gone .oib-gone-note { display: inline; }
.oib-body[data-mode="compact"] .oib-detail { display: none; }
.oib-body[data-mode="compact"] .oib-grid { grid-template-columns: 1fr; }
@media (max-width: 820px) { .oib-grid { grid-template-columns: 1fr; } .oib-detail { border-left: 0; padding-left: 0; } }

/* Flow Desk */
.flow-desk-page {
  max-width: 1500px;
  margin: 0 auto;
  padding: 0 18px 40px;
}
.fd-heading {
  display: flex;
  justify-content: space-between;
  gap: 18px;
  align-items: flex-end;
  margin: 18px 0 14px;
}
.fd-eyebrow,
.fd-kicker {
  color: var(--brass, #d5b06b);
  font-size: 11px;
  letter-spacing: 1.6px;
  text-transform: uppercase;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
}
.fd-heading h1 {
  margin: 4px 0;
  color: var(--text, #f1f6f2);
  font-size: 42px;
  letter-spacing: .06em;
}
.fd-heading p {
  color: var(--text-muted, #8a948c);
  margin: 0;
  max-width: 760px;
}
.fd-status {
  display: flex;
  gap: 8px;
  align-items: center;
  flex-wrap: wrap;
  justify-content: flex-end;
  color: var(--text-muted, #8a948c);
  font-size: 12px;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
}
.fd-status-pill {
  border: 1px solid #33443a;
  border-radius: 999px;
  padding: 5px 10px;
  color: #cdd6d0;
  background: #101713;
}
.fd-status-pill.is-live { color: #7fd089; border-color: rgba(127, 208, 137, .42); }
.fd-status-pill.is-partial { color: #e8c878; border-color: rgba(232, 200, 120, .45); }
.fd-status-pill.is-degraded { color: #d98a82; border-color: rgba(217, 138, 130, .45); }
.fd-state-banner {
  display: flex;
  gap: 10px;
  align-items: center;
  border: 1px solid #3a3320;
  background: #14120c;
  border-radius: 8px;
  padding: 10px 12px;
  margin-bottom: 12px;
  color: #d8c79a;
}
.fd-state-banner.is-degraded { border-color: #55342f; color: #e89a92; }
.fd-metrics {
  display: grid;
  grid-template-columns: 1.4fr repeat(4, 1fr);
  gap: 10px;
  margin-bottom: 12px;
}
.fd-metric,
.fd-panel {
  background: #0f1512;
  border: 1px solid #26352e;
  border-radius: 8px;
}
.fd-metric {
  padding: 12px;
  min-width: 0;
}
.fd-metric span,
.fd-metric em {
  display: block;
  color: #76847b;
  font-size: 11px;
  font-style: normal;
  text-transform: uppercase;
  letter-spacing: .08em;
}
.fd-metric strong {
  display: block;
  margin: 5px 0 2px;
  color: #f1f6f2;
  font-size: 24px;
  line-height: 1.1;
}
.fd-metric.is-bull strong,
.fd-split .is-bull { color: #7fd089; }
.fd-metric.is-bear strong,
.fd-split .is-bear { color: #d98a82; }
.fd-focus {
  margin-bottom: 12px;
  border-left: 3px solid #5a4a26;
}
.fd-focus.is-bull { border-left-color: #4fae5a; }
.fd-focus.is-bear { border-left-color: #b86f75; }
.fd-focus-grid {
  display: grid;
  grid-template-columns: .85fr 1.1fr 1.1fr;
  gap: 12px;
}
.fd-focus-summary {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
}
.fd-focus-summary div {
  background: #111a15;
  border: 1px solid #1f2c26;
  border-radius: 6px;
  padding: 9px;
}
.fd-focus-summary span,
.fd-detail-row em {
  display: block;
  color: #76847b;
  font-size: 11px;
  font-style: normal;
}
.fd-focus-summary strong {
  display: block;
  color: #f1f6f2;
  margin-top: 4px;
  font-size: 18px;
}
.fd-focus-summary .is-bull { color: #7fd089; }
.fd-focus-summary .is-bear { color: #d98a82; }
.fd-detail-list {
  display: grid;
  gap: 7px;
  margin-top: 7px;
}
.fd-detail-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto auto;
  gap: 9px;
  align-items: center;
  border: 1px solid #1f2c26;
  border-left: 3px solid #5a4a26;
  border-radius: 6px;
  padding: 8px;
  color: #cdd6d0;
}
.fd-detail-row.is-bull { border-left-color: #4fae5a; }
.fd-detail-row.is-bear { border-left-color: #b86f75; }
.fd-detail-row b,
.fd-detail-row em {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.fd-detail-head {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto auto;
  gap: 9px;
  color: #5d6b63;
  font-size: 10px;
  letter-spacing: .08em;
  text-transform: uppercase;
  padding: 0 10px 2px;
}
.fd-detail-head span + span { text-align: right; }
/* Net number reads direction by color, not just the chip border. */
.fd-net.is-bull { color: #7fd089; }
.fd-net.is-bear { color: #d98a82; }
.fd-net.is-neutral { color: #cdd6cf; }
.fd-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 360px;
  gap: 12px;
  margin-bottom: 12px;
}
.fd-panel {
  padding: 12px;
  min-width: 0;
}
.fd-panel-head {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  align-items: flex-start;
  margin-bottom: 10px;
}
.fd-panel-head h2 {
  color: #f1f6f2;
  margin: 3px 0 0;
  font-size: 20px;
}
.fd-link {
  color: #d5b06b;
  border: 1px solid #3a3320;
  border-radius: 6px;
  padding: 5px 9px;
  text-decoration: none;
  font-size: 12px;
}
.fd-board-head,
.fd-board-row {
  display: grid;
  grid-template-columns: 1.1fr .8fr 1fr .65fr 1.2fr 1.25fr;
  gap: 10px;
  align-items: center;
}
.fd-board-head {
  color: #5d6b63;
  font-size: 10px;
  letter-spacing: .08em;
  text-transform: uppercase;
  padding: 0 8px 6px;
  border-bottom: 1px solid #22302a;
}
.fd-board-row {
  color: #cdd6d0;
  text-decoration: none;
  padding: 8px;
  border-bottom: 1px solid #17211c;
  border-left: 3px solid transparent;
}
.fd-board-row:hover {
  background: #121c17;
}
.fd-board-row.is-active {
  background: #151f19;
  box-shadow: inset 0 0 0 1px rgba(213, 176, 107, .26);
}
.fd-board-row.is-bull { border-left-color: #4fae5a; }
.fd-board-row.is-bear { border-left-color: #b86f75; }
.fd-board-row.is-neutral { border-left-color: #5a4a26; }
.fd-board-row span {
  min-width: 0;
}
.fd-board-row b,
.fd-board-row em {
  display: block;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.fd-board-row em {
  color: #76847b;
  font-style: normal;
  font-size: 11px;
}
.fd-ticker-cell {
  display: grid;
  grid-template-columns: 30px minmax(0, 1fr);
  gap: 8px;
}
.fd-ticker-cell em {
  grid-column: 2;
}
.fd-logo-wrap,
.fd-logo,
.fd-logo-fallback {
  width: 26px;
  height: 26px;
  border-radius: 50%;
}
.fd-logo { object-fit: contain; background: #101713; }
.fd-logo-fallback {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: #d5b06b;
  border: 1px solid #3a3320;
  font-size: 10px;
}
.fd-split {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}
.fd-split b {
  display: inline;
}
.fd-tape {
  display: grid;
  gap: 6px;
}
.fd-tape-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 80px 86px;
  gap: 8px;
  align-items: center;
  color: #cdd6d0;
  text-decoration: none;
  border: 1px solid #1f2c26;
  border-left: 3px solid #5a4a26;
  border-radius: 6px;
  padding: 8px;
}
.fd-tape-row.is-bull { border-left-color: #4fae5a; }
.fd-tape-row.is-bear { border-left-color: #b86f75; }
.fd-tape-row b,
.fd-tape-row em {
  display: block;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.fd-tape-row em {
  color: #76847b;
  font-size: 11px;
  font-style: normal;
}
.fd-lanes {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 12px;
}
.fd-card-list,
.fd-confirm-list {
  display: grid;
  gap: 8px;
}
.fd-mini-card,
.fd-confirm-row {
  border: 1px solid #1f2c26;
  border-left: 3px solid #5a4a26;
  border-radius: 6px;
  padding: 9px;
  color: #cdd6d0;
  text-decoration: none;
}
.fd-mini-card.is-bull,
.fd-confirm-row.is-bull { border-left-color: #4fae5a; }
.fd-mini-card.is-bear,
.fd-confirm-row.is-bear { border-left-color: #b86f75; }
.fd-mini-card.is-mixed { border-left-color: #d5b06b; }
.fd-mini-card > span,
.fd-confirm-row > span {
  display: block;
}
.fd-mini-top {
  display: flex !important;
  align-items: center;
  gap: 7px;
}
.fd-mini-top b {
  color: #f1f6f2;
}
.fd-mini-top em,
.fd-mini-meta {
  color: #76847b;
  font-size: 11px;
  font-style: normal;
}
.fd-confirm-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 90px 60px;
  gap: 8px;
  align-items: center;
}
.fd-confirm-row b,
.fd-confirm-row em {
  display: block;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.fd-confirm-row em {
  color: #76847b;
  font-size: 11px;
  font-style: normal;
}
.fd-empty {
  color: #7c8a82;
  font-size: 13px;
  font-style: italic;
  padding: 12px;
  border: 1px dashed #26352e;
  border-radius: 6px;
}

/* ── Sector Rotation strip (rebuild 2026-06-18) ──────────────────────── */
.fd-sector-section {
  margin-bottom: 12px;
}
.fd-sector-section > .fd-panel {
  padding: 12px;
}
/* Market-cap chips row — brass tone, compact */
.fd-sector-mcap-row {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-bottom: 10px;
}
.fd-sector-mcap-chip {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  background: #13160f;
  border: 1px solid #2a3322;
  border-radius: 6px;
  padding: 4px 9px;
  font-size: 12px;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  color: var(--text-muted, #b8af9a);
}
.fd-sector-mcap-chip b {
  color: var(--brass-bright, #d5b06b);
  font-weight: 600;
}
/* 11-sector responsive grid */
.fd-sector-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(170px, 1fr));
  gap: 7px;
}
/* Sector card — left-accent, mirrors fd-detail-row / fd-focus */
.fd-sector-card {
  background: #0f1512;
  border: 1px solid #1f2c26;
  border-left: 3px solid #5a4a26;
  border-radius: 6px;
  padding: 8px 9px;
  min-width: 0;
}
.fd-sector-card.is-pos  { border-left-color: #4fae5a; }
.fd-sector-card.is-neg  { border-left-color: #b86f75; }
.fd-sector-card.is-warn { border-left-color: #c68a50; }
.fd-sector-card.is-muted { border-left-color: #5a4a26; }
/* Top row: ETF ticker + %change */
.fd-sector-top {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  margin-bottom: 5px;
  gap: 6px;
  min-width: 0;
}
.fd-sector-etf {
  color: #f1f6f2;
  font-size: 14px;
  font-weight: 600;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  white-space: nowrap;
  min-width: 0;
  overflow: hidden;
}
/* Colored %change — shared by cards AND market-cap chips */
.fd-sector-pct {
  font-size: 12px;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  white-space: nowrap;
}
.fd-sector-pct.is-pos  { color: #7fd089; }
.fd-sector-pct.is-neg  { color: #d98a82; }
.fd-sector-pct.is-warn { color: #e8c878; }
.fd-sector-pct.is-muted { color: #76847b; }
/* Middle row: state badge + meta badges */
.fd-sector-mid {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 4px;
  margin-bottom: 5px;
}
.fd-sector-badge {
  display: inline-block;
  font-size: 9px;
  letter-spacing: .07em;
  text-transform: uppercase;
  border-radius: 4px;
  padding: 2px 5px;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  background: rgba(26, 32, 24, .9);
  border: 1px solid #2a3322;
  color: #76847b;
}
.fd-sector-badge.is-pos  { color: #7fd089; border-color: rgba(79, 174, 90, .4); }
.fd-sector-badge.is-neg  { color: #d98a82; border-color: rgba(184, 111, 117, .4); }
.fd-sector-badge.is-warn { color: #e8c878; border-color: rgba(232, 200, 120, .4); }
.fd-sector-badge.is-muted { color: #76847b; border-color: #2a3322; }
/* Leadership + rank meta row */
.fd-sector-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  align-items: center;
  margin-bottom: 5px;
}
.fd-sector-meta-tag {
  font-size: 10px;
  color: #76847b;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  white-space: nowrap;
}
.fd-sector-meta-tag.is-rank {
  color: var(--brass, #b7924e);
}
/* Heat strip — 7 bellwether cells */
.fd-sector-heat {
  display: flex;
  gap: 2px;
  flex-wrap: nowrap;
  overflow: hidden;
}
.fd-sector-heat-cell {
  flex: 1 1 0;
  min-width: 0;
  height: 16px;
  line-height: 16px;
  border-radius: 3px;
  background: #1f2c26;
  font-size: 8px;
  letter-spacing: -.02em;
  text-align: center;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  color: #e7ede8;              /* ticker shown in-cell; full name+% in tooltip */
  overflow: hidden;
  text-overflow: clip;
  white-space: nowrap;
  cursor: default;
  /* focus ring for keyboard accessibility */
}
.fd-sector-heat-cell:focus-visible {
  outline: 2px solid var(--brass-bright, #d5b06b);
  outline-offset: 1px;
}
.fd-sector-heat-cell.is-pos  { background: rgba(79, 174, 90, .55); }
.fd-sector-heat-cell.is-neg  { background: rgba(184, 111, 117, .55); }
.fd-sector-heat-cell.is-warn { background: rgba(198, 138, 80, .55); }
.fd-sector-heat-cell.is-muted { background: #1f2c26; color: #8c988e; }
/* Caption above the bellwether strip so it's never mistaken for days/bars */
.fd-sector-heat-label {
  font-size: 8px;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: #76847b;
  margin: 6px 0 3px;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
}
/* Plain-English board read banner */
.fd-sector-read {
  margin: 0 0 10px;
  padding: 9px 11px;
  background: #11160f;
  border: 1px solid #2a3322;
  border-left: 3px solid var(--brass, #b7924e);
  border-radius: 6px;
  color: #d7e0d8;
  font-size: 13px;
  line-height: 1.5;
}
/* Legend — labels every element of a sector card */
.fd-sector-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 14px;
  margin: 0 0 11px;
  font-size: 10.5px;
  color: #8c988e;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
}
.fd-sector-legend b { color: #b8af9a; font-weight: 600; }
.fd-sector-legend b.is-pos { color: #7fd089; }
.fd-sector-legend b.is-neg { color: #d98a82; }
/* Friendly sector name beside the ETF ticker */
.fd-sector-name {
  display: block;
  font-size: 9.5px;
  font-style: normal;
  font-weight: 400;
  letter-spacing: .02em;
  color: #8c988e;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 110px;
}
/* Inline labeled stat (VOL / BREADTH / MOM) — label + value */
.fd-sector-stat {
  display: inline-flex;
  align-items: baseline;
  gap: 4px;
  font-size: 10px;
  color: #c3cbbd;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  white-space: nowrap;
}
.fd-sector-stat i {
  font-style: normal;
  font-size: 8px;
  letter-spacing: .06em;
  color: #76847b;
}
.fd-sector-stat.is-rank { color: var(--brass, #b7924e); }
.fd-sector-stat.is-rank i { color: #76847b; }
.fd-sector-stat b { font-weight: 600; }
.fd-sector-stat b.is-pos { color: #7fd089; }
.fd-sector-stat b.is-neg { color: #d98a82; }
.fd-sector-stat b.is-muted { color: #c3cbbd; }
/* Warming / unavailable pill inside the section */
.fd-sector-warming {
  display: flex;
  align-items: center;
  gap: 8px;
  color: #76847b;
  font-size: 12px;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  padding: 8px 2px;
}
/* Responsive: narrow grid on tablet, 2-col on phone */
@media (max-width: 1120px) {
  .fd-sector-grid {
    grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  }
}
@media (max-width: 680px) {
  .fd-sector-grid {
    grid-template-columns: repeat(2, 1fr);
  }
  .fd-sector-mcap-row {
    gap: 4px;
  }
}
@media (prefers-reduced-motion: reduce) {
  .fd-sector-heat-cell { transition: none; }
}
/* ── End sector rotation ─────────────────────────────────────────────── */

@media (max-width: 1120px) {
  .fd-metrics,
  .fd-grid,
  .fd-focus-grid,
  .fd-lanes {
    grid-template-columns: 1fr;
  }
  .fd-board-head {
    display: none;
  }
  .fd-board-row {
    grid-template-columns: 1fr 1fr;
  }
}
@media (max-width: 680px) {
  .fd-heading {
    flex-direction: column;
    align-items: flex-start;
  }
  .fd-status {
    justify-content: flex-start;
  }
  .fd-board-row,
  .fd-tape-row,
  .fd-detail-row,
  .fd-confirm-row {
    grid-template-columns: 1fr;
  }
  .fd-detail-head {
    display: none;
  }
  .fd-focus-summary {
    grid-template-columns: 1fr;
  }
}

/* Command Center hero — 2026-06-02 (v2 layout) */
.cc-panel { background: var(--bg-panel, #12100a); border: 1px solid #5a4a26; border-radius: 8px; margin-bottom: 16px; font-family: 'JetBrains Mono', ui-monospace, monospace; }
.cc-hd { padding: 12px 18px 6px; }
.cc-title { color: #e8c878; font-size: 13px; font-weight: 700; letter-spacing: 1.5px; }
/* thin strip: indices + VIX only */
.cc-strip { display: flex; flex-wrap: wrap; align-items: center; padding: 8px 18px; border-bottom: 1px solid #2e2814; font-size: 13px; color: #cdd6d0; }
.cc-strip > span:not(:first-child)::before { content: "·"; color: #5d6b63; padding: 0 10px; }
.cc-ix { color: #f1f6f2; } .cc-vix { color: #d8c79a; }
.cc-strip .pos { color: #7fd089; } .cc-strip .neg { color: #d98a82; }
/* 4 summary tiles */
.cc-summary-grid { display: grid; grid-template-columns: repeat(4, minmax(150px, 1fr)); gap: 14px; padding: 14px 18px; }
.cc-tile { background: #15120b; border: 1px solid #2e2814; border-radius: 6px; padding: 11px 13px; }
.cc-tile-lbl { color: #8a7c52; font-size: 10px; font-weight: 700; letter-spacing: 1.5px; }
.cc-tile-val { color: #f1f6f2; font-size: 15px; line-height: 1.3; margin-top: 4px; }
.cc-tile-ready .cc-tile-val, .cc-tile-stalk .cc-tile-val { font-size: 24px; font-weight: 700; }
.cc-tile-ready { border-left: 3px solid #7fd089; } .cc-tile-stalk { border-left: 3px solid #c9a94e; }
/* main grid: decision board (~58%) + focus panel (~42%) */
.cc-main-grid { display: grid; grid-template-columns: 1.4fr 1fr; gap: 18px; padding: 0 18px 18px; }
.cc-board .cc-bucket { margin-bottom: 16px; }
.cc-board .cc-bucket:last-child { margin-bottom: 0; }
.cc-bucket-hd { display: flex; align-items: baseline; gap: 8px; margin-bottom: 8px; }
.cc-bucket-title { color: #e8c878; font-size: 12px; font-weight: 700; letter-spacing: 1.5px; }
.cc-fresh { color: #7fd089; font-size: 10px; } .cc-fresh-morning { color: #8a7c52; }
/* rich buckets: cards sit side-by-side */
.cc-bucket-ready .cc-bucket-body, .cc-bucket-stalk .cc-bucket-body { display: flex; flex-wrap: wrap; gap: 10px; }
.cc-bucket-ready .cc-bucket-body > .cc-more, .cc-bucket-stalk .cc-bucket-body > .cc-more,
.cc-bucket-ready .cc-bucket-body > .cc-none, .cc-bucket-stalk .cc-bucket-body > .cc-none { flex-basis: 100%; }
.cc-card { background: #15120b; border: 1px solid #2e2814; border-left: 2px solid #5a4a26; border-radius: 5px; padding: 12px 14px; cursor: pointer; flex: 1 1 220px; min-width: 200px; }
.cc-card:hover { border-color: #6e5a30; }
.cc-card.cc-bull { border-left-color: #7fd089; } .cc-card.cc-bear { border-left-color: #d98a82; }
.cc-card-focused { background: #1d1709; border-color: #6e5a30; box-shadow: inset 3px 0 0 #e8c878; }
/* READY stands out: brightest title + thickest rail */
.cc-bucket-ready .cc-bucket-title { color: #f4dd92; font-size: 13px; }
.cc-bucket-ready .cc-card { border-left-width: 4px; background: #181308; }
.cc-bucket-stalk .cc-card { border-left-width: 2px; }
.cc-card-hd { margin-bottom: 4px; } .cc-tk { color: #f1f6f2; font-weight: 700; font-size: 15px; }
.cc-card-dir { font-size: 10px; font-weight: 700; color: #9aa49d; }
.cc-bull .cc-card-dir { color: #7fd089; } .cc-bear .cc-card-dir { color: #d98a82; }
.cc-why { color: #c4ccc4; font-size: 13px; line-height: 1.45; margin: 3px 0; }
.cc-watch { color: #9aa49d; font-size: 12.5px; line-height: 1.4; margin-bottom: 6px; }
.cc-chips { display: flex; flex-wrap: wrap; gap: 5px; }
.cc-chip { font-size: 11px; padding: 1px 6px; border-radius: 3px; background: #241d10; color: #9aa49d; }
.cc-chip-ok { color: #7fd089; } .cc-chip-pending { color: #e8c878; } .cc-chip-none { color: #6f7d72; }
/* light buckets */
.cc-light { color: #cdd6d0; font-size: 13px; line-height: 1.55; }
.cc-light .pos { color: #7fd089; } .cc-light .neg { color: #d98a82; }
.cc-tag { color: #8a7c52; font-size: 11.5px; }
.cc-bucket-bearish .cc-light { border-left: 2px solid #6e3a36; padding-left: 9px; }
.cc-more { color: #6f7d72; font-size: 11px; font-style: italic; margin-top: 4px; }
.cc-none { color: #6f7d72; font-style: italic; font-size: 13px; }
/* focus panel — the largest card in the hero */
.cc-focus { background: #181308; border: 1px solid #5a4a26; border-radius: 8px; padding: 18px 20px; align-self: start; }
.cc-focus-tk { color: #f1f6f2; font-size: 20px; font-weight: 700; letter-spacing: 1px; }
.cc-focus-sub { font-size: 11px; font-weight: 700; letter-spacing: 1px; color: #9aa49d; margin-bottom: 12px; }
.cc-focus-inner.cc-bull .cc-focus-sub { color: #7fd089; } .cc-focus-inner.cc-bear .cc-focus-sub { color: #d98a82; }
.cc-focus-sec { margin-bottom: 11px; }
.cc-focus-lbl { color: #8a7c52; font-size: 10px; font-weight: 700; letter-spacing: 1.5px; text-transform: uppercase; }
.cc-focus-txt { color: #cdd6d0; font-size: 14px; line-height: 1.5; margin-top: 4px; }
.cc-focus-chips { margin-top: 4px; }
.cc-focus-empty { color: #6f7d72; font-style: italic; font-size: 13px; }
@media (max-width: 900px) {
  .cc-main-grid { grid-template-columns: 1fr; }
  .cc-summary-grid { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 560px) {
  .cc-summary-grid { grid-template-columns: 1fr; }
  .cc-bucket-ready .cc-bucket-body, .cc-bucket-stalk .cc-bucket-body { display: block; }
  .cc-card { min-width: 0; }
}

/* ══════════════════════════════════════════════════════════════
   TICKER DESK COCKPIT — .tdesk-*
   Single-ticker deep-dive: header strip, primary read/watch,
   and 6-module grid (multi-tenor, income, flow, alerts, portfolio,
   discovery). Palette: charcoal + brass, matching Legacy Desk.
   Font roles: Cinzel headers · Cormorant ticker · Outfit body ·
   JetBrains Mono all numbers (font-variant-numeric: tabular-nums).
   ════════════════════════════════════════════════════════════ */

/* ── Landing (search-only state) ────────────────────────────── */
.tdesk-landing {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 60vh;
}
.tdesk-landing-inner {
  text-align: center;
  max-width: 480px;
  padding: 48px 24px;
}
.tdesk-landing-mark {
  font-size: 40px;
  color: var(--brass);
  margin-bottom: 16px;
  letter-spacing: 0.08em;
}
.tdesk-landing-title {
  font-family: 'Cinzel', serif;
  font-size: 28px;
  font-weight: 500;
  letter-spacing: 0.2em;
  color: var(--text);
  margin-bottom: 10px;
}
.tdesk-landing-sub {
  font-family: 'Outfit', sans-serif;
  font-size: 13px;
  color: var(--text-muted);
  margin-bottom: 28px;
  line-height: 1.55;
}
.tdesk-search-row {
  display: flex;
  gap: 8px;
  justify-content: center;
}
.tdesk-search-input {
  font-family: 'JetBrains Mono', monospace;
  font-size: 16px;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  width: 160px;
  padding: 10px 14px;
  background: var(--bg-elev);
  border: 1px solid var(--border-bright);
  border-radius: 4px;
  color: var(--text);
  outline: none;
  transition: border-color 150ms;
}
.tdesk-search-input:focus { border-color: var(--brass); }
.tdesk-search-input::placeholder { color: var(--text-dim); letter-spacing: 0.12em; }
.tdesk-search-btn {
  font-family: 'Cinzel', serif;
  font-size: 11px;
  letter-spacing: 0.14em;
  padding: 10px 18px;
  background: var(--bg-elev);
  border: 1px solid var(--border-bright);
  border-radius: 4px;
  color: var(--brass-bright);
  cursor: pointer;
  transition: all 150ms;
}
.tdesk-search-btn:hover { background: var(--bg-elevated); border-color: var(--brass); color: var(--text); }
.tdesk-search-err { color: var(--negative-bright); font-size: 12px; margin-top: 10px; font-family: 'Outfit', sans-serif; }

/* ── Cockpit root ─────────────────────────────────────────────── */
.tdesk-cockpit {
  padding: 0 0 40px;
}

/* ── Header strip ─────────────────────────────────────────────── */
.tdesk-header-strip {
  display: grid;
  grid-template-columns: auto minmax(180px, 1fr) auto auto auto;
  align-items: center;
  gap: 14px;
  padding: 16px 0 14px;
  border-bottom: 1px solid var(--border-bright);
  margin-bottom: 16px;
}

/* Logo / monogram */
.tdesk-logo-wrap {
  flex-shrink: 0;
  width: 52px;
  height: 52px;
}
.tdesk-logo {
  width: 52px;
  height: 52px;
  border-radius: 8px;
  object-fit: contain;
  background: var(--bg-elev);
  border: 1px solid var(--border);
}
.tdesk-monogram {
  width: 52px;
  height: 52px;
  border-radius: 8px;
  background: var(--bg-elev);
  border: 1px solid var(--border-bright);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: 'Cormorant Garamond', serif;
  font-size: 22px;
  font-weight: 600;
  color: var(--brass);
  letter-spacing: 0.04em;
}

/* Identity block */
.tdesk-hd-identity { min-width: 0; }
.tdesk-ticker-name { display: flex; align-items: baseline; gap: 14px; flex-wrap: wrap; }
.tdesk-ticker {
  font-family: 'Cormorant Garamond', serif;
  font-size: 40px;
  font-weight: 500;
  letter-spacing: 0.06em;
  color: var(--text);
  line-height: 1;
}
.tdesk-company-name {
  font-family: 'Outfit', sans-serif;
  font-size: 15px;
  font-weight: 400;
  color: var(--text-muted);
  letter-spacing: 0.02em;
}
.tdesk-hd-meta {
  display: flex;
  gap: 12px;
  margin-top: 5px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--text-muted);
  letter-spacing: 0.06em;
  align-items: center;
}
.tdesk-sector { color: var(--text-muted); }
.tdesk-mktcap { color: var(--brass-bright); }
.tdesk-state-mini { color: var(--text-dim); }

/* Price block */
.tdesk-hd-price {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 3px;
  min-width: max-content;
}
.tdesk-spot {
  font-family: 'JetBrains Mono', monospace;
  font-size: 31px;
  font-weight: 700;
  color: var(--text);
  letter-spacing: 0.02em;
  font-variant-numeric: tabular-nums;
}
.tdesk-change {
  font-family: 'JetBrains Mono', monospace;
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 0.03em;
  font-variant-numeric: tabular-nums;
}
.tdesk-change-abs { font-size: 11px; opacity: 0.75; margin-left: 5px; }
.tdesk-price-age { font-family: 'JetBrains Mono', monospace; font-size: 10px; color: var(--text-muted); }

/* Chip area */
.tdesk-hd-chips {
  display: flex;
  gap: 5px;
  flex-wrap: wrap;
  align-items: center;
  justify-content: flex-end;
  max-width: 260px;
}
.tdesk-chip {
  font-family: 'Cinzel', serif;
  font-size: 8.5px;
  font-weight: 500;
  letter-spacing: 0.12em;
  padding: 2px 7px;
  border-radius: 2px;
  border: 1px solid var(--border);
  background: var(--bg-elev);
  color: var(--text-muted);
  text-transform: uppercase;
}
.tdesk-chip-status {
  opacity: 0.72;
  background: transparent;
}
/* Status chips — income status colors */
.tdesk-chip-status-approved-ultimate,
.tdesk-chip-status-approved-strong { border-color: var(--positive); color: var(--positive-bright); }
.tdesk-chip-status-approved-standard { border-color: var(--positive); color: var(--data-pos); }
.tdesk-chip-status-stalk { border-color: var(--brass-deep); color: var(--brass); }
.tdesk-chip-status-review { border-color: var(--border-bright); color: var(--text-muted); }
.tdesk-chip-status-avoid { border-color: var(--negative); color: var(--negative-soft); }
.tdesk-chip-status-cc-strong,
.tdesk-chip-status-cc-standard { border-color: var(--partner); color: var(--partner); }
/* Bias chips */
.tdesk-chip-bias {
  font-size: 10px;
  font-weight: 700;
  opacity: 1;
  padding: 4px 10px;
  background: var(--bg-elev);
  border-width: 1.5px;
}
.tdesk-chip-bias-bull { border-color: var(--positive); color: var(--positive-bright); box-shadow: inset 2px 0 0 var(--positive); }
.tdesk-chip-bias-bear { border-color: var(--negative); color: var(--negative-bright); box-shadow: inset 2px 0 0 var(--negative); }
.tdesk-chip-bias-neutral,
.tdesk-chip-bias-mixed { border-color: var(--brass-deep); color: var(--brass); }
/* Discovery chip */
.tdesk-chip-disc {
  border-color: var(--border);
  color: var(--text-muted);
  background: transparent;
  opacity: 0.75;
}

/* Actions */
.tdesk-hd-actions { justify-self: end; }
.tdesk-btn {
  font-family: 'Cinzel', serif;
  font-size: 10px;
  letter-spacing: 0.12em;
  padding: 8px 14px;
  border-radius: 3px;
  border: 1px solid var(--border-bright);
  background: var(--bg-elev);
  color: var(--brass);
  cursor: pointer;
  transition: all 150ms;
  text-transform: uppercase;
}
.tdesk-btn:hover { background: var(--bg-elevated); border-color: var(--brass); color: var(--text); }
.tdesk-btn:disabled { opacity: 0.5; cursor: default; }
.tdesk-btn-primary { border-color: var(--brass); color: var(--brass-bright); }
.tdesk-hd-actions .tdesk-btn-primary {
  border-color: var(--border-bright);
  color: var(--brass);
  background: transparent;
}
.tdesk-btn-sm { font-size: 9px; padding: 5px 10px; }

/* ── Primary Read / Watch ─────────────────────────────────────── */
.tdesk-primary-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
  margin-bottom: 16px;
}
@media (max-width: 720px) { .tdesk-primary-row { grid-template-columns: 1fr; } }
.tdesk-primary-read,
.tdesk-primary-watch {
  background: var(--bg-panel);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 12px 14px;
}
.tdesk-primary-watch {
  border-left: 3px solid var(--brass);
}
.tdesk-prim-label {
  font-family: 'Cinzel', serif;
  font-size: 9px;
  font-weight: 600;
  letter-spacing: 0.2em;
  color: var(--text-muted);
  margin-bottom: 7px;
  text-transform: uppercase;
}
.tdesk-prim-label-watch { color: var(--brass-bright); }
.tdesk-prim-text {
  font-family: 'Outfit', sans-serif;
  font-size: 13.5px;
  line-height: 1.55;
  color: var(--text);
}
.tdesk-lead-chip {
  margin-top: 7px;
  display: inline-block;
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  color: var(--text-muted);
  background: transparent;
  border: 1px solid var(--border);
  border-radius: 3px;
  padding: 1px 6px;
  letter-spacing: 0.06em;
}
.tdesk-watch-actions {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.tdesk-watch-action {
  display: grid;
  grid-template-columns: 64px minmax(0, 1fr);
  gap: 8px;
  align-items: baseline;
}
.tdesk-watch-action-lbl {
  font-family: 'Cinzel', serif;
  font-size: 8px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--brass-bright);
}
.tdesk-watch-action-text {
  min-width: 0;
  font-family: 'Outfit', sans-serif;
  font-size: 13px;
  line-height: 1.35;
  color: var(--text);
}

/* ── Module grid ──────────────────────────────────────────────── */
.tdesk-grid {
  display: grid;
  grid-template-columns: 1.4fr 1fr 1fr;
  grid-template-rows: auto auto;
  gap: 14px;
}
/* A spans full width of column 1; B and C fill 2-3 */
.tdesk-mod-a { grid-column: 1; grid-row: 1; }
.tdesk-mod-b { grid-column: 2; grid-row: 1; }
.tdesk-mod-c { grid-column: 3; grid-row: 1; }
.tdesk-mod-d { grid-column: 1; grid-row: 2; }
.tdesk-mod-e { grid-column: 2; grid-row: 2; }
.tdesk-mod-f { grid-column: 3; grid-row: 2; }
@media (max-width: 1100px) {
  .tdesk-grid { grid-template-columns: 1fr 1fr; }
  .tdesk-mod-a { grid-column: 1 / -1; }
  .tdesk-mod-b { grid-column: 1; }
  .tdesk-mod-c { grid-column: 2; }
  .tdesk-mod-d { grid-column: 1; }
  .tdesk-mod-e { grid-column: 2; }
  .tdesk-mod-f { grid-column: 1 / -1; }
}
@media (max-width: 680px) {
  .tdesk-grid { grid-template-columns: 1fr; }
  .tdesk-mod-a, .tdesk-mod-b, .tdesk-mod-c,
  .tdesk-mod-d, .tdesk-mod-e, .tdesk-mod-f { grid-column: 1; grid-row: auto; }
}

/* ── Module card base ─────────────────────────────────────────── */
.tdesk-module {
  background: var(--bg-panel);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 12px 14px;
  display: flex;
  flex-direction: column;
  gap: 9px;
  position: relative;
}
.tdesk-mod-hd {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  min-height: 20px;
}
.tdesk-mod-title {
  font-family: 'Cinzel', serif;
  font-size: 9.5px;
  font-weight: 600;
  letter-spacing: 0.22em;
  color: var(--text-muted);
  text-transform: uppercase;
}
.tdesk-mod-foot {
  margin-top: auto;
  padding-top: 6px;
  border-top: 1px solid var(--border);
}
.tdesk-not-computed {
  font-family: 'Outfit', sans-serif;
  font-size: 12px;
  font-style: italic;
  color: var(--text-muted);
  padding: 8px 0;
}

/* State badge */
.tdesk-state-badge {
  font-family: 'JetBrains Mono', monospace;
  font-size: 8.5px;
  letter-spacing: 0.06em;
  padding: 1px 6px;
  border-radius: 3px;
  background: transparent;
  border: 1px solid var(--border);
  color: var(--text-muted);
  white-space: nowrap;
  flex-shrink: 0;
  opacity: 0.78;
}
.tdesk-state-live, .tdesk-state-cached { color: var(--text-muted); border-color: var(--border); }
.tdesk-state-stale, .tdesk-state-aging { color: var(--warn); border-color: var(--warn); }
.tdesk-state-not-computed, .tdesk-state-unknown { color: var(--text-dim); }
.tdesk-state-error { color: var(--negative-bright); border-color: var(--negative); }
.tdesk-state-age { color: var(--text-dim); font-size: 8.5px; }

/* Colour helpers */
.tdesk-bull { color: var(--positive-bright); }
.tdesk-bear { color: var(--negative-bright); }
.tdesk-neutral { color: var(--brass); }
.tdesk-pos  { color: var(--data-pos); }
.tdesk-neg  { color: var(--data-neg); }
.tdesk-mono {
  font-family: 'JetBrains Mono', monospace;
  font-variant-numeric: tabular-nums;
}

/* ── Module A: Multi-Tenor ────────────────────────────────────── */
.tdesk-mod-a { border-left: 3px solid var(--brass-deep); }

/* Tenor chips row */
.tdesk-tenor-row {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}
.tdesk-tenor-chip {
  flex: 1 1 80px;
  background: var(--bg-elev);
  border: 1px solid var(--border);
  border-radius: 5px;
  padding: 8px 10px;
  display: flex;
  flex-direction: column;
  gap: 3px;
  transition: border-color 150ms, background 120ms;
  cursor: pointer;
  text-align: left;
}
.tdesk-tenor-chip:hover { background: var(--bg-elevated); border-color: var(--border-bright); }
.tdesk-tenor-chip.is-active { background: var(--bg-elevated); border-color: var(--brass); box-shadow: 0 0 0 1px var(--brass) inset; }
.tdesk-tenor-chip.tdesk-bull { border-left: 3px solid var(--positive); }
.tdesk-tenor-chip.tdesk-bear { border-left: 3px solid var(--negative); }
.tdesk-tenor-chip.tdesk-neutral { border-left: 3px solid var(--brass-deep); }
.tdesk-tenor-chip.tdesk-computing { opacity: 0.55; animation: tdesk-pulse 1.2s ease-in-out infinite; }
@keyframes tdesk-pulse { 0%,100%{opacity:.55} 50%{opacity:.85} }
.tdesk-tenor-label {
  font-family: 'Cinzel', serif;
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.16em;
  color: var(--text);
  text-align: left;
}
.tdesk-tenor-micro {
  font-family: 'JetBrains Mono', monospace;
  font-size: 8.5px;
  color: var(--text-muted);
  letter-spacing: 0.04em;
  text-align: left;
}
.tdesk-tenor-head {
  font-family: 'Outfit', sans-serif;
  font-size: 11px;
  color: var(--text-muted);
  line-height: 1.3;
  text-align: left;
}
/* Bias score line on each chip */
.tdesk-tenor-bias-score {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-align: left;
  line-height: 1.2;
}
.tdesk-tenor-bias-score.tdesk-bull { color: var(--positive-bright); }
.tdesk-tenor-bias-score.tdesk-bear { color: var(--negative-bright); }
.tdesk-tenor-bias-score.tdesk-neutral { color: var(--brass-bright); }
/* Active-tenor bias score display (prominent, above ladder) */
.tdesk-active-bias {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 7px 10px;
  background: var(--bg-elev);
  border-radius: 4px;
  border: 1px solid var(--border);
  margin-bottom: 6px;
}
.tdesk-active-bias-label {
  font-family: 'Cinzel', serif;
  font-size: 8px;
  letter-spacing: 0.2em;
  color: var(--text-muted);
  text-transform: uppercase;
}
.tdesk-active-bias-score {
  font-family: 'JetBrains Mono', monospace;
  font-size: 15px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}
.tdesk-active-bias-score.tdesk-bull { color: var(--positive-bright); }
.tdesk-active-bias-score.tdesk-bear { color: var(--negative-bright); }
.tdesk-active-bias-score.tdesk-neutral { color: var(--brass-bright); }
.tdesk-tenor-chip.tdesk-bull .tdesk-tenor-label { color: var(--positive-bright); }
.tdesk-tenor-chip.tdesk-bear .tdesk-tenor-label { color: var(--negative-bright); }
.tdesk-tenor-chip.tdesk-neutral .tdesk-tenor-label { color: var(--brass-bright); }

/* Level rail — V1 chip layout (kept for backward compat; V1.1 uses .tdesk-level-ladder) */
.tdesk-level-rail { border-top: 1px solid var(--border); padding-top: 10px; }
.tdesk-level-label {
  font-family: 'Cinzel', serif; font-size: 8.5px; letter-spacing: 0.2em;
  color: var(--text-muted); margin-bottom: 6px; text-transform: uppercase;
}
.tdesk-level-track { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }
.tdesk-level-marker {
  display: flex; flex-direction: column; align-items: center; gap: 2px;
  background: var(--bg-elev); border: 1px solid var(--border); border-radius: 4px;
  padding: 5px 9px; min-width: 60px;
}
.tdesk-lm-val { font-family: 'JetBrains Mono', monospace; font-size: 12px; font-weight: 600; font-variant-numeric: tabular-nums; color: var(--text); }
.tdesk-lm-lbl { font-family: 'Cinzel', serif; font-size: 7.5px; letter-spacing: 0.14em; color: var(--text-dim); text-transform: uppercase; }
.tdesk-lm-put_wall  { border-color: var(--negative); }
.tdesk-lm-put_wall  .tdesk-lm-val { color: var(--negative-bright); }
.tdesk-lm-support   { border-color: #7B3A3A; }
.tdesk-lm-support   .tdesk-lm-val { color: var(--negative-soft); }
.tdesk-lm-gamma_flip { border-color: var(--brass-deep); }
.tdesk-lm-gamma_flip .tdesk-lm-val { color: var(--brass-bright); }
.tdesk-lm-spot { border: 2px solid var(--text); background: var(--bg-elevated); transform: scale(1.05); }
.tdesk-lm-spot .tdesk-lm-val { color: var(--text); font-size: 13px; }
.tdesk-lm-spot .tdesk-lm-lbl { color: var(--brass-deep); }

/* Sector Standing module (Ticker Desk) — gated by SECTOR_MAINTENANCE_ENABLED.
   Mirrors the cockpit module shell + the tdesk-lm label/value vocabulary;
   state colors match the Flow Desk sector strip (green/red/gold/muted). */
.tdesk-sector-etf-chip {
  font-family: 'JetBrains Mono', monospace; font-size: 10px; font-weight: 600;
  letter-spacing: 0.06em; color: var(--brass-bright);
  background: var(--bg-elev); border: 1px solid var(--border-bright);
  border-radius: 4px; padding: 1px 6px;
}
.tdesk-sector-body { display: flex; flex-direction: column; gap: 6px; margin-top: 6px; }
.tdesk-sector-row {
  display: flex; align-items: baseline; justify-content: space-between; gap: 8px;
}
.tdesk-sector-lbl {
  font-family: 'Cinzel', serif; font-size: 7.5px; letter-spacing: 0.14em;
  color: var(--text-dim); text-transform: uppercase;
}
.tdesk-sector-val {
  font-size: 11px; font-weight: 600; color: var(--text); text-transform: capitalize;
}
.tdesk-sector-state-accumulation { color: var(--positive-bright); }
.tdesk-sector-state-distribution { color: var(--negative-bright); }
.tdesk-sector-state-absorption   { color: var(--warn); }
.tdesk-sector-state-drift,
.tdesk-sector-state-quiet         { color: var(--text-dim); }
.tdesk-lm-resistance { border-color: #3A5A3A; }
.tdesk-lm-resistance .tdesk-lm-val { color: var(--positive-bright); }
.tdesk-lm-call_wall { border-color: var(--positive); }
.tdesk-lm-call_wall .tdesk-lm-val { color: var(--data-pos); }

/* Dealer row */
.tdesk-dealer-row {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
  align-items: center;
  border-top: 1px solid var(--border);
  padding-top: 8px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  font-variant-numeric: tabular-nums;
  color: var(--text-muted);
}
.tdesk-dealer-label {
  font-family: 'Cinzel', serif;
  font-size: 8.5px;
  letter-spacing: 0.2em;
  color: var(--text-muted);
  text-transform: uppercase;
}
.tdesk-dealer-item { color: var(--text); }
.tdesk-dealer-sub { font-size: 9.5px; opacity: 0.75; margin-left: 4px; }

/* Verdict banner */
.tdesk-verdict {
  font-family: 'Outfit', sans-serif;
  font-size: 13px;
  font-weight: 500;
  padding: 7px 10px;
  border-radius: 4px;
  border-left: 3px solid var(--brass-deep);
  background: var(--bg-elev);
  color: var(--text-muted);
  line-height: 1.4;
}
.tdesk-verdict-bull, .tdesk-verdict-bullish { border-left-color: var(--positive); color: var(--positive-bright); }
.tdesk-verdict-bear, .tdesk-verdict-bearish { border-left-color: var(--negative); color: var(--negative-bright); }
.tdesk-verdict-neutral { border-left-color: var(--brass-deep); color: var(--brass-bright); }

/* ── Module B: Income / Fundamentals ─────────────────────────── */
.tdesk-mod-b { border-left: 3px solid var(--partner); }
.tdesk-income-body { display: flex; flex-direction: column; gap: 8px; }

/* V1 dial kept for backward compat — V1.1 uses .tdesk-inc-stats in section above */
.tdesk-own-dial { display: flex; align-items: baseline; gap: 6px; }
.tdesk-own-lbl {
  font-family: 'Cinzel', serif; font-size: 8.5px; letter-spacing: 0.16em;
  color: var(--text-muted); text-transform: uppercase;
}
/* Income row helpers — used for earnings risk row */
.tdesk-income-rows { display: flex; flex-direction: column; gap: 4px; }
.tdesk-income-row {
  display: flex; justify-content: space-between; align-items: baseline;
  gap: 8px; font-size: 12px; border-bottom: 1px solid var(--border); padding-bottom: 4px;
}
.tdesk-ir-lbl {
  font-family: 'Cinzel', serif; font-size: 8.5px; letter-spacing: 0.14em;
  color: var(--text-muted); text-transform: uppercase; flex-shrink: 0;
}
.tdesk-ir-val { font-family: 'Outfit', sans-serif; font-size: 12px; color: var(--text); text-align: right; }
.tdesk-ir-bestuse { color: var(--text); font-weight: 500; }
.tdesk-ir-conf { font-style: italic; color: var(--text-muted); }

/* Flags — V1 classes kept here for backward compat; canonical defs in V1.1 section above */

/* ── Module C: Flow / OI ──────────────────────────────────────── */
.tdesk-mod-c { border-left: 3px solid #3a5a3a; }
.tdesk-flow-head {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
}
.tdesk-flow-bias { font-weight: 700; font-size: 13px; }
.tdesk-flow-state { color: var(--text-muted); font-size: 11px; }
.tdesk-flow-voioi { color: var(--text); font-size: 11px; font-variant-numeric: tabular-nums; }
.tdesk-flow-lbl { color: var(--text-muted); font-size: 11px; }
.tdesk-flow-strong { color: var(--brass-bright); font-weight: 700; }
.tdesk-flow-muted  { color: var(--text-muted); }
.tdesk-flow-headline {
  font-family: 'Outfit', sans-serif;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--text);
  letter-spacing: 0.04em;
}
.tdesk-flow-cluster {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--text-muted);
  display: flex;
  align-items: center;
  gap: 6px;
}
.tdesk-flow-clabel { color: var(--text); }
.tdesk-dte-chip {
  background: var(--bg-elev);
  border: 1px solid var(--border);
  border-radius: 3px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  padding: 1px 5px;
  color: var(--brass-bright);
  letter-spacing: 0.04em;
}
.tdesk-flow-read {
  font-family: 'Outfit', sans-serif;
  font-size: 12px;
  color: var(--text);
  line-height: 1.45;
}
.tdesk-flow-watch {
  font-family: 'Outfit', sans-serif;
  font-size: 12.5px;
  color: var(--text);
  line-height: 1.45;
  padding-left: 10px;
  border-left: 2px solid var(--brass-bright);
}
.tdesk-block-lbl {
  display: inline-block;
  font-family: 'Cinzel', serif;
  font-size: 8px;
  letter-spacing: 0.16em;
  color: var(--text-muted);
  text-transform: uppercase;
  margin-right: 6px;
}
.tdesk-watch-lbl { color: var(--brass-bright); }

/* Strike ladder */
.tdesk-ladder-wrap { border-top: 1px solid var(--border); padding-top: 8px; }
.tdesk-ladder-head {
  display: grid;
  grid-template-columns: 60px 44px 60px 1fr;
  gap: 0 8px;
  font-family: 'Cinzel', serif;
  font-size: 8px;
  letter-spacing: 0.16em;
  color: var(--text-muted);
  padding-bottom: 4px;
  border-bottom: 1px solid var(--border);
  margin-bottom: 3px;
}
.tdesk-lad-row {
  display: grid;
  grid-template-columns: 60px 44px 60px 1fr;
  gap: 0 8px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 11.5px;
  font-variant-numeric: tabular-nums;
  line-height: 1.7;
  align-items: center;
}
.tdesk-lad-call span:first-child { color: var(--data-pos); }
.tdesk-lad-put  span:first-child { color: var(--data-neg); }
.tdesk-ladder-more {
  margin-top: 4px;
  border-top: 1px solid var(--border);
}
.tdesk-ladder-more-summary {
  list-style: none;
  cursor: pointer;
  padding: 7px 0 2px;
  font-family: 'Cinzel', serif;
  font-size: 8.5px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--brass-bright);
}
.tdesk-ladder-more-summary::-webkit-details-marker { display: none; }
.tdesk-ladder-more-summary::before {
  content: '> ';
  color: var(--text-muted);
  font-size: 7px;
}
.tdesk-ladder-more[open] > .tdesk-ladder-more-summary::before { content: 'v '; }
.tdesk-ladder-more-body {
  max-height: 220px;
  overflow-y: auto;
  padding-right: 4px;
}

/* ── Module D: Alerts ────────────────────────────────────────── */
.tdesk-mod-d { border-left: 3px solid var(--border-bright); }
.tdesk-alerts-list { display: flex; flex-direction: column; gap: 0; }
.tdesk-alert-row {
  display: flex;
  align-items: baseline;
  gap: 8px;
  flex-wrap: wrap;
  padding: 6px 4px;
  border-bottom: 1px solid var(--border);
  text-decoration: none;
  transition: background 120ms;
  cursor: pointer;
}
.tdesk-alert-row:hover { background: var(--bg-elev); }
.tdesk-al-time {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  color: var(--text-muted);
  flex-shrink: 0;
  font-variant-numeric: tabular-nums;
}
.tdesk-al-type {
  font-family: 'Cinzel', serif;
  font-size: 9px;
  letter-spacing: 0.12em;
  color: var(--text-muted);
  text-transform: uppercase;
}
.tdesk-al-dir { font-family: 'JetBrains Mono', monospace; font-size: 10px; font-weight: 700; }
.tdesk-al-grade {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9.5px;
  background: var(--bg-elev);
  border: 1px solid var(--border);
  padding: 0 5px;
  border-radius: 2px;
  color: var(--brass);
}
.tdesk-al-reason {
  font-family: 'Outfit', sans-serif;
  font-size: 11px;
  color: var(--text-muted);
  flex: 1;
  min-width: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* ── V1.1: Compact empty state — cards collapse to content height ─── */
.tdesk-module { align-self: start; }
.tdesk-empty-compact {
  font-family: 'Outfit', sans-serif;
  font-size: 11.5px;
  font-style: italic;
  color: var(--text-muted);
  padding: 2px 0 0;
  line-height: 1.25;
}
.tdesk-mod--compact .tdesk-state-badge {
  opacity: 0.55;
}
.tdesk-mod--compact .tdesk-mod-title {
  color: var(--text-dim);
}

/* ── V2: Level Stack — vertical price-sorted (replaces horizontal rail) ──────
   Matches the income-scan layout: resistances above spot divider, supports below.
   Color-coded by position vs spot: above=red rail, below=green rail, flip=brass.
   Labels: Cinzel/caps-small. Prices: JetBrains Mono, prominent.
   Source: dim prose. % from spot: right-aligned.
   ─────────────────────────────────────────────────────────────────────────── */
.tdesk-lvl-stack {
  border-top: 1px solid var(--border);
  padding-top: 10px;
  margin-top: 2px;
}
.tdesk-lvl-hd {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 6px;
}
/* Reuse the existing eyebrow style — shared with .tdesk-ll-eyebrow */
.tdesk-ll-eyebrow {
  font-family: 'Cinzel', serif;
  font-size: 8px;
  letter-spacing: 0.22em;
  color: var(--text-muted);
  text-transform: uppercase;
}
/* Spot divider row — the visual anchor between resistance and support zones */
.tdesk-lvl-spot-div {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  font-weight: 600;
  color: var(--brass-bright);
  letter-spacing: 0.08em;
  text-align: center;
  padding: 5px 0 4px;
  border-top: 1px solid var(--brass-deep);
  border-bottom: 1px solid var(--brass-deep);
  margin: 2px 0;
  background: rgba(183, 146, 78, 0.04);
}
/* Empty state within the stack */
.tdesk-lvl-empty {
  font-size: 10px;
  color: var(--text-dim);
  font-style: italic;
  padding: 4px 0;
}
/* Each level row — 3-column layout: label | price (grows) | meta (right) */
.tdesk-lvl-row {
  display: flex;
  align-items: baseline;
  gap: 6px;
  padding: 4px 0 4px 6px;
  border-left: 2px solid var(--border);
  margin-bottom: 1px;
}
/* Resistance zone (above spot) — red left rail */
.tdesk-lvl-row--above {
  border-left-color: var(--negative);
}
/* Support zone (below spot) — green left rail */
.tdesk-lvl-row--below {
  border-left-color: var(--positive);
}
/* Gamma flip — brass rail regardless of position */
.tdesk-lvl-row--flip {
  border-left-color: var(--brass-deep);
  border-left-width: 3px;
}
/* Label: Cinzel caps-small, left-anchored */
.tdesk-lvl-label {
  font-family: 'Cinzel', serif;
  font-size: 9px;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--text-muted);
  white-space: nowrap;
  flex-shrink: 0;
  min-width: 60px;
}
/* Price: JetBrains Mono, prominent — colored by row variant */
.tdesk-lvl-price {
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--text);
  flex: 1 1 auto;
}
.tdesk-lvl-row--above .tdesk-lvl-price { color: var(--negative-bright); }
.tdesk-lvl-row--below .tdesk-lvl-price { color: var(--positive-bright); }
.tdesk-lvl-row--flip  .tdesk-lvl-price { color: var(--brass-bright); }
/* Meta: right side — % from spot + source label */
.tdesk-lvl-meta {
  display: flex;
  align-items: baseline;
  gap: 5px;
  flex-shrink: 0;
  margin-left: auto;
}
.tdesk-lvl-pct {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  font-variant-numeric: tabular-nums;
  color: var(--text-dim);
}
.tdesk-lvl-row--above .tdesk-lvl-pct { color: var(--negative-soft); }
.tdesk-lvl-row--below .tdesk-lvl-pct { color: var(--positive); }
.tdesk-lvl-row--flip  .tdesk-lvl-pct { color: var(--brass); }
.tdesk-lvl-src {
  font-size: 9px;
  color: var(--text-dim);
  font-style: italic;
  white-space: nowrap;
  max-width: 72px;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* ── Legacy marker ids kept for back-compat but hidden (new stack renders instead) */
.tdesk-ll-marker { display: none; }

/* ── V1.1: Income scannable stat grid ───────────────────────────── */
.tdesk-inc-stats {
  display: flex;
  flex-direction: column;
  gap: 2px;
  margin-bottom: 6px;
}
.tdesk-inc-stat-row {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 8px;
  padding: 5px 0;
  border-bottom: 1px solid var(--border);
}
.tdesk-inc-stat-own {
  /* Ownability row — more prominent, slightly more padding */
  padding: 6px 0 8px;
}
.tdesk-inc-stat-lbl {
  font-family: 'Cinzel', serif;
  font-size: 8px;
  letter-spacing: 0.2em;
  color: var(--text-muted);
  text-transform: uppercase;
  flex-shrink: 0;
}
.tdesk-inc-stat-val {
  font-family: 'Outfit', sans-serif;
  font-size: 12.5px;
  color: var(--text);
  text-align: right;
}
/* Ownability big number */
.tdesk-own-score {
  font-family: 'Cormorant Garamond', serif;
  font-size: 36px;
  font-weight: 500;
  line-height: 1;
  font-variant-numeric: tabular-nums;
  color: var(--text-muted);
}
.tdesk-own-denom {
  font-size: 14px;
  opacity: 0.55;
  font-family: 'Cinzel', serif;
  letter-spacing: 0.08em;
  margin-left: 2px;
}
.tdesk-own-strong { color: var(--positive-bright); }
.tdesk-own-mid    { color: var(--brass-bright); }
.tdesk-own-weak   { color: var(--text-muted); }
/* Assignment comfort colors */
.tdesk-inc-comfort-high   { color: var(--positive-bright); font-weight: 500; }
.tdesk-inc-comfort-medium { color: var(--brass); }
.tdesk-inc-comfort-low    { color: var(--warn); }
.tdesk-inc-comfort-blocked{ color: var(--negative-bright); }
/* Verdict */
.tdesk-inc-verdict {
  color: var(--brass);
  font-weight: 500;
  letter-spacing: 0.03em;
}
/* Data confidence — small, dimmed, sits at bottom */
.tdesk-inc-conf {
  font-family: 'Outfit', sans-serif;
  font-size: 10.5px;
  color: var(--text-muted);
  font-style: italic;
  margin-top: 2px;
}

/* ── V1.1: Flag chips (renamed from .tdesk-flag to .tdesk-flag-chip) ─ */
/* Keep old .tdesk-flag for backward compat */
.tdesk-flags { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 2px; }
.tdesk-flag, .tdesk-flag-chip {
  font-family: 'Outfit', sans-serif;
  font-size: 10.5px;
  padding: 2px 8px;
  border-radius: 3px;
  background: var(--bg-elev);
  border: 1px solid var(--border);
  color: var(--text-muted);
}
.tdesk-flag-severe,
.tdesk-flag-chip-severe {
  border-color: var(--negative);
  color: var(--negative-bright);
  background: rgba(160, 79, 79, 0.08);
}
.tdesk-flag-minor,
.tdesk-flag-chip-minor { border-color: var(--warn); color: var(--warn); }

/* ── Module E: Portfolio ──────────────────────────────────────── */
.tdesk-mod-e { border-left: 3px solid var(--mine); }
.tdesk-port-body { display: flex; flex-direction: column; gap: 6px; }
.tdesk-port-row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 8px;
  font-size: 12px;
  padding-bottom: 5px;
  border-bottom: 1px solid var(--border);
}
.tdesk-pr-lbl {
  font-family: 'Cinzel', serif;
  font-size: 8.5px;
  letter-spacing: 0.14em;
  color: var(--text-muted);
  text-transform: uppercase;
  flex-shrink: 0;
}
.tdesk-pr-val {
  font-family: 'Outfit', sans-serif;
  font-size: 12px;
  color: var(--text);
  text-align: right;
}
.tdesk-pr-sub {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  color: var(--text-muted);
  font-variant-numeric: tabular-nums;
}
.tdesk-pr-none { color: var(--text-muted); font-style: italic; font-size: 11px; }
.tdesk-pr-count { color: var(--text); }
.tdesk-pr-campaign { color: var(--brass-bright); max-width: 70%; }
.tdesk-port-sub {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10.5px;
  color: var(--text-muted);
  padding-left: 10px;
  font-variant-numeric: tabular-nums;
}
/* Campaign row */
.tdesk-port-campaign-row .tdesk-pr-val { color: var(--brass-bright); }
/* "View raw" details expander */
.tdesk-port-raw-details {
  border-top: 1px solid var(--border);
  padding-top: 5px;
  margin-top: 2px;
}
.tdesk-port-raw-summary {
  font-family: 'Cinzel', serif;
  font-size: 8.5px;
  letter-spacing: 0.12em;
  color: var(--text-muted);
  cursor: pointer;
  text-transform: uppercase;
  list-style: none;
  padding: 3px 0;
}
.tdesk-port-raw-summary::-webkit-details-marker { display: none; }
.tdesk-port-raw-summary::before {
  content: '▶ ';
  font-size: 7px;
}
details[open] > .tdesk-port-raw-summary::before { content: '▼ '; }
.tdesk-raw-json {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9.5px;
  color: var(--text-muted);
  background: var(--bg-void);
  border: 1px solid var(--border);
  border-radius: 3px;
  padding: 8px 10px;
  overflow-x: auto;
  max-height: 200px;
  margin-top: 5px;
  white-space: pre;
  line-height: 1.5;
}

/* ── Module F: Discovery ─────────────────────────────────────── */
.tdesk-mod-f { border-left: 3px solid var(--brass); }
.tdesk-disc-note {
  font-family: 'Outfit', sans-serif;
  font-size: 13px;
  line-height: 1.55;
  color: var(--text-muted);
}
.tdesk-disc-chips { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 4px; }
.tdesk-disc-chip {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  padding: 2px 8px;
  background: var(--bg-elev);
  border: 1px solid var(--brass-deep);
  border-radius: 3px;
  color: var(--brass-bright);
}

/* ── Responsive ───────────────────────────────────────────────── */
@media (max-width: 900px) {
  .tdesk-header-strip { grid-template-columns: auto minmax(150px, 1fr) auto; gap: 12px; }
  .tdesk-hd-chips,
  .tdesk-hd-actions { grid-column: 2 / -1; justify-self: end; }
  .tdesk-ticker { font-size: 32px; }
  .tdesk-spot   { font-size: 22px; }
}
@media (max-width: 600px) {
  .tdesk-header-strip { grid-template-columns: auto 1fr; align-items: start; }
  .tdesk-hd-price     { grid-column: 1 / -1; align-items: flex-start; }
  .tdesk-hd-chips,
  .tdesk-hd-actions   { grid-column: 1 / -1; justify-self: start; }
  .tdesk-primary-row  { grid-template-columns: 1fr; }
  .tdesk-tenor-row    { flex-direction: column; }
  .tdesk-level-track  { flex-direction: column; align-items: flex-start; }
  /* Vertical stack: already readable on small screens — no changes needed */
  .tdesk-lvl-label  { min-width: 48px; font-size: 8px; }
  .tdesk-lvl-price  { font-size: 11px; }
  .tdesk-lvl-src    { display: none; } /* hide source label on tiny screens */
}

/* ── V1.2: Canonical enrichment — VMC grid, Income Town, Potter Box ───
   Adds Module G (full-width VMC), Town Big Five chip in Module B,
   and Potter Box location line in Module A. Reuses the existing
   .vmc-grid table CSS (tokens identical to Research card). */

/* Module G: compact VMC card in the right column */
.tdesk-mod-g {
  border-left: 3px solid var(--brass-deep);
  padding: 12px 14px;
}

/* VMC grid inside the cockpit: slightly looser cells for readability
   at full-dashboard width. Inherits .vmc-grid table base. */
.tdesk-vmc-grid th,
.tdesk-vmc-grid td {
  padding: 3px 5px;
}
.tdesk-vmc-grid .vmc-grid-rowlabel {
  min-width: 58px;
  padding-right: 8px;
}

/* ── Income: Town Big Five chip ── */
.tdesk-bigfive-chip {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10.5px;
  letter-spacing: 0.04em;
  padding: 2px 8px;
  border-radius: 3px;
  border: 1px solid var(--border);
  background: var(--bg-elev);
}
.tdesk-bigfive-pass {
  border-color: var(--positive);
  color: var(--positive-bright);
  background: rgba(115, 178, 123, 0.08);
}
.tdesk-bigfive-fail {
  border-color: var(--border-bright);
  color: var(--text-muted);
  font-style: italic;
}

/* ── Multi-Tenor: Potter Box — income-scan style (roof/center/floor) ─────────
   Shows the full box geometry so operators see the band without going to /income.
   Header row: "POTTER BOX · State" (state color-coded).
   Coord rows: ROOF / CENTER / FLOOR each with price + % from spot.
   ─────────────────────────────────────────────────────────────────────────── */
.tdesk-potter-block {
  border-top: 1px solid var(--border);
  padding-top: 8px;
  margin-top: 4px;
}
.tdesk-potter-hd {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-bottom: 5px;
}
.tdesk-potter-label {
  font-family: 'Cinzel', serif;
  font-size: 8px;
  letter-spacing: 0.22em;
  color: var(--text-muted);
  text-transform: uppercase;
  flex-shrink: 0;
}
.tdesk-potter-state {
  font-family: 'Outfit', sans-serif;
  font-size: 10.5px;
  font-weight: 500;
  color: var(--text-muted);
}
/* State-specific colours */
.tdesk-potter-in-box      { color: var(--brass-bright); }
.tdesk-potter-above-roof  { color: var(--positive-bright); }
.tdesk-potter-below-floor { color: var(--negative-bright); }
.tdesk-potter-post-box    { color: var(--text-dim); }

/* Coord row: 3-col — label | price | pct */
.tdesk-potter-coord-row {
  display: flex;
  align-items: baseline;
  gap: 6px;
  padding: 3px 0 3px 6px;
  border-left: 2px solid var(--border);
  margin-bottom: 1px;
}
/* Center (cb_line) gets a distinct muted-brass accent */
.tdesk-potter-coord-row--center {
  border-left-color: var(--brass-deep);
}
.tdesk-potter-coord-lbl {
  font-family: 'Cinzel', serif;
  font-size: 8.5px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--text-dim);
  flex-shrink: 0;
  min-width: 46px;
}
.tdesk-potter-coord-price {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11.5px;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  color: var(--text);
  flex: 1 1 auto;
}
.tdesk-potter-coord-pct {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  font-variant-numeric: tabular-nums;
  color: var(--text-dim);
  margin-left: auto;
  flex-shrink: 0;
}

/* Legacy potter-row (old one-liner) — kept for back-compat, hidden */
.tdesk-potter-row { display: none; }
.tdesk-potter-band { display: none; }
.tdesk-potter-cb   { display: none; }

/* ══════════════════════════════════════════════════════════════
   V2 ADAPTIVE COCKPIT — .tdesk-grid-adaptive + modifier classes
   Dynamic module priority: promoted primary, compact demoted,
   portfolio summary block, collapsible VMC.
   ════════════════════════════════════════════════════════════ */

/* ── Adaptive grid — flat auto-flow, order-driven ─────────────
   Uses CSS grid with auto-fill columns (~280px min) and dense
   auto-placement so promoted modules (span-2) claim wider real
   estate while compact modules fill remaining gaps. The fixed
   named-area layout (.tdesk-mod-a … .tdesk-mod-f) is still
   inherited from the base rules — the adaptive grid *overrides*
   column spans and order when classes are applied.             */
.tdesk-grid-adaptive {
  grid-template-columns: 1.4fr 1fr 1fr;
  grid-template-rows: unset;        /* auto heights — no fixed rows */
  grid-auto-rows: auto;
  align-items: start;
}

/* Primary-promoted module: span 2 columns, brighter left border,
   stronger visual weight to signal "this is the lead card."   */
.tdesk-mod--primary {
  grid-column: span 2;
  border-left-color: var(--mine);
  border-left-width: 3px;
  background: color-mix(in srgb, var(--bg-panel) 96%, var(--mine) 4%);
}

/* Compact-demoted module: no min-height, tighter padding,
   content-height only — collapses to just its content.        */
.tdesk-mod--compact {
  padding: 8px 12px;
  gap: 5px;
}
.tdesk-mod--compact .tdesk-mod-hd {
  min-height: 14px;
}
.tdesk-mod--compact .tdesk-empty-compact {
  padding: 2px 0 0;
}

/* Responsive: on tablet (≤1100px) primary still gets span but
   within the 2-col grid; compact modules flow naturally.      */
@media (max-width: 1100px) {
  .tdesk-grid-adaptive { grid-template-columns: 1fr 1fr; }
  .tdesk-mod--primary  { grid-column: span 2; }
}
@media (max-width: 680px) {
  .tdesk-grid-adaptive { grid-template-columns: 1fr; }
  .tdesk-mod--primary  { grid-column: 1; }
}

/* ── Portfolio summary block (managed-position lead) ──────────
   Sits above the instrument detail rows when has_exposure.
   Deliberately compact — it's a dashboard header, not prose.  */
.tdesk-port-summary {
  background: var(--bg-elev);
  border: 1px solid var(--border-bright);
  border-radius: 5px;
  padding: 10px 12px;
  display: flex;
  flex-direction: column;
  gap: 7px;
  margin-bottom: 4px;
}
.tdesk-port-summ-title {
  font-family: 'Cinzel', serif;
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0.08em;
  color: var(--brass-bright);
  line-height: 1.2;
}
.tdesk-port-summ-status {
  font-size: 11px;
  font-weight: 400;
  color: var(--text-muted);
  letter-spacing: 0.04em;
  margin-left: 4px;
}
.tdesk-port-summ-chips {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}
.tdesk-port-summ-chip {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10.5px;
  font-variant-numeric: tabular-nums;
  padding: 2px 8px;
  background: var(--bg-void);
  border: 1px solid var(--border);
  border-radius: 3px;
  color: var(--text);
  white-space: nowrap;
}
/* CSP chip — negative-soft accent (put-side) */
.tdesk-port-summ-chip-csp {
  border-color: #7B3A3A;
  color: var(--negative-soft);
}
/* CC chip — positive accent (call-side) */
.tdesk-port-summ-chip-cc {
  border-color: #3A5A3A;
  color: var(--positive-bright);
}
.tdesk-port-summ-meta {
  display: flex;
  gap: 14px;
  flex-wrap: wrap;
  align-items: center;
}
.tdesk-port-summ-meta-item {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10.5px;
  font-variant-numeric: tabular-nums;
  color: var(--text);
}
.tdesk-port-summ-meta-lbl {
  font-family: 'Cinzel', serif;
  font-size: 7.5px;
  letter-spacing: 0.16em;
  color: var(--text-muted);
  text-transform: uppercase;
  margin-right: 5px;
}

/* ── VMC collapsible <details> ────────────────────────────────
   The module card is a normal .tdesk-module; the <details>
   controls whether the table renders at all. summary acts as
   the pseudo-header, replacing the usual .tdesk-mod-hd.        */
.tdesk-vmc-details {
  display: contents;     /* let children participate in normal flow */
}
.tdesk-vmc-summary {
  display: flex;
  align-items: center;
  gap: 10px;
  cursor: pointer;
  list-style: none;
  padding: 0;
  margin-bottom: 0;
  /* Chromium/Firefox hide default marker */
  -webkit-user-select: none;
  user-select: none;
}
.tdesk-vmc-summary::-webkit-details-marker { display: none; }
/* The arrow glyph before the title */
.tdesk-vmc-summary::before {
  content: '▶';
  font-size: 7px;
  color: var(--text-muted);
  transition: transform 160ms;
  flex-shrink: 0;
  margin-right: 2px;
}
details[open] > .tdesk-vmc-summary::before {
  transform: rotate(90deg);
}
.tdesk-vmc-toggle-hint {
  font-family: 'Outfit', sans-serif;
  font-size: 10.5px;
  font-style: italic;
  color: var(--text-muted);
  margin-left: auto;     /* push to right edge */
}
details[open] > .tdesk-vmc-summary .tdesk-vmc-toggle-hint {
  display: none;         /* hint disappears once expanded */
}
/* Separator between summary and table body */
.tdesk-vmc-body {
  margin-top: 10px;
  border-top: 1px solid var(--border);
  padding-top: 10px;
  overflow-x: auto;      /* horizontal scroll on narrow screens */
}

/* ══════════════════════════════════════════════════════════════
   V2.1 ADAPTIVE LAYOUT MODES + VMC STRIP + PORTFOLIO DETAIL
   Change 1: layout_mode order map drives module grid order.
   Change 2: compact modules collapse to content height (align-self: start
             already set on .tdesk-module above; no min-height).
   Change 3: VMC confirmation strip — always-visible summary row.
   Change 4: Long options + spread detail + others in portfolio card.
   ════════════════════════════════════════════════════════════ */

/* ── V2.1 compact empty state — tighter rules to prevent height matching ──
   align-self:start is already on .tdesk-module (V1.1 rule above).
   These rules prevent padding from making the card taller than its content. */
.tdesk-mod--compact {
  /* Override: no minimum height, content-only */
  min-height: 0 !important;
  align-self: start;
}
.tdesk-mod--compact .tdesk-mod-foot {
  display: none;          /* foot buttons not needed on tiny compact pills */
}

/* ── VMC Confirmation Strip — Change 3 ─────────────────────────────────
   A concise always-visible row that summarises money flow, green dot TFs,
   gold circle TFs, and any warning signals. The full matrix is expand-only
   below it. Strip sits inside the module card before the <details>. */
.tdesk-vmc-strip {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.tdesk-vmc-strip-hd {
  display: flex;
  align-items: center;
  gap: 8px;
}
.tdesk-vmc-strip-body {
  display: grid;
  grid-template-columns: 1fr;
  gap: 5px;
  padding: 7px 8px;
  background: var(--bg-elev);
  border-radius: 4px;
  border: 1px solid var(--border);
}
.tdesk-vmc-strip-item {
  display: grid;
  grid-template-columns: minmax(74px, auto) minmax(0, 1fr);
  align-items: baseline;
  gap: 8px;
  min-width: 0;
}
.tdesk-vmc-strip-lbl {
  font-family: 'Cinzel', serif;
  font-size: 7.5px;
  letter-spacing: 0.2em;
  color: var(--text-muted);
  text-transform: uppercase;
  flex-shrink: 0;
}
.tdesk-vmc-strip-val {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  font-variant-numeric: tabular-nums;
  color: var(--text);
  letter-spacing: 0.03em;
  min-width: 0;
  overflow-wrap: anywhere;
}
.tdesk-vmc-strip-none { color: var(--text-dim); font-style: italic; }
.tdesk-vmc-strip-gold { color: var(--brass-bright); font-weight: 700; }
.tdesk-vmc-strip-warn { color: var(--warn); }
/* Money-flow colour variants — mirrors the barometer / squawk patterns */
.tdesk-vmc-mf-bullish { color: var(--positive-bright); font-weight: 600; }
.tdesk-vmc-mf-mixed-bull { color: var(--positive-bright); opacity: 0.75; }
.tdesk-vmc-mf-bearish { color: var(--negative-bright); font-weight: 600; }
.tdesk-vmc-mf-mixed-bear { color: var(--negative-soft); }
.tdesk-vmc-mf-neutral { color: var(--brass); }
/* When strip is present the <details> needs a top separator */
.tdesk-vmc-strip + .tdesk-vmc-details {
  display: block;
  margin-top: 7px;
  border-top: 1px solid var(--border);
  padding-top: 7px;
}
.tdesk-mod-g .tdesk-vmc-summary {
  justify-content: flex-start;
}
.tdesk-mod-g .tdesk-vmc-toggle-hint {
  margin-left: 0;
  font-style: normal;
  color: var(--brass-bright);
}

/* ── Portfolio long options — Change 4 ──────────────────────────────── */
/* Long options summary chip accent (distinct from CSP/CC) */
.tdesk-port-summ-chip-long {
  border-color: var(--brass-deep);
  color: var(--brass-bright);
}
/* Long option sub-rows — brass tint to distinguish from wheel positions */
.tdesk-port-sub-long {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10.5px;
  color: var(--brass-bright);
  padding-left: 10px;
  font-variant-numeric: tabular-nums;
}
/* Account label inline on long option rows */
.tdesk-port-sub-acct {
  font-family: 'Cinzel', serif;
  font-size: 7.5px;
  letter-spacing: 0.14em;
  color: var(--text-dim);
  text-transform: uppercase;
  margin-left: 6px;
  vertical-align: middle;
}

/* ══════════════════════════════════════════════════════════════
   V3.0 TICKER DESK — Fixed 3-column grid, rich Discovery card,
   centered container, income verdict badge, primary read prominence.
   ════════════════════════════════════════════════════════════ */

/* ── Centered container — max-width with consistent horizontal padding ─── */
.tdesk-cockpit-inner {
  max-width: 1400px;
  margin: 0 auto;
  padding: 0 24px;
}
@media (max-width: 900px) {
  .tdesk-cockpit-inner { padding: 0 14px; }
}
@media (max-width: 600px) {
  .tdesk-cockpit-inner { padding: 0 10px; }
}

/* ── Fixed 3-column grid — LEFT / MIDDLE / RIGHT column wrappers ─────────
   Each column is a flex column of cards stacked top-to-bottom.
   align-items: start ensures compact/empty cards don't stretch vertically.
   VMC stays as a compact right-column confirmation card.                  */
.tdesk-grid-3col {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr);
  gap: 14px;
  align-items: start;
  margin-bottom: 14px;
}
.tdesk-col {
  display: flex;
  flex-direction: column;
  gap: 14px;
  align-items: stretch;
  min-width: 0;
}
/* Each module inside a column starts at its own height — no stretching */
.tdesk-col > .tdesk-module {
  align-self: start;
  width: 100%;
  min-height: 118px;
  box-sizing: border-box;
}
.tdesk-col > .tdesk-mod--compact {
  min-height: 74px !important;
}
.tdesk-col > .tdesk-mod-b:not(.tdesk-mod--compact),
.tdesk-col > .tdesk-mod-e:not(.tdesk-mod--compact),
.tdesk-col > .tdesk-mod-f:not(.tdesk-mod--compact),
.tdesk-col > .tdesk-mod-g:not(.tdesk-mod--compact) {
  min-height: 154px;
}
.tdesk-col > .tdesk-mod-c:not(.tdesk-mod--compact) {
  min-height: 260px;
}
.tdesk-col > .tdesk-mod-a:not(.tdesk-mod--compact) {
  min-height: 360px;
}
/* Portfolio promoted card: accent border only — stays in middle column */
.tdesk-col > .tdesk-mod--primary {
  border-left-color: var(--mine);
  border-left-width: 4px;
  background: color-mix(in srgb, var(--bg-panel) 95%, var(--mine) 5%);
}
.tdesk-grid-3col .tdesk-not-computed,
.tdesk-grid-3col .tdesk-empty-compact {
  min-height: 0;
  padding: 4px 0 0;
}
.tdesk-grid-3col .tdesk-mod--compact {
  justify-content: flex-start;
}
.tdesk-mod-c .tdesk-ladder-more[open] {
  margin-bottom: 2px;
}
.tdesk-mod-c .tdesk-ladder-more[open] .tdesk-ladder-more-body {
  max-height: 260px;
}
.tdesk-mod-g .tdesk-vmc-body {
  max-height: 320px;
  overflow: auto;
}
/* On tablet: 2-column layout — left stays, middle+right merge */
@media (max-width: 1000px) {
  .tdesk-grid-3col {
    grid-template-columns: repeat(2, 1fr);
  }
  .tdesk-col:last-child {
    grid-column: 1 / -1;
    flex-direction: row;
    flex-wrap: wrap;
    gap: 16px;
  }
  .tdesk-col:last-child > .tdesk-module {
    flex: 1 1 300px;
    min-width: 260px;
  }
}
/* On mobile: single column */
@media (max-width: 680px) {
  .tdesk-grid-3col {
    grid-template-columns: 1fr;
  }
  .tdesk-col:last-child {
    flex-direction: column;
    grid-column: 1;
  }
  .tdesk-col:last-child > .tdesk-module {
    flex: none;
    min-width: 0;
  }
}

/* ── Primary Read / Watch — more prominent body text (V3.0) ──────────────
   Slightly larger font, better line-height, more padding.
   Decision lines are the most important text on the page.               */
.tdesk-primary-read,
.tdesk-primary-watch {
  padding: 12px 14px;
}
.tdesk-prim-text {
  font-size: 13.5px;
  line-height: 1.5;
}

/* ── Income Verdict Badge — prominent colored badge at top of income card ──
   Replaces the plain inline status chip. Visible tinted band.            */
.tdesk-inc-verdict-badge {
  display: inline-block;
  font-family: 'Cinzel', serif;
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  padding: 5px 14px;
  border-radius: 4px;
  border: 1px solid var(--border);
  background: var(--bg-elev);
  color: var(--text-muted);
  margin-bottom: 4px;
}
/* Approved tiers — green */
.tdesk-inc-vbadge-approved-ultimate,
.tdesk-inc-vbadge-approved-strong,
.tdesk-inc-vbadge-approved-standard,
.tdesk-inc-vbadge-cc-strong,
.tdesk-inc-vbadge-cc-standard {
  border-color: var(--positive);
  color: var(--positive-bright);
  background: rgba(115, 178, 123, 0.10);
}
/* STALK — brass */
.tdesk-inc-vbadge-stalk {
  border-color: var(--brass-deep);
  color: var(--brass-bright);
  background: rgba(183, 146, 78, 0.08);
}
/* REVIEW — muted */
.tdesk-inc-vbadge-review {
  border-color: var(--border-bright);
  color: var(--text-muted);
}
/* AVOID — muted red */
.tdesk-inc-vbadge-avoid,
.tdesk-inc-vbadge-blocked {
  border-color: var(--negative);
  color: var(--negative-soft);
  background: rgba(160, 79, 79, 0.08);
}
/* NOT IN UNIVERSE / DATA ERROR — dim */
.tdesk-inc-vbadge-not-in-universe,
.tdesk-inc-vbadge-data-error { color: var(--text-dim); }

/* ── Discovery card — rich event summary (V3.0) ──────────────────────────
   Sits in the right column below Flow/OI. The Module F base styles
   (.tdesk-mod-f) are unchanged. These extend them with purchase value,
   analyst line, why-it-matters block, and detail expander.              */

/* Prominent purchase value line */
.tdesk-disc-purchase-line {
  display: flex;
  align-items: baseline;
  gap: 8px;
  padding: 8px 10px;
  background: rgba(183, 146, 78, 0.08);
  border: 1px solid var(--brass-deep);
  border-radius: 4px;
}
.tdesk-disc-purchase-val {
  font-family: 'JetBrains Mono', monospace;
  font-size: 20px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--brass-bright);
  letter-spacing: 0.02em;
}
.tdesk-disc-purchase-lbl {
  font-family: 'Cinzel', serif;
  font-size: 8px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--text-muted);
}
/* Analyst action line */
.tdesk-disc-analyst-line {
  font-family: 'Outfit', sans-serif;
  font-size: 12.5px;
  color: var(--text);
  padding: 5px 0;
  border-top: 1px solid var(--border);
  border-bottom: 1px solid var(--border);
}
.tdesk-disc-target-line {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  padding: 7px 9px;
  background: rgba(45, 55, 65, 0.35);
  border: 1px solid var(--border);
  border-radius: 4px;
}
.tdesk-disc-target-price,
.tdesk-disc-target-gap {
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}
.tdesk-disc-target-price {
  color: var(--brass-bright);
}
/* Chip variants for discovery */
.tdesk-disc-chip-insider {
  border-color: var(--brass-deep);
  color: var(--brass-bright);
  background: rgba(183, 146, 78, 0.08);
}
.tdesk-disc-chip-upgrade {
  border-color: var(--positive);
  color: var(--positive-bright);
  background: rgba(115, 178, 123, 0.08);
}
.tdesk-disc-chip-downgrade {
  border-color: var(--negative);
  color: var(--negative-soft);
  background: rgba(160, 79, 79, 0.06);
}
/* Why it matters block */
.tdesk-disc-why {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 8px 10px;
  background: var(--bg-elev);
  border-radius: 4px;
  border: 1px solid var(--border);
}
.tdesk-disc-why-lbl {
  font-family: 'Cinzel', serif;
  font-size: 8px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--text-muted);
}
.tdesk-disc-why-text {
  font-family: 'Outfit', sans-serif;
  font-size: 12.5px;
  line-height: 1.5;
  color: var(--text);
}
/* Details expander */
.tdesk-disc-details {
  border-top: 1px solid var(--border);
  padding-top: 5px;
  margin-top: 2px;
}
.tdesk-disc-summary {
  font-family: 'Cinzel', serif;
  font-size: 8.5px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--brass);
  cursor: pointer;
  list-style: none;
  padding: 4px 0;
}
.tdesk-disc-summary::-webkit-details-marker { display: none; }
.tdesk-disc-summary::before { content: '▶ '; font-size: 7px; }
details[open] > .tdesk-disc-summary::before { content: '▼ '; }
.tdesk-disc-detail-body {
  display: flex;
  flex-direction: column;
  gap: 10px;
  margin-top: 8px;
}
.tdesk-disc-detail-section {
  display: flex;
  flex-direction: column;
  gap: 0;
}
.tdesk-disc-detail-hd {
  font-family: 'Cinzel', serif;
  font-size: 8px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--text-muted);
  padding-bottom: 4px;
  margin-bottom: 2px;
  border-bottom: 1px solid var(--border);
}
.tdesk-disc-detail-row {
  display: flex;
  align-items: baseline;
  gap: 8px;
  padding: 4px 0;
  border-bottom: 1px solid var(--border);
  flex-wrap: wrap;
}
.tdesk-disc-detail-lbl {
  font-family: 'Cinzel', serif;
  font-size: 8px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--text-muted);
  flex-shrink: 0;
  min-width: 80px;
}
.tdesk-disc-detail-val {
  font-family: 'Outfit', sans-serif;
  font-size: 12px;
  color: var(--text);
  flex: 1;
}
.tdesk-disc-detail-sub {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  font-variant-numeric: tabular-nums;
  flex-shrink: 0;
}

/* ══════════════════════════════════════════════════════════════
   TICKER DESK — Warm Ticker Switcher strip  (.tdesk-warm-*)
   Slim single-row command strip above the cockpit.
   Left: search. Right: WARM label + logo chips + More dropdown.
   Palette/type inherit from the .tdesk-* Legacy Desk system.
   ════════════════════════════════════════════════════════════ */

/* ── Strip container ────────────────────────────────────────── */
.tdesk-warm-strip {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 8px 16px;
  background: var(--bg-panel);
  border-bottom: 1px solid var(--border);
  flex-wrap: nowrap;
  overflow: hidden;
  min-height: 46px;
  position: sticky;
  top: 0;
  z-index: 10;
}

/* ── Search area ────────────────────────────────────────────── */
.tdesk-warm-search-area {
  display: flex;
  align-items: center;
  gap: 4px;
  flex-shrink: 0;
}
.tdesk-warm-search-input {
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  width: 110px;
  padding: 5px 9px;
  background: var(--bg-elev);
  border: 1px solid var(--border-bright);
  border-radius: 3px;
  color: var(--text);
  outline: none;
  transition: border-color 120ms;
}
.tdesk-warm-search-input:focus {
  border-color: var(--brass);
  box-shadow: 0 0 0 2px var(--brass-glow);
}
.tdesk-warm-search-input::placeholder {
  color: var(--text-dim);
  letter-spacing: 0.12em;
  font-weight: 400;
}
.tdesk-warm-search-btn {
  font-family: 'Outfit', sans-serif;
  font-size: 14px;
  padding: 4px 9px;
  background: var(--bg-elev);
  border: 1px solid var(--border-bright);
  border-radius: 3px;
  color: var(--brass-bright);
  cursor: pointer;
  transition: background 120ms, border-color 120ms, color 120ms;
  line-height: 1;
}
.tdesk-warm-search-btn:hover {
  background: var(--bg-elevated);
  border-color: var(--brass);
  color: var(--text);
}

/* ── Divider between search and chips ──────────────────────── */
.tdesk-warm-search-area::after {
  content: '';
  display: block;
  width: 1px;
  height: 24px;
  background: var(--border);
  margin-left: 6px;
}

/* ── Chips area ─────────────────────────────────────────────── */
.tdesk-warm-chips-area {
  display: flex;
  align-items: center;
  gap: 4px;
  flex: 1 1 0;
  overflow: hidden;
  min-width: 0;
  flex-wrap: nowrap;
}

/* ── "WARM" label ───────────────────────────────────────────── */
.tdesk-warm-label {
  font-family: 'Cinzel', serif;
  font-size: 8px;
  font-weight: 600;
  letter-spacing: 0.22em;
  color: var(--text-dim);
  text-transform: uppercase;
  flex-shrink: 0;
  padding-right: 4px;
}

/* ── Individual chip ────────────────────────────────────────── */
.tdesk-warm-chip {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 5px 9px 5px 5px;
  background: var(--bg-elev);
  border: 1px solid var(--border);
  border-radius: 3px;
  color: var(--text-muted);
  text-decoration: none;
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.06em;
  white-space: nowrap;
  flex-shrink: 0;
  transition: background 110ms, border-color 110ms, color 110ms;
  cursor: pointer;
}
.tdesk-warm-chip:hover {
  background: var(--bg-elevated);
  border-color: var(--border-bright);
  color: var(--text);
  text-shadow: none;
}
.tdesk-warm-chip.is-active {
  background: rgba(183, 146, 78, 0.22);
  border-color: var(--brass-bright);
  border-width: 1.5px;
  color: var(--brass-bright);
  box-shadow: inset 0 -2px 0 0 var(--brass-bright), inset 0 0 0 1px rgba(183, 146, 78, 0.32), 0 0 8px rgba(183, 146, 78, 0.24);
  transform: translateY(-1px);
}
.tdesk-warm-chip.is-active .tdesk-warm-ticker {
  font-weight: 700;
  color: var(--brass-bright);
}
.tdesk-warm-chip.is-active .tdesk-warm-mono {
  color: var(--brass-bright);
  border-color: var(--brass-deep);
}

/* ── Logo + monogram inside chip ───────────────────────────── */
.tdesk-warm-logo-wrap {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  flex-shrink: 0;
}
.tdesk-warm-logo {
  width: 18px;
  height: 18px;
  border-radius: 2px;
  object-fit: contain;
  display: block;
}
.tdesk-warm-mono {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  border-radius: 2px;
  background: var(--bg-elevated);
  border: 1px solid var(--border-bright);
  font-family: 'Cinzel', serif;
  font-size: 7.5px;
  font-weight: 600;
  letter-spacing: 0;
  color: var(--brass-deep);
  flex-shrink: 0;
}

/* ── Ticker text inside chip ────────────────────────────────── */
.tdesk-warm-ticker {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.08em;
}

/* ── Status dot ─────────────────────────────────────────────── */
.tdesk-warm-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  flex-shrink: 0;
  display: inline-block;
  margin-left: 1px;
}
/* Token-mapped dot colors (inline style set in template; classes for overrides) */
.tdesk-dot-blue  { background: var(--clay) !important; }
.tdesk-dot-green { background: var(--positive-bright) !important; }
.tdesk-dot-red   { background: var(--negative-bright) !important; }
.tdesk-dot-gold  { background: var(--brass-bright) !important; }
.tdesk-dot-gray  { background: var(--text-dim) !important; }

/* ── More dropdown (<details>/<summary>) ────────────────────── */
.tdesk-warm-more {
  position: relative;
  flex-shrink: 0;
}
.tdesk-warm-more[open] .tdesk-warm-more-dropdown { display: flex; }
.tdesk-warm-more-btn {
  list-style: none;
  display: inline-flex;
  align-items: center;
  cursor: pointer;
  padding: 5px 9px;
  background: var(--bg-elev);
  border: 1px solid var(--border);
  border-radius: 3px;
  transition: background 110ms, border-color 110ms;
}
.tdesk-warm-more-btn::-webkit-details-marker { display: none; }
.tdesk-warm-more-btn::marker { display: none; }
.tdesk-warm-more-btn:hover {
  background: var(--bg-elevated);
  border-color: var(--border-bright);
}
.tdesk-warm-more-label {
  font-family: 'Cinzel', serif;
  font-size: 8.5px;
  font-weight: 600;
  letter-spacing: 0.18em;
  color: var(--text-muted);
  text-transform: uppercase;
}
.tdesk-warm-more-dropdown {
  display: none;
  position: absolute;
  top: calc(100% + 4px);
  right: 0;
  flex-direction: row;
  flex-wrap: wrap;
  gap: 4px;
  padding: 8px;
  background: var(--bg-panel);
  border: 1px solid var(--border-bright);
  border-radius: 4px;
  z-index: 20;
  min-width: 160px;
  max-width: 320px;
  box-shadow: 0 4px 16px rgba(0,0,0,0.45);
}

/* ── Responsive collapse ─────────────────────────────────────── */
@media (max-width: 600px) {
  .tdesk-warm-strip { padding: 6px 10px; gap: 8px; }
  .tdesk-warm-search-input { width: 88px; font-size: 11px; }
  .tdesk-warm-chip { font-size: 9px; padding: 3px 6px 3px 4px; }
  .tdesk-warm-logo,
  .tdesk-warm-logo-wrap,
  .tdesk-warm-mono { width: 15px; height: 15px; }
}

/* ════════════════════════════════════════════════════════════
   TICKER DESK — Landing Hub  (.tdesk-hub-*)  (.tdesk-queue-*)
   Full landing page: header/search · 3 queues · warm board.
   Palette/type inherit from the .tdesk-* Legacy Desk system.
   ════════════════════════════════════════════════════════════ */

/* ── Page wrapper ────────────────────────────────────────── */
.tdesk-hub-page {
  max-width: 1200px;
  margin: 0 auto;
  padding: 20px 20px 40px;
  display: flex;
  flex-direction: column;
  gap: 24px;
}

/* ── Header / search row ─────────────────────────────────── */
.tdesk-hub-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--border);
  flex-wrap: wrap;
}

.tdesk-hub-title {
  display: flex;
  align-items: baseline;
  gap: 10px;
}

.tdesk-hub-title-label {
  font-family: 'Cinzel', serif;
  font-size: 18px;
  font-weight: 700;
  letter-spacing: 0.14em;
  color: var(--text);
}

.tdesk-hub-title-sub {
  font-family: 'Outfit', sans-serif;
  font-size: 12px;
  color: var(--text-dim);
  letter-spacing: 0.04em;
}

.tdesk-hub-search-area {
  display: flex;
  align-items: center;
  gap: 5px;
  flex-shrink: 0;
}

.tdesk-hub-search-input {
  font-family: 'JetBrains Mono', monospace;
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  width: 130px;
  padding: 7px 11px;
  background: var(--bg-elev);
  border: 1px solid var(--border-bright);
  border-radius: 3px;
  color: var(--text);
  outline: none;
  transition: border-color 120ms;
}

.tdesk-hub-search-input:focus {
  border-color: var(--brass);
  box-shadow: 0 0 0 2px var(--brass-glow);
}

.tdesk-hub-search-input::placeholder {
  color: var(--text-dim);
  letter-spacing: 0.10em;
  font-weight: 400;
}

.tdesk-hub-search-btn {
  font-family: 'Outfit', sans-serif;
  font-size: 15px;
  padding: 6px 12px;
  background: var(--bg-elev);
  border: 1px solid var(--border-bright);
  border-radius: 3px;
  color: var(--brass-bright);
  cursor: pointer;
  transition: background 120ms, border-color 120ms, color 120ms;
  line-height: 1;
}

.tdesk-hub-search-btn:hover {
  background: var(--bg-elevated);
  border-color: var(--brass);
  color: var(--text);
}

/* ── Three-queue strip ───────────────────────────────────── */
.tdesk-hub-queues {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
}

/* ── Individual queue column ────────────────────────────── */
.tdesk-queue-col {
  background: var(--bg-panel);
  border: 1px solid var(--border);
  border-radius: 4px;
  overflow: hidden;
}

/* Column accent via left border by queue type */
.tdesk-queue-income { border-left: 3px solid var(--brass-bright); }
.tdesk-queue-alerts { border-left: 3px solid var(--clay); }
.tdesk-queue-flow   { border-left: 3px solid var(--positive); }

.tdesk-queue-title {
  font-family: 'Cinzel', serif;
  font-size: 9px;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--text-dim);
  padding: 7px 10px 5px;
  border-bottom: 1px solid var(--border);
}

.tdesk-queue-list {
  display: flex;
  flex-direction: column;
}

.tdesk-queue-item {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 7px 10px;
  border-bottom: 1px solid var(--border);
  text-decoration: none;
  color: var(--text-muted);
  transition: background 100ms, color 100ms;
  cursor: pointer;
}

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

.tdesk-queue-item:hover {
  background: var(--bg-elev);
  color: var(--text);
}

.tdesk-queue-logo-wrap {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  flex-shrink: 0;
}

.tdesk-queue-logo {
  width: 22px;
  height: 22px;
  border-radius: 3px;
  object-fit: contain;
  display: block;
}

.tdesk-queue-mono {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  border-radius: 3px;
  background: var(--bg-elevated);
  border: 1px solid var(--border-bright);
  font-family: 'Cinzel', serif;
  font-size: 8px;
  font-weight: 600;
  letter-spacing: 0;
  color: var(--brass-deep);
  flex-shrink: 0;
}

.tdesk-queue-body {
  display: flex;
  flex-direction: column;
  gap: 1px;
  min-width: 0;
  flex: 1 1 0;
}

.tdesk-queue-ticker {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.08em;
  color: var(--text);
  white-space: nowrap;
}

.tdesk-queue-reason {
  font-family: 'Outfit', sans-serif;
  font-size: 10px;
  color: var(--text-dim);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 160px;
}

.tdesk-queue-chip {
  font-family: 'Cinzel', serif;
  font-size: 8px;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 2px 5px;
  border-radius: 2px;
  white-space: nowrap;
  flex-shrink: 0;
}

/* Chip color variants: gold=brass, blue=clay, green=positive, red=negative, gray=dim */
.tdesk-chip-gold  { background: var(--brass-glow);   color: var(--brass-bright); border: 1px solid var(--brass-deep); }
.tdesk-chip-blue  { background: var(--clay-glow);    color: var(--clay);         border: 1px solid var(--clay); }
.tdesk-chip-green { background: rgba(79,138,87,0.12); color: var(--positive-bright); border: 1px solid var(--positive); }
.tdesk-chip-red   { background: rgba(161,79,79,0.12); color: var(--negative-soft);   border: 1px solid var(--negative); }
.tdesk-chip-gray  { background: var(--bg-elevated);  color: var(--text-dim);     border: 1px solid var(--border); }

.tdesk-queue-empty {
  padding: 14px 10px;
  font-family: 'Outfit', sans-serif;
  font-size: 11px;
  color: var(--text-dim);
  font-style: italic;
}

/* ── Warm board section ──────────────────────────────────── */
.tdesk-hub-board-section {
  display: flex;
  flex-direction: column;
  gap: 0;
}

.tdesk-hub-board-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 6px 10px 6px 12px;
  background: var(--bg-panel);
  border: 1px solid var(--border);
  border-radius: 4px 4px 0 0;
  border-bottom: 1px solid var(--border-bright);
}

.tdesk-hub-board-title {
  font-family: 'Cinzel', serif;
  font-size: 9px;
  font-weight: 600;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--text-dim);
  flex: 1 1 0;
}

/* ── Warm board dot legend ─────────────────────────────────── */
.tdesk-board-legend {
  display: flex;
  align-items: center;
  gap: 12px;
  flex: 0 0 auto;
}
.tdesk-legend-item {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-family: 'Outfit', sans-serif;
  font-size: 10px;
  letter-spacing: 0.04em;
  color: var(--text-dim);
  white-space: nowrap;
}
.tdesk-legend-item .tdesk-warm-dot {
  position: static;
}
@media (max-width: 760px) {
  .tdesk-board-legend { display: none; }
}

.tdesk-hub-board-filter {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.10em;
  text-transform: uppercase;
  width: 110px;
  padding: 4px 9px;
  background: var(--bg-elev);
  border: 1px solid var(--border-bright);
  border-radius: 3px;
  color: var(--text);
  outline: none;
  transition: border-color 100ms, box-shadow 100ms;
  flex-shrink: 0;
}

.tdesk-hub-board-filter:focus {
  border-color: var(--brass);
  box-shadow: 0 0 0 2px var(--brass-glow);
}

.tdesk-hub-board-filter::placeholder {
  color: var(--text-dim);
  font-weight: 400;
  letter-spacing: 0.08em;
}

.tdesk-hub-board {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  padding: 10px;
  background: var(--bg-panel);
  border: 1px solid var(--border);
  border-top: none;
  border-radius: 0 0 4px 4px;
}

.tdesk-hub-board-tile {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  padding: 8px 10px 7px;
  width: 72px;
  background: var(--bg-panel);
  border: 1px solid var(--border);
  border-radius: 4px;
  text-decoration: none;
  color: var(--text-muted);
  transition: background 110ms, border-color 110ms, color 110ms;
  cursor: pointer;
}

.tdesk-hub-board-tile:hover {
  background: var(--bg-elev);
  border-color: var(--border-bright);
  color: var(--text);
}

.tdesk-hub-tile-logo-wrap {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
}

.tdesk-hub-tile-logo {
  width: 28px;
  height: 28px;
  border-radius: 3px;
  object-fit: contain;
  display: block;
}

.tdesk-hub-tile-mono {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border-radius: 3px;
  background: var(--bg-elevated);
  border: 1px solid var(--border-bright);
  font-family: 'Cinzel', serif;
  font-size: 9px;
  font-weight: 600;
  letter-spacing: 0;
  color: var(--brass-deep);
}

.tdesk-hub-tile-ticker {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-muted);
}

.tdesk-hub-board-empty {
  padding: 20px 12px;
  font-family: 'Outfit', sans-serif;
  font-size: 12px;
  color: var(--text-dim);
  font-style: italic;
  width: 100%;
}

/* ── Responsive ──────────────────────────────────────────── */
@media (max-width: 800px) {
  .tdesk-hub-queues { grid-template-columns: 1fr; }
  .tdesk-hub-board-tile { width: 64px; padding: 6px 8px 5px; }
  .tdesk-hub-tile-logo-wrap,
  .tdesk-hub-tile-logo,
  .tdesk-hub-tile-mono { width: 22px; height: 22px; }
}

@media (max-width: 520px) {
  .tdesk-hub-page { padding: 12px 12px 28px; gap: 16px; }
  .tdesk-hub-title-label { font-size: 14px; }
  .tdesk-hub-header { flex-direction: column; align-items: flex-start; }
}

/* The Watch - alarm tower command center */
.watch-page {
  display: flex;
  flex-direction: column;
  gap: 16px;
  padding: 18px 0 34px;
}

.watch-heading {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 16px;
  padding: 4px 0 2px;
}

.watch-eyebrow,
.watch-card-kicker {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  line-height: 1.2;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--brass-bright);
}

.watch-heading h1 {
  margin: 4px 0 2px;
  font-family: 'Cinzel', serif;
  font-size: 34px;
  line-height: 1;
  letter-spacing: 0;
  color: var(--text);
}

.watch-heading p {
  margin: 0;
  color: var(--text-muted);
  font-size: 13px;
}

.watch-controls {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 10px;
  flex-wrap: wrap;
}

.watch-freshness {
  color: var(--text-dim);
  font-size: 12px;
}

.watch-mode-pill,
.watch-readonly-chip {
  min-height: 32px;
  display: inline-flex;
  align-items: center;
  border-radius: 4px;
  border: 1px solid var(--border);
  padding: 7px 10px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-muted);
  background: rgba(23, 26, 29, 0.82);
}

.watch-mode-pill.is-live {
  border-color: rgba(127, 214, 156, 0.42);
  color: #7FD69C;
}

.watch-mode-pill.is-partial {
  border-color: rgba(213, 176, 107, 0.58);
  color: var(--brass-bright);
}

.watch-mode-pill.is-degraded,
.watch-state-banner {
  border-color: rgba(224, 126, 114, 0.68);
  color: #FFB0A8;
}

.watch-refresh,
.watch-secondary-action,
.watch-primary-action,
.watch-link-action {
  min-height: 32px;
  border-radius: 4px;
  border: 1px solid var(--border-bright);
  padding: 7px 12px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  text-decoration: none;
  cursor: pointer;
}

.watch-refresh,
.watch-secondary-action,
.watch-link-action {
  background: var(--bg-panel);
  color: var(--text-muted);
}

.watch-refresh:disabled {
  opacity: 0.72;
  cursor: wait;
}

.watch-page.is-soft-refresh-failed .watch-refresh {
  border-color: rgba(224, 126, 114, 0.68);
  color: #FFB0A8;
}

.watch-primary-action {
  background: linear-gradient(135deg, #D5B06B, #9B7435);
  color: #111;
  border-color: #D5B06B;
  font-weight: 800;
}

.watch-link-action {
  border-color: var(--border);
}

.watch-secondary-action:disabled {
  opacity: 0.42;
  cursor: not-allowed;
}

.watch-state-banner {
  min-height: 42px;
  display: flex;
  align-items: center;
  gap: 12px;
  border: 1px solid;
  border-radius: 6px;
  background: rgba(42, 19, 17, 0.62);
  padding: 10px 12px;
}

.watch-state-banner strong {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.watch-state-banner span {
  color: var(--text-muted);
  font-size: 12px;
}

.watch-pulse-strip {
  display: grid;
  grid-template-columns: repeat(5, minmax(105px, 1fr)) minmax(210px, 1.4fr);
  gap: 8px;
}

.watch-pulse-strip.is-pending {
  grid-template-columns: minmax(0, 1fr);
}

.watch-pulse-cell {
  min-height: 58px;
  padding: 10px 12px;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: rgba(23, 26, 29, 0.82);
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 2px;
}

.watch-pulse-cell span,
.watch-pulse-cell em {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--text-dim);
  font-style: normal;
}

.watch-pulse-cell strong {
  font-size: 14px;
  color: var(--text);
}

.watch-pulse-cell .is-up { color: #7FD69C; }
.watch-pulse-cell .is-down { color: #E07E72; }

.watch-pulse-pending {
  min-height: 44px;
  display: grid;
  grid-template-columns: auto auto minmax(0, 1fr);
  align-items: center;
  justify-content: start;
  gap: 10px;
  padding: 9px 12px;
  opacity: 0.78;
}

.watch-pulse-pending strong {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--brass-bright);
}

.watch-pulse-pending em {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.watch-rail {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px;
  align-items: stretch;
}

.watch-rail-panel {
  min-width: 0;
  min-height: 220px;
  display: flex;
  flex-direction: column;
  gap: 9px;
  border: 1px solid rgba(109, 90, 54, 0.72);
  border-radius: 8px;
  background:
    radial-gradient(circle at 18% 12%, rgba(213, 176, 107, 0.12), transparent 30%),
    linear-gradient(135deg, rgba(28, 32, 35, 0.96), rgba(13, 15, 16, 0.96));
  color: var(--text);
  cursor: pointer;
  padding: 16px;
  text-align: left;
  box-shadow: 0 18px 42px rgba(0, 0, 0, 0.24);
}

.watch-rail-panel:hover,
.watch-rail-panel:focus {
  border-color: var(--border-bright);
  background:
    radial-gradient(circle at 18% 12%, rgba(213, 176, 107, 0.16), transparent 30%),
    linear-gradient(135deg, rgba(31, 34, 35, 0.98), rgba(13, 15, 16, 0.98));
  outline: none;
}

.watch-rail-panel.is-lcb {
  align-items: center;
  justify-content: center;
  text-align: center;
  border-color: rgba(213, 176, 107, 0.78);
  background:
    radial-gradient(circle at 50% 22%, rgba(213, 176, 107, 0.18), transparent 34%),
    linear-gradient(135deg, rgba(30, 31, 29, 0.98), rgba(12, 14, 15, 0.98));
}

.watch-rail-panel.is-lcb.is-active {
  border-color: rgba(224, 86, 75, 0.86);
  background:
    radial-gradient(circle at 50% 16%, rgba(224, 86, 75, 0.22), transparent 30%),
    linear-gradient(135deg, rgba(42, 19, 17, 0.96), rgba(20, 18, 16, 0.98));
}

.watch-rail-beacon {
  position: relative;
  display: block;
  width: 90px;
  height: 70px;
  flex: 0 0 auto;
  margin-bottom: 2px;
}

.watch-rail-beacon .watch-beacon-light {
  top: 4px;
  left: 50%;
  width: 46px;
  height: 18px;
  transform: translateX(-50%);
  border-radius: 18px 18px 7px 7px;
  box-shadow:
    0 0 0 3px rgba(213, 176, 107, 0.05),
    0 0 18px rgba(213, 176, 107, 0.28);
}

.watch-rail-beacon .watch-beacon-light::before,
.watch-rail-beacon .watch-beacon-light::after {
  top: 8px;
  width: 44px;
  opacity: 0.45;
}

.watch-rail-beacon .watch-beacon-light::before { right: 41px; }
.watch-rail-beacon .watch-beacon-light::after { left: 41px; }

.watch-rail-beacon .watch-beacon-window {
  top: 10px;
  left: 50%;
  width: 20px;
  height: 6px;
  transform: translateX(-50%);
  box-shadow: 0 0 10px rgba(255, 236, 177, 0.28);
}

.watch-rail-beacon .watch-beacon-tower {
  top: 22px;
  left: 50%;
  width: 38px;
  height: 40px;
  transform: translateX(-50%);
}

.watch-rail-beacon .watch-beacon-brace {
  top: 40px;
  left: 50%;
  width: 36px;
  transform-origin: center;
}

.watch-rail-beacon .watch-beacon-brace.is-a { transform: translateX(-50%) rotate(55deg); }
.watch-rail-beacon .watch-beacon-brace.is-b { transform: translateX(-50%) rotate(-55deg); }

.watch-rail-beacon .watch-beacon-base {
  top: 58px;
  left: 50%;
  width: 66px;
  height: 8px;
  transform: translateX(-50%);
  box-shadow: 0 8px 14px rgba(0, 0, 0, 0.24);
}

.watch-rail-beacon .watch-beacon-pulse {
  top: -2px;
  left: 50%;
  width: 62px;
  height: 62px;
  transform: translateX(-50%);
  opacity: 0.46;
}

.watch-rail-panel.is-active .watch-rail-beacon .watch-beacon-light {
  border-color: rgba(255, 199, 126, 0.9);
  background:
    linear-gradient(180deg, rgba(255, 213, 151, 0.68), rgba(224, 86, 75, 0.22)),
    rgba(29, 20, 16, 0.86);
  box-shadow:
    0 0 0 3px rgba(224, 86, 75, 0.08),
    0 0 20px rgba(224, 86, 75, 0.34);
}

.watch-rail-kicker {
  color: var(--brass-bright);
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

.watch-rail-number {
  color: var(--text);
  font-size: 40px;
  line-height: 1;
}

.watch-rail-lead {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
}

.watch-rail-lead .watch-logo-wrap {
  flex: 0 0 auto;
  width: 38px;
  height: 38px;
}

.watch-rail-lead .watch-logo,
.watch-rail-lead .watch-logo-fallback {
  width: 38px;
  height: 38px;
  font-size: 12px;
}

.watch-rail-lead > span:last-child {
  display: flex;
  min-width: 0;
  flex-direction: column;
  gap: 3px;
}

.watch-rail-lead strong {
  color: var(--text);
  font-family: 'Cinzel', serif;
  font-size: 25px;
  letter-spacing: 0;
  line-height: 1;
}

.watch-rail-count {
  display: inline-flex;
  align-items: baseline;
  gap: 6px;
  align-self: flex-start;
  border: 1px solid rgba(213, 176, 107, 0.28);
  border-radius: 5px;
  background: rgba(213, 176, 107, 0.06);
  color: var(--text-muted);
  padding: 5px 8px;
  font-size: 11px;
  text-transform: uppercase;
}

.watch-rail-count b {
  color: var(--brass-bright);
  font-family: 'JetBrains Mono', monospace;
  font-size: 13px;
}

.watch-rail-panel em {
  color: var(--text-muted);
  font-size: 13px;
  font-style: normal;
}

.watch-rail-list {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-top: auto;
  width: 100%;
}

.watch-rail-list span {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  border-top: 1px solid rgba(109, 90, 54, 0.32);
  color: var(--text-muted);
  padding-top: 7px;
  font-size: 12px;
}

.watch-rail-lcb-title {
  color: var(--text);
  font-family: 'Cinzel', serif;
  font-size: 22px;
  letter-spacing: 0;
  line-height: 1.04;
}

.watch-hero {
  display: none;
}

.watch-hero {
  position: relative;
  overflow: hidden;
  border-radius: 8px;
  border: 1px solid var(--border-bright);
  background:
    radial-gradient(circle at 22% 18%, rgba(213, 176, 107, 0.18), transparent 33%),
    linear-gradient(135deg, rgba(28, 32, 35, 0.96), rgba(13, 15, 16, 0.96));
  padding: 22px;
  box-shadow: 0 18px 42px rgba(0, 0, 0, 0.28);
}

.watch-hero.is-quiet {
  min-height: 318px;
  display: flex;
  align-items: center;
  border-color: rgba(213, 176, 107, 0.62);
  background:
    radial-gradient(circle at 28% 50%, rgba(213, 176, 107, 0.28), transparent 31%),
    radial-gradient(circle at 56% 10%, rgba(255, 230, 165, 0.08), transparent 24%),
    linear-gradient(135deg, rgba(30, 31, 29, 0.98), rgba(12, 14, 15, 0.98));
  box-shadow:
    0 0 0 1px rgba(213, 176, 107, 0.12),
    0 22px 54px rgba(0, 0, 0, 0.32),
    inset 0 1px 0 rgba(255, 236, 177, 0.08);
}

.watch-hero.is-critical {
  border-color: rgba(224, 86, 75, 0.9);
  background:
    radial-gradient(circle at 12% 10%, rgba(224, 86, 75, 0.2), transparent 30%),
    linear-gradient(135deg, rgba(42, 19, 17, 0.96), rgba(20, 18, 16, 0.98) 52%, rgba(13, 15, 16, 0.98));
  box-shadow: 0 0 0 1px rgba(213, 176, 107, 0.25), 0 24px 62px rgba(224, 86, 75, 0.17);
}

.watch-hero.is-acknowledged {
  border-color: var(--border-bright);
  box-shadow: 0 18px 42px rgba(0, 0, 0, 0.24);
  filter: saturate(0.82);
}

.watch-hero-banner {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  gap: 10px;
  align-items: center;
  margin: -8px -8px 16px;
  border: 1px solid rgba(224, 86, 75, 0.58);
  border-radius: 6px;
  background: rgba(224, 86, 75, 0.14);
  padding: 10px 12px;
}

.watch-hero-banner span,
.watch-hero-banner em {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: #FFB0A8;
  font-style: normal;
}

.watch-hero-banner strong {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--text);
  font-size: 13px;
}

.watch-hero-alarm,
.watch-quiet-copy {
  display: flex;
  align-items: center;
  gap: 14px;
}

.watch-tower-icon {
  width: 42px;
  height: 42px;
  border-radius: 6px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid rgba(224, 86, 75, 0.82);
  background: rgba(224, 86, 75, 0.18);
  color: #FFB0A8;
  font-family: 'JetBrains Mono', monospace;
  font-size: 26px;
  font-weight: 900;
}

.watch-tower-icon.is-calm {
  border-color: var(--border-bright);
  background: var(--brass-glow);
  color: var(--brass-bright);
}

.watch-critical-label {
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: #FFB0A8;
}

.watch-quiet-copy .watch-critical-label {
  color: var(--brass-bright);
}

.watch-hero h2 {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  margin: 2px 0 0;
  font-family: 'Cinzel', serif;
  font-size: 30px;
  line-height: 1.08;
  letter-spacing: 0;
}

.watch-hero h2 small {
  font-family: 'Outfit', sans-serif;
  font-size: 13px;
  color: var(--text-muted);
}

.watch-quiet-copy p,
.watch-alarm-line {
  margin: 4px 0 0;
  color: var(--text-muted);
}

.watch-quiet-hero {
  width: 100%;
  display: grid;
  grid-template-columns: minmax(250px, 0.56fr) minmax(280px, 0.78fr) minmax(230px, 0.52fr);
  align-items: center;
  gap: 22px;
}

.watch-beacon-visual {
  position: relative;
  min-height: 282px;
  display: flex;
  align-items: center;
  justify-content: center;
  isolation: isolate;
}

.watch-beacon-halo {
  position: absolute;
  width: 236px;
  height: 236px;
  border-radius: 50%;
  background:
    radial-gradient(circle, rgba(255, 232, 166, 0.22) 0 8%, rgba(213, 176, 107, 0.14) 9% 28%, transparent 58%);
  box-shadow: 0 0 76px rgba(213, 176, 107, 0.2);
  z-index: 0;
}

.watch-beacon-beam {
  position: absolute;
  top: 64px;
  width: 150px;
  height: 74px;
  background: linear-gradient(90deg, transparent, rgba(213, 176, 107, 0.16), transparent);
  filter: blur(1px);
  transform-origin: center right;
  z-index: 0;
}

.watch-beacon-beam.is-left {
  right: 50%;
  transform: rotate(-16deg);
}

.watch-beacon-beam.is-right {
  left: 50%;
  transform: rotate(16deg);
}

.watch-beacon-ring {
  position: absolute;
  width: 206px;
  height: 206px;
  border-radius: 50%;
  border: 1px solid rgba(213, 176, 107, 0.36);
  background:
    radial-gradient(circle, transparent 0 38%, rgba(213, 176, 107, 0.12) 39% 40%, transparent 41% 100%);
  box-shadow: 0 0 48px rgba(213, 176, 107, 0.14);
  z-index: 1;
}

.watch-beacon-ring.is-outer {
  width: 258px;
  height: 258px;
  border-color: rgba(213, 176, 107, 0.18);
  background: none;
}

.watch-beacon-light {
  position: absolute;
  top: 56px;
  width: 104px;
  height: 42px;
  border-radius: 38px 38px 12px 12px;
  border: 1px solid rgba(255, 223, 145, 0.86);
  background:
    linear-gradient(180deg, rgba(255, 236, 177, 0.58), rgba(213, 176, 107, 0.18)),
    rgba(23, 26, 29, 0.82);
  box-shadow:
    0 0 0 5px rgba(213, 176, 107, 0.06),
    0 0 42px rgba(213, 176, 107, 0.44);
  z-index: 4;
}

.watch-beacon-light::before,
.watch-beacon-light::after {
  content: "";
  position: absolute;
  top: 17px;
  width: 124px;
  height: 2px;
  background: linear-gradient(90deg, transparent, rgba(255, 223, 145, 0.5), transparent);
}

.watch-beacon-light::before { right: 94px; transform: rotate(-13deg); }
.watch-beacon-light::after { left: 94px; transform: rotate(13deg); }

.watch-beacon-window {
  position: absolute;
  top: 70px;
  width: 44px;
  height: 12px;
  border-radius: 12px;
  background: rgba(255, 236, 177, 0.72);
  box-shadow: 0 0 18px rgba(255, 236, 177, 0.38);
  z-index: 5;
}

.watch-beacon-tower {
  position: absolute;
  top: 96px;
  width: 86px;
  height: 132px;
  clip-path: polygon(26% 0, 74% 0, 100% 100%, 0 100%);
  background:
    linear-gradient(90deg, transparent 0 23%, rgba(213, 176, 107, 0.38) 24% 26%, transparent 27% 73%, rgba(213, 176, 107, 0.38) 74% 76%, transparent 77% 100%),
    linear-gradient(180deg, rgba(65, 55, 36, 0.72), rgba(16, 18, 18, 0.9));
  filter: drop-shadow(0 12px 18px rgba(0, 0, 0, 0.34));
  z-index: 3;
}

.watch-beacon-brace {
  position: absolute;
  top: 139px;
  width: 78px;
  height: 2px;
  border-radius: 2px;
  background: rgba(213, 176, 107, 0.42);
  z-index: 4;
}

.watch-beacon-brace.is-a { transform: rotate(55deg); }
.watch-beacon-brace.is-b { transform: rotate(-55deg); }

.watch-beacon-pulse {
  position: absolute;
  top: 58px;
  width: 118px;
  height: 118px;
  border-radius: 50%;
  border: 1px solid rgba(255, 223, 145, 0.22);
  box-shadow: 0 0 30px rgba(213, 176, 107, 0.16);
  z-index: 2;
}

.watch-beacon-base {
  position: absolute;
  top: 222px;
  width: 164px;
  height: 18px;
  border-radius: 3px;
  border: 1px solid rgba(213, 176, 107, 0.56);
  background: rgba(23, 26, 29, 0.9);
  box-shadow: 0 12px 24px rgba(0, 0, 0, 0.3);
  z-index: 4;
}

.watch-quiet-main {
  min-width: 0;
  align-self: center;
}

.watch-quiet-main .watch-critical-label {
  color: var(--brass-bright);
}

.watch-quiet-main h2 {
  margin-top: 8px;
  font-size: 44px;
  line-height: 1.02;
  color: #f4ead3;
}

.watch-quiet-main p {
  max-width: 560px;
  margin: 10px 0 0;
  color: var(--text-muted);
  font-size: 15px;
}

.watch-quiet-main small {
  display: block;
  margin-top: 14px;
  color: var(--text-dim);
  font-size: 12px;
}

.watch-quiet-pills {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 22px;
}

.watch-quiet-pills span {
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  gap: 9px;
  border: 1px solid rgba(213, 176, 107, 0.38);
  border-radius: 6px;
  background: rgba(13, 15, 16, 0.56);
  padding: 8px 12px;
  box-shadow: inset 0 1px 0 rgba(255, 236, 177, 0.05);
}

.watch-quiet-pills em {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--text-dim);
  font-style: normal;
}

.watch-quiet-pills strong {
  color: var(--brass-bright);
  font-size: 18px;
}

.watch-priority-stack {
  min-width: 0;
  border: 1px solid rgba(213, 176, 107, 0.28);
  border-radius: 8px;
  background:
    linear-gradient(180deg, rgba(31, 29, 23, 0.7), rgba(12, 14, 15, 0.52));
  padding: 13px;
  box-shadow: inset 0 1px 0 rgba(255, 236, 177, 0.05);
}

.watch-priority-row {
  min-height: 42px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  border-top: 1px solid rgba(109, 90, 54, 0.34);
  padding: 9px 0;
}

.watch-priority-row:first-of-type {
  margin-top: 7px;
}

.watch-priority-row span {
  min-width: 0;
  color: var(--text-muted);
  font-size: 12px;
}

.watch-priority-row strong {
  flex: 0 0 auto;
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--brass-bright);
}

.watch-priority-row.is-primary span {
  color: var(--text);
  font-weight: 700;
}

.watch-alarm-metrics {
  display: grid;
  grid-template-columns: 1.15fr repeat(4, minmax(110px, 1fr));
  gap: 8px;
  margin-top: 16px;
}

.watch-alarm-metrics div {
  min-height: 70px;
  border: 1px solid rgba(224, 86, 75, 0.38);
  border-radius: 6px;
  background: rgba(13, 15, 16, 0.48);
  padding: 12px;
}

.watch-alarm-metrics span {
  display: block;
  color: var(--text-dim);
  font-size: 10px;
  text-transform: uppercase;
}

.watch-alarm-metrics strong {
  display: block;
  margin-top: 5px;
  color: var(--text);
  font-size: 20px;
}

.watch-hero-grid {
  display: grid;
  grid-template-columns: 1.05fr 1fr 0.9fr;
  gap: 12px;
  margin-top: 16px;
}

.watch-critical-copy,
.watch-sizing-card,
.watch-why-card {
  border: 1px solid rgba(109, 90, 54, 0.74);
  border-radius: 6px;
  background: rgba(13, 15, 16, 0.38);
  padding: 14px;
}

.watch-fact-row,
.watch-sizing-grid {
  display: grid;
  grid-template-columns: minmax(90px, 0.72fr) minmax(0, 1fr);
  gap: 8px 12px;
  align-items: baseline;
}

.watch-fact-row {
  padding: 7px 0;
  border-bottom: 1px solid rgba(109, 90, 54, 0.34);
}

.watch-fact-row:last-child { border-bottom: 0; }

.watch-fact-row span,
.watch-sizing-grid span {
  font-size: 11px;
  color: var(--text-dim);
  text-transform: uppercase;
}

.watch-fact-row strong,
.watch-sizing-grid strong {
  min-width: 0;
  color: var(--text);
}

.watch-sizing-card small {
  display: block;
  margin-top: 10px;
  color: var(--text-dim);
  font-size: 11px;
}

.watch-why-card ul {
  margin: 10px 0 0;
  padding: 0 0 0 16px;
  color: var(--text-muted);
  font-size: 13px;
}

.watch-why-card li + li { margin-top: 7px; }

.watch-actions {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin-top: 16px;
}

.watch-quiet-stats {
  display: grid;
  grid-template-columns: repeat(3, minmax(120px, 1fr));
  gap: 10px;
  margin-top: 18px;
}

.watch-quiet-stats div {
  border: 1px solid var(--border);
  border-radius: 6px;
  background: rgba(23, 26, 29, 0.64);
  padding: 12px;
}

.watch-quiet-stats span {
  display: block;
  color: var(--text-dim);
  font-size: 11px;
  text-transform: uppercase;
}

.watch-quiet-stats strong {
  display: block;
  margin-top: 3px;
  font-size: 22px;
  color: var(--text);
}

.watch-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px;
  align-items: start;
}

.watch-card {
  min-width: 0;
  border: 1px solid var(--border);
  border-radius: 8px;
  background: rgba(23, 26, 29, 0.92);
  overflow: hidden;
}

.watch-card-support {
  opacity: 0.86;
}

.watch-card header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 10px 12px;
  border-bottom: 1px solid var(--border);
}

.watch-card header span {
  font-family: 'Cinzel', serif;
  font-size: 15px;
  color: var(--text);
}

.watch-card header em {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--text-dim);
  font-style: normal;
}

.watch-lane,
.watch-split-list {
  display: flex;
  flex-direction: column;
  gap: 7px;
  padding: 8px;
}

.watch-split-list {
  gap: 12px;
}

.watch-lane-item {
  display: grid;
  grid-template-columns: 30px minmax(0, 1fr) auto;
  gap: 9px;
  align-items: center;
  min-height: 48px;
  padding: 8px;
  border: 1px solid transparent;
  border-radius: 6px;
  background: rgba(28, 32, 35, 0.72);
  color: var(--text);
  text-decoration: none;
}

.watch-lane-item:hover {
  border-color: var(--border-bright);
  background: var(--bg-elevated);
}

.watch-lane-item.is-muted {
  opacity: 0.72;
}

.watch-logo-wrap,
.watch-logo,
.watch-logo-fallback {
  width: 28px;
  height: 28px;
}

.watch-logo {
  display: block;
  border-radius: 4px;
  object-fit: contain;
}

.watch-logo-fallback {
  align-items: center;
  justify-content: center;
  border-radius: 4px;
  border: 1px solid var(--border-bright);
  background: var(--bg-panel);
  color: var(--brass-bright);
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  font-weight: 800;
}

.watch-lane-main {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.watch-lane-top {
  display: flex;
  align-items: center;
  gap: 7px;
  min-width: 0;
}

.watch-lane-top strong,
.watch-lane-sub {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.watch-lane-top strong {
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  letter-spacing: 0.05em;
}

.watch-lane-sub {
  color: var(--text-muted);
  font-size: 12px;
}

.watch-mini-badge,
.watch-lane-meta {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--brass-bright);
}

.watch-lane-meta {
  justify-self: end;
  color: var(--text-dim);
  white-space: nowrap;
}

.watch-empty {
  min-height: 30px;
  display: flex;
  align-items: center;
  padding: 6px 8px;
  color: var(--text-dim);
  font-size: 12px;
  font-style: italic;
}

.watch-details {
  padding: 10px;
}

.watch-details summary {
  list-style: none;
  cursor: pointer;
  min-height: 36px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 8px 10px;
  border: 1px solid var(--border);
  border-radius: 6px;
  color: var(--brass-bright);
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.watch-details summary::-webkit-details-marker { display: none; }
.watch-details[open] summary { margin-bottom: 8px; }

.watch-theme-board {
  display: grid;
  grid-template-columns: repeat(8, minmax(0, 1fr));
  gap: 8px;
}

.watch-theme {
  min-height: 58px;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: rgba(23, 26, 29, 0.82);
  padding: 10px;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 5px;
}

.watch-theme span {
  color: var(--text-dim);
  font-size: 10px;
  text-transform: uppercase;
}

.watch-theme strong {
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  color: var(--text);
}

.watch-theme.is-critical { border-color: rgba(224, 86, 75, 0.78); }
.watch-theme.is-bull { border-color: rgba(127, 214, 156, 0.6); }
.watch-theme.is-blue { border-color: rgba(103, 151, 210, 0.58); }
.watch-theme.is-bear { border-color: rgba(224, 126, 114, 0.54); }
.watch-theme.is-gold { border-color: var(--border-bright); }
.watch-theme.is-muted { opacity: 0.74; }

.watch-source-deck {
  border: 1px solid var(--border-bright);
  border-radius: 8px;
  background:
    linear-gradient(180deg, rgba(28, 32, 35, 0.96), rgba(13, 15, 16, 0.96));
  overflow: hidden;
}

.watch-source-header {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 16px;
  padding: 16px;
  border-bottom: 1px solid var(--border);
}

.watch-source-header h2 {
  margin: 4px 0 2px;
  font-family: 'Cinzel', serif;
  font-size: 24px;
  letter-spacing: 0;
  color: var(--text);
}

.watch-source-header p {
  margin: 0;
  color: var(--text-muted);
  font-size: 13px;
}

.watch-source-controls {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  flex-wrap: wrap;
}

.watch-deck-arrow,
.watch-auto-toggle {
  min-height: 32px;
  border-radius: 4px;
  border: 1px solid var(--border);
  background: rgba(23, 26, 29, 0.9);
  color: var(--text-muted);
}

.watch-deck-arrow {
  width: 34px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  font-size: 20px;
  line-height: 1;
}

.watch-deck-arrow:hover {
  border-color: var(--border-bright);
  color: var(--brass-bright);
}

.watch-auto-toggle {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 7px 10px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.watch-auto-toggle input {
  accent-color: var(--brass-bright);
}

.watch-auto-toggle:has(input:disabled) {
  opacity: 0.5;
}

.watch-lens-tabs {
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  gap: 6px;
  padding: 10px 12px;
  border-bottom: 1px solid var(--border);
  background: rgba(12, 14, 15, 0.48);
}

.watch-lens-tab {
  min-height: 36px;
  border: 1px solid transparent;
  border-radius: 4px;
  background: rgba(28, 32, 35, 0.82);
  color: var(--text-muted);
  cursor: pointer;
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.watch-lens-tab:hover,
.watch-lens-tab.is-active {
  border-color: var(--border-bright);
  color: var(--brass-bright);
  background: rgba(41, 37, 28, 0.86);
}

.watch-lens-panels {
  padding: 14px;
}

.watch-lens-panel {
  min-height: 270px;
}

.watch-lens-panel-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 14px;
  margin-bottom: 12px;
}

.watch-lens-panel-head h3 {
  margin: 4px 0 2px;
  font-family: 'Cinzel', serif;
  font-size: 22px;
  color: var(--text);
}

.watch-lens-panel-head p {
  margin: 0;
  color: var(--text-muted);
  font-size: 13px;
}

.watch-deck-stats {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
  margin-bottom: 12px;
}

.watch-deck-stats span {
  min-height: 52px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  border: 1px solid rgba(109, 90, 54, 0.52);
  border-radius: 6px;
  background: rgba(13, 15, 16, 0.56);
  padding: 10px 12px;
}

.watch-deck-stats em {
  color: var(--text-dim);
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  font-style: normal;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.watch-deck-stats strong {
  color: var(--brass-bright);
}

.watch-deck-list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
}

.watch-deck-row {
  min-width: 0;
  width: 100%;
  min-height: 70px;
  display: grid;
  grid-template-columns: 30px minmax(0, 1fr) minmax(64px, auto);
  gap: 10px;
  align-items: center;
  border: 1px solid var(--border);
  border-left-color: rgba(213, 176, 107, 0.52);
  border-radius: 6px;
  background: rgba(23, 26, 29, 0.84);
  color: var(--text);
  cursor: pointer;
  font: inherit;
  padding: 10px;
  text-align: left;
  text-decoration: none;
}

.watch-deck-row:hover,
.watch-deck-row.is-active {
  border-color: var(--border-bright);
  background: var(--bg-elevated);
}

.watch-deck-row.is-critical { border-left-color: rgba(224, 86, 75, 0.92); }
.watch-deck-row.is-alert { border-left-color: rgba(103, 151, 210, 0.78); }
.watch-deck-row.is-flow,
.watch-deck-row.is-flow-bull { border-left-color: rgba(127, 214, 156, 0.72); }
.watch-deck-row.is-flow-bear { border-left-color: rgba(224, 126, 114, 0.72); }
.watch-deck-row.is-income { border-left-color: rgba(213, 176, 107, 0.82); }
.watch-deck-row.is-setup-ready { border-left-color: rgba(127, 214, 156, 0.82); }
.watch-deck-row.is-setup-brewing { border-left-color: rgba(213, 176, 107, 0.68); }

.watch-deck-main {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.watch-deck-top {
  display: flex;
  align-items: center;
  gap: 7px;
}

.watch-deck-top strong {
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  letter-spacing: 0.05em;
}

.watch-deck-title,
.watch-deck-detail {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.watch-deck-title {
  color: var(--text);
  font-size: 13px;
}

.watch-deck-detail {
  color: var(--text-muted);
  font-size: 12px;
}

.watch-deck-spot,
.watch-flow-spot {
  min-width: 0;
  color: var(--text);
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.03em;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.watch-deck-spot.is-stale,
.watch-flow-spot.is-stale,
.watch-flow-statline .is-stale {
  color: #D5B06B;
}

.watch-deck-spot.is-missing,
.watch-flow-spot.is-missing {
  color: var(--text-dim);
  font-style: italic;
}

.watch-deck-fresh {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-top: 2px;
  color: var(--text-dim);
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.05em;
  text-transform: uppercase;
}

.watch-deck-fresh b,
.watch-deck-fresh em {
  font-style: normal;
  font-weight: 600;
}

.watch-deck-fresh b { color: var(--brass-bright); }
.watch-deck-fresh em { color: var(--text-muted); }

.watch-deck-meta {
  justify-self: end;
  color: var(--text-dim);
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  white-space: nowrap;
}

.watch-deck-side {
  justify-self: end;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 5px;
  min-width: 78px;
}

.watch-deck-metric {
  color: var(--brass-bright);
}

.watch-deck-action {
  color: var(--brass-bright);
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  white-space: nowrap;
}

.watch-inline-browser {
  display: grid;
  grid-template-columns: minmax(330px, 0.95fr) minmax(0, 1.2fr);
  gap: 10px;
}

.watch-inline-browser .watch-deck-list {
  grid-template-columns: 1fr;
}

.watch-inline-detail-stack {
  min-width: 0;
}

.watch-inline-detail {
  min-height: 100%;
  border: 1px solid rgba(109, 90, 54, 0.58);
  border-radius: 6px;
  background: rgba(13, 15, 16, 0.46);
  padding: 12px;
}

.watch-inline-detail.is-active {
  border-color: rgba(213, 176, 107, 0.68);
}

.watch-inline-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 12px;
}

.watch-alert-badges {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: 10px 0;
}

.watch-alert-badge {
  border: 1px solid rgba(213, 176, 107, 0.28);
  border-radius: 999px;
  color: var(--text-muted);
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.08em;
  padding: 4px 8px;
  text-transform: uppercase;
}

.watch-alert-badge-pos { color: #73B27B; border-color: rgba(115, 178, 123, 0.45); }
.watch-alert-badge-neg { color: #C86A6A; border-color: rgba(200, 106, 106, 0.45); }
.watch-alert-badge-info { color: var(--brass-bright); border-color: rgba(213, 176, 107, 0.40); }
.watch-alert-badge-neutral { color: var(--brass-deep); border-color: var(--brass-deep); }

.watch-alert-narrative {
  border-left: 2px solid var(--brass-bright);
  background: rgba(23, 26, 29, 0.74);
  color: var(--text);
  font-size: 13px;
  line-height: 1.5;
  margin: 10px 0;
  padding: 9px 10px;
}

.watch-alert-brief {
  display: grid;
  gap: 8px;
  margin: 10px 0;
}

/* v2026-07-02 (Brief enrich P1.2) -- shared dealer-brief section (Watch focus tab) */
.dealer-brief-section { margin-top: 2px; }
.db-headline {
  padding: 9px 11px;
  border-left: 4px solid var(--brass-deep);
  border-radius: 4px;
  background: rgba(120, 90, 40, 0.05);
  font-family: 'Cinzel', serif;
  font-size: 1.02em;
  color: var(--text);
  margin-bottom: 8px;
}
.db-headline.db-bullish { border-left-color: var(--data-pos); background: rgba(95, 179, 107, 0.05); }
.db-headline.db-bearish { border-left-color: var(--data-neg); background: rgba(224, 96, 95, 0.05); }
.db-headline.db-neutral { border-left-color: var(--brass-deep); background: rgba(120, 90, 40, 0.05); }
.db-meta {
  font-size: 11px;
  color: var(--text-muted);
  margin-bottom: 8px;
}
.db-levels {
  width: 100%;
  border-collapse: collapse;
  margin-bottom: 10px;
}
.db-levels td {
  padding: 4px 8px;
  font-size: 12px;
  color: var(--text);
  border-bottom: 1px solid rgba(213, 176, 107, 0.14);
}
.db-levels td:first-child { color: var(--brass-deep); }
.db-levels td.mono {
  font-family: 'JetBrains Mono', monospace;
  text-align: right;
}
.db-gex { margin: 10px 0; }
.db-action {
  white-space: pre-wrap;
  font-size: 12.5px;
  color: var(--text-muted);
  background: none;
  border: none;
  padding: 0;
  margin: 8px 0 0;
  line-height: 1.5;
  font-family: inherit;
}

.watch-alert-brief-block {
  border-left: 2px solid rgba(213, 176, 107, 0.34);
  background: rgba(23, 26, 29, 0.48);
  padding: 8px 10px;
}

.watch-alert-brief-block.is-caution {
  border-color: rgba(200, 106, 106, 0.68);
  background: rgba(90, 44, 36, 0.20);
}

/* v2026-07-02 (Smart Thesis P1) — Smart Thesis card on the Watch focus drill */
.watch-thesis-card {
  border: 1px solid rgba(213, 176, 107, 0.24);
  border-radius: 5px;
  background: rgba(13, 15, 16, 0.36);
  margin: 10px 0;
  padding: 8px 10px;
}
.watch-thesis-head {
  display: flex;
  gap: 8px;
  align-items: baseline;
  margin-bottom: 6px;
}
.watch-thesis-head b {
  color: var(--brass-bright);
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.watch-thesis-age {
  font-size: 11px;
  color: var(--brass-deep);
  opacity: 0.75;
}
.watch-thesis-line {
  display: flex;
  gap: 8px;
  padding: 2px 0;
  font-size: 13px;
}
.watch-thesis-label {
  min-width: 92px;
  color: var(--brass-deep);
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.watch-thesis-text {
  color: var(--text);
}
.watch-thesis-pos .watch-thesis-label,
.watch-thesis-bull .watch-thesis-label { color: #73B27B; }
.watch-thesis-neg .watch-thesis-label,
.watch-thesis-bear .watch-thesis-label { color: #C86A6A; }

.watch-alert-brief-block b,
.watch-alert-thesis b {
  display: block;
  color: var(--brass-bright);
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.08em;
  margin-bottom: 3px;
  text-transform: uppercase;
}

.watch-alert-brief-block span,
.watch-alert-thesis span {
  color: var(--text);
  display: block;
  font-size: 12px;
  line-height: 1.45;
}

.watch-alert-thesis {
  border: 1px solid rgba(213, 176, 107, 0.24);
  border-radius: 5px;
  background: rgba(13, 15, 16, 0.36);
  margin: 10px 0;
  padding: 8px 10px;
}

.watch-alert-thesis em {
  color: var(--text-muted);
  display: block;
  font-size: 11px;
  margin-top: 4px;
}

.watch-alert-feature-grid {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.watch-alert-feature-qual {
  color: var(--text-muted);
  font-size: 10px;
  font-style: italic;
  margin-left: 4px;
}

.watch-alert-feature-qual.is-pos { color: #73B27B; }
.watch-alert-feature-qual.is-neg { color: #C86A6A; }
.watch-alert-feature-qual.is-info { color: var(--brass-bright); }

.watch-detail-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
  margin-top: 12px;
}

.watch-detail-grid-secondary {
  margin-top: 8px;
}

.watch-detail-lines {
  display: grid;
  gap: 6px;
  margin: 10px 0;
}

.watch-detail-lines span {
  min-width: 0;
  border: 1px solid var(--border);
  border-radius: 5px;
  background: rgba(213, 176, 107, 0.08);
  color: var(--text);
  padding: 8px 10px;
  font-size: 12px;
  line-height: 1.4;
}

.watch-detail-grid > div {
  min-width: 0;
  border: 1px solid rgba(213, 176, 107, 0.24);
  border-radius: 5px;
  background: rgba(23, 26, 29, 0.58);
  padding: 8px 9px;
}

.watch-detail-grid b,
.watch-detail-grid span {
  display: block;
  min-width: 0;
}

.watch-detail-grid b {
  margin-bottom: 4px;
  color: var(--brass-bright);
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.watch-detail-grid span {
  color: var(--text-muted);
  font-size: 12px;
  line-height: 1.35;
}

.watch-flow-radar {
  display: grid;
  grid-template-columns: minmax(330px, 0.95fr) minmax(0, 1.2fr);
  gap: 10px;
}

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

.watch-flow-row {
  min-width: 0;
  min-height: 62px;
  display: grid;
  grid-template-columns: 30px minmax(0, 1fr) auto;
  gap: 10px;
  align-items: center;
  border: 1px solid var(--border);
  border-left-color: rgba(127, 214, 156, 0.72);
  border-radius: 6px;
  background: rgba(23, 26, 29, 0.84);
  color: var(--text);
  padding: 9px 10px;
  text-decoration: none;
}

.watch-flow-row.is-bear { border-left-color: rgba(224, 126, 114, 0.72); }
.watch-flow-row.is-mixed { border-left-color: rgba(213, 176, 107, 0.72); }
.watch-flow-row:hover,
.watch-flow-row.is-active {
  border-color: var(--border-bright);
  background: var(--bg-elevated);
}

.watch-flow-main {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 3px;
}

.watch-flow-top {
  display: flex;
  align-items: center;
  gap: 7px;
  min-width: 0;
}

.watch-flow-top strong {
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  letter-spacing: 0.05em;
}

.watch-flow-top em,
.watch-flow-top b,
.watch-flow-fresh {
  color: var(--brass-bright);
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  font-style: normal;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.watch-flow-top b {
  color: var(--text-dim);
  font-weight: 600;
}

.watch-flow-main > span:last-child {
  min-width: 0;
  color: var(--text-muted);
  font-size: 12px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.watch-flow-fresh {
  justify-self: end;
  color: var(--text-dim);
  white-space: nowrap;
}

.watch-flow-card {
  min-height: 100%;
  border: 1px solid rgba(109, 90, 54, 0.58);
  border-radius: 6px;
  background: rgba(13, 15, 16, 0.46);
  padding: 12px;
}

.watch-flow-card-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 10px;
}

.watch-flow-card-head h4 {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 3px 0 0;
  color: var(--text);
  font-family: 'Cinzel', serif;
  font-size: 20px;
  letter-spacing: 0;
}

.watch-flow-statline {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-bottom: 10px;
}

.watch-flow-statline span {
  border: 1px solid rgba(213, 176, 107, 0.32);
  border-radius: 4px;
  background: rgba(23, 26, 29, 0.72);
  color: var(--text-muted);
  padding: 5px 7px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
}

.watch-flow-read {
  margin: 8px 0 0;
  color: var(--text-muted);
  font-size: 12.5px;
  line-height: 1.45;
}

.watch-flow-read b {
  display: inline-block;
  margin-right: 8px;
  color: var(--brass-bright);
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  text-transform: uppercase;
}

.watch-flow-ladders {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
  margin-top: 12px;
}

.watch-flow-ladder-head {
  margin-bottom: 5px;
  color: var(--text-dim);
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.watch-flow-ladder-row {
  display: grid;
  grid-template-columns: minmax(48px, 0.9fr) minmax(34px, 0.5fr) minmax(48px, 0.7fr) minmax(50px, 0.7fr) minmax(56px, 0.8fr);
  gap: 6px;
  align-items: center;
  min-height: 24px;
  border-top: 1px solid rgba(109, 90, 54, 0.34);
  color: var(--text-muted);
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
}

.watch-flow-ladder-row.is-call span:first-child { color: #7FD69C; }
.watch-flow-ladder-row.is-put span:first-child { color: #E07E72; }

.watch-attention-strip {
  display: grid;
  grid-template-columns: minmax(280px, 0.82fr) minmax(340px, 1.08fr) minmax(260px, 0.9fr);
  gap: 10px;
  margin: 14px 0;
}

.watch-attention-card {
  min-width: 0;
  min-height: 118px;
  border: 1px solid var(--border);
  border-radius: 8px;
  background: linear-gradient(180deg, rgba(28,32,35,.95), rgba(18,21,23,.95));
  color: var(--text);
  padding: 13px;
  text-align: left;
}

button.watch-attention-card { cursor: pointer; }
button.watch-attention-card:hover { border-color: var(--border-bright); background: var(--bg-elevated); }

/* Smart Thesis P2 (2026-07-05): proximity chips + feed. Full-width row
   under the three attention cards; invisible when no events. Amber accent
   (approaching, not fired — the beacon stays reserved for fires). */
.watch-proximity {
  grid-column: 1 / -1;
  min-height: 0;
  border-left: 3px solid #d9a441;
}

.watch-prox-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 8px;
}

.watch-prox-chip {
  display: inline-flex;
  align-items: baseline;
  gap: 7px;
  border: 1px solid var(--border);
  border-radius: 7px;
  background: rgba(217, 164, 65, 0.08);
  color: var(--text);
  padding: 5px 10px;
  cursor: pointer;
  font-size: 12px;
}

.watch-prox-chip:hover { border-color: #d9a441; background: rgba(217, 164, 65, 0.16); }
.watch-prox-chip strong { font-family: 'JetBrains Mono', monospace; font-size: 12px; }
.watch-prox-chip span { color: var(--text-dim); }
.watch-prox-chip em { color: var(--text-dim); font-style: normal; font-size: 10px; opacity: 0.75; }

.watch-prox-feed { margin-top: 8px; display: grid; gap: 3px; }

.watch-prox-row {
  color: var(--text-dim);
  font-size: 12px;
  line-height: 1.45;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.watch-fire-logos {
  display: grid;
  grid-template-columns: repeat(6, 38px);
  gap: 8px;
  align-items: center;
}

.watch-fire-logo {
  position: relative;
  width: 38px;
  height: 38px;
  display: inline-grid;
  place-items: center;
  border: 1px solid var(--border);
  border-radius: 7px;
  background: rgba(13, 15, 16, .52);
  color: var(--text);
}

.watch-fire-logo:hover { border-color: var(--border-bright); }
.watch-fire-logo .watch-logo-wrap,
.watch-fire-logo .watch-logo,
.watch-fire-logo .watch-logo-fallback { width: 26px; height: 26px; }

.watch-fire-logo > span:last-child {
  position: absolute;
  right: -5px;
  bottom: -5px;
  min-width: 16px;
  height: 16px;
  display: grid;
  place-items: center;
  border: 1px solid var(--border);
  border-radius: 999px;
  background: var(--bg-elevated);
  color: var(--text-muted);
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
}

.watch-alert-beacon {
  display: grid;
  grid-template-columns: 96px minmax(0, 1fr) auto;
  gap: 12px;
  align-items: center;
}

.watch-alert-beacon.is-active.is-bull {
  border-color: rgba(127, 214, 156, .72);
  background: linear-gradient(180deg, rgba(23, 46, 30, .88), rgba(18,21,23,.95));
}

.watch-alert-beacon.is-active.is-bear {
  border-color: rgba(224, 126, 114, .72);
  background: linear-gradient(180deg, rgba(58, 24, 25, .88), rgba(18,21,23,.95));
}

.watch-beacon-copy {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.watch-beacon-copy strong {
  color: var(--text);
  font-family: 'Cinzel', serif;
  font-size: 18px;
  letter-spacing: 0;
}

.watch-beacon-copy em,
.watch-market-flow em {
  min-width: 0;
  color: var(--text-muted);
  font-size: 12px;
  font-style: normal;
  line-height: 1.35;
}

.watch-beacon-timer {
  color: var(--brass-bright);
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  text-transform: uppercase;
  white-space: nowrap;
}

.watch-market-flow {
  display: flex;
  flex-direction: column;
  gap: 5px;
}

.watch-market-flow strong {
  font-size: 16px;
  color: var(--text);
}

.watch-market-flow.is-bull strong { color: var(--positive-bright); }
.watch-market-flow.is-bear strong { color: var(--negative-bright); }
.watch-market-flow.is-bull { border-color: rgba(95, 179, 107, .5); }
.watch-market-flow.is-bear { border-color: rgba(224, 96, 95, .5); }

.watch-market-flow-stats {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
  margin-top: auto;
}

.watch-market-flow-stats span {
  min-width: 0;
  border: 1px solid var(--border);
  border-radius: 5px;
  background: rgba(13, 15, 16, .44);
  padding: 6px 8px;
}

.watch-market-flow-stats b,
.watch-market-flow-stats em {
  display: block;
  min-width: 0;
}

.watch-market-flow-stats b {
  color: var(--text);
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
}

.watch-market-flow-stats em {
  color: var(--text-dim);
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  text-transform: uppercase;
}

.watch-freshness.is-stale { color: var(--warn); }
.watch-freshness.is-degraded { color: var(--negative-bright); }

.watch-nav-strip {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin: 10px 0;
}

.watch-nav-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px;
}

.watch-nav-label {
  color: var(--text-dim);
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: .04em;
  margin-right: 2px;
}

.watch-nav-chip {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  border: 1px solid var(--border);
  border-radius: 999px;
  background: rgba(13, 15, 16, .52);
  color: var(--text);
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  padding: 3px 9px;
  cursor: pointer;
}

.watch-nav-chip:hover { border-color: var(--border-bright); background: var(--bg-elevated); }

.watch-nav-chip img {
  width: 16px;
  height: 16px;
  border-radius: 50%;
  object-fit: cover;
}

.watch-nav-add { display: inline-flex; align-items: center; gap: 4px; }

.watch-nav-add input {
  background: #0e1318;
  border: 1px solid #1d2832;
  border-radius: 8px;
  color: #e8eef2;
  font-size: 11px;
  padding: 4px 8px;
  width: 90px;
  text-transform: uppercase;
}

.watch-nav-add button {
  font-size: 11px;
  font-weight: 600;
  padding: 4px 9px;
  border-radius: 8px;
  border: 1px solid #1d2832;
  background: #121922;
  color: #8d9aa6;
  cursor: pointer;
}

.watch-nav-add button:hover { color: #e8eef2; border-color: #234; }

.watch-focus-shell { margin: 14px 0; }
.watch-focus {
  border: 1px solid rgba(183, 146, 78, .44);
  border-radius: 8px;
  background: rgba(23, 26, 29, .88);
  overflow: hidden;
}

.watch-focus-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 14px;
  padding: 14px;
  border-bottom: 1px solid var(--border);
}

.watch-focus-title {
  display: flex;
  align-items: center;
  gap: 10px;
}

.watch-focus-title h2 {
  margin: 0;
  font-family: 'Cinzel', serif;
  font-size: 28px;
  letter-spacing: 0;
}

.watch-focus-actions {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  flex-wrap: wrap;
}

/* v2026-07-02 (Watch nav P1.1): desk-watchlist toggle on the focus header */
.watch-focus-watch-btn {
  min-height: 32px;
  border-radius: 4px;
  border: 1px solid var(--border-bright);
  padding: 7px 12px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  cursor: pointer;
  background: var(--bg-panel);
  color: var(--text-muted);
}

.watch-focus-watch-btn.is-watched {
  background: linear-gradient(135deg, #D5B06B, #9B7435);
  color: #111;
  border-color: #D5B06B;
  font-weight: 800;
}

.watch-focus-watch-btn:disabled {
  opacity: 0.72;
  cursor: wait;
}

.watch-focus-tabs {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  gap: 6px;
  padding: 10px 12px;
  border-bottom: 1px solid var(--border);
  background: rgba(13, 15, 16, .32);
}

.watch-focus-tab {
  min-width: 0;
  min-height: 42px;
  border: 1px solid var(--border);
  border-radius: 5px;
  background: var(--bg-elev);
  color: var(--text-muted);
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: .08em;
  text-transform: uppercase;
}

.watch-focus-tab span {
  display: block;
  margin-top: 3px;
  color: var(--text-dim);
  font-size: 9px;
  letter-spacing: .02em;
}

.watch-focus-tab:hover,
.watch-focus-tab.is-active {
  color: var(--brass-bright);
  border-color: var(--border-bright);
  background: rgba(183, 146, 78, .10);
}

.watch-focus-tab.is-unavailable {
  opacity: .62;
  border-style: dashed;
}

.watch-focus-tab.is-stale span { color: var(--warn); }

.watch-focus-grid {
  display: grid;
  grid-template-columns: minmax(300px, .72fr) minmax(0, 1.28fr);
  gap: 12px;
  padding: 12px;
}

.watch-focus-summary,
.watch-focus-detail {
  min-width: 0;
  border: 1px solid rgba(109, 90, 54, .48);
  border-radius: 7px;
  background: rgba(13, 15, 16, .38);
  padding: 12px;
}

.watch-focus-section { min-width: 0; }

.watch-gamma-grid {
  display: grid;
  grid-template-columns: minmax(220px, .7fr) minmax(0, 1fr);
  gap: 12px;
}

.watch-gamma-mini {
  border: 1px solid var(--border);
  border-radius: 8px;
  background: #0b1014;
  padding: 8px;
}

.watch-gamma-mini svg {
  display: block;
  width: 100%;
  height: auto;
  min-height: 190px;
}

.watch-gamma-levels {
  border: 1px solid var(--border);
  border-radius: 8px;
  background: rgba(13, 15, 16, .36);
  padding: 8px 10px;
}

.watch-gamma-level-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 8px 0;
  border-top: 1px solid rgba(42, 46, 51, .82);
}

.watch-gamma-level-row:first-child { border-top: 0; }
.watch-gamma-level-row span { color: var(--text-muted); }
.watch-gamma-level-row span.is-call { color: #7FD69C; }
.watch-gamma-level-row span.is-put { color: #E07E72; }
.watch-gamma-level-row span.is-flip { color: #5fd0ff; }
.watch-gamma-level-row b {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  color: var(--text);
  font-size: 12px;
}
.watch-gamma-level-row i {
  border: 1px solid var(--border);
  border-radius: 5px;
  padding: 1px 5px;
  color: var(--text-dim);
  font-family: 'JetBrains Mono', monospace;
  font-size: 8px;
  font-style: normal;
}

@media (max-width: 1180px) {
  .watch-pulse-strip,
  .watch-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .watch-attention-strip,
  .watch-rail,
  .watch-inline-browser,
  .watch-focus-grid,
  .watch-gamma-grid { grid-template-columns: 1fr; }
  .watch-lens-tabs { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .watch-focus-tabs { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .watch-deck-list { grid-template-columns: 1fr; }
  .watch-flow-radar { grid-template-columns: 1fr; }
  .watch-pulse-wide { grid-column: span 2; }
  .watch-quiet-hero { grid-template-columns: minmax(230px, 0.7fr) minmax(0, 1fr); gap: 16px; }
  .watch-priority-stack { grid-column: 1 / -1; }
  .watch-beacon-visual { min-height: 210px; }
  .watch-alarm-metrics { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .watch-hero-grid { grid-template-columns: 1fr; }
  .watch-theme-board { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .watch-fire-logos { grid-template-columns: repeat(6, 38px); }
}

@media (max-width: 760px) {
  .watch-heading,
  .watch-controls { align-items: flex-start; justify-content: flex-start; }
  .watch-heading { flex-direction: column; }
  .watch-pulse-strip,
  .watch-attention-strip,
  .watch-rail,
  .watch-inline-browser,
  .watch-focus-grid,
  .watch-gamma-grid,
  .watch-detail-grid,
  .watch-grid,
  .watch-theme-board,
  .watch-lens-tabs,
  .watch-focus-tabs,
  .watch-deck-stats { grid-template-columns: 1fr; }
  .watch-source-header,
  .watch-lens-panel-head { flex-direction: column; }
  .watch-source-controls { justify-content: flex-start; }
  .watch-pulse-wide { grid-column: auto; }
  .watch-hero { padding: 16px; }
  .watch-hero.is-quiet { min-height: 0; }
  .watch-hero h2 { font-size: 24px; }
  .watch-quiet-hero { grid-template-columns: 1fr; }
  .watch-priority-stack { grid-column: auto; }
  .watch-quiet-main h2 { font-size: 30px; }
  .watch-beacon-visual { min-height: 180px; transform: scale(0.86); }
  .watch-hero-banner { grid-template-columns: 1fr; }
  .watch-alarm-metrics { grid-template-columns: 1fr; }
  .watch-fire-logos { grid-template-columns: repeat(4, 38px); }
  .watch-lane-item { grid-template-columns: 30px minmax(0, 1fr); }
  .watch-lane-meta { justify-self: start; grid-column: 2; }
  .watch-deck-row { grid-template-columns: 30px minmax(0, 1fr); }
  .watch-deck-side { justify-self: start; align-items: flex-start; grid-column: 2; }
  .watch-flow-row { grid-template-columns: 30px minmax(0, 1fr); }
  .watch-flow-fresh { justify-self: start; grid-column: 2; }
  .watch-flow-ladders { grid-template-columns: 1fr; }
}

/* Phase B — Schwab re-auth banner (desk-wide, owner-only). */
.schwab-reauth-banner {
  display: flex;
  gap: 0.6rem;
  align-items: baseline;
  padding: 0.55rem 1rem;
  font-size: 0.9rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  border-bottom: 2px solid transparent;
}
.schwab-reauth-banner .schwab-reauth-headline { text-transform: uppercase; }
.schwab-reauth-banner .schwab-reauth-detail { font-weight: 400; opacity: 0.92; }
.schwab-reauth-banner.critical {
  background: #3a0f12;
  color: #ff6b6b;
  border-bottom-color: #ff3b3b;
}
.schwab-reauth-banner.warning {
  background: #3a2c0f;
  color: #ffcc66;
  border-bottom-color: #e0a93b;
}

/* ── GH #55 plain-english alert callouts ─────────────────────── */
.alert-card-version-chip,
.alerts-detail-version-chip {
  display: inline-block;
  font-family: var(--mono, monospace);
  font-size: 0.7rem;
  padding: 1px 6px;
  margin-left: 6px;
  border: 1px solid #6D5A36;
  border-radius: 10px;
  color: #D5B06B;
  white-space: nowrap;
}
.alert-card-delivery,
.alerts-detail-delivery {
  display: inline-block;
  font-size: 0.68rem;
  padding: 1px 7px;
  margin-left: 6px;
  border-radius: 10px;
  background: #20242a;
  color: #9aa3ad;
}
.delivery-pos { color: #73B27B; }
.delivery-neg { color: #C8746B; }
.delivery-info { color: #D5B06B; }
.delivery-neutral { color: #9aa3ad; }

.alerts-detail-narrative {
  margin: 12px 0;
  padding: 12px 14px;
  background: #171A1D;
  border-left: 3px solid #D5B06B;
  line-height: 1.5;
  color: #d7dbe0;
}
/* Phase 3 (GH #61): decision brief WHY / THE TRADE / WATCH blocks */
.alerts-detail-brief { margin-top: 14px; display: grid; gap: 10px; }
.alerts-detail-brief-block { border-left: 2px solid rgba(255,255,255,0.12); padding-left: 10px; }
.alerts-detail-brief-eyebrow { font-size: 10px; letter-spacing: 0.14em; opacity: 0.55; text-transform: uppercase; margin-bottom: 2px; }
.alerts-detail-brief-text { font-size: 13px; line-height: 1.5; color: #d7dbe0; }
/* Counter-trend caution (2026-06-12): loud by design — never take a
   reversal trade thinking it's a momentum trade. */
.alerts-detail-brief-block-caution {
  border-left: 3px solid var(--warn);
  background: rgba(198, 138, 80, 0.10);
  padding: 8px 10px;
  border-radius: 0 4px 4px 0;
}
.alerts-detail-brief-block-caution .alerts-detail-brief-eyebrow {
  color: var(--warn); opacity: 1; font-weight: 700;
}
.alerts-detail-brief-block-caution .alerts-detail-brief-text {
  color: #e6c79a;
}
.alert-card-why { font-size: 11px; opacity: 0.65; margin-top: 4px; line-height: 1.35; color: #d7dbe0; }

/* ── Alerts structure overlay (2026-06-13) — where price sits on the daily
   support line + backtested odds + how-to-structure-it clue. ─────────────── */
.alert-card-structure {
  margin-top: 6px;
  padding: 6px 9px;
  border-left: 2px solid var(--text-dim);
  background: var(--bg-elev);
  border-radius: 3px;
  font-size: 12px;
  line-height: 1.4;
}
.alert-card-structure-tag { font-weight: 600; margin-right: 6px; color: var(--text-muted); }
.alert-card-structure-blurb { color: var(--text-muted); }
.alert-card-structure-trade { color: var(--text-dim); margin-top: 3px; font-style: italic; }
.alert-card-structure.structure-pos { border-left-color: var(--positive-bright); }
.alert-card-structure.structure-pos .alert-card-structure-tag { color: var(--positive-bright); }
.alert-card-structure.structure-neg { border-left-color: var(--negative-bright); }
.alert-card-structure.structure-neg .alert-card-structure-tag { color: var(--negative-bright); }
.alert-card-structure.structure-neutral { border-left-color: var(--brass); }
.alert-card-structure.structure-neutral .alert-card-structure-tag { color: var(--brass-bright); }

/* structure filter toggle bar */
.alerts-filter-bar {
  display: flex; align-items: center; justify-content: space-between;
  gap: 12px; margin: 8px 0 4px; padding: 6px 11px;
  background: var(--bg-panel);
  border: 1px solid var(--brass-deep);
  border-radius: 4px;
  font-size: 12px; color: var(--text-muted);
}
.alerts-filter-toggle { color: var(--brass-bright); font-weight: 600; white-space: nowrap; }
.alerts-filter-toggle:hover { text-shadow: 0 0 8px var(--brass-glow); }

.alerts-detail-thesis {
  margin: 8px 0 16px;
  padding: 10px 12px;
  background: #14171a;
  border: 1px dashed #3a4048;
  border-radius: 6px;
  font-size: 0.85rem;
  color: #9aa3ad;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.alerts-detail-thesis-label {
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-size: 0.7rem;
  color: #D5B06B;
}
.alerts-detail-thesis-version { font-style: italic; color: #7f8893; }

.alerts-detail-fqual {
  margin-left: 8px;
  font-size: 0.72rem;
  font-style: italic;
}
.qual-pos { color: #73B27B; }
.qual-neg { color: #C8746B; }
.qual-info { color: #D5B06B; }
.qual-neutral { color: #8a929c; }

/* income engine stripe (mirrors the other alert-card-engine-* accents) */
.alert-card-engine-income { border-left-color: #6FA8A0; }

/* ============================================================
   Gamma Map  (.gm-*)
   ============================================================ */
.gm-wrap{padding:18px clamp(12px,2vw,28px);}
.gm-head{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;flex-wrap:wrap;}
.gm-eyebrow{font-size:11px;letter-spacing:.28em;text-transform:uppercase;color:#586471;}
.gm-head h1{font-size:30px;margin:4px 0 0;display:flex;align-items:baseline;gap:10px;}
.gm-tenor-chip{font-size:13px;color:#ffce4f;font-weight:500;}
.gm-spot{font-size:18px;color:#ffce4f;font-weight:600;margin-left:8px;}
.gm-status{display:inline-flex;align-items:center;gap:7px;margin-top:8px;padding:4px 11px;border-radius:999px;font-size:11px;font-weight:600;letter-spacing:.08em;border:1px solid #1d2832;background:#0e1318;}
.gm-status-dot{width:8px;height:8px;border-radius:50%;background:#586471;display:inline-block;}
.gm-status.live{color:#27e07a;border-color:rgba(39,224,122,.4);}
.gm-status.live .gm-status-dot{background:#27e07a;box-shadow:0 0 6px rgba(39,224,122,.8);}
.gm-status.stale{color:#ffce4f;border-color:rgba(255,206,79,.4);}
.gm-status.stale .gm-status-dot{background:#ffce4f;}
.gm-status.closed{color:#8d9aa6;border-color:#1d2832;}
.gm-status.closed .gm-status-dot{background:#586471;}
.gm-status.premarket{color:#7eb8d4;border-color:rgba(126,184,212,.4);}
.gm-status.premarket .gm-status-dot{background:#7eb8d4;box-shadow:0 0 5px rgba(126,184,212,.6);}
.gm-logo{width:28px;height:28px;border-radius:6px;vertical-align:middle;margin-right:9px;background:#0e1318;}
.gm-tickers{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:6px;}
.gm-ticker{font-size:13px;font-weight:600;padding:5px 12px;border-radius:8px;border:1px solid #1d2832;color:#8d9aa6;text-decoration:none;}
.gm-ticker.on{color:#0b1014;background:#ffce4f;border-color:#ffce4f;}
.gamma-watchlist{display:flex;gap:.5rem;align-items:center;margin:.4rem 0;}
.gamma-watchlist #gw-add-form{display:flex;gap:.35rem;align-items:center;}
.gamma-watchlist #gw-input{background:#0e1318;border:1px solid #1d2832;border-radius:8px;color:#e8eef2;font-size:12px;padding:5px 9px;width:96px;text-transform:uppercase;}
.gamma-watchlist #gw-add-form button{font-size:12px;font-weight:600;padding:5px 11px;border-radius:8px;border:1px solid #1d2832;background:#121922;color:#8d9aa6;cursor:pointer;}
.gamma-watchlist #gw-add-form button:hover{color:#e8eef2;border-color:#234;}
.gamma-watchlist-chips{display:flex;gap:.35rem;flex-wrap:wrap;}
.gw-chip{background:#1b2330;border:1px solid #2c3a4f;border-radius:4px;padding:.1rem .4rem;font-size:.8rem;color:#e8eef2;}
.gw-chip button{background:none;border:none;color:#7a8aa0;cursor:pointer;margin-left:.25rem;}
.gw-chip button:hover{color:#ff3b52;}
.gm-tenors{display:flex;gap:6px;flex-wrap:wrap;}
.gm-tenor{font-size:12px;padding:6px 11px;border-radius:999px;border:1px solid #1d2832;color:#8d9aa6;text-decoration:none;}
.gm-tenor.on{color:#e8eef2;background:#121922;border-color:#234;}
.gm-regime{border:1px solid #1d2832;border-radius:12px;padding:12px 15px;margin:14px 0;}
.gm-regime b{margin-right:10px;}
.gm-regime-strong_pin,.gm-regime-mild_pin{border-color:rgba(39,224,122,.4);background:linear-gradient(90deg,rgba(39,224,122,.1),transparent);}
.gm-regime-strong_accelerant,.gm-regime-mild_accelerant{border-color:rgba(255,59,82,.45);background:linear-gradient(90deg,rgba(255,59,82,.12),transparent);}
.gm-grid{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:16px;}
@media(max-width:980px){.gm-grid{grid-template-columns:1fr;}}
.gm-card{background:linear-gradient(180deg,#0e1318,#0b1014);border:1px solid #1d2832;border-radius:16px;padding:12px;position:relative;}
.gm-rail-h{font-size:11px;letter-spacing:.18em;color:#586471;margin-bottom:8px;}
.gm-ladder-headline{font-weight:700;font-size:15px;margin-bottom:4px;}
.gm-ladder-text{font-size:12px;color:#8d9aa6;line-height:1.5;margin-bottom:10px;}
.gm-ladder-row{display:flex;justify-content:space-between;gap:8px;padding:6px 0;border-top:1px solid #141d26;font-size:12px;}
.gm-lr-flip.above{color:#27e07a;} .gm-lr-flip.below{color:#ff3b52;}
.gm-howto{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:14px;}
@media(max-width:760px){.gm-howto{grid-template-columns:1fr;}}
.gm-ht{border:1px solid #1d2832;border-radius:12px;padding:12px;font-size:12px;color:#8d9aa6;line-height:1.5;}
.gm-ht.g b{color:#27e07a;} .gm-ht.r b{color:#ff3b52;} .gm-ht.y b{color:#ffce4f;}
.gm-warming{padding:40px;text-align:center;color:#586471;}
/* --- warming-up sticky bar (auto-reload controls) --- */
.gm-warm-bar{position:fixed;bottom:0;left:0;right:0;z-index:200;
  background:#0b1014;border-top:1px solid #1d2832;
  display:flex;align-items:center;justify-content:center;gap:10px;
  padding:9px 16px;font-size:12px;color:#8d9aa6;}
.gm-warm-bar-txt{flex:1;text-align:center;max-width:480px;}
.gm-warm-btn{padding:4px 14px;border-radius:6px;border:1px solid #2a3a4a;
  background:#121922;color:#c8d4de;font-size:11px;cursor:pointer;
  letter-spacing:.04em;transition:background .15s;}
.gm-warm-btn:hover{background:#1a2938;color:#e8eef2;}
.gm-fresh{position:absolute;bottom:8px;right:14px;font-size:10px;color:#586471;letter-spacing:.04em;}
/* --- enrichment: banner badge, hover cursor, now-profile, levels --- */
.gm-regime-badge{display:inline-block;padding:2px 9px;border-radius:6px;font-size:11px;letter-spacing:.1em;background:#121922;border:1px solid #234;color:#e8eef2;}
.gm-hint{font-style:italic;letter-spacing:.02em;}
.gm-cursor{pointer-events:none;}
.gm-cap{pointer-events:all;}
.gm-now{margin-bottom:14px;}
.gm-now-clock{float:right;color:#ffce4f;font-size:11px;letter-spacing:0;font-weight:600;}
.gm-now svg{width:100%;height:auto;display:block;}
.gm-levels{margin-bottom:14px;}
.gm-level-row{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:7px 0;border-top:1px solid #141d26;font-size:12.5px;}
.gm-level-row:first-of-type{border-top:none;}
.gm-level-name{color:#8d9aa6;}
.gm-level-val{font-weight:600;color:#e8eef2;display:flex;align-items:center;gap:8px;}
.gm-c-ceiling{color:#27e07a;} .gm-c-flip{color:#5fd0ff;} .gm-c-floor{color:#ff3b52;}
.gm-tag{font-style:normal;font-size:9.5px;letter-spacing:.06em;padding:1px 6px;border-radius:5px;border:1px solid #1d2832;}
.gm-tag.fade{color:#27e07a;border-color:rgba(39,224,122,.4);}
.gm-tag.regime{color:#5fd0ff;border-color:rgba(95,208,255,.4);}
.gm-tag.break{color:#ff3b52;border-color:rgba(255,59,82,.4);}
/* Gamma map — daily trendline overlay (2026-06-15) */
.gm-tl-row .gm-level-name { color: #a98bff; }
.gm-tl-arrow { font-style: normal; margin-left: 6px; opacity: .85; }
.gm-tl-arrow[data-slope="up"]   { color: #27e07a; }
.gm-tl-arrow[data-slope="down"] { color: #ff3b52; }
.gm-tl-arrow[data-slope="flat"] { color: #8a93a0; }
.gm-tl-pct  { font-style: normal; margin-left: 6px; color: #c9cfd8; }
.gm-tl-dots { font-style: normal; margin-left: 6px; color: #a98bff; letter-spacing: 1px; font-size: 9px; }
/* Gamma Map hover tooltips (.gm-tip / .gm-tip-left) */
.gm-tip{position:relative;cursor:help;}
.gm-tip:hover::after{content:attr(data-gm-tip);position:absolute;left:0;top:125%;z-index:60;width:max-content;max-width:280px;background:#0e1318;border:1px solid #243240;border-radius:8px;padding:8px 10px;font-size:11.5px;line-height:1.45;color:#cdd7df;box-shadow:0 6px 20px rgba(0,0,0,.5);white-space:normal;pointer-events:none;}
.gm-tip-left:hover::after{left:auto;right:0;}
.alert-card-engine-text-income { color: #6FA8A0; }
/* ── Fused Board (Task 7) ─────────────────────────────── */
.desk-board-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px; }
.desk-card { border: 1px solid var(--line, #333); border-left-width: 4px; border-radius: 8px; padding: 10px 12px; cursor: pointer; }
.desk-card:hover { border-color: var(--brass, #b8975a); }
.desk-state-coherent_bull { border-left-color: #3fb950; }
.desk-state-coherent_bear { border-left-color: #f85149; }
.desk-state-directional_into_pin { border-left-color: #d29922; }
.desk-state-mixed { border-left-color: #8b949e; }
.desk-state-neutral { border-left-color: #8b949e; }
.desk-state-quiet { border-left-color: #30363d; }
.desk-state-bullish { border-left-color: #3fb950; }
.desk-state-bearish { border-left-color: #f85149; }
.desk-state-stale { border-left-color: #8b949e; }
.desk-state-untracked { border-left-color: #30363d; }
.desk-cached-tag { font-size: 0.75em; opacity: 0.65; font-weight: 400; }
.desk-card-top { display: flex; align-items: center; gap: 8px; }
.desk-logo { width: 20px; height: 20px; border-radius: 4px; }
.desk-state-label { text-transform: capitalize; font-weight: 600; margin-top: 6px; }
.desk-why { font-size: 0.85em; opacity: 0.85; margin-top: 4px; }
.desk-meta { font-size: 0.78em; opacity: 0.7; margin-top: 6px; }
.desk-board-head { display: flex; align-items: baseline; gap: 10px; margin: 6px 0 10px; }
.desk-tkr { font-weight: 700; }
.desk-spot { margin-left: auto; opacity: 0.85; font-size: 0.85em; }
.desk-mono { display: inline-flex; width: 20px; height: 20px; align-items: center; justify-content: center; border-radius: 4px; background: #30363d; font-size: 0.7em; }
/* Fused Board watchlist control (#80) */
.desk-wl { display: flex; gap: .5rem; align-items: center; flex-wrap: wrap; margin: .3rem 0 .6rem; }
.desk-wl #desk-wl-form { display: flex; gap: .35rem; align-items: center; }
.desk-wl #desk-wl-input { background: #0e1318; border: 1px solid #1d2832; border-radius: 8px; color: #e8eef2; font-size: 12px; padding: 5px 9px; width: 120px; text-transform: uppercase; }
.desk-wl #desk-wl-form button { font-size: 12px; font-weight: 600; padding: 5px 11px; border-radius: 8px; border: 1px solid #1d2832; background: #121922; color: #8d9aa6; cursor: pointer; }
.desk-wl #desk-wl-form button:hover { color: #e8eef2; border-color: #234; }
.desk-wl-chips { display: flex; gap: .35rem; flex-wrap: wrap; }
.desk-wl-chip { background: #1b2330; border: 1px solid #2c3a4f; border-radius: 4px; padding: .1rem .4rem; font-size: .8rem; color: #e8eef2; }
.desk-wl-chip .desk-wl-x { background: none; border: none; color: #7a8aa0; cursor: pointer; margin-left: .25rem; padding: 0; }
.desk-wl-chip .desk-wl-x:hover { color: #ff3b52; }

/* v2026-07-04 (enrichment #4, respaced per Brad): OI ladders, Watch focus Flow tab */
.oi-ladder-head { margin-top: 1.25rem; }
.oi-expiry { margin: 0.5rem 0 0.75rem; border: 1px solid rgba(255,255,255,0.07); border-radius: 6px; }
.oi-expiry summary { display: flex; justify-content: space-between; align-items: baseline; gap: 1rem; padding: 0.55rem 0.9rem; cursor: pointer; list-style: none; }
.oi-expiry summary::-webkit-details-marker { display: none; }
.oi-expiry-label { font-size: 0.78rem; letter-spacing: 0.08em; text-transform: uppercase; opacity: 0.9; }
.oi-expiry-meta { font-size: 0.72rem; opacity: 0.55; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.oi-ladder { width: 100%; max-width: 34rem; border-collapse: collapse; margin: 0 0.9rem 0.9rem; }
.oi-ladder th { text-align: right; font-size: 0.68rem; letter-spacing: 0.1em; text-transform: uppercase; opacity: 0.5; padding: 0.35rem 1.1rem 0.45rem; border-bottom: 1px solid rgba(255,255,255,0.08); }
.oi-ladder th:first-child { text-align: left; padding-left: 0.25rem; }
.oi-ladder td { text-align: right; padding: 0.28rem 1.1rem; font-variant-numeric: tabular-nums; min-width: 5.5rem; }
.oi-ladder td:first-child { text-align: left; padding-left: 0.25rem; }
.oi-ladder tr:nth-child(even) td { background: rgba(255,255,255,0.015); }
.oi-wall-call { color: var(--up, #3fae6a); font-weight: 600; }
.oi-wall-put { color: var(--down, #d05555); font-weight: 600; }
.oi-spot-row td { border-top: 1px dashed rgba(200,170,110,0.55); }
.oi-spot-tag { margin-left: 0.6rem; font-size: 0.62rem; letter-spacing: 0.12em; text-transform: uppercase; color: rgba(200,170,110,0.9); border: 1px solid rgba(200,170,110,0.4); border-radius: 3px; padding: 0.05rem 0.35rem; vertical-align: middle; }

/* v2026-07-04: P/C sentiment lean color (thresholds in oi_ladder.pcr_read) */
.oi-pcr-bull { color: var(--up, #3fae6a); font-weight: 600; }
.oi-pcr-bear { color: var(--down, #d05555); font-weight: 600; }

/* v2026-07-04: envelope-sourced spot marker on the focus summary */
.spot-age { font-style: normal; font-size: 0.68rem; opacity: 0.55; margin-left: 0.35rem; }

/* v2026-07-04: dealer-brief tenor chips on the Watch focus */
.db-tenor-chips { display: flex; gap: 0.4rem; margin: 0.35rem 0 0.75rem; flex-wrap: wrap; }
.db-tenor-chip { font-size: 0.7rem; letter-spacing: 0.08em; padding: 0.25rem 0.7rem; border-radius: 4px; border: 1px solid rgba(255,255,255,0.14); background: transparent; color: inherit; cursor: pointer; opacity: 0.65; }
.db-tenor-chip.is-active { opacity: 1; border-color: rgba(200,170,110,0.7); color: #e8c882; }

/* v2026-07-04: source tags -- 'live' (green) vs 'brief' (neutral) on focus values */
.spot-live { font-style: normal; font-size: 0.68rem; margin-left: 0.35rem; color: var(--up, #3fae6a); opacity: 0.85; }

/* v2026-07-04: futures playbook block */
.orb-breakout { color: var(--up, #3fae6a); }
.orb-breakdown { color: var(--down, #d05555); }
.orb-inside, .orb-forming { opacity: 0.75; }
