/* ============================================================================
 * Owner Modal v2 — Phase R3 (drawer shell + hero block)
 * ============================================================================
 * Spec: docs/specs/SCOUT-OWNER-MODAL-V2-BUILD-PLAN-2026-05-16.md §7 R3
 *
 * Scope: drawer chrome (header chips, action buttons, close) + hero (name,
 *        contacts, pinned section, stat columns). Body grid + pane content
 *        + call dock arrive in R4–R6.
 *
 * Tokens sourced from variables-v2.css (canonical). Local helper tokens
 * declared on .omv2 root only where no canonical match exists.
 * ============================================================================ */

.omv2-root {
  /* Local helpers (no canonical match in variables-v2.css) */
  --omv2-near-white:    oklch(0.992 0.003 200);   /* text-on-dark backgrounds */
  --omv2-surface-near-white: oklch(0.995 0.003 200);  /* drawer surface — banned to use pure #fff */
  --omv2-divider:       oklch(0.20 0.010 200 / 0.08);  /* hairline a touch lighter than --border */
  --omv2-shadow-drawer: -16px 0 48px oklch(0.20 0.010 200 / 0.18);
}

/* ── Drawer ──────────────────────────────────────────────────────────────── */
.omv2-drawer {
  position: fixed;
  top: 0; right: 0; bottom: 0;
  width: 880px;
  max-width: 100vw;
  background: var(--omv2-surface-near-white);
  border-left: 1px solid var(--color-glass-border);
  box-shadow: var(--omv2-shadow-drawer);
  display: flex;
  flex-direction: column;
  z-index: 1200;
  overflow: hidden;
  font-family: 'Geist Sans', -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
  color: var(--color-text-primary);
}

/* Shared confirmAction must sit above OMv2 / Quick Call drawers; otherwise
   dirty-close confirmations can render but be unclickable under #qc-host. */
#confirm-overlay.open {
  z-index: 1700;
}

.omv2-backdrop {
  position: fixed; inset: 0;
  background: oklch(0.20 0.010 200 / 0.12);
  z-index: 1199;
}

/* ── Header (chips + actions) ────────────────────────────────────────────── */
.omv2-header {
  display: flex; align-items: center; gap: 8px;
  padding: 10px 16px;
  background: var(--color-surface-1);
  border-bottom: 1px solid var(--omv2-divider);
  flex-shrink: 0;
}
.omv2-header-chips,
.omv2-header-actions {
  display: flex; align-items: center; gap: 6px;
}
.omv2-header-actions { margin-left: auto; }

.omv2-chip {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 4px 10px;
  border-radius: var(--radius-pill);
  font-size: 12px; line-height: 1;
  border: 1px solid var(--color-glass-border);
  background: var(--omv2-surface-near-white);
  color: var(--color-text-primary);
  cursor: pointer;
  white-space: nowrap;
  font-family: inherit;
}
.omv2-chip:hover { background: var(--color-surface-1); }
.omv2-chip svg { width: 12px; height: 12px; }
.omv2-chip-status   { background: var(--color-success); color: var(--omv2-near-white); border-color: transparent; }
.omv2-chip-reached  { background: var(--color-secondary); color: var(--omv2-near-white); border-color: transparent; }
/* V3-5: Header "Called" chip — per-status colors mirror the dock chip
   active-state mapping so the header pill reflects the outcome semantics.
   answered=green, no-answer=red, callback=teal, wrong-number=gray. */
.omv2-chip-called-answered { background: var(--color-success-muted); color: var(--color-success-text); border-color: oklch(0.50 0.13 155 / 0.30); font-weight: 500; }
.omv2-chip-called-noanswer { background: var(--color-error-muted);   color: var(--color-error);   border-color: oklch(0.50 0.18 25 / 0.30);  font-weight: 500; }
.omv2-chip-called-callback { background: var(--color-secondary-muted); color: var(--color-secondary-text); border-color: oklch(0.55 0.08 200 / 0.25); font-weight: 500; }
.omv2-chip-called-wrong    { background: var(--color-surface-2); color: var(--color-text-tertiary); border-color: transparent; font-weight: 500; }
.omv2-chip-lead-hot { background: var(--color-warning-muted); color: var(--color-warning-text); border-color: oklch(0.55 0.18 55 / 0.30); font-weight: 500; }
.omv2-chip-lead-cold{ background: oklch(0.55 0.10 230 / 0.10); color: oklch(0.50 0.10 230); border-color: oklch(0.55 0.10 230 / 0.30); font-weight: 500; }
.omv2-chip-project  { background: var(--color-secondary-muted); color: var(--color-secondary-text); border-color: oklch(0.55 0.08 200 / 0.25); }
/* S3 cross-reference chip: "On: list · agent" (informational — no chevron, no action) */
.omv2-chip-onlist   { background: rgba(41,128,132,.07); color: var(--color-secondary-text); border-color: rgba(41,128,132,.22); cursor: help; max-width: 200px; }
/* Step-6 review fix: the list+agent label is user data of unbounded length —
   unconstrained it inflated the header row and pushed the header actions
   (incl. Close) off-screen right. Full text stays in the title tooltip. */
.omv2-chip-onlist-text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.omv2-chip-deceased { background: var(--color-surface-2); color: var(--color-text-tertiary); border-color: transparent; }
.omv2-chip-sold     { background: var(--color-surface-2); color: var(--color-text-tertiary); border-color: transparent; }
/* Industry Pro — brass accent (display-only token; sparse and load-bearing) */
.omv2-chip-industrypro {
  background: oklch(0.72 0.12 80 / 0.12);
  color: oklch(0.45 0.12 80);
  border-color: oklch(0.72 0.12 80 / 0.32);
  font-weight: 500;
}

.omv2-btn {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 12px;
  border-radius: var(--radius-md);
  font-size: 12px; font-weight: 500; line-height: 1.2;
  cursor: pointer;
  border: 1px solid transparent;
  font-family: inherit;
}
.omv2-btn-primary { background: var(--color-secondary); color: var(--omv2-near-white); border-color: var(--color-secondary); }
.omv2-btn-primary:hover { background: var(--color-secondary-hover); }
.omv2-btn-ghost { background: var(--omv2-surface-near-white); color: var(--color-text-primary); border-color: var(--color-glass-border-strong); }
.omv2-btn-ghost:hover { background: var(--color-surface-1); }
.omv2-btn svg { width: 13px; height: 13px; }

.omv2-icon-btn {
  width: 28px; height: 28px;
  border: 1px solid transparent;
  background: transparent;
  border-radius: var(--radius-md);
  display: inline-flex; align-items: center; justify-content: center;
  color: var(--color-text-secondary);
  cursor: pointer;
  font-family: inherit;
}
.omv2-icon-btn:hover { background: var(--color-surface-1); color: var(--color-text-primary); }
.omv2-icon-btn svg { width: 16px; height: 16px; }

/* ── Chip dropdown popover ───────────────────────────────────────────────── */
.omv2-popover {
  position: absolute;
  background: var(--omv2-surface-near-white);
  border: 1px solid var(--color-glass-border-strong);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-overlay);
  z-index: 1300;
  min-width: 160px;
  padding: 4px;
  font-family: inherit;
}
.omv2-popover-item {
  display: flex; align-items: center; gap: 8px;
  padding: 8px 10px;  /* P3-7: even-spacing (was 7px) */
  border-radius: var(--radius-sm);
  font-size: 13px;
  color: var(--color-text-primary);
  cursor: pointer;
  background: transparent;
  border: none;
  width: 100%; text-align: left;
  font-family: inherit;
}
.omv2-popover-item:hover { background: var(--color-surface-1); }
.omv2-popover-item.on { background: var(--color-secondary-muted); color: var(--color-secondary-text); font-weight: 500; }
.omv2-popover-item .swatch {
  width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0;
}
.omv2-popover-divider {
  height: 1px;
  background: var(--omv2-divider);
  margin: 4px 0;
}

/* ── Hero ────────────────────────────────────────────────────────────────── */
.omv2-hero {
  padding: 18px 28px 18px;
  border-bottom: 1px solid var(--omv2-divider);
  flex-shrink: 0;
}
/* Prefix with :root[data-v2="1"] so this rule (specificity 0,3,0) wins over
   variables-v2.css's `:root[data-v2="1"] h1` (0,2,1) which would otherwise
   force Geist Sans body font on the <h1 class="omv2-hero-name"> markup. */
:root[data-v2="1"] .omv2-hero-name,
.omv2-hero-name {
  margin: 0;
  font-family: 'Newsreader', Georgia, serif;
  font-style: normal;
  font-weight: 600;
  font-size: 28px;
  line-height: 1.15;
  letter-spacing: -0.015em;
  color: var(--color-text-primary);
}
.omv2-hero-contacts {
  margin-top: 8px;
  display: flex; flex-wrap: wrap;
  column-gap: 22px; row-gap: 4px;
  font-size: 13px;
}
.omv2-hc { display: inline-flex; align-items: center; gap: 8px; color: var(--color-text-primary); }
.omv2-hc svg { width: 13px; height: 13px; color: var(--color-text-secondary); flex-shrink: 0; }
.omv2-hc .v { font-family: 'JetBrains Mono', monospace; font-variant-numeric: tabular-nums; }
.omv2-hc .v.phone { font-weight: 500; }
.omv2-hc .m { font-size: 11px; color: var(--color-text-secondary); font-family: 'JetBrains Mono', monospace; }
.omv2-hc.muted .v { color: var(--color-text-tertiary); font-style: italic; }

/* Pinned-note section — 2026-05-25 restructured as 2-column grid.
   Horizontal divider at the TOP separates this section from owner-details
   above; a VERTICAL divider runs between the two columns. Left = pinned
   note / "+ Pin a note" CTA. Right = last-call quick reference. */
.omv2-hero-pinned {
  margin-top: 14px;
  padding: 12px 0 0;
  border-top: 1px solid var(--omv2-divider);
  display: grid;
  grid-template-columns: auto 1fr auto;
  column-gap: 16px;
  align-items: start;
}
.omv2-hero-pinned[hidden] { display: none; }
.omv2-hero-pinned-grid {
  grid-template-columns: 1fr 1fr;
  column-gap: 0;
}
.omv2-pinned-col {
  display: flex; flex-direction: column;
  min-width: 0;
  padding: 0 16px;
}
.omv2-pinned-col-left { padding-left: 0; }
.omv2-pinned-col-right {
  padding-right: 0;
  border-left: 1px solid var(--omv2-divider);
}
.omv2-pinned-meta-empty {
  font-size: 11px;
  color: var(--color-text-tertiary);
  font-style: italic;
}
.omv2-pinned-label {
  display: inline-flex; align-items: center; gap: 4px;  /* P3-7: even-spacing (was 5px) */
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--color-text-secondary);  /* P1-12 s2: was brass --color-accent (2.5:1 at 10px) — AA legible neutral */
  font-weight: 500;
  padding-top: 3px;
}
.omv2-pinned-label svg { width: 11px; height: 11px; fill: var(--color-text-secondary); }
.omv2-pinned-content { display: flex; flex-direction: column; min-width: 0; }
.omv2-pinned-body {
  font-family: 'Newsreader', Georgia, serif;
  font-style: italic;
  font-size: 14px;
  color: var(--color-text-primary);
  line-height: 1.5;
}
.omv2-pinned-meta {
  display: flex; align-items: center;
  gap: 22px;
  font-family: 'JetBrains Mono', monospace;
  flex-wrap: wrap;
}
/* In the new 2-col grid, the meta column does NOT need a horizontal top
   border (the vertical divider on the left handles separation). Only
   restore the top border when meta appears inside the legacy single-col
   layout — i.e. when it's NOT a direct child of .omv2-pinned-col-right. */
.omv2-pinned-content > .omv2-pinned-meta {
  margin-top: 10px;
  padding-top: 8px;
  border-top: 1px solid var(--omv2-divider);
}
.omv2-pinned-meta:empty { display: none; }
.omv2-pinned-meta-item { display: inline-flex; align-items: center; gap: 6px; }
.omv2-pinned-meta-l {
  font-size: 10px; letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--color-text-tertiary);
}
.omv2-pinned-meta-v {
  font-size: 12px; font-variant-numeric: tabular-nums;
  color: var(--color-text-primary);
}
.omv2-pinned-meta-rel { font-size: 11px; color: var(--color-text-secondary); }
.omv2-pinned-meta-outcome {
  display: inline-block;
  padding: 1px 6px;
  border-radius: var(--radius-pill);
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.04em;
}
.omv2-pinned-meta-outcome.answered { background: var(--color-success-muted); color: var(--color-success-text); }
.omv2-pinned-meta-outcome.no-answer { background: var(--color-error-muted); color: var(--color-error); }
.omv2-pinned-actions { display: flex; gap: 2px; }
.omv2-pinned-actions .omv2-icon-btn { width: 24px; height: 24px; }
.omv2-pinned-actions .omv2-icon-btn svg { width: 13px; height: 13px; }

/* Stat columns — bigger, with strong top hairline + vertical dividers */
.omv2-hero-stats {
  margin-top: 16px;
  padding-top: 16px;
  border-top: 1px solid var(--color-glass-border-strong);
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 0;
  container-type: inline-size;
  container-name: omv2-stats;
}
.omv2-hero-stat { padding: 0 20px; border-right: 1px solid var(--omv2-divider); }
.omv2-hero-stat:first-child { padding-left: 0; }
.omv2-hero-stat:last-child { padding-right: 0; border-right: none; }

/* ── S4/S5 asset-granularity: Closed / Pipeline / Available split ── */
.omv2-hero-split {
  margin-top: 12px;
  display: flex;
  flex-wrap: wrap;
  gap: 6px 14px;
  font-size: 11px;
  color: var(--color-text-tertiary);
}
.omv2-split-item b {
  font-family: 'JetBrains Mono', monospace;
  font-variant-numeric: tabular-nums;
  font-weight: 600;
  margin-left: 4px;
}
.omv2-split-closed b { color: var(--color-money, var(--color-success)); }
.omv2-split-pipeline b { color: var(--color-secondary); }
.omv2-split-available b { color: var(--color-text-secondary); }
.omv2-split-declined b { color: var(--color-text-tertiary); }

/* per-asset disposition pill (property card head) */
.omv2-disp-pill {
  margin-left: 8px;
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  padding: 2px 6px;
  border-radius: 4px;
  white-space: nowrap;
  vertical-align: middle;
  border: 1px solid transparent;
}
.omv2-disp-closed { color: var(--color-success-text); background: rgba(34,153,84,.10); border-color: rgba(34,153,84,.22); }
.omv2-disp-negotiating { color: var(--color-secondary-text); background: rgba(41,128,132,.10); border-color: rgba(41,128,132,.22); }
.omv2-disp-under-psa { color: var(--color-text-secondary); background: rgba(204,156,66,.10); border-color: rgba(204,156,66,.25); }
.omv2-disp-declined { color: var(--color-text-tertiary); background: rgba(120,130,140,.10); border-color: rgba(120,130,140,.2); }
.omv2-disp-prospect { color: var(--color-text-tertiary); border-color: var(--omv2-divider); }

/* per-asset pipeline actions */
.omv2-prop-actions { display: flex; gap: 6px; margin-top: 8px; }
.omv2-prop-action-btn {
  font-size: 10px;
  font-weight: 600;
  color: var(--color-secondary);
  background: none;
  border: 1px solid rgba(41,128,132,.25);
  border-radius: 5px;
  padding: 3px 8px;
  cursor: pointer;
}
.omv2-prop-action-btn:hover { background: rgba(41,128,132,.06); }
.omv2-prop-action-muted { color: var(--color-text-tertiary); border-color: var(--omv2-divider); }
.omv2-prop-action-muted:hover { background: rgba(120,130,140,.06); }
.omv2-hero-stat-l {
  display: block;
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--color-text-tertiary);
  font-family: 'JetBrains Mono', monospace;
  margin-bottom: 6px;
}
.omv2-hero-stat-v {
  display: block;
  font-family: 'JetBrains Mono', monospace;
  font-variant-numeric: tabular-nums;
  font-size: 30px;
  font-weight: 600;
  color: var(--color-text-primary);
  letter-spacing: -0.02em;
  line-height: 1.0;
}
.omv2-hero-stat-v.money { color: var(--color-money); }
.omv2-hero-stat-v .compact { display: none; }
@container omv2-stats (max-width: 540px) {
  .omv2-hero-stat-v .full { display: none; }
  .omv2-hero-stat-v .compact { display: inline; }
}

/* ── Body grid placeholder (R4/R5 populate) ──────────────────────────────── */
.omv2-body-grid {
  flex: 1;
  display: grid;
  grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr);
  border-bottom: 1px solid var(--omv2-divider);
  overflow: hidden;
  min-height: 0;
}
.omv2-pane {
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: 0 24px 18px;
  min-height: 0;
}
/* Activity pane has a sticky-bottom add-note row that handles its own
   bottom padding — drop the pane's bottom padding so the sticky row is
   flush with the pane edge. */
.omv2-pane-activity { padding-bottom: 0; }
.omv2-pane-properties { background: var(--omv2-surface-near-white); }
.omv2-pane-activity {
  background: var(--color-base);
  border-left: 1px solid var(--omv2-divider);
  display: flex;
  flex-direction: column;
}
/* events list + empty state stretch to fill so the sticky add-note row
   sits flush with the visible bottom even when there are few events. */
.omv2-pane-activity .omv2-events,
.omv2-pane-activity .omv2-pane-empty {
  flex: 1 1 auto;
}
/* Pane label is an <h3> in markup; v2's :root[data-v2="1"] h3 rule
   sets font-size to var(--text-h3) and would override .omv2-pane-label
   on specificity. Prefix with :root[data-v2="1"] to win cleanly. */
:root[data-v2="1"] .omv2-pane-label,
.omv2-pane-label {
  position: sticky; top: 0;
  z-index: 5;
  margin: 0 -24px 12px;
  padding: 10px 24px;
  min-height: 42px;
  background: var(--color-surface-1);
  border-bottom: 1px solid var(--color-glass-border);
  display: flex; align-items: center; justify-content: space-between;
  gap: 12px;
  font-size: 13px; font-family: 'Geist Sans', -apple-system, system-ui, sans-serif;
  letter-spacing: normal; text-transform: none;
  line-height: 1.3;
  color: var(--color-text-primary);
  font-weight: 600;
}
.omv2-pane-label .ct { color: var(--color-text-tertiary); font-weight: 400; margin-left: 4px; font-variant-numeric: tabular-nums; }
.omv2-pane-empty {
  padding: 32px 0; text-align: center;
  color: var(--color-text-secondary);
  font-size: 13px;
}
.omv2-pane-empty .label {
  display: block;
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px; letter-spacing: 0.06em; text-transform: uppercase;
  color: var(--color-text-tertiary);
  margin-bottom: 6px;
}

/* ── R4: Pane label controls (sort toggle + add button) ──────────────────── */
.omv2-pane-label .actions {
  display: flex; align-items: center; gap: 6px;
}
.omv2-sort-toggle, .omv2-add-prop {
  background: transparent;
  border: 1px solid var(--color-glass-border);
  color: var(--color-text-secondary);
  width: 22px; height: 22px;
  border-radius: var(--radius-md);
  cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
  flex-shrink: 0;
  font-family: inherit;
}
.omv2-sort-toggle:hover { background: var(--color-surface-1); color: var(--color-text-primary); }
.omv2-add-prop:hover { background: var(--color-secondary); color: var(--omv2-near-white); border-color: var(--color-secondary); }
.omv2-sort-toggle svg, .omv2-add-prop svg { width: 12px; height: 12px; }

/* ── R4: Property cards ──────────────────────────────────────────────────── */
.omv2-prop-list { display: flex; flex-direction: column; }
.omv2-prop {
  padding: 12px 0;
  border-bottom: 1px solid var(--omv2-divider);
  position: relative;
}
.omv2-prop:last-child { border-bottom: none; }
.omv2-prop:hover { background: oklch(0.99 0.003 200); margin-inline: -12px; padding-inline: 12px; border-radius: 6px; }
.omv2-prop-head {
  display: flex; align-items: flex-start; justify-content: space-between;
  gap: 12px;
}
.omv2-prop-title { min-width: 0; flex: 1; }
.omv2-prop-name {
  font-size: 15px; font-weight: 600;
  color: var(--color-text-primary);
  line-height: 1.3;
  word-break: break-word;
  display: inline;
}
.omv2-prop-info-btn {
  display: inline-flex; align-items: center; justify-content: center;
  width: 22px; height: 22px;
  margin-left: 8px;
  vertical-align: middle;
  background: var(--color-secondary-muted);
  border: 1px solid oklch(0.55 0.08 200 / 0.25);
  color: var(--color-secondary);
  cursor: pointer;
  border-radius: 50%;
  transition: background 120ms, color 120ms;
}
.omv2-prop-info-btn:hover { background: var(--color-secondary); color: var(--omv2-near-white); border-color: var(--color-secondary); }
.omv2-prop-info-btn svg { width: 14px; height: 14px; }
.omv2-prop-trash {
  display: none;
  width: 26px; height: 26px;
  border-radius: var(--radius-md);
  border: 1px solid var(--color-glass-border);
  background: var(--omv2-surface-near-white);
  color: var(--color-text-secondary);
  align-items: center; justify-content: center;
  cursor: pointer;
  flex-shrink: 0;
  transition: color 120ms, border-color 120ms, background 120ms;
}
.omv2-drawer.edit-mode .omv2-prop-trash { display: inline-flex; }
.omv2-prop-trash:hover { color: var(--color-error); border-color: var(--color-error); background: var(--color-error-muted); }
.omv2-prop-trash svg { width: 14px; height: 14px; }

/* Equation: NRA × $/NRA cap = total (inline) */
.omv2-prop-eq {
  display: grid;
  grid-template-columns: max-content max-content max-content minmax(72px, 1fr) max-content max-content;
  align-items: baseline;
  column-gap: 8px;
  row-gap: 4px;
  margin-top: 10px;
  font-family: 'JetBrains Mono', monospace;
  font-variant-numeric: tabular-nums;
  min-width: 0;
}
.omv2-eq-term { display: inline-flex; align-items: baseline; gap: 4px; white-space: nowrap; }
.omv2-eq-term .v { font-size: 14px; font-weight: 500; color: var(--color-text-secondary); }
.omv2-eq-term .u { font-size: 10px; letter-spacing: 0.05em; text-transform: uppercase; color: var(--color-text-tertiary); }
.omv2-eq-op { color: var(--color-text-tertiary); font-size: 14px; user-select: none; white-space: nowrap; }
.omv2-eq-cap {
  color: var(--color-text-tertiary);
  font-size: 11px;
  letter-spacing: 0.02em;
  display: block;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.omv2-eq-cap.over { color: var(--color-error); font-weight: 500; }
.omv2-eq-cap-stack {
  display: inline-flex; flex-direction: column;
  gap: 2px;
  align-self: baseline;
  min-width: 0;
}
.omv2-eq-rhs { margin-left: 0; justify-self: end; white-space: nowrap; }
.omv2-eq-total {
  color: var(--color-money);
  font-weight: 600;
  font-size: 16px;
  letter-spacing: 0;
  white-space: nowrap;
}

.omv2-rate-wrap {
  display: inline-flex; align-items: center;
  border: 1px solid var(--color-glass-border-strong);
  border-radius: var(--radius-md);
  overflow: hidden;
  background: var(--omv2-surface-near-white);
  transition: border-color 120ms;
}
.omv2-rate-wrap:focus-within { border-color: var(--color-secondary); }
.omv2-rate-wrap.saving { border-color: var(--color-warning); opacity: 0.7; }
.omv2-rate-wrap.error { border-color: var(--color-error); }
.omv2-rate-input {
  width: 76px;
  border: none; background: transparent;
  padding: 4px 4px 4px 8px;  /* P3-7: even-spacing (was 3px vertical) */
  font-family: 'JetBrains Mono', monospace;
  font-variant-numeric: tabular-nums;
  font-size: 13px; font-weight: 500;
  color: var(--color-money);
  text-align: right;
}
/* Suppress the global input:focus-visible halo from layout.css /
   theme-light.css / variables-v2.css — for inline-editable inputs
   sitting inside a visible wrap (.omv2-rate-wrap), the wrap's
   focus-within border change is the focus affordance. Doubling with
   the global halo makes it look like two stacked boxes (user-reported
   2026-05-16). Specificity-boosted with :root[data-v2="1"] prefix to
   beat the equally-prefixed :focus-visible rule in variables-v2.css. */
:root[data-v2="1"] .omv2-rate-input:focus,
:root[data-v2="1"] .omv2-rate-input:focus-visible,
.omv2-rate-input:focus,
.omv2-rate-input:focus-visible { outline: none !important; box-shadow: none !important; }
:root[data-v2="1"] .omv2-nra-input:focus,
:root[data-v2="1"] .omv2-nra-input:focus-visible,
.omv2-nra-input:focus,
.omv2-nra-input:focus-visible { outline: none !important; box-shadow: none !important; border-color: var(--color-secondary); }
:root[data-v2="1"] .omv2-interest-input:focus,
:root[data-v2="1"] .omv2-interest-input:focus-visible,
.omv2-interest-input:focus,
.omv2-interest-input:focus-visible { outline: none !important; box-shadow: none !important; border-color: var(--color-secondary); }
.omv2-rate-suf {
  padding: 3px 8px 3px 0;
  font-size: 10px;
  color: var(--color-text-secondary);
  font-family: 'JetBrains Mono', monospace;
}

/* Note: removed `omv2-prop-cols / -col / -col--offer / -col--cap / -foot*`
   CSS that supported the deviant column rebuild. The card renders the
   v14 inline equation again via the pre-existing `.omv2-prop-eq` rules
   higher up in this file. */

/* Edit-mode NRA + interest_pct editable inputs.
   - NRA input replaces the static `.omv2-eq-term .v` display via JS swap
     in handleEditToggle. Rendered only while drawer.classList contains
     `edit-mode`.
   - Interest row is hidden by default and revealed in edit-mode so the
     non-edit view stays compact (interest is also viewable via the (i)
     info popover when not editing).
   Cap chip remains read-only — agents cannot edit caps. */
.omv2-nra-input {
  width: 72px;
  border: 1px solid var(--color-glass-border);
  border-radius: var(--radius-sm);
  background: var(--omv2-surface-near-white);
  padding: 3px 6px;
  font-family: 'JetBrains Mono', monospace;
  font-variant-numeric: tabular-nums;
  font-size: 13px; font-weight: 500;
  color: var(--color-text);
  text-align: right;
  transition: border-color 120ms;
}
.omv2-nra-input:focus { outline: none; border-color: var(--color-secondary); }
.omv2-nra-input.omv2-input-err { border-color: var(--color-error); }

.omv2-prop-interest {
  display: none;
  align-items: center;
  gap: 8px;
  margin-top: 6px;
  padding: 4px 0 0;
  font-size: 11px;
  font-family: 'JetBrains Mono', monospace;
  color: var(--color-text-secondary);
}
.omv2-drawer.edit-mode .omv2-prop-interest { display: flex; }
.omv2-prop-interest-label {
  font-size: 9px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--color-text-tertiary);
  flex-shrink: 0;
}
.omv2-prop-interest-val {
  font-variant-numeric: tabular-nums;
  color: var(--color-text);
  font-weight: 500;
}
.omv2-prop-interest-unit { color: var(--color-text-tertiary); }
.omv2-interest-input {
  width: 110px;
  border: 1px solid var(--color-glass-border);
  border-radius: var(--radius-sm);
  background: var(--omv2-surface-near-white);
  padding: 3px 6px;
  font-family: 'JetBrains Mono', monospace;
  font-variant-numeric: tabular-nums;
  font-size: 12px;
  color: var(--color-text);
  text-align: right;
  transition: border-color 120ms;
}
.omv2-interest-input:focus { outline: none; border-color: var(--color-secondary); }
.omv2-interest-input.omv2-input-err { border-color: var(--color-error); }

/* Info popover (R4) — same chrome as chip popover but wider */
.omv2-info-popover {
  position: absolute;
  background: var(--omv2-surface-near-white);
  border: 1px solid var(--color-glass-border-strong);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-overlay);
  z-index: 1300;
  min-width: 240px;
  padding: 10px 12px;
  font-family: inherit;
  font-size: 12px;
}
.omv2-info-popover-title {
  font-size: 10px; font-family: 'JetBrains Mono', monospace;
  letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--color-text-tertiary);
  margin-bottom: 8px;
}
.omv2-info-popover-row {
  display: flex; justify-content: space-between; align-items: baseline;
  padding: 4px 0;
  font-size: 12px;
  border-bottom: 1px solid var(--omv2-divider);
}
.omv2-info-popover-row:last-child { border-bottom: none; }
/* Step 8 graph: "View tract →" — teal working interaction; lives in the
   popover because the property-name click-through was user-reverted 2026-05-24. */
.omv2-info-popover-tract {
  display: block; width: 100%; margin-top: 6px;
  background: none; border: none; padding: 6px 0 2px;
  border-top: 1px solid var(--omv2-divider);
  font-size: 11px; font-weight: 600; text-align: left;
  color: var(--color-secondary); cursor: pointer; font-family: inherit;
}
.omv2-info-popover-row .l { color: var(--color-text-secondary); }
.omv2-info-popover-row .v {
  font-family: 'JetBrains Mono', monospace;
  font-variant-numeric: tabular-nums;
  color: var(--color-text-primary);
  font-weight: 500;
}
.omv2-info-popover-row .v.muted { color: var(--color-text-tertiary); font-style: italic; font-weight: 400; }

/* ── Footer ──────────────────────────────────────────────────────────────── */
.omv2-footer {
  border-top: 1px solid var(--omv2-divider);
  padding: 10px 16px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  background: var(--omv2-surface-near-white);
  flex-shrink: 0;
}
/* 2026-05-25: Remove-owner button lives inside the footer now (was on its
   own row). Hidden until the drawer enters edit-mode. Dropdown opens upward
   so the Move-to-Trash / Delete-Permanently options fit cleanly above. */
.omv2-footer-remove-wrap { display: none; position: relative; }
.omv2-drawer.edit-mode .omv2-footer-remove-wrap { display: inline-flex; }
.omv2-footer-remove-btn {
  padding: 6px 10px;
  border: 1px solid var(--color-glass-border-strong);
  background: var(--omv2-surface-near-white);
  border-radius: var(--radius-md);
  font-size: 12px;
  color: var(--color-status-dnc, #b91c1c);
  cursor: pointer;
  display: inline-flex; align-items: center; gap: 6px;
  font-family: inherit;
}
.omv2-footer-remove-btn:hover {
  background: var(--color-status-dnc-bg, oklch(0.95 0.03 27));
}
.omv2-footer-remove-btn svg { width: 12px; height: 12px; }
.omv2-footer-btn {
  padding: 6px 12px;
  border: 1px solid var(--color-glass-border-strong);
  background: var(--omv2-surface-near-white);
  border-radius: var(--radius-md);
  font-size: 12px;
  color: var(--color-text-primary);
  cursor: pointer;
  display: inline-flex; align-items: center; gap: 6px;
  font-family: inherit;
}
.omv2-footer-btn svg { width: 12px; height: 12px; }
.omv2-footer-btn:hover { background: var(--color-surface-1); }
.omv2-footer-counter {
  display: flex; flex-direction: column; align-items: center;
  font-family: 'JetBrains Mono', monospace;
}
.omv2-footer-counter .queue {
  font-size: 10px; letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--color-text-tertiary);
}
.omv2-footer-counter .pos {
  font-size: 11px; color: var(--color-text-primary);
  font-variant-numeric: tabular-nums; margin-top: 1px;
}

/* ============================================================================
 * R5 — Activity pane (filter pills + timeline)
 * ============================================================================ */

/* Pane label hosts filter pills on the right when activity pane */
.omv2-pane-activity .omv2-pane-label {
  display: flex; align-items: center; justify-content: space-between;
  gap: 12px;
}
.omv2-pane-activity .omv2-pane-label > span:first-child {
  display: inline-flex; align-items: center; gap: 6px;
}
.omv2-pane-activity .omv2-pane-label .ct {
  font-weight: 400; color: var(--color-text-tertiary);
  font-size: 11px;
}

.omv2-act-pills {
  display: inline-flex; gap: 4px; align-items: center;
}
.omv2-act-pill {
  appearance: none;
  border: 1px solid var(--color-glass-border);
  background: transparent;
  color: var(--color-text-secondary);
  font: 500 11px/1 'Geist Sans', system-ui, sans-serif;
  letter-spacing: 0.02em;
  padding: 6px 8px;  /* P3-7: even-spacing (was 5px 9px) */
  border-radius: var(--radius-pill);
  cursor: pointer;
  transition: background 120ms ease, color 120ms ease, border-color 120ms ease;
  white-space: nowrap;
}
.omv2-act-pill:hover { background: var(--color-surface-1); }
.omv2-act-pill.active {
  background: oklch(0.55 0.08 200 / 0.10);
  border-color: oklch(0.55 0.08 200 / 0.35);
  color: var(--color-secondary-text);  /* P1-12 s2: active filter pill — teal on teal-tint, AA text */
}
.omv2-act-pill .ct {
  margin-left: 4px; font-variant-numeric: tabular-nums;
  color: var(--color-text-tertiary);
  font-weight: 400;
}
.omv2-act-pill.active .ct { color: var(--color-secondary-text); opacity: 0.85; }

/* K2.5 (2026-05-20): note-add input row at top of activity pane. Closes
 * the gap where OMv2 had no affordance to enter a note (v1 has it at
 * .om-notes-input-row). Sits between the H3 label and the events list;
 * always visible regardless of activity-filter selection. */
/* Add-note row: pinned to the bottom of the activity pane so it stays
   reachable while events scroll behind it. Span the full pane width by
   negating the pane's 24px horizontal padding (matches the
   .omv2-pane-label sticky-top pattern above). */
.omv2-note-add-row {
  position: sticky;
  bottom: 0;
  z-index: 5;
  margin: 12px -24px 0;
  padding: 10px 24px 12px;
  display: flex;
  gap: 8px;
  align-items: flex-end;
  background: var(--color-surface-1);
  border-top: 1px solid var(--color-glass-border);
}
.omv2-note-add-input {
  flex: 1;
  min-height: 36px;
  max-height: 120px;
  font-family: 'Geist Sans', system-ui, sans-serif;
  font-size: 12px;
  line-height: 1.4;
  color: var(--color-text-primary);
  background: var(--omv2-surface-near-white);
  border: 1px solid var(--color-glass-border-strong);
  border-radius: var(--radius-md);
  padding: 8px 10px;
  resize: vertical;
  outline: none;
  transition: border-color 0.12s, box-shadow 0.12s;
}
.omv2-note-add-input::placeholder {
  color: var(--color-text-tertiary);
  font-style: italic;
}
.omv2-note-add-input:focus {
  border-color: var(--color-secondary);
  box-shadow: 0 0 0 3px oklch(0.55 0.08 200 / 0.12);
}
.omv2-note-add-btn {
  flex-shrink: 0;
  white-space: nowrap;
}
.omv2-note-add-btn:disabled {
  opacity: 0.6;
  cursor: wait;
}

/* Event timeline list — 2026-05-25: activity-type icon removed so the
   event body uses the full pane width. Kind is communicated by the
   .omv2-event-kind text label + the outcome pill instead. */
.omv2-events {
  display: flex; flex-direction: column;
  padding: 6px 0 16px;
}
.omv2-event {
  display: flex;
  padding: 10px 0;
  border-bottom: 1px solid var(--omv2-divider);
}
.omv2-event:last-child { border-bottom: 0; }

.omv2-event-body {
  flex: 1 1 auto; min-width: 0;
}
.omv2-event-head {
  display: flex; align-items: center; gap: 8px;
  flex-wrap: wrap;
  margin-bottom: 2px;
}
.omv2-event-kind {
  font-size: 12px; font-weight: 600;
  color: var(--color-text-primary);
}
.omv2-event-outcome {
  display: inline-flex; align-items: center;
  font-size: 10px; font-weight: 600;
  letter-spacing: 0.04em; text-transform: uppercase;
  padding: 2px 8px;
  border-radius: var(--radius-pill);
  background: var(--color-surface-1);
  color: var(--color-text-secondary);
  border: 1px solid var(--color-glass-border);
}
.omv2-event-outcome.answered {
  background: oklch(0.65 0.13 145 / 0.12);
  color: oklch(0.42 0.13 145);
  border-color: oklch(0.65 0.13 145 / 0.30);
}
.omv2-event-outcome.no-answer {
  background: oklch(0.55 0.18 55 / 0.12);
  color: oklch(0.45 0.18 55);
  border-color: oklch(0.55 0.18 55 / 0.30);
}
.omv2-event-outcome.callback {
  background: oklch(0.55 0.08 200 / 0.12);
  color: var(--color-secondary);
  border-color: oklch(0.55 0.08 200 / 0.30);
}
.omv2-event-outcome.lead-hot {
  background: oklch(0.55 0.18 55 / 0.14);
  color: oklch(0.45 0.18 55);
  border-color: oklch(0.55 0.18 55 / 0.32);
}
.omv2-event-outcome.lead-cold {
  background: var(--color-surface-1);
  color: var(--color-text-secondary);
  border-color: var(--color-glass-border);
}

.omv2-event-ts {
  margin-left: auto;
  font: 400 11px/1 'JetBrains Mono', monospace;
  color: var(--color-text-tertiary);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.omv2-event-note {
  font-size: 13px; line-height: 1.45;
  color: var(--color-text-primary);
  margin-top: 2px;
  word-wrap: break-word;
  overflow-wrap: anywhere;
}
.omv2-event-note.empty {
  color: var(--color-text-tertiary); font-style: italic;
}

.omv2-event-meta {
  display: flex; gap: 12px; align-items: center;
  margin-top: 4px;
  font-size: 11px;
  color: var(--color-text-tertiary);
  flex-wrap: wrap;
}
.omv2-event-phone {
  display: inline-flex; align-items: center; gap: 4px;
  font: 500 11px/1 'JetBrains Mono', monospace;
  color: var(--color-text-secondary);
  font-variant-numeric: tabular-nums;
}
.omv2-event-phone svg { width: 11px; height: 11px; }
.omv2-event-user {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: 11px;
  color: var(--color-text-tertiary);
}
.omv2-event-user .dot {
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--color-text-tertiary);
}

/* Activity pane: empty state when filtered to zero */
.omv2-pane-activity .omv2-pane-empty {
  margin: 4px 12px 16px 12px;
}

/* ============================================================================
 * R6 — Floating call dock
 * ============================================================================ */
.omv2-dock {
  position: fixed;
  z-index: 1300;  /* above drawer (1200) */
  background: var(--omv2-surface-near-white);
  border: 1px solid var(--color-glass-border-strong);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-overlay);
  font-family: 'Geist Sans', -apple-system, system-ui, sans-serif;
  color: var(--color-text-primary);
  user-select: none;
}
.omv2-dock.dragging {
  transition: none;
  cursor: grabbing;
}
/* K2.7 (2026-05-20): brief attention-pulse when the hero "Log Call" button
   surfaces the dock. Production zero-calls Mon-Wed root cause was UX —
   users couldn't find the floating dock. The pulse plus the explicit
   primary-CTA button in the hero closes the discoverability gap. */
.omv2-dock.omv2-dock-attention {
  animation: omv2-dock-pulse 1.2s ease-out;
}
@keyframes omv2-dock-pulse {
  0%   { box-shadow: var(--shadow-overlay); }
  35%  { box-shadow: 0 0 0 4px oklch(0.55 0.08 200 / 0.35), var(--shadow-overlay); }
  100% { box-shadow: var(--shadow-overlay); }
}

/* ── Expanded state — form panel ───────────────────────────────────────── */
/* (Collapsed-state styles + omv2DockPulse keyframes removed 2026-05-25:
   user removed the dock-collapse capability — dock is always expanded.) */
/* 510px wide per v14 mockup so all 5 outcome pills fit on one row (was
   360px before; pills wrapped to a second line). */
.omv2-dock.expanded {
  width: 510px;
  display: flex; flex-direction: column;
}
/* Dock header per v14: grip · phone icon · "Logging call to" · phone select. */
.omv2-dock-head {
  display: flex; align-items: center; gap: 10px;
  padding: 10px 12px;
  border-bottom: 1px solid var(--omv2-divider);
  cursor: grab;
}
.omv2-dock-head.dragging,
.omv2-dock-head:active { cursor: grabbing; }
.omv2-dock-handle {
  display: inline-flex; align-items: center; justify-content: center;
  width: 14px; height: 14px;
  color: var(--color-text-tertiary);
  flex-shrink: 0;
}
.omv2-dock-handle svg { width: 14px; height: 14px; }
.omv2-dock-phone-ico {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 16px;
  height: 16px;
  color: var(--color-accent);
  flex-shrink: 0;
}
.omv2-dock-phone-ico svg {
  width: 14px;
  height: 14px;
  stroke-width: 1.75;
}
.omv2-dock-title {
  font-size: 11px; font-weight: 500; letter-spacing: 0.10em;
  text-transform: uppercase;
  font-family: 'JetBrains Mono', monospace;
  color: var(--color-text-secondary);
  flex-shrink: 0;
}
.omv2-dock-body {
  padding: 12px;
  display: flex; flex-direction: column; gap: 8px;
}

/* v14 dock-row: inline label + pills, 60px label column */
.omv2-dock-row {
  display: flex; align-items: center; gap: 8px;
}
.omv2-dock-row-l {
  font-size: 10px; font-weight: 500; letter-spacing: 0.08em;
  text-transform: uppercase;
  font-family: 'JetBrains Mono', monospace;
  color: var(--color-text-tertiary);
  width: 60px; flex-shrink: 0;
}

/* Phone selector (now lives in dock-head, not body) */
.omv2-dock-phone-wrap {
  display: flex; gap: 6px; align-items: center;
  margin-left: auto;
}
/* Phone-select: rendered as a button (not native <select>) so the open
   dropdown is a body-appended .omv2-popover under our control rather than
   the macOS-Chrome native option list. v14 places this inline in the dock
   header, sized ~200px. */
.omv2-dock-phone-select {
  appearance: none;
  display: inline-flex; align-items: center; justify-content: space-between; gap: 8px;
  border: 1px solid var(--color-glass-border-strong);
  background: var(--omv2-surface-near-white);
  border-radius: var(--radius-md);
  padding: 4px 8px;
  font: 500 13px/1.2 'JetBrains Mono', monospace;
  color: var(--color-text-primary);
  cursor: pointer;
  text-align: left;
  font-family: 'JetBrains Mono', monospace;
  font-variant-numeric: tabular-nums;
  min-width: 200px;
  max-width: 220px;
}
.omv2-dock-phone-select:hover { background: var(--color-surface-1); }
.omv2-dock-phone-label {
  flex: 1 1 auto;
  font: 500 12px/1.2 'JetBrains Mono', monospace;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.omv2-dock-phone-caret {
  flex-shrink: 0;
  width: 8px; height: 8px;
  border-right: 1.5px solid var(--color-text-tertiary);
  border-bottom: 1.5px solid var(--color-text-tertiary);
  margin-top: -2px;
  transform: rotate(45deg);
}
.omv2-dock-phone-select[aria-expanded="true"] .omv2-dock-phone-caret {
  margin-top: 2px;
  transform: rotate(-135deg);
}
.omv2-dock-phone-popover .omv2-popover-item {
  font: 500 12px/1.2 'JetBrains Mono', monospace;
  white-space: nowrap;
}
.omv2-dock-phone-popover .omv2-dock-phone-primary {
  margin-left: 6px;
  padding: 1px 6px;
  font-family: 'Geist Sans', system-ui, sans-serif;
  font-size: 9px; font-weight: 600;
  letter-spacing: 0.06em; text-transform: uppercase;
  color: var(--color-secondary);
  background: var(--color-secondary-muted);
  border-radius: var(--radius-pill);
}
.omv2-dock-phone-custom {
  border: 1px solid var(--color-glass-border-strong);
  background: var(--omv2-surface-near-white);
  border-radius: var(--radius-md);
  padding: 6px 10px;
  font: 500 12px/1.2 'JetBrains Mono', monospace;
  width: 100%;
  color: var(--color-text-primary);
}
.omv2-dock-phone-custom::placeholder { color: var(--color-text-tertiary); }
.omv2-dock-call-btn {
  appearance: none;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border: 1px solid var(--color-call-btn);   /* P1-12 s2: phone CTA = AA brass (was raw --color-accent, 2.46:1 w/ white) */
  background: var(--color-call-btn);
  color: var(--omv2-near-white);
  border-radius: var(--radius-md);
  padding: 6px 10px;
  font: 700 11px/1 'Geist Sans', system-ui, sans-serif;
  cursor: pointer;
  white-space: nowrap;
}
.omv2-dock-call-btn svg {
  width: 13px;
  height: 13px;
  stroke-width: 2;
}
.omv2-dock-timer {
  font: 500 11px/1 'JetBrains Mono', monospace;
  color: var(--color-text-secondary);
  white-space: nowrap;
}

/* Outcome + Lead chip groups */
.omv2-dock-chips {
  display: flex; flex-wrap: wrap; gap: 4px;
}
.omv2-dock-chip {
  appearance: none;
  border: 1px solid var(--color-glass-border);
  background: transparent;
  color: var(--color-text-secondary);
  font: 500 11px/1 'Geist Sans', system-ui, sans-serif;
  padding: 6px 10px;
  border-radius: var(--radius-pill);
  cursor: pointer;
  white-space: nowrap;
  transition: background 120ms ease, color 120ms ease, border-color 120ms ease;
}
.omv2-dock-chip:hover { background: var(--color-surface-1); }
/* v14 active-pill style: solid filled background + near-white text,
   matching `.opt.on` in the canonical mockup. Active state is a strong
   visual cue, not a subtle tint. */
.omv2-dock-chip.active {
  background: var(--color-secondary);
  border-color: var(--color-secondary);
  color: var(--omv2-near-white);
  font-weight: 500;
}
/* Answered → success green */
.omv2-dock-chip.active[data-value="answered"] {
  background: oklch(0.55 0.13 145);
  border-color: oklch(0.55 0.13 145);
  color: var(--omv2-near-white);
}
/* No answer + DNC flag → solid red (matches v14 .opt.no-answer.on / .opt.dnc.on) */
.omv2-dock-chip.active[data-value="no-answer"],
.omv2-dock-chip.active[data-value="dnc"] {
  background: oklch(0.55 0.20 25);
  border-color: oklch(0.55 0.20 25);
  color: var(--omv2-near-white);
}
/* Callback → solid teal (current secondary) */
.omv2-dock-chip.active[data-value="callback"] {
  background: var(--color-secondary);
  border-color: var(--color-secondary);
  color: var(--omv2-near-white);
}
/* Wrong # → muted grey */
.omv2-dock-chip.active[data-value="wrong-number"] {
  background: var(--color-text-tertiary);
  border-color: var(--color-text-tertiary);
  color: var(--omv2-near-white);
}
/* Lead Hot → solid amber */
.omv2-dock-chip.active[data-dock-action="lead"][data-value="hot"] {
  background: oklch(0.62 0.18 55);
  border-color: oklch(0.62 0.18 55);
  color: var(--omv2-near-white);
}
/* Lead Cold → solid cool blue */
.omv2-dock-chip.active[data-dock-action="lead"][data-value="cold"] {
  background: oklch(0.55 0.10 230);
  border-color: oklch(0.55 0.10 230);
  color: var(--omv2-near-white);
}
/* Lead None → solid muted grey */
.omv2-dock-chip.active[data-dock-action="lead"][data-value=""] {
  background: var(--color-text-tertiary);
  border-color: var(--color-text-tertiary);
  color: var(--omv2-near-white);
}

/* Callback date — inline appearance when outcome=callback */
.omv2-dock-callback {
  display: none;
}
.omv2-dock.outcome-callback .omv2-dock-callback {
  display: flex;
}
.ck-dock-dnc-reason {
  display: none;
}
.omv2-dock.flag-dnc-on .ck-dock-dnc-reason,
.qc-dock-inline.flag-dnc-on .ck-dock-dnc-reason {
  display: flex;
}
.ck-dock-dnc-input {
  min-width: 0;
}
.omv2-dock-cb-input {
  border: 1px solid var(--color-glass-border-strong);
  background: var(--omv2-surface-near-white);
  border-radius: var(--radius-md);
  padding: 6px 10px;
  font: 500 12px/1.2 'JetBrains Mono', monospace;
  color: var(--color-text-primary);
  width: 100%;
}

/* v14 note row: textarea + inline Cancel + Save buttons */
.omv2-dock-note-row {
  display: flex; align-items: center; gap: 8px;
  margin-top: 8px;
  padding: 8px 12px 12px;
  border-top: 1px solid var(--omv2-divider);
}
.omv2-dock-note {
  flex: 1;
  border: 1px solid var(--color-glass-border-strong);
  background: var(--omv2-surface-near-white);
  border-radius: var(--radius-md);
  padding: 7px 10px;
  font: 400 12px/1.4 'Geist Sans', system-ui, sans-serif;
  color: var(--color-text-primary);
  resize: none;
  min-height: 32px;
  max-height: 90px;
  font-family: inherit;
}
.omv2-dock-note::placeholder { color: var(--color-text-tertiary); }
.omv2-dock-note:focus,
.omv2-dock-phone-select:focus,
.omv2-dock-phone-custom:focus,
.omv2-dock-cb-input:focus {
  outline: 2px solid oklch(0.55 0.08 200 / 0.35);
  outline-offset: 1px;
  border-color: var(--color-secondary);
}
.omv2-dock-actions {
  display: flex; gap: 6px; align-items: center;
  flex-shrink: 0;
}

/* Footer kept as fallback for any legacy code path that still emits it */
.omv2-dock-foot {
  display: flex; gap: 6px; align-items: center;
  padding: 10px 12px;
  border-top: 1px solid var(--omv2-divider);
}
.omv2-dock-cancel {
  appearance: none; border: 1px solid var(--color-glass-border-strong);
  background: var(--omv2-surface-near-white);
  border-radius: var(--radius-md);
  padding: 6px 12px;
  font: 500 12px/1 'Geist Sans', system-ui, sans-serif;
  color: var(--color-text-secondary);
  cursor: pointer;
}
.omv2-dock-cancel:hover { background: var(--color-surface-1); }
.omv2-dock-save {
  margin-left: auto;
  appearance: none; border: 1px solid transparent;
  background: var(--color-secondary);
  color: var(--omv2-near-white);
  border-radius: var(--radius-md);
  padding: 7px 14px;
  font: 600 12px/1 'Geist Sans', system-ui, sans-serif;
  cursor: pointer;
}
.omv2-dock-save:hover { filter: brightness(0.95); }
.omv2-dock-save:disabled {
  background: var(--color-surface-1);
  color: var(--color-text-tertiary);
  cursor: not-allowed;
}

.omv2-dock-status {
  font-size: 11px;
  color: var(--color-text-tertiary);
  margin-right: 8px;
}
.omv2-dock-status.error { color: var(--color-error, oklch(0.50 0.16 25)); }

/* Tiny confirm modal for cancel-with-dirty-form */
.omv2-dock-confirm-backdrop {
  position: fixed; inset: 0;
  background: oklch(0.20 0.010 200 / 0.18);
  z-index: 1400;
  display: flex; align-items: center; justify-content: center;
}
.omv2-dock-confirm {
  background: var(--omv2-surface-near-white);
  border: 1px solid var(--color-glass-border-strong);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-overlay);
  max-width: 360px;
  padding: 20px;
  display: flex; flex-direction: column; gap: 12px;
}
.omv2-dock-confirm-title {
  font-size: 14px; font-weight: 600;
  color: var(--color-text-primary);
}
.omv2-dock-confirm-body {
  font-size: 13px; color: var(--color-text-secondary);
}
.omv2-dock-confirm-acts {
  display: flex; gap: 8px; justify-content: flex-end;
}

/* ============================================================================
 * R7 — Contacts collapsible section
 * ============================================================================ */
.omv2-hero-contacts-expand {
  appearance: none;
  background: transparent; border: none;
  margin-top: 6px;
  padding: 4px 6px 4px 2px;
  display: inline-flex; align-items: center; gap: 4px;
  font: 500 11px/1 'Geist Sans', system-ui, sans-serif;
  color: var(--color-secondary);
  cursor: pointer;
  border-radius: var(--radius-sm);
}
.omv2-hero-contacts-expand:hover { background: var(--color-surface-1); }
.omv2-hero-contacts-expand svg { width: 12px; height: 12px; transition: transform 160ms ease; }
.omv2-hero-contacts-expand[aria-expanded="true"] svg { transform: rotate(180deg); }

/* 2026-05-25: hero actions row pairs "View all contacts" with the new
   "Related parties (N)" button on a single line. Reclaims the row the
   standalone Related Parties section used to occupy. */
.omv2-hero-actions-row {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
  margin-top: 4px;
}
.omv2-hero-actions-row .omv2-hero-contacts-expand { margin-top: 0; }
.omv2-hero-relparties-btn {
  appearance: none;
  background: transparent; border: none;
  padding: 4px 6px 4px 2px;
  display: inline-flex; align-items: center; gap: 4px;
  font: 500 11px/1 'Geist Sans', system-ui, sans-serif;
  color: var(--color-secondary);
  cursor: pointer;
  border-radius: var(--radius-sm);
}
.omv2-hero-relparties-btn:hover { background: var(--color-surface-1); }
.omv2-hero-relparties-btn svg { width: 12px; height: 12px; transition: transform 160ms ease; }
.omv2-hero-relparties-btn[aria-expanded="true"] svg { transform: rotate(180deg); }
.omv2-relparties-count {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  font-variant-numeric: tabular-nums;
  color: var(--color-text-tertiary);
}

/* Popover anchored under the Related Parties button. Hidden by default
   via [hidden]; visibility toggled by omv2RelTogglePopover. */
.omv2-relparties-popover {
  margin-top: 8px;
  border: 1px solid var(--color-glass-border);
  border-radius: var(--radius-md);
  background: var(--omv2-surface-near-white);
  box-shadow: 0 8px 24px oklch(0.20 0.010 200 / 0.10);
  padding: 10px 12px;
  max-height: 320px;
  overflow-y: auto;
}
.omv2-relparties-popover[hidden] { display: none; }
.omv2-relparties-popover-hdr {
  display: flex; align-items: center; justify-content: space-between;
  gap: 8px;
  margin-bottom: 8px;
  padding-bottom: 6px;
  border-bottom: 1px solid var(--omv2-divider);
}
.omv2-relparties-popover-title {
  font: 600 11px/1 'JetBrains Mono', monospace;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--color-text-secondary);
}
.omv2-relparties-popover-add {
  appearance: none;
  background: var(--color-secondary); color: #fff;
  border: 0; border-radius: var(--radius-sm);
  padding: 4px 8px;
  font: 600 11px/1 'Geist Sans', sans-serif;
  cursor: pointer;
}
.omv2-relparties-popover-add:hover { filter: brightness(1.05); }

.omv2-contacts-full {
  margin-top: 8px;
  border-top: 1px solid var(--omv2-divider);
  padding-top: 8px;
  display: flex; flex-direction: column;
}
.omv2-contacts-section {
  margin-bottom: 6px;
}
.omv2-contacts-section-l {
  font: 600 10px/1 'Geist Sans', system-ui, sans-serif;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--color-text-tertiary);
  margin-bottom: 4px;
  display: block;
}
.omv2-contact-row {
  display: flex; align-items: center; gap: 8px;
  padding: 6px 4px;
  border-radius: var(--radius-sm);
  position: relative;
}
.omv2-contact-row:hover { background: var(--color-surface-1); }
.omv2-contact-icon {
  width: 18px; height: 18px;
  color: var(--color-text-tertiary);
  flex-shrink: 0;
  display: inline-flex; align-items: center; justify-content: center;
}
.omv2-contact-icon svg { width: 14px; height: 14px; }
.omv2-contact-val {
  flex: 1 1 auto; min-width: 0;
  font: 500 13px/1.3 'JetBrains Mono', monospace;
  color: var(--color-text-primary);
  word-break: break-word;
}
.omv2-contact-row.email .omv2-contact-val,
.omv2-contact-row.address .omv2-contact-val {
  font-family: 'Geist Sans', system-ui, sans-serif;
}
.omv2-contact-row.bad .omv2-contact-val {
  text-decoration: line-through;
  text-decoration-thickness: 1px;
  color: var(--color-text-tertiary);
}
.omv2-contact-flag {
  display: inline-flex; align-items: center;
  font: 600 9px/1 'Geist Sans', system-ui, sans-serif;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  padding: 2px 6px;
  border-radius: var(--radius-pill);
  background: oklch(0.55 0.18 55 / 0.12);
  color: oklch(0.45 0.18 55);
  border: 1px solid oklch(0.55 0.18 55 / 0.28);
}
.omv2-contact-flag.primary {
  background: oklch(0.55 0.08 200 / 0.10);
  color: var(--color-secondary);
  border-color: oklch(0.55 0.08 200 / 0.28);
}
.omv2-contact-actions {
  display: inline-flex; gap: 2px;
  opacity: 0;
  transition: opacity 120ms ease;
}
.omv2-contact-row:hover .omv2-contact-actions,
.omv2-contact-row:focus-within .omv2-contact-actions {
  opacity: 1;
}
.omv2-contact-act {
  appearance: none; background: transparent; border: none;
  width: 24px; height: 24px;
  border-radius: var(--radius-sm);
  color: var(--color-text-tertiary);
  cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
}
.omv2-contact-act:hover { background: var(--color-surface-1); color: var(--color-text-primary); }
.omv2-contact-act svg { width: 13px; height: 13px; }
.omv2-contact-act.priority.is-on { color: var(--color-accent); }
.omv2-contact-act.bad.is-on     { color: oklch(0.45 0.18 55); }

.omv2-contact-add {
  appearance: none; background: transparent;
  border: 1px dashed var(--color-glass-border-strong);
  border-radius: var(--radius-md);
  padding: 6px 10px;
  margin-top: 6px;
  font: 500 12px/1 'Geist Sans', system-ui, sans-serif;
  color: var(--color-text-secondary);
  cursor: pointer;
  display: inline-flex; align-items: center; gap: 6px;
  align-self: flex-start;
}
.omv2-contact-add:hover {
  border-color: var(--color-secondary);
  color: var(--color-secondary);
}
.omv2-contact-add svg { width: 12px; height: 12px; }

/* Inline add form */
.omv2-contact-add-form {
  display: flex; gap: 4px; align-items: center;
  padding: 6px 4px;
  margin-top: 4px;
}
.omv2-contact-add-type {
  appearance: none;
  border: 1px solid var(--color-glass-border-strong);
  background: var(--omv2-surface-near-white);
  border-radius: var(--radius-md);
  padding: 6px 8px;
  font: 500 12px/1.2 'Geist Sans', system-ui, sans-serif;
  color: var(--color-text-primary);
  cursor: pointer;
}
.omv2-contact-add-input {
  flex: 1 1 auto;
  border: 1px solid var(--color-glass-border-strong);
  background: var(--omv2-surface-near-white);
  border-radius: var(--radius-md);
  padding: 6px 10px;
  font: 500 12px/1.2 'JetBrains Mono', monospace;
  color: var(--color-text-primary);
  min-width: 0;
}
.omv2-contact-add-save {
  appearance: none; border: 1px solid transparent;
  background: var(--color-secondary);
  color: var(--omv2-near-white);
  border-radius: var(--radius-md);
  padding: 6px 12px;
  font: 600 11px/1 'Geist Sans', system-ui, sans-serif;
  cursor: pointer;
  flex-shrink: 0;  /* K2.8 (2026-05-20): user reported "Save button not visible"
                     on narrow viewports — the flex input was eating the row
                     and buttons compressed to invisible. Lock Save+Cancel
                     to their natural width. */
}
.omv2-contact-add-cancel {
  appearance: none; border: 1px solid var(--color-glass-border-strong);
  background: var(--omv2-surface-near-white);
  border-radius: var(--radius-md);
  padding: 6px 10px;
  font: 500 11px/1 'Geist Sans', system-ui, sans-serif;
  color: var(--color-text-secondary);
  cursor: pointer;
  flex-shrink: 0;  /* K2.8 — see Save above */
}
/* K2.8 (2026-05-20): if the form is still too wide for the viewport,
   allow wrapping so Save+Cancel drop to a second row instead of clipping. */
.omv2-contact-add-form {
  flex-wrap: wrap;
}

/* ============================================================================
 * R8 — Edit-mode + Pinned note compose
 * ============================================================================ */

/* Edit-mode: highlight the EDIT button so it's clear we're editing */
.omv2-drawer.edit-mode [data-action="edit"] {
  background: oklch(0.55 0.08 200 / 0.10);
  color: var(--color-secondary);
  border-color: oklch(0.55 0.08 200 / 0.35);
}

/* Name editor — replaces the static h1 in edit mode */
.omv2-name-input {
  appearance: none;
  border: 1px dashed var(--color-glass-border-strong);
  background: transparent;
  font: 600 30px/1.1 'Newsreader', 'Geist Sans', serif;
  font-style: normal;
  color: var(--color-text-primary);
  padding: 2px 6px;
  border-radius: var(--radius-sm);
  width: 100%;
  max-width: 720px;
}
.omv2-name-input:focus {
  outline: 2px solid oklch(0.55 0.08 200 / 0.30);
  outline-offset: 1px;
  border-color: var(--color-secondary);
}

/* K2.6 — Owner age chip beside the H1 in the hero. Mono numerics for the
   "~N yrs" form, italic muted "Age ?" when no age on file. */
.omv2-hero-name-row {
  display: flex; align-items: baseline; flex-wrap: wrap;
  gap: 12px;
}
.omv2-hero-age {
  display: inline-flex; align-items: center;
  height: 22px;
  padding: 0 8px;
  border: 1px solid var(--color-glass-border);
  border-radius: 999px;
  background: var(--color-surface-1);
  font-family: 'JetBrains Mono', monospace;
  font-variant-numeric: tabular-nums;
  font-size: 11px;
  font-weight: 500;
  color: var(--color-text-secondary);
  letter-spacing: 0.02em;
  white-space: nowrap;
}
.omv2-hero-age-empty {
  font-family: 'Newsreader', Georgia, serif;
  font-style: italic;
  color: var(--color-text-tertiary);
  border-style: dashed;
  background: transparent;
}
/* In edit-mode, the chip is replaced with an input. Style matches the name
   input but scaled down — dashed border, transparent bg, teal focus ring. */
.omv2-age-input {
  appearance: none;
  border: 1px dashed var(--color-glass-border-strong);
  background: transparent;
  font: 500 12px/1 'JetBrains Mono', monospace;
  font-variant-numeric: tabular-nums;
  color: var(--color-text-primary);
  padding: 4px 8px;
  border-radius: 999px;
  width: 60px;
  text-align: center;
}
.omv2-age-input::placeholder {
  color: var(--color-text-tertiary);
  font-style: italic;
}
.omv2-age-input:focus {
  outline: 2px solid oklch(0.55 0.08 200 / 0.30);
  outline-offset: 1px;
  border-color: var(--color-secondary);
}
.omv2-age-input.omv2-input-err {
  border-color: var(--color-danger, oklch(0.55 0.18 25));
  border-style: solid;
}

/* K2.9 (2026-05-20): age chip is now a button (inline-edit click target).
   Reset native button styling to look identical to the pre-K2.9 span. */
button.omv2-hero-age {
  appearance: none;
  font-family: inherit;
  cursor: pointer;
}
button.omv2-hero-age:hover {
  border-color: var(--color-secondary);
  color: var(--color-text-primary);
}
button.omv2-hero-age.omv2-hero-age-empty:hover {
  color: var(--color-secondary);
  border-style: dashed;  /* preserve the empty-state dashed border */
}
button.omv2-hero-age:focus-visible {
  outline: 2px solid oklch(0.55 0.08 200 / 0.30);
  outline-offset: 2px;
}

/* K2.9: inline age edit wrap — input + Save + Cancel pair. Lives in the
   hero name row alongside the H1. Save+Cancel always visible (the bug
   the user reported was the Save button being hidden behind the
   header-level Edit/Save changes flow). */
.omv2-hero-age-edit-wrap {
  display: inline-flex; align-items: center; gap: 4px;
}
.omv2-age-inline-save,
.omv2-age-inline-cancel {
  appearance: none;
  border: 1px solid var(--color-glass-border-strong);
  border-radius: var(--radius-md);
  padding: 4px 10px;
  font: 600 11px/1 'Geist Sans', system-ui, sans-serif;
  cursor: pointer;
  flex-shrink: 0;
}
.omv2-age-inline-save {
  background: var(--color-secondary);
  color: var(--omv2-near-white);
  border-color: var(--color-secondary);
}
.omv2-age-inline-save:hover { background: var(--color-secondary-hover); }
.omv2-age-inline-cancel {
  background: var(--omv2-surface-near-white);
  color: var(--color-text-secondary);
}
.omv2-age-inline-cancel:hover { background: var(--color-surface-1); }
.omv2-age-inline-save:focus-visible,
.omv2-age-inline-cancel:focus-visible {
  outline: 2px solid oklch(0.55 0.08 200 / 0.30);
  outline-offset: 1px;
}

/* K2.6 — Hero "+ Add phone/email/address" affordance. Replaces the muted
   "no X" text with a clickable button that opens the contact-add form
   with the type pre-selected (discoverability fix — was 3 clicks deep). */
.omv2-hc-add {
  appearance: none;
  border: 1px dashed var(--color-glass-border);
  background: transparent;
  padding: 2px 8px 2px 6px;
  border-radius: 999px;
  color: var(--color-text-tertiary);
  cursor: pointer;
  font-family: inherit;
  font-size: 13px;
  display: inline-flex; align-items: center; gap: 6px;
  transition: color 120ms ease, border-color 120ms ease, background 120ms ease;
}
.omv2-hc-add .v {
  font-family: 'Geist Sans', sans-serif;
  font-style: italic;
  color: var(--color-text-tertiary);
}
.omv2-hc-add svg:last-child {
  width: 11px; height: 11px;
  color: var(--color-text-tertiary);
  margin-left: 2px;
}
.omv2-hc-add:hover,
.omv2-hc-add:focus-visible {
  color: var(--color-secondary);
  border-color: var(--color-secondary);
  background: oklch(0.55 0.08 200 / 0.05);
}
.omv2-hc-add:hover svg,
.omv2-hc-add:focus-visible svg,
.omv2-hc-add:hover .v,
.omv2-hc-add:focus-visible .v {
  color: var(--color-secondary);
}
.omv2-hc-add:focus-visible {
  outline: 2px solid oklch(0.55 0.08 200 / 0.30);
  outline-offset: 2px;
}

/* K2.8 (2026-05-20): tiny "+" affordance next to each populated hero
   contact row — clicking adds another phone/email/address of the same
   type. Hidden in the visual hierarchy (small + outlined) so it doesn't
   compete with the primary contact value, but discoverable. */
.omv2-hc-add-more {
  appearance: none;
  border: 1px solid var(--color-glass-border);
  background: transparent;
  width: 16px; height: 16px;
  border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  margin-left: 6px;
  cursor: pointer;
  color: var(--color-text-tertiary);
  transition: color 120ms ease, border-color 120ms ease, background 120ms ease;
  flex-shrink: 0;
}
.omv2-hc-add-more svg {
  width: 9px; height: 9px;
  stroke-width: 2.5;
}
.omv2-hc-add-more:hover,
.omv2-hc-add-more:focus-visible {
  color: var(--color-secondary);
  border-color: var(--color-secondary);
  background: oklch(0.55 0.08 200 / 0.08);
}
.omv2-hc-add-more:focus-visible {
  outline: 2px solid oklch(0.55 0.08 200 / 0.30);
  outline-offset: 2px;
}

/* Hero edit-actions: save / cancel pair */
.omv2-hero-edit-actions {
  display: none;
}
.omv2-drawer.edit-mode .omv2-hero-edit-actions {
  display: flex; gap: 6px; margin-top: 6px;
}
.omv2-hero-save {
  appearance: none; border: 1px solid transparent;
  background: var(--color-secondary);
  color: var(--omv2-near-white);
  border-radius: var(--radius-md);
  padding: 6px 14px;
  font: 600 12px/1 'Geist Sans', system-ui, sans-serif;
  cursor: pointer;
}
.omv2-hero-save:disabled { background: var(--color-surface-1); color: var(--color-text-tertiary); cursor: not-allowed; }
.omv2-hero-cancel {
  appearance: none; border: 1px solid var(--color-glass-border-strong);
  background: var(--omv2-surface-near-white);
  border-radius: var(--radius-md);
  padding: 6px 12px;
  font: 500 12px/1 'Geist Sans', system-ui, sans-serif;
  color: var(--color-text-secondary);
  cursor: pointer;
}

/* Empty pinned-note affordance (when no pinned note exists) */
.omv2-pin-empty {
  display: inline-flex; align-items: center; gap: 4px;
  appearance: none;
  border: 1px dashed var(--color-glass-border-strong);
  background: transparent;
  color: var(--color-text-secondary);
  font: 500 12px/1 'Geist Sans', system-ui, sans-serif;
  padding: 6px 10px;
  border-radius: var(--radius-md);
  cursor: pointer;
  margin-top: 8px;
}
.omv2-pin-empty:hover {
  border-color: var(--color-secondary);
  color: var(--color-secondary);
}
.omv2-pin-empty svg { width: 12px; height: 12px; }

/* Pinned compose: inline textarea + save/cancel */
.omv2-pin-compose {
  display: flex; flex-direction: column; gap: 6px;
  width: 100%;
}
.omv2-pin-textarea {
  border: 1px solid var(--color-glass-border-strong);
  background: var(--omv2-surface-near-white);
  border-radius: var(--radius-md);
  padding: 8px 10px;
  font: 400 14px/1.45 'Newsreader', 'Geist Sans', serif;
  font-style: italic;
  color: var(--color-text-primary);
  resize: vertical;
  min-height: 64px;
  font-family: inherit;
}
.omv2-pin-textarea:focus {
  outline: 2px solid oklch(0.55 0.08 200 / 0.30);
  outline-offset: 1px;
  border-color: var(--color-secondary);
}
.omv2-pin-compose-acts {
  display: flex; gap: 4px;
}

/* ============================================================================
 * OS-5 — Interest Transfer
 * ============================================================================ */

/* Pending-transfer banner in hero */
.omv2-pending-transfer {
  display: flex; align-items: center; gap: 12px;
  margin-top: 12px;
  padding: 10px 14px;
  border: 1px solid oklch(0.55 0.18 55 / 0.32);
  background: oklch(0.55 0.18 55 / 0.08);
  border-radius: var(--radius-md);
  font: 500 12px/1.3 'Geist Sans', system-ui, sans-serif;
}
.omv2-pending-transfer-label {
  flex: 1 1 auto;
  color: oklch(0.45 0.18 55);
}
.omv2-pending-transfer-cta {
  appearance: none;
  border: 1px solid var(--color-secondary);
  background: var(--color-secondary);
  color: var(--omv2-near-white);
  border-radius: var(--radius-md);
  padding: 6px 14px;
  font: 600 12px/1 'Geist Sans', system-ui, sans-serif;
  cursor: pointer;
}
.omv2-pending-transfer-cta:hover { filter: brightness(0.95); }

/* ── State banners (DNC / opted-out / unreachable) ──────────────────────── */
.omv2-state-banner {
  display: flex; align-items: center; gap: 12px;
  margin-top: 10px;
  padding: 10px 14px;
  border: 1px solid var(--color-glass-border-strong);
  background: var(--color-surface-1);
  border-radius: var(--radius-md);
}
.omv2-state-banner-icon {
  display: inline-flex; align-items: center; justify-content: center;
  width: 22px; height: 22px;
  flex-shrink: 0;
}
.omv2-state-banner-icon svg { width: 16px; height: 16px; }
.omv2-state-banner-body { display: flex; flex-direction: column; gap: 2px; flex: 1 1 auto; min-width: 0; }
.omv2-state-banner-label {
  font: 600 12px/1.2 'Geist Sans', system-ui, sans-serif;
  letter-spacing: 0.02em;
  text-transform: uppercase;
}
.omv2-state-banner-hint {
  font: 400 12px/1.4 'Geist Sans', system-ui, sans-serif;
  color: var(--color-text-secondary);
}
.omv2-state-banner-cta {
  appearance: none;
  border: 1px solid var(--color-glass-border-strong);
  background: var(--omv2-surface-near-white);
  color: var(--color-text-primary);
  border-radius: var(--radius-md);
  padding: 6px 12px;
  font: 600 12px/1 'Geist Sans', system-ui, sans-serif;
  cursor: pointer;
  flex-shrink: 0;
}
.omv2-state-banner-cta:hover { background: var(--color-surface-2); }

/* DNC — red */
.omv2-state-banner--dnc {
  background: oklch(0.55 0.20 25 / 0.06);
  border-color: oklch(0.55 0.20 25 / 0.32);
}
.omv2-state-banner--dnc .omv2-state-banner-icon,
.omv2-state-banner--dnc .omv2-state-banner-label { color: oklch(0.50 0.20 25); }

/* Opted-out — amber/orange */
.omv2-state-banner--opted-out {
  background: oklch(0.62 0.18 55 / 0.08);
  border-color: oklch(0.55 0.18 55 / 0.32);
}
.omv2-state-banner--opted-out .omv2-state-banner-icon,
.omv2-state-banner--opted-out .omv2-state-banner-label { color: oklch(0.45 0.18 55); }

/* Unreachable — muted brass (informational, not a hard block) */
.omv2-state-banner--unreachable {
  background: oklch(0.72 0.12 80 / 0.08);
  border-color: oklch(0.72 0.12 80 / 0.32);
}
.omv2-state-banner--unreachable .omv2-state-banner-icon,
.omv2-state-banner--unreachable .omv2-state-banner-label { color: oklch(0.50 0.12 80); }

/* Transfer flow overlay (modal sitting above the drawer) */
.omv2-transfer-overlay {
  position: fixed; inset: 0;
  /* Proper modal-frame backdrop (R6.13): dim + blur so the busy drawer behind
     stops bleeding through and the panel text reads clearly. Was /0.18 — far too
     faint, so the money bar / wells / values showed through and the panel never
     isolated (reported as "text isn't legible"). */
  background: oklch(0.20 0.010 200 / 0.52);
  backdrop-filter: blur(3px);
  -webkit-backdrop-filter: blur(3px);
  z-index: 1500;  /* above the drawer (1200) and dock (1300) */
  display: flex; align-items: center; justify-content: center;
  padding: 24px;
}
.omv2-transfer-panel {
  background: var(--omv2-surface-near-white);
  border: 1px solid var(--color-glass-border-strong);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-overlay);
  width: 100%; max-width: 720px;
  max-height: 90vh; overflow-y: auto;
  display: flex; flex-direction: column;
  font-family: 'Geist Sans', system-ui, sans-serif;
  color: var(--color-text-primary);
}
.omv2-transfer-head {
  display: flex; align-items: flex-start; gap: 12px;
  padding: 18px 22px;
  border-bottom: 1px solid var(--omv2-divider);
}
.omv2-transfer-head > div:first-child { flex: 1 1 auto; }
/* Prefix with :root[data-v2="1"] so this rule wins over variables-v2.css's
   `:root[data-v2="1"] h2` which would otherwise force Geist Sans on the
   <h2 class="omv2-transfer-title"> markup. */
:root[data-v2="1"] .omv2-transfer-title,
.omv2-transfer-title {
  font: 600 18px/1.2 'Newsreader', 'Geist Sans', serif;
  font-style: italic;
  color: var(--color-text-primary);
  margin: 0;
}
.omv2-transfer-sub {
  margin: 4px 0 0 0;
  font: 400 12px/1.4 'Geist Sans', system-ui, sans-serif;
  color: var(--color-text-secondary);
}

.omv2-transfer-body {
  padding: 16px 22px;
  display: flex; flex-direction: column; gap: 14px;
}

.omv2-transfer-row {
  border: 1px solid var(--color-glass-border);
  border-radius: var(--radius-md);
  padding: 12px;
  background: var(--color-surface-1);
}
.omv2-transfer-row-head {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 8px;
}
.omv2-transfer-prop {
  font: 600 13px/1.2 'Geist Sans', system-ui, sans-serif;
  color: var(--color-text-primary);
}
.omv2-transfer-source-pct {
  font: 500 11px/1 'JetBrains Mono', monospace;
  color: var(--color-text-tertiary);
}
.omv2-transfer-slices {
  display: flex; flex-direction: column; gap: 8px;
}
.omv2-transfer-slice {
  display: flex; align-items: center; gap: 6px;
  padding: 6px 8px;
  background: var(--omv2-surface-near-white);
  border: 1px solid var(--color-glass-border);
  border-radius: var(--radius-sm);
}
.omv2-transfer-pct-input {
  width: 80px;
  border: 1px solid var(--color-glass-border-strong);
  background: var(--omv2-surface-near-white);
  border-radius: var(--radius-sm);
  padding: 5px 8px;
  font: 600 13px/1 'JetBrains Mono', monospace;
  color: var(--color-text-primary);
  text-align: right;
}
.omv2-transfer-unit {
  font: 500 12px/1 'JetBrains Mono', monospace;
  color: var(--color-text-tertiary);
}
.omv2-transfer-arrow {
  margin: 0 4px;
  color: var(--color-text-tertiary);
}
.omv2-transfer-dest {
  flex: 1 1 auto;
  display: flex; align-items: center; gap: 6px;
  min-width: 0;
}
.omv2-transfer-dest-search {
  flex: 1 1 auto; min-width: 0;
  border: 1px solid var(--color-glass-border-strong);
  background: var(--omv2-surface-near-white);
  border-radius: var(--radius-sm);
  padding: 5px 8px;
  font: 500 12px/1 'Geist Sans', system-ui, sans-serif;
  color: var(--color-text-primary);
}
.omv2-transfer-new-toggle,
.omv2-transfer-switch-mode,
.omv2-transfer-clear-dest {
  appearance: none;
  border: 1px solid var(--color-glass-border);
  background: transparent;
  color: var(--color-text-secondary);
  font: 500 10px/1 'Geist Sans', system-ui, sans-serif;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  padding: 5px 8px;
  border-radius: var(--radius-pill);
  cursor: pointer;
  white-space: nowrap;
}
.omv2-transfer-new-toggle:hover,
.omv2-transfer-switch-mode:hover,
.omv2-transfer-clear-dest:hover { background: var(--color-surface-1); }

.omv2-transfer-dest-pill {
  flex: 1 1 auto;
  font: 600 12px/1 'Geist Sans', system-ui, sans-serif;
  background: oklch(0.55 0.08 200 / 0.10);
  border: 1px solid oklch(0.55 0.08 200 / 0.30);
  color: var(--color-secondary);
  border-radius: var(--radius-pill);
  padding: 5px 10px;
}

.omv2-transfer-dest-results {
  position: absolute;
  z-index: 1600;
  background: var(--omv2-surface-near-white);
  border: 1px solid var(--color-glass-border-strong);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-overlay);
  max-width: 320px;
  margin-top: 4px;
}
.omv2-transfer-dest-result {
  appearance: none;
  display: block;
  width: 100%;
  text-align: left;
  border: none;
  background: transparent;
  font: 500 12px/1.3 'Geist Sans', system-ui, sans-serif;
  color: var(--color-text-primary);
  padding: 8px 10px;
  cursor: pointer;
  border-bottom: 1px solid var(--omv2-divider);
}
.omv2-transfer-dest-result:last-child { border-bottom: 0; }
.omv2-transfer-dest-result:hover { background: var(--color-surface-1); }
.omv2-transfer-empty {
  padding: 8px 10px;
  font: 500 12px 'Geist Sans', system-ui, sans-serif;
  color: var(--color-text-tertiary);
}

.omv2-transfer-new-owner {
  flex: 1 1 auto;
  display: grid; grid-template-columns: 2fr 1fr 1.5fr auto; gap: 4px;
}
.omv2-transfer-no-name,
.omv2-transfer-no-phone,
.omv2-transfer-no-email {
  border: 1px solid var(--color-glass-border-strong);
  background: var(--omv2-surface-near-white);
  border-radius: var(--radius-sm);
  padding: 5px 8px;
  font: 500 11px/1 'Geist Sans', system-ui, sans-serif;
  color: var(--color-text-primary);
  min-width: 0;
}

.omv2-transfer-slice-remove {
  appearance: none;
  border: none; background: transparent;
  color: var(--color-text-tertiary);
  width: 22px; height: 22px;
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: var(--radius-sm);
  cursor: pointer;
}
.omv2-transfer-slice-remove:hover { background: var(--color-surface-1); color: oklch(0.45 0.18 25); }
.omv2-transfer-slice-remove svg { width: 13px; height: 13px; }

.omv2-transfer-add-slice {
  margin-top: 8px;
  appearance: none;
  border: 1px dashed var(--color-glass-border-strong);
  background: transparent;
  color: var(--color-text-secondary);
  font: 500 11px/1 'Geist Sans', system-ui, sans-serif;
  padding: 6px 10px;
  border-radius: var(--radius-md);
  cursor: pointer;
}
.omv2-transfer-add-slice:hover { border-color: var(--color-secondary); color: var(--color-secondary); }

.omv2-transfer-foot {
  display: flex; gap: 6px; align-items: center; justify-content: flex-end;
  padding: 14px 22px;
  border-top: 1px solid var(--omv2-divider);
}
.omv2-transfer-btn {
  appearance: none;
  border: 1px solid var(--color-glass-border-strong);
  background: var(--omv2-surface-near-white);
  color: var(--color-text-primary);
  border-radius: var(--radius-md);
  padding: 7px 14px;
  font: 500 12px/1 'Geist Sans', system-ui, sans-serif;
  cursor: pointer;
}
.omv2-transfer-btn-ghost  { color: var(--color-text-secondary); }
.omv2-transfer-btn-defer  { background: var(--color-surface-1); }
.omv2-transfer-btn-submit {
  background: var(--color-secondary);
  border-color: transparent;
  color: var(--omv2-near-white);
  font-weight: 600;
}
.omv2-transfer-btn-submit:hover { filter: brightness(0.95); }
.omv2-transfer-btn-submit:disabled {
  background: var(--color-surface-1);
  color: var(--color-text-tertiary);
  cursor: not-allowed;
}

/* Transfer history pane */
.omv2-pane-transfers {
  border-top: 1px solid var(--omv2-divider);
  padding: 12px 14px 16px;
}
.omv2-transfer-history {
  display: flex; flex-direction: column; gap: 6px;
  margin-top: 4px;
}
.omv2-transfer-history-row {
  display: flex; align-items: center; justify-content: space-between;
  padding: 8px 10px;
  border: 1px solid var(--color-glass-border);
  border-radius: var(--radius-sm);
  background: var(--color-surface-1);
}
.omv2-transfer-history-row.is-reversed {
  opacity: 0.55;
  background: transparent;
}
.omv2-transfer-history-main {
  display: flex; align-items: center; gap: 10px;
  flex: 1 1 auto;
  font: 500 12px/1 'Geist Sans', system-ui, sans-serif;
  color: var(--color-text-primary);
}
.omv2-transfer-history-pct {
  font-family: 'JetBrains Mono', monospace;
  font-weight: 600;
  color: var(--color-money);
}
.omv2-transfer-history-dir {
  color: var(--color-text-secondary);
}
.omv2-transfer-history-via {
  font-size: 10px; letter-spacing: 0.06em; text-transform: uppercase;
  color: var(--color-text-tertiary);
  padding: 2px 7px;
  border-radius: var(--radius-pill);
  background: var(--omv2-surface-near-white);
  border: 1px solid var(--color-glass-border);
}
.omv2-transfer-history-when {
  font-family: 'JetBrains Mono', monospace;
  color: var(--color-text-tertiary);
  font-size: 11px;
  margin-left: auto;
}
.omv2-transfer-history-reverse {
  appearance: none;
  border: 1px solid var(--color-glass-border);
  background: transparent;
  color: var(--color-text-secondary);
  font: 500 10px/1 'Geist Sans', system-ui, sans-serif;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  padding: 5px 10px;
  border-radius: var(--radius-pill);
  cursor: pointer;
}
.omv2-transfer-history-reverse:hover {
  border-color: oklch(0.55 0.18 55 / 0.40);
  color: oklch(0.45 0.18 55);
}
.omv2-transfer-history-reversed {
  width: 100%;
  margin-top: 4px;
  font: 500 10px/1.3 'Geist Sans', system-ui, sans-serif;
  font-style: italic;
  color: var(--color-text-tertiary);
}

/* ── G1 (Batch G): OMv2 actions row + Remove menu ──────────────────────────
 * The Remove menu lives in its own row below the pagination footer so the
 * footer's space-between (prev / counter / next) layout stays clean. The
 * menu itself reuses the v1 modal's .om-remove-* classes from
 * src/css/components.css for visual parity (Move to Trash + Delete
 * Permanently, danger red, popover above the trigger button). Only the
 * row wrapper + sizing tweaks live here; the menu's positioning uses the
 * v1 .om-remove-menu rules (bottom:calc(100% + 6px); right:0) so it opens
 * upward without overflowing the bottom of the viewport. The
 * id="omv2-remove-menu" on the menu element keeps the v1 click-outside
 * handler (which targets #om-remove-menu) from cross-triggering on OMv2.
 * ──────────────────────────────────────────────────────────────────────── */
.omv2-actions-row {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  padding: 8px 16px 12px;
  background: var(--omv2-surface-near-white);
  border-top: 1px solid var(--omv2-divider);
  flex-shrink: 0;
}
.omv2-actions-row .om-remove-btn {
  font-family: 'Geist Sans', system-ui, sans-serif;
}
.omv2-actions-row .om-remove-btn svg {
  width: 12px;
  height: 12px;
}

/* ══════════════════════════════════════════════════════════════════════
   Wave D (2026-05-22) — Related Parties pane
   ────────────────────────────────────────────────────────────────────
   Full-width section below the body grid. List rows = type badge +
   directional arrow + other owner name (clickable to open their OMv2)
   + optional notes + remove × button. Inline add form toggles below
   the header. Empty + loading states styled minimally.
   ══════════════════════════════════════════════════════════════════ */
.omv2-pane-relationships {
  padding: 14px 18px 16px;
  border-top: 1px solid var(--omv2-divider);
}
.omv2-pane-relationships .omv2-pane-label {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin: 0 0 10px;
  font-size: 11px;
  font-family: 'JetBrains Mono', monospace;
  font-weight: 700;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--text);
}
.omv2-pane-relationships .omv2-pane-label .ct {
  color: var(--muted);
  font-weight: 500;
}
.omv2-rp-add-btn {
  font-family: 'Geist Sans', system-ui, sans-serif;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0;
  text-transform: none;
  padding: 4px 10px;
  background: transparent;
  color: var(--color-secondary, #298084);
  border: 1px solid var(--color-secondary, #298084);
  border-radius: 6px;
  cursor: pointer;
  transition: background .12s ease-out, color .12s ease-out;
}
.omv2-rp-add-btn:hover {
  background: var(--color-secondary, #298084);
  color: #fff;
}

/* Add form */
.omv2-rp-add-form {
  background: rgba(41,128,132,.04);
  border: 1px solid rgba(41,128,132,.18);
  border-radius: 8px;
  padding: 10px 12px;
  margin-bottom: 10px;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.omv2-rp-add-row {
  display: grid;
  grid-template-columns: 90px 1fr;
  align-items: center;
  gap: 10px;
}
.omv2-rp-add-label {
  font-size: 10px;
  font-family: 'JetBrains Mono', monospace;
  font-weight: 700;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--muted);
}
.omv2-rp-add-form select,
.omv2-rp-add-form input {
  width: 100%;
  padding: 6px 8px;
  border: 1px solid var(--border, #E2E5EA);
  border-radius: 6px;
  font-size: 13px;
  font-family: 'Geist Sans', system-ui, sans-serif;
  background: #fff;
  color: var(--text);
  outline: none;
}
.omv2-rp-add-form select:focus,
.omv2-rp-add-form input:focus {
  border-color: var(--color-secondary, #298084);
}
.omv2-rp-add-actions {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  margin-top: 4px;
}
.omv2-rp-add-cancel,
.omv2-rp-add-save {
  font-family: 'Geist Sans', system-ui, sans-serif;
  font-size: 12px;
  font-weight: 600;
  padding: 6px 14px;
  border-radius: 6px;
  cursor: pointer;
  border: 1px solid transparent;
}
.omv2-rp-add-cancel {
  background: transparent;
  color: var(--muted);
  border-color: var(--border, #E2E5EA);
}
.omv2-rp-add-cancel:hover { background: rgba(0,0,0,.03); }
.omv2-rp-add-save {
  background: var(--color-secondary, #298084);
  color: #fff;
}
.omv2-rp-add-save:hover { filter: brightness(.94); }

/* Body — list / loading / empty */
.omv2-rp-body {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.omv2-rp-loading,
.omv2-rp-empty {
  font-size: 12px;
  color: var(--muted);
  padding: 10px 4px;
  font-style: italic;
}
.omv2-rp-row {
  display: grid;
  grid-template-columns: auto auto 1fr auto auto;
  align-items: center;
  gap: 10px;
  padding: 8px 10px;  /* P3-7: even-spacing (was 9px) */
  background: transparent;
  border: 0;
  border-radius: 0;
  font-size: 13px;
}
/* Divider BETWEEN rows only — no per-row card (avoids cards-in-cards inside the
   popover/pane container per .impeccable.md). */
.omv2-rp-row + .omv2-rp-row { border-top: 1px solid var(--color-glass-border, #E2E5EA); }
.omv2-rp-row:hover { background: rgba(0,0,0,.02); }
.omv2-rp-type-badge {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  font-weight: 700;
  letter-spacing: .08em;
  text-transform: uppercase;
  padding: 2px 6px;
  border-radius: 4px;
  background: rgba(41,128,132,.10);
  color: var(--color-secondary, #298084);
  white-space: nowrap;
}
.omv2-rp-arrow {
  color: var(--muted);
  font-size: 14px;
  font-weight: 500;
}
.omv2-rp-other-name {
  color: var(--text);
  font-weight: 500;
  cursor: pointer;
  text-decoration: none;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.omv2-rp-other-name:hover {
  color: var(--color-secondary, #298084);
  text-decoration: underline;
}
.omv2-rp-notes {
  font-size: 11px;
  color: var(--muted);
  font-style: italic;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 240px;
}
.omv2-rp-remove-btn {
  font-family: 'Geist Sans', system-ui, sans-serif;
  font-size: 16px;
  line-height: 1;
  width: 22px;
  height: 22px;
  border-radius: 4px;
  border: none;
  background: transparent;
  color: var(--muted);
  cursor: pointer;
  transition: background .12s ease-out, color .12s ease-out;
}
.omv2-rp-remove-btn:hover {
  background: rgba(220,38,38,.10);
  color: #B91C1C;
}
