/* WU22 — Leadgenics operator frontend.
   Tokens: UI_DIRECTION.md §1.1 (light mode). Motion: §5.2 seven primitives.
   Density: §3 (40px rows, ~18–22 visible). Dark mode: deferred (CF). */

:root {
  --ink-900: #0B2A4A;
  --ink-700: #1E3D5F;
  --ink-500: #4A5E7A;
  --ink-300: #8A95A6;
  --ink-100: #D9DEE6;
  --paper-50: #FAFAF8;
  --paper-100: #F1F1EC;
  --accent-600: #1E6FE8;
  --accent-100: #E3EEFE;
  --status-ready: #1F8A55;
  --status-ready-bg: #E6F4EC;
  --status-wait: #B8861E;
  --status-wait-bg: #F7EFDC;
  --status-fail: #B8421E;
  --status-fail-bg: #F4E1DC;
  --excluded-tint: #FBEEEA;
  --excluded-tint-hover: #F8E2DC;
  --serif: "Source Serif 4", Georgia, serif;
  --sans: "Inter", -apple-system, system-ui, sans-serif;
  --mono: "Geist Mono", ui-monospace, "SF Mono", Menlo, monospace;
}

* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; height: 100%; }
body {
  font-family: var(--sans);
  font-size: 14px;
  color: var(--ink-500);
  background: var(--paper-50);
}
.hidden { display: none !important; }
.serif { font-family: var(--serif); color: var(--ink-900); font-weight: 600; }
.mono { font-family: var(--mono); font-variant-numeric: tabular-nums; }
a { color: var(--accent-600); text-decoration: none; }

/* ===== Primitive #4 — typing cursor ===== */
.cursor {
  display: inline-block; width: 2px; height: 0.9em; margin-left: 4px;
  background: var(--accent-600); vertical-align: baseline;
  animation: blink 1.2s step-end infinite;
}
@keyframes blink { 50% { opacity: 0; } }

/* ===== Primitive #1 — shimmer pass ===== */
@keyframes shimmer {
  0% { background-position: -120% 0; }
  100% { background-position: 220% 0; }
}
.shimmer {
  background-image: linear-gradient(100deg, transparent 30%, rgba(255,255,255,0.65) 50%, transparent 70%);
  background-size: 200% 100%;
  background-repeat: no-repeat;
  animation: shimmer 3s ease-out infinite;
}

/* ===== Primitive #2 — soft pulse ===== */
@keyframes softpulse {
  0% { box-shadow: inset 0 0 0 999px var(--accent-100); }
  100% { box-shadow: inset 0 0 0 999px transparent; }
}
.pulse { animation: softpulse 0.6s ease-out 1; }

/* ===== Primitive #3 — breathing dot ===== */
.breath-dot {
  display: inline-block; width: 6px; height: 6px; border-radius: 50%;
  background: var(--accent-600); animation: breathe 2s ease-in-out infinite;
}
@keyframes breathe { 0%,100% { opacity: 0.4; } 50% { opacity: 1; } }

/* ===== Login ===== */
.login-overlay {
  position: fixed; inset: 0; background: var(--paper-50);
  display: flex; align-items: center; justify-content: center; z-index: 100;
}
.login-card { width: 360px; }
.login-card h1 { font-size: 34px; margin: 0 0 4px; }
.login-sub { color: var(--ink-300); margin: 0 0 20px; }
.login-card input[type="password"] {
  width: 100%; padding: 10px 12px; font-family: var(--mono); font-size: 13px;
  border: 1px solid var(--ink-100); border-radius: 6px; background: white;
  margin-bottom: 10px; outline: none;
}
.login-card input[type="password"]:focus { border-color: var(--accent-600); box-shadow: 0 0 0 3px var(--accent-100); }
.login-remember { display: block; font-size: 13px; color: var(--ink-300); margin-bottom: 16px; }
.login-error { color: var(--status-fail); font-size: 13px; margin-top: 10px; }

/* ===== Buttons ===== */
.btn-primary {
  background: var(--accent-600); color: white; border: none; border-radius: 6px;
  font: 600 14px var(--sans); padding: 9px 16px; cursor: pointer;
  transition: background 120ms ease, transform 60ms ease;
}
.btn-primary:hover { background: #1A61CC; }
.btn-primary:active { transform: scale(0.985); }
.btn-primary:disabled { opacity: 0.45; cursor: default; }
.btn-secondary {
  background: var(--ink-700); color: white; border: none; border-radius: 6px;
  font: 500 13px var(--sans); padding: 8px 14px; cursor: pointer;
  transition: background 120ms ease;
}
.btn-secondary:hover { background: var(--ink-900); }
.btn-secondary.danger:hover { background: var(--status-fail); }

/* ===== App shell ===== */
.app { display: flex; min-height: 100vh; }
.rail {
  width: 240px; flex: 0 0 240px; background: var(--ink-900); color: #C9D4E2;
  display: flex; flex-direction: column; padding: 18px 0;
  position: sticky; top: 0; height: 100vh;
}
.rail-logo { color: white; font-size: 19px; padding: 0 20px 20px; }
.rail-item {
  display: block; padding: 9px 20px; color: #C9D4E2; font-size: 13.5px;
  border-left: 2px solid transparent; transition: background 120ms ease;
}
.rail-item:hover { background: var(--ink-700); }
.rail-item.active { color: white; border-left-color: var(--accent-600); background: rgba(255,255,255,0.05); }
.rail-item.disabled { opacity: 0.38; pointer-events: none; }
/* Journey-group labels (FRONTEND_UX_UPLIFT_PLAN_2026-07-07 Slice A step 1) —
   non-interactive dividers; JS routing only ever queries .rail-item[data-page]. */
.rail-group {
  padding: 14px 20px 4px; font-size: 10.5px; font-weight: 600;
  letter-spacing: 0.08em; text-transform: uppercase; color: rgba(201,212,226,0.45);
  user-select: none;
}
.rail-foot { margin-top: auto; padding: 0 20px; }
.rail-signout {
  background: none; border: 1px solid rgba(255,255,255,0.18); color: #C9D4E2;
  border-radius: 6px; font-size: 12px; padding: 6px 10px; cursor: pointer;
}
.main { flex: 1; padding: 28px 36px 120px; min-width: 0; }

/* ===== Universe — empty state ===== */
.u-empty { display: flex; flex-direction: column; align-items: center; padding-top: 18vh; }
.u-empty-title { font-size: 30px; margin-bottom: 26px; }
.client-select {
  font: 14px var(--sans); color: var(--ink-700); padding: 9px 12px; min-width: 280px;
  border: 1px solid var(--ink-100); border-radius: 6px; background: white;
}
.client-select.small { min-width: 200px; font-size: 13px; padding: 7px 10px; }

/* ===== Universe — header + stats ===== */
.u-header { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 14px; }
.u-header h1 { font-size: 30px; margin: 0; }
.u-header h1 em { font-style: italic; font-weight: 500; }
.stats-strip {
  display: flex; gap: 28px; padding: 10px 0 16px; border-bottom: 1px solid var(--ink-100);
  margin-bottom: 16px; flex-wrap: wrap;
}
.stat-label { color: var(--ink-300); font-size: 12px; margin-right: 6px; }
.stat-value { color: var(--ink-700); font-size: 14px; font-weight: 500; }

/* ===== Filter chips ===== */
.chips-row { display: flex; gap: 18px; align-items: flex-end; flex-wrap: wrap; margin-bottom: 18px; }
.chip-group label { display: block; font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; color: var(--ink-300); margin-bottom: 5px; }
.chip-group input[type="text"], .chip-group select {
  font: 13px var(--sans); color: var(--ink-700); padding: 7px 10px;
  border: 1px solid var(--ink-100); border-radius: 6px; background: white; min-width: 180px;
}
.chip-group input[type="text"]:focus { outline: none; border-color: var(--accent-600); box-shadow: 0 0 0 3px var(--accent-100); }
.band-chips { display: flex; gap: 6px; }
.band-chips button {
  font: 12px var(--sans); color: var(--ink-500); background: white;
  border: 1px solid var(--ink-100); border-radius: 14px; padding: 5px 11px; cursor: pointer;
  transition: all 120ms ease;
}
.band-chips button.on { background: var(--accent-100); border-color: var(--accent-600); color: var(--accent-600); }
.toggle { display: flex; align-items: center; gap: 7px; font-size: 13px; color: var(--ink-500); padding-bottom: 7px; cursor: pointer; }

/* ===== Unified search control bar (2026-06-21) ===== */
.u-searchbar {
  display: flex; align-items: flex-end; gap: 18px; flex-wrap: wrap;
  margin-bottom: 18px; padding-bottom: 16px;
  border-bottom: 1px solid var(--ink-100);
}
.u-searchbar-toggle { gap: 0; border: 1px solid var(--ink-100); border-radius: 16px; padding: 3px; background: var(--paper-100); }
.u-searchbar-toggle button {
  font: 600 14px var(--sans); padding: 8px 22px; border: 0; border-radius: 13px;
  background: transparent; color: var(--ink-500);
}
.u-searchbar-toggle button.on {
  background: white; color: var(--accent-600);
  box-shadow: 0 1px 3px rgba(11,42,74,0.10); border: 0;
}
.u-searchbar-lens { margin-bottom: 0; }
.u-searchbar-lens .client-select { min-width: 220px; }
.u-searchbar-hint { flex: 1 1 240px; min-width: 200px; font-size: 12.5px; color: var(--ink-300); padding-bottom: 8px; }
.u-searchbar-hint em { font-style: italic; color: var(--ink-500); }

/* Single-grid merge (2026-06-21): one Companies grid, columns per lens.
   Default = client lens (Tags hidden). .whole-db = no client (drop the
   client-only columns, show Tags). */
#u-grid .col-tags { display: none; }
#u-grid.whole-db .col-tags { display: table-cell; }
#u-grid.whole-db .col-select,
#u-grid.whole-db .col-contacts,
#u-grid.whole-db .col-status,
#u-grid.whole-db .col-action { display: none; }

/* ===== Grid ===== */
.grid-wrap { background: white; border: 1px solid var(--ink-100); border-radius: 8px; overflow: visible; }
.grid { width: 100%; border-collapse: collapse; }
.grid th {
  text-align: left; font: 600 11px var(--sans); text-transform: uppercase; letter-spacing: 0.04em;
  color: var(--ink-300); padding: 10px 12px; border-bottom: 1px solid var(--ink-100);
}
.grid td { padding: 0 12px; height: 40px; border-bottom: 1px solid var(--paper-100); font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 280px; }
.grid tbody tr { transition: background 120ms ease; opacity: 0; animation: rowin 300ms ease forwards; }
@keyframes rowin { to { opacity: 1; } }
.grid tbody tr:hover { background: var(--accent-100); }
.col-select { width: 34px; }
.col-size { text-align: right; width: 90px; }
.col-status { width: 130px; }
.col-action { width: 70px; }
td.col-size { text-align: right; }
.cname { color: var(--ink-700); font-weight: 500; cursor: pointer; }
.cname:hover { color: var(--accent-600); }
.cdomain { font-family: var(--mono); font-size: 11.5px; color: var(--ink-300); display: block; line-height: 1.1; }
.csize { font-family: var(--mono); color: var(--ink-700); }
.cband { display: block; font-size: 10.5px; color: var(--ink-300); line-height: 1.1; }

/* excluded rows — UI_DIRECTION §5.1 */
tr.excluded { background: var(--excluded-tint); }
tr.excluded td { color: var(--ink-300); opacity: 0.75; }
tr.excluded:hover { background: var(--excluded-tint-hover); }
tr.excluded:hover td { opacity: 1; }

/* status pills — PHASE1_SCHEMA §5.5b table */
.pill {
  display: inline-block; width: 110px; text-align: center; font: 600 10px var(--sans);
  text-transform: uppercase; letter-spacing: 0.04em; padding: 4px 8px; border-radius: 10px;
  transition: background 400ms ease, color 400ms ease;
}
.pill.proposed { background: var(--status-wait-bg); color: var(--status-wait); }
.pill.pending_client_review { background: var(--status-wait-bg); color: var(--status-wait); outline: 1px solid var(--accent-100); }
.pill.approved { background: var(--status-ready-bg); color: var(--status-ready); }
.pill.client_excluded { background: var(--excluded-tint); color: var(--status-fail); }
.pill.rejected { background: var(--paper-100); color: var(--ink-500); }
.pill.in_outreach { background: var(--accent-100); color: var(--accent-600); }
.pill.exhausted { background: var(--paper-100); color: var(--ink-300); }

/* Low-confidence classification review queue (CF-classify-review-threshold, migration 0083).
   Lowest-confidence rows the name-rule passes filed on purpose (0.65) for a human to
   confirm or re-file. One accent, amber "wait" pill for the confidence, mono for numbers,
   fade-out on decision — per UI_DIRECTION (simplicity / minimalism / fluidity). */
.rq-summary { font-size: 12.5px; color: var(--ink-500); margin: 2px 0 10px; line-height: 1.5; }
.rq-summary b { color: var(--ink-900); }
.rq-list { display: flex; flex-direction: column; gap: 6px; margin-bottom: 10px; }
.rq-row { display: flex; align-items: center; gap: 12px; justify-content: space-between;
  padding: 8px 10px; border: 1px solid var(--ink-100); border-radius: 8px; background: var(--paper-50);
  transition: opacity 300ms ease, transform 300ms ease, background 200ms ease; }
.rq-row.leaving { opacity: 0; transform: translateX(14px); }
.rq-main { min-width: 0; }
.rq-name { font: 600 13px var(--sans); color: var(--ink-900); display: block;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rq-meta { font: 12px var(--mono); color: var(--ink-300); }
.rq-conf { display: inline-block; font: 600 10px var(--mono); color: var(--status-wait);
  background: var(--status-wait-bg); padding: 2px 7px; border-radius: 9px; letter-spacing: .03em;
  margin-left: 4px; }
.rq-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.rq-actions select { font-size: 12px; padding: 5px 8px; border: 1px solid var(--ink-100);
  border-radius: 7px; background: #fff; color: var(--ink-700); }
.rq-confirm { font: 600 12px var(--sans); color: var(--accent-600); background: var(--accent-100);
  border: 0; border-radius: 7px; padding: 6px 12px; cursor: pointer; transition: background 200ms ease; }
.rq-confirm:hover { background: #D3E4FD; }
.rq-confirm:disabled { opacity: .5; cursor: default; }
.rq-empty { font-size: 13px; color: var(--status-ready); padding: 6px 2px; }

/* Suggested-tags queue (F6 #109, sheet row 45) — same rq- chassis as the map's
   review queue; Keep is the accent action, Remove the quiet destructive one. */
.tgrq-keep { font: 600 12px var(--sans); color: var(--accent-600); background: var(--accent-100);
  border: 0; border-radius: 7px; padding: 6px 12px; cursor: pointer; transition: background 200ms ease; }
.tgrq-keep:hover { background: #D3E4FD; }
.tgrq-keep:disabled, .tgrq-remove:disabled { opacity: .5; cursor: default; }
.tgrq-remove { font: 600 12px var(--sans); color: var(--status-fail); background: transparent;
  border: 1px solid var(--ink-100); border-radius: 7px; padding: 5px 11px; cursor: pointer;
  transition: background 200ms ease; }
.tgrq-remove:hover { background: #FFF6F4; }

/* row action icons */
.act { display: inline-block; font-size: 15px; color: var(--ink-500); cursor: pointer; padding: 2px 5px; border-radius: 4px; transition: color 120ms ease; background: none; border: none; }
.act.approve:hover { color: var(--status-ready); }
.act.exclude:hover { color: var(--status-fail); }
.act.restore:hover { color: var(--accent-600); }

.grid-empty { padding: 36px; text-align: center; color: var(--ink-300); }
.pager { display: flex; align-items: center; gap: 12px; justify-content: flex-end; padding: 10px 14px; }
.pager button { background: white; border: 1px solid var(--ink-100); border-radius: 6px; padding: 4px 11px; cursor: pointer; color: var(--ink-500); }
.pager button:disabled { opacity: 0.35; cursor: default; }

/* ===== Selection action bar — slides up (UI_DIRECTION §4.4 anti-clunk) ===== */
.action-bar {
  position: fixed; left: 50%; bottom: -80px; transform: translateX(-50%);
  display: flex; align-items: center; gap: 14px;
  background: var(--ink-900); color: white; border-radius: 10px;
  padding: 10px 18px; box-shadow: 0 8px 28px rgba(11,42,74,0.35);
  transition: bottom 200ms ease; z-index: 50; white-space: nowrap;
}
.action-bar.visible { bottom: 22px; }
#ab-count { font-size: 13px; color: #C9D4E2; }
.ab-deselect { color: #C9D4E2; font-size: 12.5px; }
.ab-push-wrap { position: relative; }
.campaign-picker {
  position: absolute; bottom: 46px; left: 0; background: white; border: 1px solid var(--ink-100);
  border-radius: 8px; padding: 12px; display: flex; flex-direction: column; gap: 8px;
  box-shadow: 0 8px 28px rgba(11,42,74,0.18); min-width: 260px;
}
.campaign-picker select, .campaign-picker input {
  font: 13px var(--sans); padding: 7px 10px; border: 1px solid var(--ink-100); border-radius: 6px;
}

/* ===== Drawer (right slide-in) ===== */
.drawer-scrim { position: fixed; inset: 0; background: rgba(11,42,74,0.18); z-index: 60; }
.drawer {
  position: fixed; top: 0; right: -520px; width: 480px; height: 100vh; background: white;
  border-left: 1px solid var(--ink-100); box-shadow: -12px 0 36px rgba(11,42,74,0.12);
  transition: right 240ms ease; z-index: 61; overflow-y: auto; padding: 26px 28px;
}
.drawer.open { right: 0; }
.drawer-close {
  position: absolute; top: 14px; right: 16px; background: none; border: none;
  font-size: 22px; color: var(--ink-300); cursor: pointer;
}
.drawer h2 { font-family: var(--serif); color: var(--ink-900); font-size: 24px; margin: 0 0 2px; }
.drawer .d-domain { font-family: var(--mono); font-size: 12px; color: var(--ink-300); margin-bottom: 18px; }
.d-row { display: flex; padding: 7px 0; border-bottom: 1px solid var(--paper-100); font-size: 13px; }
.d-row .k { width: 140px; color: var(--ink-300); flex: 0 0 140px; }
.d-row .v { color: var(--ink-700); }
.d-section { margin-top: 22px; font: 600 11px var(--sans); text-transform: uppercase; letter-spacing: 0.04em; color: var(--ink-300); }
.d-desc { font-size: 13px; line-height: 1.5; color: var(--ink-500); margin-top: 8px; }
.d-contact { padding: 8px 0; border-bottom: 1px solid var(--paper-100); font-size: 13px; color: var(--ink-700); }
.d-contact .meta { color: var(--ink-300); font-size: 12px; }
.d-loading { color: var(--ink-300); padding: 30px 0; }

/* ===== Toasts ===== */
.toasts { position: fixed; right: 24px; bottom: 24px; display: flex; flex-direction: column; gap: 10px; z-index: 70; }
.toast {
  background: var(--ink-900); color: white; border-radius: 8px; padding: 12px 16px;
  font-size: 13px; box-shadow: 0 8px 24px rgba(11,42,74,0.3);
  animation: toastin 200ms ease;
  display: flex; gap: 12px; align-items: center;
}
.toast a { color: #9CC2F5; }
.toast.fail { background: var(--status-fail); }
@keyframes toastin { from { transform: translateY(8px); opacity: 0; } }

/* skeleton rows (loading) */
.skel td > div { height: 12px; border-radius: 4px; background: var(--paper-100); }

/* ===== ICP Review Queue (§5.1 / UI_DIRECTION §4.5) ===== */
.icp-list { display: flex; flex-direction: column; gap: 12px; }
.icp-card {
  background: white; border: 1px solid var(--ink-100); border-radius: 8px;
  padding: 14px 18px; display: flex; gap: 18px; align-items: flex-start;
  opacity: 0; animation: rowin 300ms ease forwards;
  transition: box-shadow 150ms ease;
}
.icp-card:hover { box-shadow: 0 4px 16px rgba(11,42,74,0.08); }
.icp-card.low-confidence { border-left: 2px solid var(--accent-600); }
.icp-card.age-warn { background: #FDF8EC; }
.icp-card.age-late { background: var(--excluded-tint); }
.icp-main { flex: 1; min-width: 0; }
.icp-client { font-weight: 600; color: var(--ink-700); font-size: 14px; }
.icp-name { color: var(--ink-500); font-size: 13px; margin-left: 8px; }
.icp-filters { font-family: var(--mono); font-size: 12px; color: var(--ink-500); margin-top: 6px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.icp-brief { font-size: 11.5px; font-style: italic; color: var(--ink-300); margin-top: 5px; max-height: 2.6em; overflow: hidden; }
.icp-meta { display: flex; flex-direction: column; align-items: flex-end; gap: 6px; flex: 0 0 auto; }
.icp-source { font: 600 9.5px var(--sans); text-transform: uppercase; letter-spacing: 0.04em; padding: 3px 8px; border-radius: 9px; background: var(--paper-100); color: var(--ink-500); }
.icp-days { font-family: var(--mono); font-size: 12px; color: var(--ink-300); }
.icp-days.warn { color: var(--status-wait); }
.icp-days.late { color: var(--status-fail); }
.icp-actions { display: flex; gap: 10px; align-items: center; flex: 0 0 auto; padding-top: 4px; }
.icp-actions .review-link { font-size: 13px; color: var(--ink-500); cursor: pointer; background: none; border: none; }
.icp-actions .review-link:hover { color: var(--accent-600); }
.icp-actions .archive-link { font-size: 12px; color: var(--ink-300); cursor: pointer; background: none; border: none; }
.icp-progress { margin-top: 10px; padding: 10px 14px; background: var(--accent-100); border-radius: 8px; font-size: 13px; color: var(--ink-700); display: flex; gap: 10px; align-items: center; }

/* drawer form bits (shared by Review + New ICP) */
.f-row { margin-bottom: 14px; }
.f-row label { display: block; font: 600 11px var(--sans); text-transform: uppercase; letter-spacing: 0.04em; color: var(--ink-300); margin-bottom: 5px; }
.f-row input[type="text"], .f-row textarea, .f-row select, .f-row input[type="number"] {
  width: 100%; font: 13px var(--sans); color: var(--ink-700); padding: 8px 10px;
  border: 1px solid var(--ink-100); border-radius: 6px; background: white; box-sizing: border-box;
}
.f-row textarea { font-family: var(--mono); font-size: 12px; min-height: 64px; resize: vertical; }
.f-row .hint { font-size: 11px; color: var(--ink-300); margin-top: 3px; }
.f-split { display: flex; gap: 12px; }
.f-split .f-row { flex: 1; }
.llm-card {
  border: 1px solid var(--accent-100); border-radius: 8px; padding: 12px 14px; margin: 12px 0;
  font-size: 12.5px; color: var(--ink-500); position: relative;
  background: linear-gradient(white, white) padding-box,
              linear-gradient(120deg, #1E6FE8, #7B5CE0, #1E6FE8) border-box;
  border: 1px solid transparent;
}
.llm-card .conf { font: 600 10px var(--sans); text-transform: uppercase; color: var(--accent-600); }
.drawer-actions { display: flex; gap: 10px; margin-top: 18px; align-items: center; }
.refine-row { display: flex; gap: 8px; margin-top: 10px; }
.refine-row input { flex: 1; }
.turns-left { font-size: 11px; color: var(--ink-300); align-self: center; white-space: nowrap; }

/* ===== Contact List Viewer (§5.11 / UI_DIRECTION §4.6) ===== */
.cl-tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--ink-100); margin-bottom: 16px; }
.cl-tab {
  background: none; border: none; font: 500 13.5px var(--sans); color: var(--ink-300);
  padding: 9px 16px; cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -1px;
  transition: color 120ms ease;
}
.cl-tab:hover { color: var(--ink-700); }
.cl-tab.active { color: var(--accent-600); border-bottom-color: var(--accent-600); }

/* email status pills — §4.6 motion grammar */
.epill {
  display: inline-block; width: 100px; text-align: center; font: 600 10px var(--sans);
  text-transform: uppercase; letter-spacing: 0.04em; padding: 4px 6px; border-radius: 10px;
}
.epill.ready { background: var(--status-ready-bg); color: var(--status-ready); }
.epill.pending { background: var(--status-wait-bg); color: var(--status-wait); }
.epill.guess { background: var(--status-wait-bg); color: var(--status-wait); outline: 1px solid var(--accent-100); }
.epill.risky, .epill.catchall { background: var(--status-wait-bg); color: var(--status-wait); }
.epill.invalid { background: var(--status-fail-bg); color: var(--status-fail); }
.epill.muted { background: var(--paper-100); color: var(--ink-300); }

/* queue rank 5-dot viz */
.qdots { display: inline-flex; gap: 3px; margin-left: 7px; vertical-align: middle; }
.qdot { width: 6px; height: 6px; border-radius: 50%; border: 1px solid var(--ink-300); }
.qdot.filled { background: var(--accent-600); border-color: var(--accent-600); }
.cl-email { font-family: var(--mono); font-size: 12.5px; color: var(--ink-500); }
.cl-li { color: var(--ink-300); font-size: 13px; text-decoration: none; }
.cl-li:hover { color: var(--accent-600); }

/* coverage report */
.cl-cov-subtitle { color: var(--ink-500); font-size: 13.5px; margin: 2px 0 18px; }
.cov-section { margin-bottom: 26px; }
.cov-section h3 { font-family: var(--serif); font-style: italic; font-weight: 600; color: var(--ink-900); font-size: 17px; margin: 0 0 10px; }
.cov-row {
  display: flex; align-items: center; gap: 14px; background: white;
  border: 1px solid var(--ink-100); border-radius: 8px; padding: 10px 16px; margin-bottom: 8px;
}
.cov-row.savable { border: 1px solid transparent;
  background: linear-gradient(white, white) padding-box,
              linear-gradient(120deg, #1E6FE8, #7B5CE0, #1E6FE8) border-box; }
.cov-main { flex: 1; min-width: 0; }
.cov-name { color: var(--ink-700); font-weight: 500; font-size: 13.5px; }
.cov-domain { font-family: var(--mono); font-size: 11.5px; color: var(--ink-300); }
.cov-note { font-size: 12px; color: var(--ink-300); font-style: italic; }
.cov-actions { display: flex; gap: 8px; align-items: center; }
.manual-email-form { display: flex; gap: 6px; }
.manual-email-form input { font: 12px var(--mono); padding: 6px 8px; border: 1px solid var(--ink-100); border-radius: 6px; width: 220px; }

/* ===== Bulk Import (§5.6 / UI_DIRECTION §4.2) ===== */
.im-dropzone {
  background: var(--paper-100); border: 2px dashed var(--ink-100); border-radius: 12px;
  padding: 80px 40px; margin: 14px 0 28px; text-align: center; cursor: pointer;
  transition: background 150ms ease, border-color 150ms ease;
}
.im-dropzone:hover { border-color: var(--accent-600); }
body.im-dragging .im-dropzone, .im-dropzone.over {
  background: var(--accent-100); border: 2px solid var(--accent-600);
}
body.im-dragging #page-import { background: var(--accent-100); border-radius: 12px; }
.im-drop-title { font-size: 24px; margin-bottom: 8px; }
.im-drop-sub { font-size: 13px; color: var(--ink-300); }
.im-recent-title { font-family: var(--serif); color: var(--ink-900); font-size: 17px; margin: 24px 0 10px; }
.im-recent { background: white; border: 1px solid var(--ink-100); border-radius: 8px; overflow: hidden; }
.im-recent-row {
  padding: 12px 18px; border-bottom: 1px solid var(--paper-100);
  display: flex; justify-content: space-between; align-items: center; gap: 14px;
}
.im-recent-row:last-child { border-bottom: none; }
.im-recent-file { font-family: var(--mono); font-size: 12px; color: var(--ink-700); }
.im-recent-meta { font-size: 11px; color: var(--ink-300); margin-top: 2px; }
.im-recent-undo { font-size: 12px; white-space: nowrap; }
.im-recent-undo.expired { color: var(--ink-300); cursor: default; }
.im-undo-banner {
  background: var(--accent-100); border: 1px solid var(--accent-600); border-radius: 8px;
  padding: 11px 16px; margin-bottom: 16px; font-size: 13px; color: var(--ink-700);
  display: flex; justify-content: space-between; align-items: center;
}
.im-summary { font-style: italic; color: var(--ink-500); font-size: 15px; margin: 2px 0 16px; font-weight: 400; }
.im-summary .n-new { color: var(--status-ready); font-style: normal; }
.im-summary .n-mut { color: var(--ink-300); font-style: normal; }
.im-mapping { display: flex; gap: 12px; margin: 0 0 18px; flex-wrap: wrap; }
.im-map-card {
  background: white; border: 1px solid var(--ink-100); border-radius: 6px;
  padding: 10px 14px; font-size: 12px; min-width: 170px;
}
.im-map-card.verify { border: 1px solid transparent;
  background: linear-gradient(white, white) padding-box,
              linear-gradient(120deg, #B8861E, #1E6FE8, #1F8A55) border-box; }
.im-map-src { color: var(--ink-300); font-size: 10px; text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: 2px; }
.im-map-col { font-family: var(--mono); color: var(--ink-700); margin-bottom: 6px; }
.im-map-card select { width: 100%; font: 12px var(--mono); color: var(--accent-600); border: 1px solid var(--paper-100); border-radius: 4px; padding: 3px 4px; background: white; }
.im-map-note { font-size: 10.5px; color: var(--status-wait); font-style: italic; margin-top: 4px; }
/* dedup pills */
.dpill { display: inline-block; width: 100px; text-align: center; font: 600 10px var(--sans);
  text-transform: uppercase; letter-spacing: 0.04em; padding: 4px 6px; border-radius: 10px; }
.dpill.new { background: var(--status-ready-bg); color: var(--status-ready); }
.dpill.matched_existing { background: var(--paper-100); color: var(--ink-500); }
.dpill.suppressed_domain, .dpill.suppressed_email { background: var(--excluded-tint); color: var(--status-fail); }
.dpill.missing_required { background: var(--status-wait-bg); color: var(--status-wait); }
/* disposition pills — one-click cycle */
.disp { display: inline-block; width: 84px; text-align: center; font: 600 10px var(--sans);
  text-transform: uppercase; letter-spacing: 0.04em; padding: 4px 6px; border-radius: 10px;
  cursor: pointer; border: none; transition: all 120ms ease; }
.disp.include { background: var(--status-ready-bg); color: var(--status-ready); }
.disp.exclude { background: var(--excluded-tint); color: var(--status-fail); }
.disp.skip { background: var(--paper-100); color: var(--ink-300); }
.im-progress {
  margin-top: 14px; padding: 12px 16px; background: var(--accent-100); border-radius: 8px;
  font-size: 13px; color: var(--ink-700); display: flex; gap: 10px; align-items: center;
}

/* ===== Advance Queue (§5.12 / UI_DIRECTION §4.7) ===== */
.aq-quiet-link { font-size: 12.5px; color: var(--ink-300); }
.aq-quiet-link:hover { color: var(--accent-600); }
.aq-list { display: flex; flex-direction: column; gap: 10px; }
.aq-card {
  background: white; border: 1px solid var(--ink-100); border-radius: 8px;
  padding: 14px 18px; display: grid;
  grid-template-columns: 26px max-content 1fr auto; gap: 16px; align-items: center;
  opacity: 0; animation: rowin 300ms ease forwards;
  transition: box-shadow 150ms ease, opacity 300ms ease, transform 300ms ease;
}
.aq-card:hover { box-shadow: 0 4px 16px rgba(11,42,74,0.08); }
.aq-card.cursor-on { box-shadow: 0 0 0 2px var(--accent-600); }
.aq-card.leaving { opacity: 0 !important; transform: translateX(24px); }
.aq-card.no-backup { opacity: 0.7; }
.aq-ctx { text-align: center; min-width: 86px; }
.aq-ctx .aq-client { font-family: var(--mono); font-size: 11px; color: var(--ink-300); margin-bottom: 2px; }
.aq-ctx .aq-campaign { font-family: var(--mono); font-size: 10px; color: var(--ink-300); }
.aq-main { min-width: 0; }
.aq-line1 { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.aq-contact { font-weight: 600; color: var(--ink-700); }
.aq-at { color: var(--ink-300); font-size: 12px; }
.aq-meta { font-family: var(--mono); font-size: 11px; color: var(--ink-500); margin-top: 4px; }
.aq-days { font-family: var(--mono); }
.aq-days.warn { color: var(--status-wait); }
.aq-days.late { color: var(--status-fail); }
.aq-next { margin-top: 6px; font-size: 11px; }
.aq-next .lbl { color: var(--ink-300); margin-right: 4px; }
.aq-next .val { color: var(--ink-700); font-weight: 500; }
.aq-next .none { color: var(--status-fail); font-style: italic; }
.aq-actions { display: flex; flex-direction: column; gap: 6px; align-items: flex-end; }
.aq-skip { font-size: 12px; color: var(--ink-300); background: none; border: none; cursor: pointer; }
.aq-skip:hover { color: var(--status-fail); }

/* reason pills — §4.7 colour coding */
.rpill {
  display: inline-block; font: 600 10px var(--sans); text-transform: uppercase;
  letter-spacing: 0.05em; padding: 2px 7px; border-radius: 3px; white-space: nowrap;
}
.rpill.no_response { background: var(--status-wait-bg); color: var(--status-wait); }
.rpill.bounced { background: var(--status-fail-bg); color: var(--status-fail); }
.rpill.unsubscribed { background: var(--paper-100); color: var(--ink-500); }

/* ===== Privacy Requests (§5.8 / UI_DIRECTION §4.3) ===== */
.pv-list { background: white; border: 1px solid var(--ink-100); border-radius: 8px; overflow: hidden; }
.pv-row {
  padding: 10px 16px; border-bottom: 1px solid var(--paper-100);
  display: grid; grid-template-columns: 24px 1fr 90px 86px 50px auto;
  gap: 12px; align-items: center;
  opacity: 0; animation: rowin 300ms ease forwards;
  transition: background 150ms ease, opacity 300ms ease, transform 300ms ease;
}
.pv-row:last-child { border-bottom: none; }
.pv-row:hover { background: var(--paper-100); }
.pv-row.leaving { opacity: 0 !important; transform: translateX(24px); }
.pv-row.pv-sla-breached { background: var(--status-fail-bg); }
.pv-row.pv-sla-breached:hover { background: #F0D6CE; }
.pv-row.nl-dim { opacity: 0.35; }
.pv-main { min-width: 0; }
.pv-subject { font-weight: 600; color: var(--ink-700); font-size: 13.5px; }
.pv-text {
  font-size: 11.5px; color: var(--ink-300); font-style: italic; margin-top: 2px;
  cursor: pointer; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%;
}
.pv-text:hover { color: var(--ink-500); }
.pv-full {
  grid-column: 2 / -1; font-size: 12.5px; color: var(--ink-700); line-height: 1.5;
  white-space: pre-wrap; padding: 8px 0 4px; border-top: 1px dashed var(--ink-100); margin-top: 8px;
}
.pv-flag {
  display: inline-block; font: 700 9px var(--sans); text-transform: uppercase;
  letter-spacing: 0.05em; padding: 2px 6px; border-radius: 3px; margin-right: 6px; vertical-align: 1px;
}
.pv-flag.breached { background: var(--status-fail); color: white; }
.pv-flag.duplicate { background: var(--status-wait-bg); color: var(--status-wait); }
.pv-type { display: inline-block; width: 80px; text-align: center; font: 600 10px var(--sans);
  text-transform: uppercase; letter-spacing: 0.04em; padding: 4px 6px; border-radius: 10px; }
.pv-type.delete { background: var(--status-fail-bg); color: var(--status-fail); }
.pv-type.suppress { background: var(--status-wait-bg); color: var(--status-wait); }
.pv-type.export { background: var(--accent-100); color: var(--accent-600); }
.pv-type.correct { background: var(--status-ready-bg); color: var(--status-ready); }
.pv-count { font-family: var(--mono); font-size: 12px; color: var(--ink-500); text-align: right; }
.pv-age { font-family: var(--mono); font-size: 12px; }
.pv-age.calm { color: var(--ink-500); }
.pv-age.warn { color: var(--status-wait); }
.pv-age.late { color: var(--status-fail); font-weight: 600; }
.pv-actions { display: flex; gap: 10px; align-items: center; justify-content: flex-end; }
.pv-exclude-toggle { font-size: 11px; color: var(--ink-500); display: flex; align-items: center; gap: 4px; cursor: pointer; white-space: nowrap; }
.pv-reject { font-size: 11.5px; color: var(--ink-500); background: none; border: none; cursor: pointer; }
.pv-reject:hover { color: var(--status-fail); text-decoration: underline; }
.pv-primary { padding: 6px 12px; font-size: 11.5px; white-space: nowrap; }
.pv-manual-hint { font-size: 11px; color: var(--ink-300); font-style: italic; white-space: nowrap; }
/* cross-client impact card — inline, above the row's expanded area */
.pv-impact {
  grid-column: 1 / -1; background: #FFF7E6; border-left: 3px solid var(--status-wait);
  border-radius: 6px; padding: 12px 16px; margin-top: 8px;
}
.pv-impact .ttl { font-size: 13px; font-weight: 600; color: var(--ink-900); }
.pv-impact p { font-size: 12px; color: var(--ink-700); font-style: italic; margin: 4px 0 8px; }
.pv-impact .row { display: flex; gap: 8px; }
.pv-impact .cancel { background: white; border: 1px solid var(--ink-100); border-radius: 6px; font-size: 11.5px; padding: 5px 12px; cursor: pointer; color: var(--ink-500); }

/* NL command bar — pinned bottom, privacy page only */
.pv-nl-bar {
  position: fixed; bottom: 0; left: 240px; right: 0; z-index: 40;
  background: var(--paper-50); border-top: 1px solid var(--ink-100);
  padding: 12px 36px 10px; transition: all 250ms ease;
}
.pv-nl-bar input {
  width: 100%; font: italic 13.5px var(--sans); color: var(--ink-700);
  padding: 9px 12px; border: 1px solid var(--ink-100); border-radius: 6px; background: white;
}
.pv-nl-bar input:focus { outline: none; border-color: var(--accent-600); box-shadow: 0 0 0 3px var(--accent-100); }
.pv-nl-note { font-size: 10.5px; color: var(--ink-300); font-style: italic; margin-top: 5px; }
.pv-nl-preview {
  margin-bottom: 10px; padding: 13px 16px; border-radius: 8px; font-size: 13px;
  color: var(--ink-500); font-style: italic; border: 1px solid transparent;
  background: linear-gradient(white, white) padding-box,
              linear-gradient(120deg, #1E6FE8, #7B5CE0, #1E6FE8) border-box;
}
.pv-nl-preview .reveal-word { opacity: 0; animation: wordin 200ms ease forwards; display: inline; }
@keyframes wordin { to { opacity: 1; } }
.pv-nl-preview .pv-nl-actions { display: flex; gap: 10px; margin-top: 10px; align-items: center; font-style: normal; }
.pv-nl-preview .pv-nl-cancel { font-size: 12px; color: var(--ink-300); background: none; border: none; cursor: pointer; }
.pv-nl-filter-note { margin-top: 10px; font-size: 12.5px; color: var(--ink-500); font-style: italic; }
/* recently-actioned status chip */
.pv-rstatus { font: 600 10px var(--sans); text-transform: uppercase; letter-spacing: 0.04em;
  padding: 3px 8px; border-radius: 9px; }
.pv-rstatus.actioned { background: var(--status-ready-bg); color: var(--status-ready); }
.pv-rstatus.rejected { background: var(--paper-100); color: var(--ink-500); }

/* bottom stats strip — scrolls with page, mono */
.cl-stats {
  margin-top: 18px; padding: 11px 16px; background: var(--paper-100); border-radius: 8px;
  font-family: var(--mono); font-size: 12.5px; color: var(--ink-500); display: flex; gap: 26px; flex-wrap: wrap;
}
.cl-stats .y-good { color: var(--status-ready); }
.cl-stats .y-mid { color: var(--status-wait); }
.cl-stats .y-bad { color: var(--status-fail); }

/* ===== Tags page (§5.10 / UI_DIRECTION §4.4 — WU22 session 7) ===== */
.tg-total { align-self: flex-end; padding-bottom: 9px; margin-left: auto; font-size: 12px; color: var(--ink-300); }
.tg-tip { font-size: 11px; color: var(--ink-300); font-style: italic; margin-top: 10px; }

/* tag pills in the grid — quiet by default, accent flash on optimistic add */
.tg-pills { display: flex; gap: 4px; flex-wrap: wrap; align-items: center; }
.tg-pill { font: 500 10px var(--mono); background: var(--paper-100); color: var(--ink-500);
  padding: 2px 8px; border-radius: 10px; white-space: nowrap; }
.tg-pill.fresh { background: var(--accent-100); color: var(--accent-600); animation: softpulse 0.6s ease-out 1; }
/* relationship counterparties shown alongside tags (2026-06-11 display merge) */
.tg-pill.rel { background: transparent; border: 1px solid var(--accent-100); color: var(--accent-600); }
.tg-pill-more { font: 600 10px var(--sans); color: var(--accent-600); cursor: pointer; padding: 2px 4px; }

/* combo box + autocomplete dropdown inside the dark action bar */
.tg-combo-wrap { position: relative; display: inline-block; }
#tg-ab-tag { background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.25); color: white;
  padding: 7px 10px; border-radius: 5px; font: 500 12.5px var(--mono); min-width: 220px; }
#tg-ab-tag::placeholder { color: rgba(255,255,255,0.5); font-family: var(--sans); font-style: italic; }
#tg-ab-tag:focus { outline: none; border-color: rgba(255,255,255,0.6); }
.tg-suggest { position: absolute; bottom: calc(100% + 6px); left: 0; min-width: 260px; max-height: 220px;
  overflow-y: auto; background: white; border: 1px solid var(--ink-100); border-radius: 8px;
  box-shadow: 0 8px 28px rgba(11,42,74,0.18); z-index: 60; }
.tg-suggest-item { display: flex; justify-content: space-between; gap: 14px; padding: 8px 12px;
  font: 500 12px var(--mono); color: var(--ink-700); cursor: pointer; }
.tg-suggest-item:hover, .tg-suggest-item.hot { background: var(--accent-100); }
.tg-suggest-item .cnt { color: var(--ink-300); font-size: 11px; }
.tg-suggest-item.create { font-family: var(--sans); color: var(--accent-600); font-weight: 600; }

/* progress strip — the action bar's live narration while a bulk write runs */
.tg-progress { gap: 14px; }
#tg-progress-text { font-size: 12.5px; color: #C9D4E2; }
.tg-progress-track { flex: 1; max-width: 320px; height: 3px; background: rgba(255,255,255,0.18); border-radius: 2px; overflow: hidden; }
.tg-progress-fill { display: block; height: 100%; width: 0%; background: var(--accent-600); transition: width 200ms ease; }

/* upload preview — AI interpretation card with the iridescent edge (#7) */
.tg-interpretation { margin: 4px 0 14px; padding: 14px 18px; border-radius: 8px; font-size: 13.5px;
  color: var(--ink-500); font-style: italic; border: 1px solid transparent;
  background: linear-gradient(white, white) padding-box,
              linear-gradient(120deg, #1E6FE8, #7B5CE0, #1E6FE8) border-box; }
.tg-interpretation .reveal-word { opacity: 0; animation: wordin 200ms ease forwards; display: inline; }
.tg-interpretation .conf { font: 600 10px var(--sans); font-style: normal; text-transform: uppercase;
  letter-spacing: 0.04em; padding: 2px 8px; border-radius: 9px; margin-left: 8px; }
.tg-interpretation .conf.high { background: var(--status-ready-bg); color: var(--status-ready); }
.tg-interpretation .conf.medium { background: var(--status-wait-bg); color: var(--status-wait); }
.tg-interpretation .conf.low { background: var(--excluded-tint); color: var(--status-fail); }
.tg-up-section { margin: 16px 0 6px; font: 600 11px var(--sans); text-transform: uppercase;
  letter-spacing: 0.05em; color: var(--ink-300); }
.tg-up-row { font-size: 12.5px; color: var(--ink-500); padding: 3px 0; }
.tg-up-row .mono { color: var(--ink-300); font-size: 11px; }

/* manage drawer rows */
.tg-mg-row { display: flex; align-items: center; gap: 10px; padding: 9px 0; border-bottom: 1px solid var(--paper-100); }
.tg-mg-name { font: 500 12.5px var(--mono); color: var(--ink-700); flex: 1; min-width: 0; }
.tg-mg-count { font: 500 11px var(--mono); color: var(--ink-300); white-space: nowrap; }
.tg-mg-act { font-size: 11.5px; color: var(--accent-600); background: none; border: none; cursor: pointer; padding: 2px 4px; }
.tg-mg-act.danger { color: var(--status-fail); }
.tg-mg-edit { display: none; gap: 8px; margin-top: 8px; width: 100%; }
.tg-mg-row.editing .tg-mg-edit { display: flex; }
.tg-mg-edit input, .tg-mg-edit select { flex: 1; font: 500 12px var(--mono); padding: 5px 8px;
  border: 1px solid var(--ink-100); border-radius: 5px; }

/* ===== Relationships page (§5.7 — WU22 session 8) ===== */
.rl-hub-search-wrap { position: relative; max-width: 560px; }
#rl-hub-search, #gr-hub-search { width: 100%; font: 500 15px var(--sans); padding: 13px 16px; border: 1.5px solid var(--ink-100);
  border-radius: 8px; background: white; }
#rl-hub-search:focus, #gr-hub-search:focus { outline: none; border-color: var(--accent-600); box-shadow: 0 0 0 3px var(--accent-100); }
.rl-hub-suggest { top: calc(100% + 6px); bottom: auto; width: 100%; }
.rl-hub-suggest .meta { color: var(--ink-300); font-size: 11px; font-family: var(--mono); }
.rl-hub-create { margin-top: 14px; padding: 14px 16px; background: var(--paper-100); border-radius: 8px; max-width: 560px; }
.rl-hub-create-title { font: 600 11px var(--sans); text-transform: uppercase; letter-spacing: 0.05em;
  color: var(--ink-300); margin-bottom: 10px; }
.rl-hub-create input { font: 500 13px var(--sans); padding: 8px 10px; border: 1px solid var(--ink-100); border-radius: 6px; }

/* pinned hub banner */
.rl-hub-banner { background: var(--ink-900); color: white; padding: 14px 18px; border-radius: 8px;
  margin-bottom: 16px; display: flex; align-items: flex-start; gap: 14px; }
.rl-hub-banner .t { font-family: var(--serif); font-size: 18px; }
.rl-hub-banner .m { font-size: 12px; color: rgba(255,255,255,0.7); margin-top: 4px; font-family: var(--mono); }
.rl-hub-banner .x { margin-left: auto; background: none; border: none; color: rgba(255,255,255,0.6);
  font-size: 18px; cursor: pointer; line-height: 1; }
.rl-hub-banner .x:hover { color: white; }

/* step chips */
.rl-steps { display: flex; gap: 6px; margin-bottom: 16px; flex-wrap: wrap; }
.rl-step { font: 600 11px var(--sans); padding: 5px 11px; border-radius: 12px;
  border: 1px solid var(--ink-100); color: var(--ink-300); background: white; }
.rl-step.done { background: var(--status-ready-bg); color: var(--status-ready); border-color: var(--status-ready); }
.rl-step.active { background: var(--accent-100); color: var(--accent-600); border-color: var(--accent-600); }

/* input tabs */
.rl-input-tabs { display: flex; gap: 0; margin: 14px 0 0; border-bottom: 1px solid var(--ink-100); }
.rl-tab { font: 500 12.5px var(--sans); color: var(--ink-300); background: none; border: none;
  padding: 9px 16px; cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -1px; }
.rl-tab.active { color: var(--accent-600); border-bottom-color: var(--accent-600); }
.rl-input-panel { padding: 16px 0; }
#rl-paste { width: 100%; min-height: 140px; font: 500 12.5px var(--mono); padding: 12px;
  border: 1px solid var(--ink-100); border-radius: 8px; resize: vertical; }
.rl-input-foot { display: flex; align-items: center; gap: 14px; margin-top: 10px; }
.rl-input-foot a { font-size: 12.5px; color: var(--accent-600); }
.rl-manual-row { display: flex; gap: 10px; margin-bottom: 8px; }
.rl-manual-row input { font: 500 13px var(--sans); padding: 8px 10px; border: 1px solid var(--ink-100); border-radius: 6px; }

/* match review sections */
.rl-section { border: 1px solid var(--ink-100); border-radius: 8px; margin-bottom: 14px; overflow: hidden; background: white; }
.rl-section-head { display: flex; justify-content: space-between; align-items: center; padding: 10px 16px;
  font: 600 12px var(--sans); }
.rl-section-head a { color: var(--accent-600); font-weight: 500; cursor: pointer; }
.rl-section-head.green { background: var(--status-ready-bg); color: var(--status-ready); }
.rl-section-head.amber { background: var(--status-wait-bg); color: var(--status-wait); }
.rl-section-head.purple { background: #F2EBFF; color: #6B3FA0; }
.rl-row { display: flex; align-items: center; gap: 10px; padding: 9px 16px; border-top: 1px solid var(--paper-100);
  font-size: 13px; }
.rl-row .src { font-family: var(--mono); color: var(--ink-500); font-size: 12px; }
.rl-row .arr { color: var(--ink-300); }
.rl-row .tgt { font-weight: 500; color: var(--ink-700); }
.rl-row .score { font-family: var(--mono); color: var(--ink-300); font-size: 11px; }
.rl-row select { font: 500 12px var(--sans); padding: 5px 9px; border: 1px solid var(--ink-100); border-radius: 5px; }
.rl-row .already { font: 600 10px var(--sans); background: var(--status-wait-bg); color: var(--status-wait);
  padding: 2px 8px; border-radius: 9px; white-space: nowrap; }
.rl-row input[type="checkbox"] { width: 16px; height: 16px; accent-color: var(--accent-600); }
.rl-row .rl-mini { font-size: 11.5px; padding: 4px 10px; border: 1px solid var(--ink-100); border-radius: 5px;
  background: white; cursor: pointer; color: var(--ink-500); }
.rl-row .rl-mini.on { background: var(--accent-100); border-color: var(--accent-600); color: var(--accent-600); }
.rl-row .rl-domain-in { font: 500 11.5px var(--mono); padding: 4px 8px; border: 1px solid var(--ink-100);
  border-radius: 5px; width: 160px; }
.rl-review-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 20px; flex-wrap: wrap; }
.rl-threshold label { display: block; font: 600 10.5px var(--sans); text-transform: uppercase;
  letter-spacing: 0.05em; color: var(--ink-300); margin-bottom: 4px; }
.rl-threshold input[type="range"] { width: 200px; accent-color: var(--accent-600); }
.rl-commit-strip { display: flex; align-items: center; gap: 16px; margin-top: 6px; padding: 12px 16px;
  background: var(--paper-100); border-radius: 8px; font-size: 12.5px; }
.rl-confirm-card { padding: 20px 22px; background: white; border: 1px solid var(--ink-100); border-radius: 10px;
  max-width: 640px; }

/* confidence badges + existing-relationships rows */
.rl-conf { font: 600 10px var(--sans); text-transform: uppercase; letter-spacing: 0.04em;
  padding: 2px 8px; border-radius: 9px; }
.rl-conf.verified { background: var(--status-ready-bg); color: var(--status-ready); }
.rl-conf.self_reported { background: var(--status-wait-bg); color: var(--status-wait); }
.rl-conf.inferred { background: var(--paper-100); color: var(--ink-300); }
.rl-ex-row { display: flex; align-items: center; gap: 10px; padding: 9px 14px; border-bottom: 1px solid var(--paper-100);
  font-size: 12.5px; background: white; }
.rl-ex-row:first-child { border-top: 1px solid var(--paper-100); }
.rl-ex-row .who { font-weight: 500; color: var(--ink-700); }
.rl-ex-row .meta { font-family: var(--mono); font-size: 11px; color: var(--ink-300); }
.rl-ex-row .rm { margin-left: auto; background: none; border: none; color: var(--status-fail);
  cursor: pointer; font-size: 12px; }

/* excluded-list viewer panel (2026-06-24) */
.rl-ex-row .xl-remove, .rl-ex-row .xl-restore { margin-left: auto; font-size: 12px; white-space: nowrap; }
.rl-ex-row .xl-restore { color: var(--accent-blue, #1F6FEB); }
.xl-section-title { font-weight: 600; color: var(--ink-700); font-size: 13px; margin-bottom: 2px; }
.xl-section-sub { font-size: 11.5px; color: var(--ink-300); margin-bottom: 8px; }

/* contacts grid — job title column (operator request 2026-06-11) */
.cl-title { color: var(--ink-500); font-size: 12.5px; max-width: 180px; overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap; }

/* =========================================================================
   WU22 v1.1 (2026-06-11) — Universe header restructure (notes 2+3),
   inline panels (notes 1/5/17), geo hint (note 4), select-all banner
   (note 16), squishiness pass (notes 7+15)
   ========================================================================= */

/* --- Universe header: eyebrow + client→campaign headline + stacked pickers --- */
.u-header-universe { align-items: flex-start; }
.u-eyebrow {
  font-size: 11px; font-weight: 600; letter-spacing: 0.14em;
  text-transform: uppercase; color: var(--ink-300); margin-bottom: 2px;
}
.u-headline { margin: 0 0 14px; font-size: 30px; line-height: 1.15; }
.u-headline em { font-style: italic; }
.u-headline-sep { color: var(--ink-300); font-weight: 400; }
.u-pickers { display: flex; gap: 14px; align-items: flex-end; }
.u-pickers .client-select { min-width: 220px; }
.u-header-links { display: flex; flex-direction: column; gap: 10px; align-items: flex-end; padding-top: 6px; }

/* --- Inline panels (people search / exclusion upload / new client) --- */
.inline-panel {
  background: white; border: 1px solid var(--ink-100); border-left: 3px solid var(--accent-600);
  border-radius: 8px; padding: 18px 20px 16px; margin: 0 0 18px;
  box-shadow: 0 2px 10px rgba(11, 42, 74, 0.05);
  animation: panel-in 220ms cubic-bezier(0.2, 0.8, 0.3, 1);
}
@keyframes panel-in {
  from { opacity: 0; transform: translateY(-6px); }
  to   { opacity: 1; transform: translateY(0); }
}
.inline-panel-title { font-size: 18px; margin-bottom: 2px; }
.inline-panel-sub { font-size: 12.5px; color: var(--ink-300); margin-bottom: 14px; max-width: 640px; line-height: 1.5; }
.inline-panel-foot { display: flex; gap: 14px; align-items: center; }
.inline-panel textarea {
  width: 100%; min-height: 110px; resize: vertical; font-family: var(--mono); font-size: 12.5px;
  border: 1px solid var(--ink-100); border-radius: 6px; padding: 10px 12px; color: var(--ink-700);
  margin-bottom: 10px; background: var(--paper-50);
}
.inline-panel textarea:focus { outline: none; border-color: var(--accent-600); box-shadow: 0 0 0 3px var(--accent-100); }
.ps-status { font-size: 13px; color: var(--ink-500); font-style: italic; }
.ex-impact { font-size: 15px; margin: 12px 0 10px; }
.danger-solid { background: var(--status-fail); }
.danger-solid:hover { background: #9C3115; }

/* --- #78/#78b in-app Launch — Campaign Room panel (click-to-approve) --- */
.camp-launch-identity { margin-bottom: 10px; }
.camp-launch-id-row { display: flex; gap: 10px; align-items: baseline; font-size: 13px; line-height: 1.7; }
.camp-launch-id-label { width: 110px; flex: none; font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--ink-300); }
.camp-launch-id-row code { font-family: "Geist Mono", ui-monospace, Menlo, monospace; font-size: 12px; background: var(--paper-100); padding: 1px 6px; border-radius: 4px; }
.camp-launch-warn { color: var(--status-fail); font-size: 13px; line-height: 1.5; margin-bottom: 10px; }
/* #118 (CF-deliverability-circuit-breaker): the tripped banner - LOUD by design */
.camp-breaker-banner { background: var(--status-fail-bg); color: var(--status-fail); border: 1px solid var(--status-fail); border-radius: 8px; padding: 12px 14px; margin: 10px 0; font-size: 13px; line-height: 1.6; }
.camp-breaker-banner .ep-hint { color: var(--ink-500); margin-top: 4px; }
/* #124/GO-F: the pending_review vetting banner — an INFO tone (amber/wait),
   not the breaker's alarm red. Same shape so the Room reads consistently. */
.camp-review-banner { background: var(--status-wait-bg); color: var(--status-wait); border: 1px solid var(--status-wait); border-radius: 8px; padding: 12px 14px; margin: 10px 0; font-size: 13px; line-height: 1.6; }
.camp-review-banner .ep-hint { color: var(--ink-500); margin-top: 4px; }
.camp-launch-row { display: flex; gap: 10px; align-items: center; }
.camp-launch-receipt { margin-top: 10px; font-size: 13px; line-height: 1.6; }
.camp-launch-receipt .warn { color: var(--status-fail); }
.camp-launch-ok { color: var(--status-ready); font-weight: 600; }
.camp-launch-busy { color: var(--ink-300); }

/* --- Geo hint (note 4 — honest no-location-data state) --- */
.geo-hint {
  font-size: 12.5px; color: var(--status-wait); background: var(--status-wait-bg);
  border-radius: 6px; padding: 8px 12px; margin: -6px 0 14px; max-width: 720px;
}
/* Geography no-data notice, surfaced RIGHT under the Geography input (2026-06-23,
   Duncan: make the "no location data → orgs-enrich" explanation far more prominent
   at the filter). Tight to the input, accent-left bar, narrower so it reads as
   attached to the geography control rather than a page-wide footnote. */
.geo-hint--at-filter {
  margin: 6px 0 0; max-width: 360px; line-height: 1.45;
  border-left: 3px solid var(--status-wait);
}
.geo-hint--at-filter strong { color: var(--ink-700); }
/* Company size — collapsed by default so the dead-on-import-data filter doesn't
   dominate the row (2026-06-23, Duncan: make size less obtrusive). Native
   <details>; the existing #chip-size click handler is unchanged inside it. */
.size-disclosure > summary {
  list-style: none; cursor: pointer;
  font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em;
  color: var(--ink-300); user-select: none; padding: 2px 0;
}
.size-disclosure > summary::-webkit-details-marker { display: none; }
.size-disclosure > summary::after { content: " ▾"; color: var(--ink-300); }
.size-disclosure[open] > summary::after { content: " ▴"; }
.size-disclosure[open] .band-chips { margin-top: 6px; }

/* --- Select-all-matching banner (note 16 — Gmail pattern) --- */
.selectall-banner {
  font-size: 13px; color: var(--ink-700); background: var(--accent-100);
  border-radius: 6px; padding: 9px 14px; margin-bottom: 10px; text-align: center;
}
.selectall-banner a { font-weight: 600; }

/* --- Squishiness pass (notes 7+15): consistent press + hover + focus
       physics on every interactive element. 120ms out, instant in. --- */
.btn-primary, .btn-secondary, .band-chips button, .act, .rail-item, .cl-tab, .rl-tab {
  transition: transform 120ms cubic-bezier(0.2, 0.8, 0.3, 1),
              background 140ms ease, box-shadow 140ms ease, border-color 140ms ease;
}
.btn-primary:hover { box-shadow: 0 2px 8px rgba(30, 111, 232, 0.28); transform: translateY(-1px); }
.btn-primary:active { transform: translateY(0) scale(0.96); box-shadow: none; }
.btn-secondary:hover { transform: translateY(-1px); }
.btn-secondary:active { transform: translateY(0) scale(0.96); }
.band-chips button:active, .act:active { transform: scale(0.92); }
.btn-primary:focus-visible, .btn-secondary:focus-visible,
.band-chips button:focus-visible, .act:focus-visible,
select:focus-visible, input[type="text"]:focus-visible {
  outline: 2px solid var(--accent-600); outline-offset: 2px;
}
.btn-primary:disabled { transform: none; box-shadow: none; }

/* Selects: native chrome off, considered-publication feel on */
.client-select, .chip-group select {
  appearance: none; -webkit-appearance: none;
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%234A5E7A' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 10px center;
  padding-right: 28px; cursor: pointer;
}
.client-select:hover, .chip-group select:hover { border-color: var(--ink-300); }

/* Quiet links: underline draws in on hover instead of appearing */
.aq-quiet-link { position: relative; }
.aq-quiet-link::after {
  content: ""; position: absolute; left: 0; bottom: -2px; height: 1px; width: 0;
  background: currentColor; transition: width 160ms ease;
}
.aq-quiet-link:hover::after { width: 100%; }

/* ===== Graph page (relationship-graph v1 — 2026-06-11) ===== */
.gr-canvas-wrap {
  position: relative;
  margin-top: 14px;
  border: 1px solid var(--ink-100);
  border-radius: 12px;
  background:
    radial-gradient(ellipse at center, #fff 0%, var(--paper-50) 75%);
  overflow: hidden;
  height: calc(100vh - 290px);
  min-height: 420px;
}
#gr-svg { width: 100%; height: 100%; display: block; cursor: grab; }
.gr-edge { stroke: var(--ink-100); stroke-width: 1; opacity: .45; }
.gr-edge--verified { stroke: var(--status-ready); opacity: .35; }
.gr-edge--inferred { opacity: .25; }
.gr-node { cursor: pointer; }
.gr-dot { fill: var(--status-wait); stroke: #fff; stroke-width: 1.4; transition: r .12s ease; }
.gr-dot--verified { fill: var(--status-ready); }
.gr-dot--inferred { fill: var(--ink-300); }
.gr-node:hover .gr-dot { stroke: var(--accent-600); stroke-width: 2.2; }
.gr-label { font-size: 11px; fill: var(--ink-500); pointer-events: none; }
.gr-hub-dot {
  fill: var(--ink-900); stroke: var(--accent-600); stroke-width: 2;
  animation: gr-pulse 3.2s ease-in-out infinite;
}
@keyframes gr-pulse {
  0%, 100% { stroke-opacity: .9; }
  50% { stroke-opacity: .25; }
}
.gr-hub-label {
  font-family: var(--serif, Georgia, serif); font-size: 17px;
  fill: var(--ink-900); text-anchor: middle; pointer-events: none;
}
.gr-hub-count {
  font-size: 13px; fill: #fff; text-anchor: middle; pointer-events: none;
  font-variant-numeric: tabular-nums;
}
.gr-tooltip {
  position: absolute; z-index: 5; pointer-events: none;
  background: var(--ink-900); color: #fff; border-radius: 8px;
  padding: 7px 10px; font-size: 12px; max-width: 280px;
  box-shadow: 0 6px 18px rgba(11, 42, 74, .25);
}
.gr-tooltip .meta { color: var(--ink-100); font-size: 11px; }
.gr-card {
  position: absolute; top: 14px; right: 14px; z-index: 4; width: 270px;
  background: #fff; border: 1px solid var(--ink-100); border-radius: 12px;
  padding: 14px 16px; box-shadow: 0 10px 28px rgba(11, 42, 74, .12);
}
.gr-card-name { font-size: 17px; color: var(--ink-900); }
.gr-card-domain { font-size: 11.5px; color: var(--ink-300); margin-top: 2px; }
.gr-card-rel { font-size: 12.5px; color: var(--ink-500); margin-top: 10px;
  display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.gr-card-meta { font-size: 11.5px; color: var(--ink-300); margin-top: 8px; line-height: 1.5; }
.gr-card-actions { margin-top: 10px; font-size: 12.5px; }
.gr-card-actions a { color: var(--accent-600); text-decoration: none; }
.gr-card-actions a:hover { text-decoration: underline; }
.gr-hint {
  position: absolute; left: 14px; bottom: 12px; z-index: 4;
  background: #fff; border: 1px solid var(--ink-100); border-radius: 8px;
  color: var(--ink-500); font-size: 12px; padding: 6px 10px;
}

/* ===== Tag cloud (internal — 2026-06-11) ===== */
.tg-cloud-section { margin-top: 26px; }
.tg-cloud-title { font-size: 11px; color: var(--ink-300); letter-spacing: .08em; margin-bottom: 10px; }
.tg-cloud-body { display: flex; flex-wrap: wrap; gap: 14px 22px; align-items: baseline;
  background: #fff; border: 1px solid var(--ink-100); border-radius: 12px; padding: 22px 26px; }
.tg-cloud-item { color: var(--ink-700); line-height: 1.1; cursor: default;
  transition: color .15s ease; }
.tg-cloud-item.is-tag { color: var(--accent-600); }
.tg-cloud-item:hover { color: var(--ink-900); }
.tg-cloud-item sup { font-size: .45em; color: var(--ink-300); margin-left: 3px;
  font-variant-numeric: tabular-nums; }

/* ---- Anchoring queue (§9.9 item 3 / CF-anchoring-queue, 2026-06-12) ---- */
.an-wrap { margin-top: 28px; }
.an-summary { color: var(--ink-500); font-size: 13px; line-height: 1.55; margin-bottom: 12px; max-width: 720px; }
.an-summary .mono { font-family: var(--mono); color: var(--ink-900); }
.an-controls { margin-bottom: 14px; align-items: flex-end; }
.an-queue-head { font-size: 12px; color: var(--ink-300); margin: 6px 0; }
.an-queue-row { display: flex; align-items: baseline; gap: 10px; padding: 7px 12px; border-top: 1px solid var(--paper-100); background: white; }
.an-queue-row:first-of-type { border-top: 1px solid var(--ink-100); border-radius: 8px 8px 0 0; }
.an-queue-row:last-of-type { border-radius: 0 0 8px 8px; border-bottom: 1px solid var(--ink-100); }
.an-queue-row { border-left: 1px solid var(--ink-100); border-right: 1px solid var(--ink-100); }
.an-q-name { font-weight: 500; color: var(--ink-900); font-size: 13px; }
.an-q-meta { color: var(--ink-300); font-size: 12px; }
.an-queue-more { color: var(--ink-300); font-size: 12px; margin: 6px 2px; }

/* Merge review queue (§9.9 item 4, 2026-06-23) — reuses the an-wrap register. */
.mr-list { display: flex; flex-direction: column; gap: 8px; }
.mr-row { display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap;
  padding: 10px 14px; background: white; border: 1px solid var(--ink-100); border-radius: 10px; }
.mr-pair { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; min-width: 0; }
.mr-dup { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.mr-dup-name { font-weight: 600; color: var(--ink-900); font-size: 14px; }
.mr-meta { color: var(--ink-300); font-size: 12px; }
.mr-arrow { color: var(--ink-300); font-size: 12px; white-space: nowrap; }
.mr-canon { display: flex; flex-direction: column; gap: 2px; }
.mr-canon-name { font-weight: 500; color: var(--ink-900); font-size: 13px; }
.mr-canon-domain { color: var(--ink-500); font-size: 12px; }
.mr-canon-missing { color: var(--status-fail, #b54708); font-size: 12px; font-style: italic; }
.mr-score { color: var(--ink-300); font-size: 11px; font-family: var(--mono); }
.mr-actions { display: flex; align-items: center; gap: 8px; }
.an-apply-count { color: var(--ink-500); font-size: 12px; }

/* Per-tab explainer lede (CF-per-tab-explainers, 2026-06-22) — quiet "what this is / what you can do" line under a page header. Matches the inline pattern already used on Clients / Advance / Relationships / Graph. */
.page-lede { color: var(--ink-300); font-size: 13px; line-height: 1.5; margin: -6px 0 16px; max-width: 820px; }
.page-lede .mono { font-size: 11.5px; }

/* Upload-your-own-accounts nudge (CF-upload-your-own-accounts-inline, 2026-06-22) */
.u-accounts-nudge { display: flex; align-items: center; justify-content: space-between; gap: 12px; font-size: 13px; color: var(--ink-700); background: var(--accent-100); border-radius: 8px; padding: 9px 14px; margin: 0 0 14px; }
.u-accounts-nudge em { font-style: italic; color: var(--ink-900); }
.u-accounts-nudge #u-nudge-upload { font-weight: 600; color: var(--accent-600); }

/* ===== Tags & Relationships unified surface (CF-tags-relationships-merge, 2026-06-22) ===== */
.tr-subnav { display: flex; align-items: center; gap: 2px; border-bottom: 1px solid var(--ink-100); margin: 0 0 18px; }
.tr-tab { padding: 10px 14px; font-size: 14px; color: var(--ink-300); border-bottom: 2px solid transparent; margin-bottom: -1px; }
.tr-tab:hover { color: var(--ink-900); }
.tr-tab.active { color: var(--accent-600); border-bottom-color: var(--accent-600); font-weight: 600; }
.tr-tab-link { padding: 10px 12px; font-size: 13px; color: var(--accent-600); }
.tr-tab-link:hover { text-decoration: underline; }
.tr-subnav-spacer { flex: 1; }
.tr-subnav .aq-quiet-link { padding: 10px 8px; font-size: 13px; }
.tr-chooser { border: 1px solid var(--ink-100); border-radius: 10px; padding: 18px 20px; margin: 0 0 18px; background: white; }
.tr-chooser-title { font-size: 18px; margin-bottom: 14px; }
.tr-chooser-opts { display: flex; gap: 14px; flex-wrap: wrap; margin-bottom: 12px; }
.tr-chooser-opt { flex: 1; min-width: 240px; border: 1px solid var(--ink-100); border-radius: 8px; padding: 14px 16px; background: var(--paper-50); }
.tr-chooser-opt:hover { border-color: var(--accent-600); background: var(--accent-100); }
.tr-chooser-opt-h { font-size: 15px; font-weight: 600; color: var(--ink-900); margin-bottom: 4px; }
.tr-chooser-opt-s { font-size: 12.5px; color: var(--ink-500); line-height: 1.45; }

/* relationship-mapping inline (CF-tags-relationships-merge slice 3) */
.rmi-row { display: flex; gap: 14px; flex-wrap: wrap; margin-bottom: 10px; }
.rmi-hub-suggest { top: calc(100% + 6px); bottom: auto; left: 0; width: 100%; min-width: 240px; }
.rmi-hub-chip { font-size: 12.5px; color: var(--ink-700); margin-top: 6px; }
.rmi-count { color: var(--ink-300); font-size: 12px; }

/* multi-relationship: "+ Add another hub" repeater (shared wizard + inline) */
.xh-wrap { margin: 4px 0 10px; }
.xh-rows { display: flex; flex-direction: column; gap: 8px; }
.xh-row { align-items: flex-start; margin-bottom: 0; }
.xh-suggest { top: calc(100% + 6px); bottom: auto; left: 0; width: 100%; min-width: 220px; }
.xh-chip { font-size: 12.5px; color: var(--ink-700); margin-top: 6px; }
.xh-remove { color: var(--ink-300); text-decoration: none; font-size: 18px; line-height: 1; align-self: center; padding: 0 4px; }
.xh-remove:hover { color: var(--status-fail); }
.xh-add { display: inline-block; margin-top: 8px; font-size: 13px; }

/* Multi-tag chip filter on the browse grid (CF-tags-relationships-merge, AND) */
.tg-tagfilter { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; border: 1px solid var(--ink-100); border-radius: 6px; background: white; padding: 2px 4px; min-width: 180px; }
.tg-tagfilter:focus-within { border-color: var(--accent-600); box-shadow: 0 0 0 3px var(--accent-100); }
.tg-tagfilter input { border: none; outline: none; background: transparent; padding: 5px 4px; font: 13px var(--sans); min-width: 90px; flex: 1; }
.tg-tagchip { display: inline-flex; align-items: center; gap: 4px; background: var(--accent-100); color: var(--accent-600); border-radius: 10px; padding: 2px 4px 2px 8px; font-size: 12px; }
.tg-tagchip-x { color: var(--accent-600); font-weight: 600; line-height: 1; padding: 0 3px; }
.tg-tagchip-x:hover { color: var(--ink-900); }

/* Relationship ("Related to") filter on the browse grid (CF-tags-relationships-merge slice 2) */
.tg-relfilter { position: relative; display: inline-block; }
#tg-rel-suggest { bottom: auto; top: calc(100% + 6px); min-width: 220px; }

/* ===== Food Service Map — boundary-draw push panel (task #9, 2026-06-24) =====
   Semi-transparent overlay floating inside the map (Duncan's chosen placement). */
#est-map-wrap { position: relative; }
.est-draw-panel {
  position: absolute; left: 14px; bottom: 14px; z-index: 1000;
  width: 332px; max-height: 560px; display: flex; flex-direction: column;
  background: rgba(255, 255, 255, 0.92); backdrop-filter: blur(6px);
  border: 1px solid var(--ink-100); border-radius: 12px;
  box-shadow: 0 8px 28px rgba(11, 42, 74, 0.20); font-size: 13px; overflow: hidden;
}
.est-draw-panel.hidden { display: none; }
.edp-head { display: flex; align-items: center; justify-content: space-between; padding: 10px 13px; border-bottom: 1px solid var(--ink-100); }
.edp-title { font-size: 15px; }
.edp-close { color: var(--ink-300); text-decoration: none; font-size: 19px; line-height: 1; padding: 0 2px; }
.edp-close:hover { color: var(--ink-900); }
.edp-scope { display: flex; gap: 4px; padding: 9px 13px 3px; }
.edp-scope button { flex: 1; padding: 5px 4px; font-size: 11px; border: 1px solid var(--ink-100); background: #fff; border-radius: 7px; cursor: pointer; color: var(--ink-300); }
.edp-scope button.on { background: var(--accent-600); border-color: var(--accent-600); color: #fff; font-weight: 600; }
.edp-scope button:disabled { opacity: 0.45; cursor: not-allowed; }
.edp-count { padding: 5px 13px; color: var(--ink-900); font-weight: 600; font-size: 12px; }
.edp-list { flex: 1; overflow-y: auto; padding: 0 13px; min-height: 56px; max-height: 190px; }
.edp-row { padding: 6px 0; border-bottom: 1px solid rgba(11, 42, 74, 0.06); }
.edp-row .nm { font-weight: 600; color: var(--ink-900); }
.edp-row .meta { color: var(--ink-300); font-size: 11px; }
.edp-pickers { padding: 10px 13px; border-top: 1px solid var(--ink-100); display: flex; flex-direction: column; gap: 6px; }
.edp-pickers label { font-size: 11px; color: var(--ink-300); font-weight: 600; }
.edp-pickers select, .edp-pickers input { width: 100%; padding: 6px 8px; border: 1px solid var(--ink-100); border-radius: 7px; font: 12px var(--sans); }
.edp-foot { padding: 10px 13px; border-top: 1px solid var(--ink-100); display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.edp-foot .btn-primary, .edp-foot .btn-secondary { font-size: 12px; padding: 7px 12px; }
.edp-status { font-size: 11px; color: var(--ink-300); }
.edp-enrich { display: flex; align-items: center; gap: 6px; font-size: 11px; color: var(--ink-900); font-weight: 500; margin-top: 2px; cursor: pointer; }
.edp-enrich input { width: auto; }

/* ===== Food Service Map — right-hand control pane (2026-06-25) ===== */
#est-stage { display: flex; gap: 14px; align-items: stretch; }
#est-map-wrap { flex: 1 1 auto; min-width: 0; }
#est-pane {
  flex: 0 0 292px; display: flex; flex-direction: column; gap: 12px;
  max-height: 620px; overflow-y: auto;
}
.ep-block { background: #fff; border: 1px solid var(--ink-100); border-radius: 10px; padding: 12px 13px; }
.ep-block-grow { flex: 1 1 auto; }
.ep-head {
  font-size: 11px; text-transform: uppercase; letter-spacing: 0.05em;
  color: var(--ink-300); font-weight: 600; margin-bottom: 9px;
  display: flex; justify-content: space-between; align-items: baseline;
}
.ep-hint { text-transform: none; letter-spacing: 0; font-weight: 400; font-size: 10.5px; color: var(--ink-300); }

/* Legend (click to filter) */
.ep-legend { display: flex; flex-direction: column; gap: 1px; }
.ep-legend-empty { font-size: 12px; color: var(--ink-300); padding: 2px 0; }
.ep-leg-row {
  display: flex; align-items: center; gap: 9px; padding: 5px 7px;
  border-radius: 7px; cursor: pointer; transition: background 0.12s; user-select: none;
}
.ep-leg-row:hover { background: var(--paper-100); }
.ep-leg-row.active { background: var(--accent-100); }
.ep-leg-row.dim { opacity: 0.45; }
.ep-leg-dot { width: 11px; height: 11px; border-radius: 50%; flex: 0 0 11px; box-shadow: 0 0 0 1px rgba(11,42,74,0.14); }
.ep-leg-label { flex: 1 1 auto; font-size: 12.5px; color: var(--ink-700); }
.ep-leg-row.active .ep-leg-label { color: var(--accent-600); font-weight: 600; }
.ep-leg-n { font: 11.5px var(--mono); color: var(--ink-300); font-variant-numeric: tabular-nums; }

/* Layer toggles.
   #95: the Layers / Michelin / Lenses / Constellation / Client-lens blocks that
   used these were deleted from the map pane. The .ep-toggle primitive is KEPT —
   it is a generic pane switch and the pane will want one again. */
.ep-toggle { display: flex; align-items: center; justify-content: space-between; font-size: 12.5px; color: var(--ink-700); padding: 5px 0; cursor: pointer; }
.ep-toggle input { position: absolute; opacity: 0; pointer-events: none; }
.ep-switch { width: 32px; height: 18px; border-radius: 10px; background: var(--ink-100); position: relative; transition: background 0.15s; flex: 0 0 32px; }
.ep-switch::after { content: ""; position: absolute; top: 2px; left: 2px; width: 14px; height: 14px; border-radius: 50%; background: #fff; transition: transform 0.15s; box-shadow: 0 1px 2px rgba(0,0,0,0.2); }
.ep-toggle input:checked + .ep-switch { background: var(--accent-600); }
.ep-toggle input:checked + .ep-switch::after { transform: translateX(14px); }

/* F6 (#109, sheet row 41) — the map's AND pill bar under the category/type
   search box. Same quiet register as the Tags-page chips; the tiny kind
   label ("category" / "type") keeps two-pill combinations legible. */
.est-fs-pills { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin-top: 6px; }
.est-fs-pill { display: inline-flex; align-items: center; gap: 6px; font: 500 12px var(--sans);
  background: var(--accent-100); color: var(--accent-600); border-radius: 999px; padding: 3px 9px; }
.est-fs-pill .efp-k { font: 600 9.5px var(--sans); text-transform: uppercase; letter-spacing: .05em;
  color: var(--ink-300); }
.est-fs-pill .efp-x { color: var(--accent-600); text-decoration: none; font-size: 13px; line-height: 1; }
.est-fs-pill .efp-x:hover { color: var(--ink-900); }
.efp-and { font: 500 11px var(--sans); color: var(--ink-300); }

/* Sector checkboxes (#95) — the map's one multi-select filter. Native check
   inputs, not the .ep-switch toggle: a switch says "this layer is on/off",
   a checkbox says "include this in the set", and sectors are a set. Same
   light register as the legend rows above so the pane reads as one thing. */
.ep-checks { display: flex; flex-direction: column; gap: 1px; }
.ep-check {
  display: flex; align-items: center; gap: 9px; padding: 5px 7px;
  border-radius: 7px; cursor: pointer; transition: background 0.12s; user-select: none;
}
.ep-check:hover { background: var(--paper-100); }
.ep-check input { width: 14px; height: 14px; flex: 0 0 14px; accent-color: var(--accent-600); cursor: pointer; margin: 0; }
.ep-check-name { flex: 1 1 auto; font-size: 12.5px; color: var(--ink-700); line-height: 1.35; }
.ep-check input:checked ~ .ep-check-name { color: var(--accent-600); font-weight: 600; }

/* An unresolvable term in the merged category/type field (#95). The map keeps
   showing the last good filter — the field says so rather than lying quietly. */
.input-warn { border-color: var(--status-fail, #B8421E) !important; background: #FFF6F4; }

/* Live counts */
.ep-count-row { display: flex; justify-content: space-between; align-items: baseline; padding: 3px 0; font-size: 12.5px; color: var(--ink-500); }
.ep-count-row strong { color: var(--ink-900); font-size: 13px; }

/* Selected premises card */
.ep-selected { font-size: 12.5px; }
.ep-selected-empty { color: var(--ink-300); line-height: 1.5; }
.ep-sel-name { font-family: var(--serif); font-weight: 600; color: var(--ink-900); font-size: 15px; margin-bottom: 2px; line-height: 1.25; }
.ep-sel-meta { color: var(--ink-300); font-size: 11.5px; margin-bottom: 9px; }
.ep-sel-kv { display: flex; gap: 7px; margin: 4px 0; }
.ep-sel-kv .k { color: var(--ink-300); flex: 0 0 70px; font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.03em; padding-top: 2px; }
.ep-sel-kv .v { color: var(--ink-700); flex: 1; }
.ep-sel-cat { display: inline-flex; align-items: center; gap: 6px; }
.ep-sel-actions { display: flex; flex-direction: column; gap: 6px; margin-top: 12px; }
.ep-sel-actions button { width: 100%; font-size: 12px; padding: 8px 10px; cursor: pointer; }

/* The map INDEXER (#95 follow-up) — file one premises into a foodservice bucket, right
   from the selected-premises card. Sits ABOVE the promote actions on purpose:
   for an unfiled premises this is the more important gesture, because 61% of
   the map is unfiled and an unfiled premises is invisible to every sector
   filter. Amber register, not the neutral card register — it is a prompt. */
.ep-sel-ix {
  margin-top: 11px; padding: 10px 11px 11px;
  background: #FEF9EF; border: 1px solid #F0DCB4; border-radius: 8px;
}
.ep-sel-ix-head { font-size: 11.5px; font-weight: 600; color: #8A6417; line-height: 1.35; margin-bottom: 8px; }
.ep-sel-ix-l {
  display: block; font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.03em;
  color: var(--ink-300); margin: 7px 0 3px;
}
.ep-sel-ix select, .ep-sel-ix input {
  width: 100%; padding: 6px 8px; border: 1px solid var(--ink-100); border-radius: 6px;
  font: 12.5px var(--sans); color: var(--ink-700); background: #fff;
}
.ep-sel-ix select:focus, .ep-sel-ix input:focus { outline: none; border-color: var(--accent-600); }
.ep-sel-ix .ix-save { width: 100%; margin-top: 9px; font-size: 12px; padding: 8px 10px; cursor: pointer; }
.ep-sel-ix .ix-save:disabled { opacity: 0.5; cursor: not-allowed; }
/* Quiet "re-file" affordance on an ALREADY-filed premises — the common case is
   that it's right, so this must not shout. */
.ep-sel-refile { font-size: 11px; margin-left: 6px; color: var(--accent-600); text-decoration: none; }
.ep-sel-refile:hover { text-decoration: underline; }

/* Client lens picker + coverage legend (2026-06-25) */
.ep-client { width: 100%; padding: 7px 9px; border: 1px solid var(--ink-100); border-radius: 7px; font: 13px var(--sans); color: var(--ink-700); background: #fff; cursor: pointer; }
.ep-client:hover { border-color: var(--ink-300); }
.ep-client:focus { outline: none; border-color: var(--accent-600); box-shadow: 0 0 0 3px var(--accent-100); }
.ep-client-hint { font-size: 11px; color: var(--ink-300); margin-top: 7px; line-height: 1.45; }
#est-coverage .ep-leg-row { cursor: default; }
#est-coverage .ep-leg-row:hover { background: transparent; }

/* Company drawer — Sites(N) panel + mini-map (WU23-i, 2026-06-25) */
.d-chain-tag { display: inline-block; font: 600 10px var(--sans); text-transform: uppercase; letter-spacing: 0.06em; color: var(--accent-600); background: var(--accent-100); padding: 1px 7px; border-radius: 10px; vertical-align: middle; margin-left: 6px; }
.d-sites-chip { font-size: 12.5px; color: var(--ink-500); margin: 2px 0 9px; }
.d-sites-map { height: 180px; border: 1px solid var(--ink-100); border-radius: 8px; margin-bottom: 10px; }
.d-sites-list { max-height: 220px; overflow-y: auto; }
.d-site-row { display: flex; justify-content: space-between; gap: 10px; padding: 5px 0; border-bottom: 1px solid rgba(11,42,74,0.06); font-size: 12.5px; }
.d-site-row .nm { color: var(--ink-900); font-weight: 500; }
.d-site-row .meta { color: var(--ink-300); font-size: 11.5px; white-space: nowrap; }

@media (max-width: 900px) {
  #est-stage { flex-direction: column; }
  #est-pane { flex: 1 1 auto; max-height: none; }
}

/* Buyer-grammar rail labels on the whole-database filter rails (filter-
   redesign slices B+C, 2026-07-03 #50). */
.rail-tag {
  font-size: 10px; color: var(--ink-300); letter-spacing: 0.1em;
  text-transform: uppercase; border-top: 1px solid var(--ink-100);
  padding-top: 8px; margin: 4px 0 8px;
}
.chip-group .lbl-hint { text-transform: none; letter-spacing: 0; opacity: 0.8; }
.chips-row { margin-bottom: 12px; }

/* ===== Chip-input pills (#51 — multi-keyword / territory pills, Tab to commit) ===== */
.chips-input {
  display: flex; flex-wrap: wrap; align-items: center; gap: 4px;
  border: 1px solid var(--ink-100); border-radius: 6px; background: white;
  padding: 2px 4px; min-width: 200px; cursor: text;
}
.chips-input:focus-within { border-color: var(--accent-600); box-shadow: 0 0 0 3px var(--accent-100); }
.chips-input input[type="text"] {
  border: none !important; outline: none; background: transparent;
  padding: 5px 4px; font: 13px var(--sans); min-width: 90px; flex: 1;
  box-shadow: none !important;
}
.chips-pill {
  display: inline-flex; align-items: center; gap: 4px;
  background: var(--accent-100); color: var(--accent-600);
  border-radius: 10px; padding: 2px 4px 2px 8px; font-size: 12px; white-space: nowrap;
}
.chips-pill-x { color: var(--accent-600); font-weight: 600; line-height: 1; padding: 0 3px; text-decoration: none; }
.chips-pill-x:hover { color: var(--ink-900); }

/* ===== Reply Monitor (WS4 #56) ===== */
.rm-pickers { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin: 0 0 14px; }
.rm-pickers select { max-width: 260px; }
.rm-review-only { font-size: 12.5px; color: var(--ink-500); display: inline-flex; gap: 6px; align-items: center; }
.rm-mode-wrap { display: inline-flex; gap: 10px; align-items: center; }
.rm-mode-pill { border-radius: 999px; padding: 3px 11px; font-size: 11px; font-weight: 700; letter-spacing: .06em; }
.rm-mode-forward { background: var(--paper-100); color: var(--ink-500); }
.rm-mode-triage { background: var(--accent-100); color: var(--accent-600); }
.rm-mode-btn { font-size: 12px; }
.rm-summary { font-size: 13px; margin: 0 0 8px; color: var(--ink-500); }
/* #102 (CD-1): inline campaign-detail Reply Monitor — reuses .rm-* for cards/pills. */
.camp-replies-head-extra { font-size: 12px; color: var(--ink-500); font-weight: 400; }
.camp-replies-empty { color: var(--ink-300); font-size: 13px; padding: 4px 0; }
.camp-replies-more { color: var(--ink-300); font-size: 12px; margin-top: 8px; }
.rm-engagement { font-size: 12.5px; color: var(--ink-500); background: var(--paper-100); border-radius: 8px; padding: 8px 12px; margin: 0 0 14px; }
.rm-list { display: flex; flex-direction: column; gap: 10px; max-width: 860px; }
.rm-card { background: #fff; border: 1px solid var(--ink-100); border-radius: 10px; padding: 12px 16px; }
.rm-card-top { display: flex; gap: 10px; align-items: baseline; flex-wrap: wrap; font-size: 12px; color: var(--ink-300); }
.rm-from { color: var(--ink-500); font-size: 12px; }
.rm-when, .rm-src { font-size: 11.5px; }
.rm-subject { font-weight: 600; color: var(--ink-700); font-size: 13.5px; margin: 6px 0 2px; }
.rm-body { color: var(--ink-500); font-size: 13px; line-height: 1.5; white-space: pre-wrap; }
.rm-card-foot { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin-top: 8px; }
.rm-pill { display: inline-block; border-radius: 999px; padding: 2px 10px; font-size: 11px; font-weight: 600; letter-spacing: .04em; }
.rm-pill-positive { background: var(--status-ready-bg); color: var(--status-ready); }
.rm-pill-neutral { background: var(--paper-100); color: var(--ink-500); }
.rm-pill-negative { background: var(--status-wait-bg); color: var(--status-wait); }
.rm-pill-hard_negative { background: var(--status-fail-bg); color: var(--status-fail); }
.rm-pill-out_of_office { background: var(--accent-100); color: var(--accent-600); }
.rm-pill-unsubscribe { background: var(--excluded-tint); color: var(--status-fail); }
.rm-pill-none { background: var(--paper-100); color: var(--ink-300); }
.rm-conf { font-size: 11px; color: var(--ink-300); }
.rm-review-badge { color: var(--status-wait); font-size: 12px; font-weight: 600; }
.rm-acted { color: var(--status-ready); font-size: 12px; }
.rm-review-sel { font-size: 12px; }
.rm-review-save { font-size: 12px; padding: 4px 12px; }

/* ===== WS6 (#56 sprint): dashboard + status-bar theatre ===== */
.dash-empty { color: var(--ink-300); font-size: 14px; padding: 40px 0 20px; text-align: center; }
.dash-grid {
  /* F2 row 36 (#108): Mailing responses moved out to a full-width panel under
     the headline stats — two panels remain in the row, so 2-up not 3-up. */
  display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; margin-top: 14px;
}
.dash-panel {
  background: #fff; border: 1px solid var(--ink-100); border-radius: 10px;
  padding: 14px 16px; min-height: 120px;
  transition: box-shadow 400ms ease, border-color 400ms ease;
}
.dash-tall { grid-row: span 2; }
.dash-panel.dash-focus { border-color: var(--accent-600); box-shadow: 0 0 0 3px var(--accent-100); }
.dash-head { font-size: 11px; letter-spacing: .07em; text-transform: uppercase; color: var(--ink-300); font-weight: 600; margin-bottom: 8px; }
.dash-body { font-size: 13px; color: var(--ink-500); }
.dash-metric { display: flex; justify-content: space-between; align-items: baseline; padding: 3px 0; }
.dash-metric strong { font-family: var(--mono); font-size: 15px; color: var(--ink-700); font-variant-numeric: tabular-nums; }
.dash-metric .dm-big { font-size: 22px; }
.dash-band { display: flex; height: 8px; border-radius: 4px; overflow: hidden; margin: 8px 0 4px; background: var(--paper-100); }
.dash-band span { display: block; height: 100%; }
.dash-feed-row { display: flex; gap: 8px; align-items: baseline; padding: 5px 0; border-bottom: 1px solid var(--paper-100); font-size: 12.5px; }
.dash-feed-row:last-child { border-bottom: none; }
.dash-feed-when { flex: none; font-family: var(--mono); font-size: 11px; color: var(--ink-300); width: 82px; }
.dash-feed-kind { flex: none; width: 8px; height: 8px; border-radius: 50%; align-self: center; }
.dash-feed-line { color: var(--ink-500); line-height: 1.45; }
.dash-feed-row.df-running { position: relative; overflow: hidden; }
.dash-feed-row.df-running .dash-feed-line { color: var(--ink-700); }
.dash-timeline { border-left: 2px solid var(--ink-100); margin-left: 6px; padding-left: 16px; }
.dash-tl-row { position: relative; padding: 5px 0 5px 2px; font-size: 12.5px; color: var(--ink-500); }
.dash-tl-row::before { content: ""; position: absolute; left: -21.5px; top: 12px; width: 9px; height: 9px; border-radius: 50%; background: var(--accent-600); border: 2px solid #fff; }
.dash-tl-when { font-family: var(--mono); font-size: 11px; color: var(--ink-300); margin-right: 8px; }

.statusbar {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 60;
  display: flex; align-items: center; gap: 8px;
  background: rgba(250, 250, 248, 0.94); backdrop-filter: blur(4px);
  border-top: 1px solid var(--ink-100);
  padding: 6px 18px; font-size: 12.5px; color: var(--ink-500);
}
.sb-prev { opacity: 0.4; margin-right: 10px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 34%; }
.sb-text { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
@media (max-width: 1280px) { .dash-grid { grid-template-columns: repeat(2, 1fr); } }

/* ===== Floating selected-premises card on the map (2026-07-06) ===== */
.est-float {
  position: absolute; left: 12px; bottom: 12px; z-index: 900;
  width: 300px; max-height: 60%; overflow-y: auto;
  background: rgba(255, 255, 255, 0.97); border: 1px solid var(--ink-100);
  border-radius: 10px; box-shadow: 0 4px 14px rgba(11, 42, 74, 0.14);
  padding: 10px 14px 12px;
}
.est-float-head {
  font-size: 11px; letter-spacing: .07em; text-transform: uppercase;
  color: var(--ink-300); font-weight: 600; margin-bottom: 6px;
  display: flex; justify-content: space-between; align-items: baseline;
}
.est-float-head a { color: var(--ink-300); text-decoration: none; font-size: 16px; line-height: 1; }
.est-float-head a:hover { color: var(--ink-700); }

/* ===== #177 — chain search on the admin map =====
   The results list hangs off the filter field; the chain card sits on the map
   to the RIGHT so it never covers the selected-premises card (bottom-left) or
   the boundary-push panel (bottom-left). Two cards, two corners. */
.est-chain-group { position: relative; }
.est-chain-group input { width: 100%; }
.est-chain-results {
  position: absolute; top: calc(100% + 4px); left: 0; z-index: 1200;
  width: 360px; max-height: 300px; overflow-y: auto;
  background: #fff; border: 1px solid var(--ink-100); border-radius: 10px;
  box-shadow: 0 8px 28px rgba(11, 42, 74, 0.18); padding: 4px 0;
}
.est-chain-results.hidden { display: none; }
.ecr-row { padding: 7px 12px; border-bottom: 1px solid rgba(11, 42, 74, 0.06); cursor: pointer; }
.ecr-row:last-child { border-bottom: 0; }
.ecr-row:hover, .ecr-row:focus { background: rgba(31, 111, 235, 0.06); outline: none; }
.ecr-row.meta, .ecr-row .meta { color: var(--ink-300); font-size: 11px; }
.ecr-row.meta { cursor: default; line-height: 1.5; }
.ecr-row.meta:hover { background: transparent; }
.ecr-row .nm { font-weight: 600; color: var(--ink-900); font-size: 12.5px; display: flex; justify-content: space-between; gap: 10px; }
.ecr-n { font-weight: 500; color: var(--accent-600); font-size: 11px; white-space: nowrap; }
.est-chain-card { left: auto; right: 12px; bottom: 12px; width: 316px; }
.ecc-name { font-weight: 700; font-size: 14px; color: var(--ink-900); line-height: 1.3; }
.ecc-sub { font-size: 12px; color: var(--ink-300); margin-top: 2px; }
.ecc-regions { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 8px; }
.ecc-reg { font-size: 10.5px; padding: 2px 6px; border-radius: 6px; background: rgba(11, 42, 74, 0.06); color: var(--ink-700); }
.ecc-note { font-size: 10.5px; color: var(--ink-300); margin-top: 7px; line-height: 1.45; }
.ecc-push { margin-top: 11px; padding-top: 10px; border-top: 1px solid var(--ink-100); display: flex; flex-direction: column; gap: 6px; }
.ecc-lab { font-size: 11px; color: var(--ink-300); font-weight: 600; }
.ecc-push select { width: 100%; padding: 6px 8px; border: 1px solid var(--ink-100); border-radius: 7px; font: 12px var(--sans); }
.ecc-push .btn-primary, .ecc-push .btn-secondary { font-size: 12px; padding: 7px 12px; }
.ecc-status { font-size: 11px; color: var(--ink-300); line-height: 1.45; }
.ecc-status.hidden, .ecc-push .hidden { display: none; }

/* ===== WS9 (#64): in-app chat panel — UI_DIRECTION §6.1 register.
   AI text flush-left (no bubble) with typing cursor; operator messages in a
   paper bubble; tool activity as muted mono lines. Slide-in from the right,
   ~520px, above the statusbar, below toasts. ===== */
.chat-fab {
  position: fixed; right: 24px; bottom: 44px; z-index: 58;
  background: var(--ink-900); color: white; border: none; border-radius: 999px;
  font: 600 13px var(--sans); padding: 10px 18px; cursor: pointer;
  box-shadow: 0 6px 20px rgba(11,42,74,0.28);
  transition: transform 120ms ease, background 140ms ease;
}
.chat-fab:hover { background: var(--ink-700); transform: translateY(-1px); }
.chat-fab.hidden { display: none; }
.chat-panel {
  position: fixed; top: 0; bottom: 0; right: -560px; width: 520px; max-width: 92vw;
  z-index: 59; background: white; border-left: 1px solid var(--ink-100);
  box-shadow: -12px 0 32px rgba(11,42,74,0.10);
  display: flex; flex-direction: column;
  transition: right 260ms cubic-bezier(0.2, 0.8, 0.3, 1);
}
.chat-panel.open { right: 0; }
.chat-head {
  display: flex; align-items: baseline; gap: 10px;
  padding: 18px 22px 12px; border-bottom: 1px solid var(--paper-100);
}
.chat-title { font-family: var(--serif); font-size: 20px; color: var(--ink-900); }
.chat-sub { font-size: 11.5px; color: var(--ink-300); flex: 1; }
.chat-msgs {
  flex: 1; overflow-y: auto; padding: 16px 22px;
  display: flex; flex-direction: column; gap: 12px; font-size: 13.5px;
}
.chat-msg-user {
  align-self: flex-end; max-width: 86%;
  background: var(--paper-100); border-radius: 10px 10px 2px 10px;
  padding: 9px 13px; color: var(--ink-700); white-space: pre-wrap;
}
.chat-msg-ai {
  align-self: stretch; color: var(--ink-700); line-height: 1.55;
  white-space: pre-wrap;
}
.chat-msg-ai a { color: var(--accent-600); }
.chat-tool {
  font: 500 11.5px var(--mono); color: var(--ink-300);
  padding-left: 10px; border-left: 2px solid var(--paper-100);
}
.chat-tool.done { color: var(--ink-500); border-left-color: var(--accent-100); }
.chat-err { font-size: 12px; color: var(--status-fail, #B8421E); }
.chat-inputrow {
  display: flex; gap: 10px; align-items: flex-end;
  padding: 12px 22px 16px; border-top: 1px solid var(--paper-100);
}
.chat-inputrow textarea {
  flex: 1; resize: none; border: 1px solid var(--ink-100); border-radius: 8px;
  font: 13.5px var(--sans); color: var(--ink-700); padding: 9px 12px;
  background: var(--paper-50);
}
.chat-inputrow textarea:focus {
  outline: none; border-color: var(--accent-600);
  box-shadow: 0 0 0 3px var(--accent-100);
}

/* WS9 slices 2+3: confirm cards — the operator's explicit gate. */
.chat-card {
  border: 1px solid var(--accent-100); border-left: 3px solid var(--accent-600);
  border-radius: 0 10px 10px 0; background: var(--paper-50);
  padding: 14px 16px; animation: panel-in 260ms ease;
}
.chat-card-busy { opacity: 0.65; pointer-events: none; }
.chat-card-title {
  font: 600 11px var(--sans); text-transform: uppercase; letter-spacing: 0.06em;
  color: var(--accent-600); margin-bottom: 8px;
}
.chat-card-line { font-size: 13.5px; color: var(--ink-700); margin-bottom: 10px; }
.chat-card-label {
  display: block; font: 600 10.5px var(--sans); text-transform: uppercase;
  letter-spacing: 0.05em; color: var(--ink-300); margin-bottom: 4px;
}
.chat-card-name {
  width: 100%; box-sizing: border-box; border: 1px solid var(--ink-100);
  border-radius: 7px; font: 13.5px var(--sans); color: var(--ink-900);
  padding: 8px 11px; background: white; margin-bottom: 10px;
}
.chat-card-name:focus {
  outline: none; border-color: var(--accent-600);
  box-shadow: 0 0 0 3px var(--accent-100);
}
/* F5-B1 (#112): the build card's depth select + read-only filter chips */
.chat-card-depth {
  width: 100%; box-sizing: border-box; border: 1px solid var(--ink-100);
  border-radius: 7px; font: 13.5px var(--sans); color: var(--ink-900);
  padding: 8px 11px; background: white; margin-bottom: 10px;
}
.chat-card .fcard-groups { margin: 0 0 10px; gap: 12px; }
.chat-card-note { font-size: 11.5px; color: var(--ink-300); line-height: 1.5; margin-bottom: 12px; }
.chat-card-warn { font-size: 12px; color: var(--status-wait, #B8861E); margin-bottom: 8px; }
.chat-card-actions { display: flex; gap: 14px; align-items: center; }
.chat-card-cancel, .chat-card-link { font-size: 12.5px; color: var(--ink-500); }
.chat-card-link { color: var(--accent-600); }

/* ===== Market Signals (WS8 #69) ===== */
.sg-summary { display: flex; gap: 18px; align-items: center; flex-wrap: wrap; font-size: 13px; color: var(--ink-500); margin: 2px 0 16px; }
.sg-stat b { font-size: 15px; color: var(--ink-900); margin-right: 4px; }
.sg-stat-ok b { color: var(--status-ready); }
.sg-stat-mute { color: var(--ink-300); }
.sg-stat-sep { width: 1px; height: 18px; background: var(--ink-100); }
.sg-form { background: #fff; border: 1px solid var(--ink-100); border-radius: 10px; padding: 16px 18px; margin: 0 0 18px; }
.sg-form-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 10px 14px; }
.sg-notes-wrap { grid-column: span 2; }
.sg-form-actions { display: flex; gap: 10px; align-items: center; margin-top: 12px; flex-wrap: wrap; }
.sg-form-hint { font-size: 11.5px; color: var(--ink-300); }
.sg-cols { display: grid; grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); gap: 22px; align-items: start; }
@media (max-width: 1100px) { .sg-cols { grid-template-columns: 1fr; } }
.sg-col-head { display: flex; gap: 10px; align-items: center; margin-bottom: 10px; }
.sg-h3 { font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-300); margin: 0 8px 0 0; font-weight: 600; }
.sg-feed, .sg-plays { display: flex; flex-direction: column; gap: 10px; }
.sg-card, .sg-play { background: #fff; border: 1px solid var(--ink-100); border-radius: 10px; padding: 12px 14px; opacity: 0; animation: rowin .3s ease forwards; }
.sg-card-dismissed { opacity: .55; }
.sg-card-actioned { border-left: 3px solid var(--status-ready); }
.sg-card-confirmed { border-left: 3px solid var(--accent-600); }
.sg-card-top { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-bottom: 4px; }
.sg-type { font-size: 11px; font-weight: 600; letter-spacing: .05em; text-transform: uppercase; color: var(--ink-500); background: var(--paper-100); border-radius: 999px; padding: 2px 9px; }
.sg-pill { font-size: 10.5px; font-weight: 600; letter-spacing: .04em; border-radius: 999px; padding: 2px 9px; }
.sg-pill-proposed { background: var(--status-wait-bg); color: var(--status-wait); }
.sg-pill-confirmed { background: var(--status-ready-bg); color: var(--status-ready); }
.sg-pill-actioned { background: var(--accent-100); color: var(--accent-600); }
.sg-pill-dismissed, .sg-pill-mute { background: var(--paper-100); color: var(--ink-300); }
.sg-pill-str { background: var(--paper-100); color: var(--ink-500); }
.sg-chainbadge { font-size: 10.5px; color: var(--ink-300); border: 1px dashed var(--ink-100); border-radius: 999px; padding: 1px 8px; }
.sg-age { font-size: 11px; color: var(--ink-300); margin-left: auto; }
.sg-brand { font-size: 16.5px; color: var(--ink-900); margin: 2px 0; }
.sg-meta { font-size: 12px; color: var(--ink-500); line-height: 1.55; }
.sg-matched { color: var(--status-ready); font-weight: 600; }
.sg-unmatched { color: var(--status-wait); font-weight: 600; }
.sg-suggest-link { font-size: 12px; }
.sg-note { font-size: 12px; color: var(--ink-500); background: var(--paper-100); border-radius: 6px; padding: 5px 9px; margin-top: 6px; }
.sg-suggest { margin-top: 8px; font-size: 12px; color: var(--ink-500); display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }
.sg-suggest-dom { font-size: 10.5px; color: var(--ink-300); }
.sg-actions { display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap; }
.sg-btn { font-size: 12px; padding: 5px 12px; }
.sg-confirm-note { display: flex; gap: 8px; margin-top: 8px; }
.sg-confirm-note input { flex: 1; }
.sg-play-inactive { opacity: .72; }
.sg-play-name { font-size: 15px; color: var(--ink-900); }
.sg-play-angle { font-size: 12.5px; color: var(--ink-500); font-style: italic; margin: 3px 0; }
.sg-edit { margin-top: 8px; }
.sg-edit textarea { width: 100%; font-family: var(--mono); font-size: 11.5px; border: 1px solid var(--ink-100); border-radius: 8px; padding: 8px; box-sizing: border-box; margin-bottom: 6px; }
.sg-launch { background: #fff; border: 1px solid var(--accent-600); border-radius: 10px; padding: 16px 18px; margin-top: 20px; box-shadow: 0 2px 10px rgba(11, 42, 74, .07); }
.sg-launch-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; }
.sg-receipt { border-top: 1px solid var(--ink-100); margin-top: 14px; padding-top: 12px; font-size: 12.5px; }
.sg-receipt-head { font-size: 14px; color: var(--ink-900); margin-bottom: 8px; }
.sg-warn { color: var(--status-wait); background: var(--status-wait-bg); border-radius: 6px; padding: 4px 9px; margin: 4px 0; font-size: 12px; }
.sg-sample { background: var(--paper-100); border-radius: 999px; padding: 2px 9px; font-size: 11.5px; }
.sg-seq { margin: 8px 0 0 18px; padding: 0; font-size: 12px; color: var(--ink-500); }
.sg-nextgates { margin-top: 12px; background: var(--status-ready-bg); border-radius: 8px; padding: 10px 14px; font-size: 12.5px; }
.sg-nextgates ol { margin: 6px 0 8px 18px; padding: 0; }

/* ----- Retailer Calendar (Layer 4 slice 4, #119) ----- */
.sg-header-actions { display: flex; gap: 10px; align-items: center; }
.sg-cal-due { margin: 0 0 18px; }
.sg-cal-due-head { display: flex; align-items: baseline; gap: 12px; margin-bottom: 8px; }
.sg-cal-asof { font-size: 11.5px; color: var(--ink-300); font-style: italic; }
.sg-cal-due-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 12px; }
.sg-cal-card { background: #fff; border: 1px solid var(--ink-100); border-left: 3px solid var(--status-wait); border-radius: 10px; padding: 12px 14px; opacity: 0; animation: rowin .3s ease forwards; }
.sg-cal-honesty { color: var(--ink-300); margin-top: 3px; }
.sg-cal-unver { color: var(--status-wait); font-weight: 600; }
.sg-cal-manage { background: #fff; border: 1px solid var(--ink-100); border-radius: 10px; padding: 16px 18px; margin-top: 20px; }
.sg-cal-addrow { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-bottom: 14px; }
.sg-cal-addrow input, .sg-cal-addrow select { border: 1px solid var(--ink-100); border-radius: 8px; padding: 6px 9px; font-size: 12.5px; }
.sg-cal-addrow input[type="number"] { width: 120px; }
.sg-cal-table { display: flex; flex-direction: column; gap: 8px; }
.sg-cal-row { border: 1px solid var(--ink-100); border-radius: 8px; padding: 9px 12px; }
.sg-cal-row-main { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; font-size: 12.5px; color: var(--ink-500); }
.sg-cal-who { font-weight: 600; color: var(--ink-900); }
.sg-cal-anygrocer { color: var(--ink-300); font-style: italic; font-weight: 400; }
.sg-cal-cat { color: var(--ink-700); }
.sg-cal-win { color: var(--ink-500); }
.sg-cal-due-badge { background: var(--status-wait-bg); color: var(--status-wait); border-radius: 999px; padding: 1px 9px; font-size: 11px; font-weight: 600; }
.sg-cal-next { color: var(--ink-300); font-size: 11.5px; }
.sg-cal-meta2 { color: var(--ink-300); font-size: 11.5px; margin-left: auto; }
.sg-cal-row-actions { display: flex; gap: 8px; margin-top: 8px; }
.sg-cal-edit { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--ink-100); }
.sg-cal-edit input, .sg-cal-edit select { border: 1px solid var(--ink-100); border-radius: 8px; padding: 6px 9px; font-size: 12.5px; }
.sg-cal-edit input[type="number"] { width: 90px; }

/* ==========================================================================
   Campaign Room (#campaign/{id}) — S-UPLIFT-A2 (2026-07-07).
   Pipeline stepper: horizontal node cards joined by a connector line.
   Register: UI_DIRECTION §3 density, §5.2 pills, one accent (the current
   node), gates as dashed-border first-class nodes. Wraps on narrow widths.
   ========================================================================== */
.camp-breadcrumb { font-size: 12px; color: var(--ink-300); }
.camp-breadcrumb a { color: var(--ink-500); }
.camp-head-right { display: flex; align-items: center; gap: 10px; padding-top: 22px; }
.camp-error { background: var(--status-fail-bg); color: var(--status-fail); border-radius: 8px; padding: 12px 16px; margin: 14px 0; font-size: 13px; }
.camp-loading { color: var(--ink-300); padding: 26px 2px; font-size: 13.5px; }

.camp-stepper { display: flex; flex-wrap: wrap; gap: 0; align-items: stretch; margin-top: 18px; }
.camp-node-wrap { display: flex; align-items: stretch; }
.camp-node {
  background: #fff; border: 1px solid var(--ink-100); border-radius: 10px;
  padding: 11px 14px 10px; width: 208px; display: flex; flex-direction: column; gap: 4px;
  transition: border-color .3s ease, box-shadow .3s ease;
}
.camp-node.gate { border-style: dashed; }
.camp-node.current { border-color: var(--accent-600); box-shadow: 0 0 0 3px var(--accent-100); }
.camp-node.done { background: var(--paper-50); }
.camp-connector { width: 26px; align-self: center; height: 1px; background: var(--ink-100); position: relative; flex: none; }
.camp-connector::after { content: "›"; position: absolute; right: 4px; top: -9px; color: var(--ink-300); font-size: 12px; }
.camp-node-step { font-size: 10px; letter-spacing: .07em; text-transform: uppercase; color: var(--ink-300); display: flex; justify-content: space-between; align-items: center; }
.camp-gate-chip { font-size: 9px; letter-spacing: .06em; border: 1px dashed var(--ink-300); border-radius: 999px; padding: 1px 7px; color: var(--ink-300); }
.camp-node-name { font-size: 13px; color: var(--ink-900); font-weight: 600; }
.camp-node-count { font-family: var(--mono); font-variant-numeric: tabular-nums; font-size: 20px; color: var(--ink-700); line-height: 1.15; }
.camp-node-count .camp-count-of { font-size: 11px; color: var(--ink-300); font-family: var(--mono); }
.camp-node-sub { font-size: 11px; color: var(--ink-500); line-height: 1.45; min-height: 16px; }
.camp-node-sub .warn { color: var(--status-wait); }
.camp-node-sub .ok { color: var(--status-ready); }
.camp-node-pills { display: flex; flex-wrap: wrap; gap: 4px; }
.camp-mini-pill { font-size: 10px; border-radius: 999px; padding: 1px 7px; background: var(--paper-100); color: var(--ink-500); font-family: var(--mono); }
.camp-mini-pill.ready { background: var(--status-ready-bg); color: var(--status-ready); }
.camp-mini-pill.wait { background: var(--status-wait-bg); color: var(--status-wait); }
.camp-mini-pill.fail { background: var(--status-fail-bg); color: var(--status-fail); }
.camp-node-foot { margin-top: auto; padding-top: 5px; display: flex; gap: 10px; align-items: center; }
.camp-node-foot a, .camp-node-foot button.camp-linkish {
  font-size: 11.5px; color: var(--accent-600); background: none; border: none; padding: 0;
  cursor: pointer; font-family: var(--sans);
}
.camp-node-foot a:hover, .camp-node-foot button.camp-linkish:hover { text-decoration: underline; }
.camp-below { margin-top: 20px; max-width: 980px; }
.camp-panel .dash-timeline { max-height: 320px; overflow-y: auto; }
.camp-room-link { font-size: 12px; margin-left: 12px; font-family: var(--sans); font-style: normal; font-weight: 500; }
.pill.draft { background: var(--status-wait-bg); color: var(--status-wait); }
.pill.launched { background: var(--status-ready-bg); color: var(--status-ready); }
.pill.paused { background: var(--paper-100); color: var(--ink-500); }
.pill.completed { background: var(--accent-100); color: var(--accent-600); }
.pill.aborted { background: var(--paper-100); color: var(--ink-300); }
.icp-campaigns { margin-top: 8px; border-top: 1px solid var(--ink-100); padding-top: 7px; display: flex; flex-direction: column; gap: 4px; }
.icp-campaign-row { display: flex; align-items: center; gap: 8px; font-size: 12px; }
.icp-campaign-row .pill { font-size: 9.5px; padding: 1px 7px; }

/* ===== #73 (Duncan) — campaigns list viewer (replaces the u-campaign-picker <select>) ===== */
.u-campaigns-group { min-width: 260px; }
.campaign-list {
  display: flex; flex-direction: column; gap: 2px;
  max-height: 240px; overflow-y: auto;
  border: 1px solid var(--ink-100); border-radius: 8px;
  padding: 4px; background: #fff;
}
.campaign-item {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding: 6px 8px; border-radius: 6px; cursor: pointer;
  font-size: 13px; color: var(--ink-700); line-height: 1.3;
  transition: background 0.12s ease;
}
/* GO C item 3 (#118 spill): breaker/drip chips wrap onto their own line under
   the campaign row (the flexible camp-main shrinks to min-width:0 first, so
   the name+status+sub still share the first line; only .camp-chips wraps). */
.camp-chips { flex-basis: 100%; display: flex; gap: 4px; flex-wrap: wrap; margin-top: 3px; }
.campaign-item:hover { background: var(--paper-100); }
.campaign-item:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--accent-100); }
.campaign-item.active { background: var(--accent-100); color: var(--accent-600); font-weight: 600; }
.campaign-item .camp-main { display: flex; align-items: center; gap: 6px; flex: 1; min-width: 0; }
.campaign-item .camp-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.camp-status {
  font-size: 9.5px; text-transform: uppercase; letter-spacing: .04em;
  background: var(--paper-100); color: var(--ink-300);
  padding: 1px 6px; border-radius: 999px; flex: none;
}
.camp-sub { font-size: 11px; color: var(--ink-300); white-space: nowrap; flex: none; }
.camp-del {
  flex: none; border: none; background: none; cursor: pointer;
  color: var(--ink-300); font-size: 16px; line-height: 1;
  padding: 0 3px; border-radius: 4px; opacity: 0;
  transition: opacity .12s ease, color .12s ease, background .12s ease;
}
.campaign-item:hover .camp-del, .campaign-item:focus-within .camp-del, .campaign-item.active .camp-del { opacity: 1; }
.camp-del:hover { color: var(--status-fail); background: var(--excluded-tint); }
.campaign-empty { padding: 8px; font-size: 12px; color: var(--ink-300); }
.campaign-new-link { display: inline-block; margin-top: 7px; font-size: 12px; color: var(--accent-600); font-weight: 600; }
.campaign-new-link:hover { text-decoration: underline; }

/* ===== Dashboard rebuild (2026-07-11 — Duncan's debugging-notes session) =====
   Campaign list rail (reuses .campaign-list/.campaign-item) + headline stat
   cards + targeting columns + exclusion/warmup surfaces + room embed. */
#dash-main { margin-top: 14px; }
/* Campaigns popout — movable window, default top-centre (2026-07-11 follow-up) */
.dash-camp-float {
  position: fixed; top: 72px; left: 50%; transform: translateX(-50%);
  z-index: 40; background: #fff; border: 1px solid var(--ink-100);
  border-radius: 12px; box-shadow: 0 10px 30px rgba(11, 42, 74, 0.18);
  padding: 8px 12px 12px; max-width: min(88vw, 940px);
}
.dash-camp-float.hidden { display: none; }
.dash-camp-float-head {
  font-size: 11px; letter-spacing: .07em; text-transform: uppercase;
  color: var(--ink-300); font-weight: 600; padding: 3px 2px 8px;
  cursor: grab; user-select: none; touch-action: none;
  display: flex; justify-content: space-between; align-items: baseline; gap: 20px;
}
.dash-camp-float-head:active { cursor: grabbing; }
.dash-float-hint { font-size: 9.5px; letter-spacing: .04em; text-transform: none; color: var(--ink-300); opacity: .65; font-weight: 500; }
/* Columns of 4 inside the popout (Duncan: "3 or 4 campaigns in each column") */
.dash-camp-cols {
  display: grid; grid-auto-flow: column; grid-template-rows: repeat(4, auto);
  gap: 2px 12px; overflow-x: auto; max-height: none;
  border: none; padding: 0; background: transparent;
}
.dash-camp-cols .campaign-item { width: 216px; }
.dash-warmup-label { font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--ink-300); font-weight: 600; }
.dash-actions { display: flex; gap: 16px; align-items: center; margin-left: auto; padding-bottom: 8px; }
.dash-act { font-size: 12.5px; font-weight: 600; color: var(--accent-600); text-decoration: none; }
.dash-act:hover { text-decoration: underline; }
.dash-scope { font-size: 12.5px; color: var(--ink-500); margin-bottom: 10px; }
.dash-scope a { color: var(--accent-600); }
.dash-stats { display: grid; grid-template-columns: repeat(5, 1fr); gap: 12px; }
.dash-stat { background: #fff; border: 1px solid var(--ink-100); border-radius: 10px; padding: 12px 14px; }
.dash-stat-num { font-family: var(--mono); font-variant-numeric: tabular-nums; font-size: 24px; color: var(--ink-700); line-height: 1.1; }
.dash-stat-label { font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--ink-300); margin-top: 4px; }
.dash-stats-note { font-size: 11.5px; color: var(--ink-300); margin-top: 6px; }
.dash-warmup { margin-top: 10px; font-size: 12.5px; display: flex; gap: 10px; align-items: baseline; flex-wrap: wrap; }
.dash-warmup-note { color: var(--ink-300); font-size: 11.5px; }
.dash-warmup-accounts { display: inline-flex; gap: 6px; flex-wrap: wrap; }
.dash-room-embed { margin-top: 14px; }
.dash-target-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.dash-target-head { font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--ink-300); font-weight: 600; margin-bottom: 4px; }
.dash-class-chips { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 8px; }
.dash-act-btn { background: none; border: none; padding: 0; font-family: var(--sans); font-size: 12.5px; font-weight: 600; color: var(--accent-600); cursor: pointer; }
.dash-act-btn:hover { text-decoration: underline; }
.dash-exclusions { background: #fff; border: 1px solid var(--ink-100); border-radius: 10px; padding: 10px 14px 12px; margin: 0 0 12px; }
.dash-excl-grid { display: flex; gap: 6px; flex-wrap: wrap; align-items: baseline; }
@media (max-width: 1280px) {
  .dash-stats { grid-template-columns: repeat(3, 1fr); }
}

/* #73 — soft danger button (Delete client) + toast undo affordance */
.btn-danger-soft {
  border: 1px solid var(--status-fail); background: #fff; color: var(--status-fail);
  font-size: 12.5px; font-weight: 600; padding: 8px 14px; border-radius: 8px; cursor: pointer;
  transition: background 0.12s ease, color 0.12s ease;
}
.btn-danger-soft:hover { background: var(--status-fail); color: #fff; }
.toast a.toast-undo, .toast a.toast-undo-client { text-decoration: underline; font-weight: 600; }

/* ===== U1 (2026-07-11, UNIVERSE_PROTOTYPE_ALIGNMENT) — campaign workspace ===== */
/* Prototype-aligned chrome rendered in the house tokens (UI_DIRECTION §1 stands). */
.camp-meta { font-size: 13px; color: var(--ink-500); margin: 2px 0 10px; }
.camp-meta-sep { margin: 0 8px; color: var(--ink-300); }
.filter-cards { display: flex; gap: 12px; flex-wrap: wrap; margin: 0 0 10px; }
.fcard {
  flex: 1; min-width: 300px; background: #fff; border: 1px solid var(--ink-100);
  border-radius: 10px; padding: 12px 16px; box-shadow: 0 1px 2px rgba(11, 42, 74, 0.04);
}
.fcard-title {
  font-size: 11px; letter-spacing: 0.07em; text-transform: uppercase;
  color: var(--ink-300); font-weight: 600; margin-bottom: 8px;
}
.fcard-groups { display: flex; gap: 20px; flex-wrap: wrap; }
.fgroup label { display: block; font-size: 11px; color: var(--ink-300); margin-bottom: 4px; }
.fpill {
  display: inline-block; background: var(--accent-100); color: var(--ink-700);
  border-radius: 999px; padding: 2px 10px; font-size: 12px; margin: 0 4px 4px 0;
}
.fpill-empty { background: var(--paper-100); color: var(--ink-300); }
.fcard-empty { font-size: 12.5px; color: var(--ink-300); line-height: 1.5; }
.camp-controls { display: flex; align-items: end; gap: 14px; margin: 0 0 4px; }
.camp-controls .u-perpage select { min-width: 72px; }
.contact-chip {
  display: inline-block; min-width: 34px; text-align: center; background: var(--paper-100);
  border: 1px solid var(--ink-100); border-radius: 999px; padding: 1px 8px;
  font-size: 12px; color: var(--ink-500);
}
.contact-chip.has-some { background: var(--accent-100); border-color: transparent; color: var(--ink-700); }
.pg-nums { display: inline-flex; align-items: center; gap: 4px; margin: 0 8px; }
.pg-num {
  border: none; background: transparent; color: var(--ink-500); min-width: 26px; height: 26px;
  border-radius: 999px; cursor: pointer; font: 12.5px var(--mono); padding: 0 4px;
  transition: background 0.12s ease;
}
.pg-num:hover { background: var(--paper-100); }
.pg-num.on { background: var(--accent-100); color: var(--accent-600); font-weight: 700; }
.pg-gap { color: var(--ink-300); padding: 0 2px; font-size: 12px; }

/* ===== U2 (2026-07-11) — inline contacts accordion ===== */
.ccell { display: flex; align-items: center; gap: 8px; }
.cnames { min-width: 0; }
.crow-caret {
  border: none; background: transparent; color: var(--ink-300); cursor: pointer;
  font-size: 11px; width: 20px; height: 20px; border-radius: 6px; flex: 0 0 20px;
  transition: transform 0.15s ease, color 0.12s ease, background 0.12s ease; padding: 0;
}
.crow-caret:hover { color: var(--accent-600); background: var(--accent-100); }
.crow-caret.open { transform: rotate(90deg); color: var(--accent-600); }
.crow-sub > td { background: var(--paper-50); padding: 0 14px 12px 42px; }
.crow-panel { border-left: 2px solid var(--accent-100); padding: 8px 0 0 14px; }
.crow-head { font-size: 12.5px; color: var(--ink-500); margin-bottom: 6px; }
.crow-head .crow-fullcard, .crow-empty .crow-fullcard { margin-left: 12px; font-size: 12px; }
.crow-loading, .crow-empty { font-size: 12.5px; color: var(--ink-300); padding: 6px 0 2px; line-height: 1.5; }
.crow-table { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.crow-table th {
  text-align: left; font-size: 10.5px; letter-spacing: 0.05em; text-transform: uppercase;
  color: var(--ink-300); font-weight: 500; padding: 4px 10px 4px 0; border-bottom: 1px solid var(--ink-100);
}
.crow-table td { padding: 6px 10px 6px 0; border-bottom: 1px solid var(--paper-100); color: var(--ink-500); }
.crow-table tr:last-child td { border-bottom: none; }
.crow-rank { text-align: center; }
.crow-active { color: var(--status-ready); font-size: 9px; vertical-align: 2px; }
.epill-valid, .epill-ok { background: var(--status-ready-bg); color: var(--status-ready); }
.epill-unverified, .epill-risky, .epill-catchall, .epill-catch-all, .epill-unknown { background: var(--status-wait-bg); color: var(--status-wait); }
.epill-invalid { background: var(--status-fail-bg); color: var(--status-fail); }
.epill-none, .epill-disposable, .epill-role_based { background: var(--paper-100); color: var(--ink-300); }

/* ===== U3 (2026-07-11) — guided search wizard ===== */
.wiz {
  position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%);
  width: min(680px, calc(100vw - 48px)); max-height: min(86vh, 780px);
  background: #fff; border: 1px solid var(--ink-100); border-radius: 14px;
  box-shadow: 0 18px 60px rgba(11, 42, 74, 0.18); z-index: 70;
  display: flex; flex-direction: column;
}
.wiz.hidden { display: none; }
.wiz-head { display: flex; align-items: flex-start; gap: 12px; padding: 20px 22px 10px; }
.wiz-head-text { flex: 1; min-width: 0; }
.wiz-title { font-size: 22px; color: var(--ink-900); font-weight: 600; }
.wiz-sub { font-size: 13px; color: var(--ink-500); margin-top: 2px; }
.wiz-nav {
  border: none; background: transparent; color: var(--ink-300); font-size: 20px;
  width: 30px; height: 30px; border-radius: 8px; cursor: pointer; flex: 0 0 30px;
}
.wiz-nav:hover { background: var(--paper-100); color: var(--ink-700); }
.wiz-steps { display: flex; gap: 16px; padding: 0 22px 12px; border-bottom: 1px solid var(--ink-100); }
.wiz-steps span { font-size: 11.5px; letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-300); }
.wiz-steps span.on { color: var(--accent-600); font-weight: 700; }
.wiz-steps span.done { color: var(--status-ready); }
.wiz-body { padding: 16px 22px 20px; overflow-y: auto; }
.wiz-field { margin-bottom: 14px; min-width: 160px; }
.wiz-field label { display: block; font-size: 12px; font-weight: 600; color: var(--ink-700); margin-bottom: 4px; }
.wiz-field input[type="text"], .wiz-field select {
  width: 100%; box-sizing: border-box; border: 1px solid var(--ink-100); border-radius: 8px;
  padding: 9px 12px; font-size: 13.5px; color: var(--ink-700); background: #fff;
}
.wiz-field input[type="text"]:focus, .wiz-field select:focus { outline: 2px solid var(--accent-100); border-color: var(--accent-600); }
.wiz-hint { font-size: 11.5px; color: var(--ink-300); margin: -2px 0 6px; line-height: 1.45; }
.wiz-row { display: flex; gap: 14px; flex-wrap: wrap; }
.wiz-suggest { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 7px; }
.wiz-suggest .sug {
  border: 1px solid var(--ink-100); background: var(--paper-50); color: var(--ink-500);
  border-radius: 999px; padding: 2px 10px; font-size: 12px; cursor: pointer;
  transition: background 0.12s ease, color 0.12s ease, border-color 0.12s ease;
}
.wiz-suggest .sug:hover { background: var(--accent-100); color: var(--accent-600); border-color: transparent; }
.wiz-suggest .sug::before { content: "+ "; color: var(--ink-300); }
.wiz-suggest .sug:hover::before { color: var(--accent-600); }
.wiz-foot { display: flex; align-items: center; gap: 16px; margin-top: 6px; }
.wiz-summary { background: var(--paper-50); border: 1px solid var(--ink-100); border-radius: 10px; padding: 12px 14px; margin-bottom: 14px; font-size: 12.5px; color: var(--ink-500); line-height: 1.6; }
.wiz-summary .fpill { margin-bottom: 0; }
.wiz-status { margin-top: 12px; font-size: 13px; color: var(--ink-500); line-height: 1.6; }

/* ===== U5 (2026-07-11) — prototype two-level IA: campaigns table + workspace mode ===== */
.u-breadcrumb {
  display: inline-block; font-size: 12.5px; color: var(--ink-500); margin: 0 0 10px;
  text-decoration: none; border-radius: 6px; padding: 3px 8px 3px 4px;
}
.u-breadcrumb:hover { background: var(--paper-100); color: var(--accent-600); }
.ct-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 14px; }
.ct-title { font-size: 26px; color: var(--ink-900); font-weight: 600; margin: 0; }
.ct-title em { font-style: italic; }
.ct-lede { font-size: 13px; color: var(--ink-500); margin-top: 3px; }
.ct-table-wrap { background: #fff; border: 1px solid var(--ink-100); border-radius: 10px; overflow: hidden; }
.ct-table { width: 100%; border-collapse: collapse; }
.ct-table th {
  text-align: left; font-size: 11px; letter-spacing: 0.05em; text-transform: uppercase;
  color: var(--ink-300); font-weight: 500; padding: 10px 16px; border-bottom: 1px solid var(--ink-100);
  background: var(--paper-50);
}
.ct-table td { padding: 13px 16px; border-bottom: 1px solid var(--paper-100); font-size: 13.5px; color: var(--ink-500); }
.ct-table tr:last-child td { border-bottom: none; }
.ct-row { cursor: pointer; transition: background 0.12s ease; }
.ct-row:hover { background: var(--accent-100); }
.ct-name { color: var(--ink-700); font-weight: 600; margin-right: 8px; }
.ct-row:hover .ct-name { color: var(--accent-600); }
.ct-type-pill {
  display: inline-block; background: var(--accent-100); color: var(--ink-700);
  border-radius: 999px; padding: 1px 9px; font-size: 11px; vertical-align: 1px;
}
.ct-num { text-align: right; }
th.ct-num { text-align: right; }
.ct-date { color: var(--ink-300); font-size: 12.5px; }
.ct-actions { text-align: right; white-space: nowrap; }
th.ct-actions { text-align: right; }
.ct-edit, .ct-del {
  border: none; background: transparent; cursor: pointer; font-size: 14px;
  width: 26px; height: 26px; border-radius: 6px; color: var(--ink-300);
}
.ct-edit:hover { background: var(--accent-100); color: var(--accent-600); }
.ct-del:hover { background: var(--status-fail-bg); color: var(--status-fail); }
.ct-links { display: flex; gap: 18px; flex-wrap: wrap; margin-top: 12px; }

/* Workspace mode: prototype column rhythm — inline count chip next to the
   caret; the separate Contacts and (empty) Tags columns drop out. */
.ccount-inline {
  display: none; min-width: 30px; text-align: center; background: var(--paper-100);
  border: 1px solid var(--ink-100); border-radius: 999px; padding: 1px 7px;
  font-size: 11.5px; color: var(--ink-500); flex: 0 0 auto;
}
#u-grid.campaign-mode .ccount-inline { display: inline-block; }
#u-grid.campaign-mode .col-contacts, #u-grid.campaign-mode .col-tags { display: none; }

/* ===== U6 (2026-07-11, #75c) — pure-prototype Universe Search ===== */
.up-grid td { vertical-align: middle; }
.up-caret-col { width: 34px; }
.up-domain-pill {
  display: inline-block; background: var(--accent-100); color: var(--ink-700);
  border-radius: 999px; padding: 2px 10px; font-size: 12px; font-family: var(--mono);
  text-decoration: none;
}
.up-domain-pill:hover { color: var(--accent-600); }
.up-meta { margin: 0 0 0 auto; }
.up-csearch {
  margin-left: 14px; border: 1px solid var(--ink-100); border-radius: 8px;
  padding: 4px 10px; font-size: 12px; color: var(--ink-700); min-width: 220px;
}
.up-csearch:focus { outline: 2px solid var(--accent-100); border-color: var(--accent-600); }
#wiz-client { width: 100%; box-sizing: border-box; border: 1px solid var(--ink-100); border-radius: 8px; padding: 9px 12px; font-size: 13.5px; color: var(--ink-700); background: #fff; }

/* =========================================================================
   CAMPAIGN BUILDER (#76, 2026-07-12) — the exact prototype clone.
   Reuses the house grid/fcard/wiz/pager primitives; everything below is
   additive and cb-/cbw-prefixed.
   ========================================================================= */

.cb-head-actions { display: flex; align-items: center; gap: 10px; }
.cb-credits {
  border: 1px solid var(--ink-100); border-radius: 999px; padding: 4px 12px;
  font-size: 12px; color: var(--ink-500); background: var(--paper-50);
}

/* list — type pill + client sub-label */
.cb-type-pill {
  display: inline-block; margin-left: 8px; border-radius: 999px; padding: 1px 9px;
  font-size: 10.5px; font-weight: 600; letter-spacing: .04em; vertical-align: 1px;
  background: var(--accent-100); color: var(--accent-600);
}
.cb-type-pill.people { background: #EAF5EF; color: var(--status-ready, #1F8A55); }
.cb-client-sub { display: block; font-size: 11.5px; color: var(--ink-300); margin-top: 1px; }
.cb-contacts-cell { white-space: nowrap; }
.cb-contacts-cell .ico { opacity: .55; margin-right: 5px; }
.cb-actions-col { width: 74px; }
.cb-row-act {
  border: none; background: none; cursor: pointer; font-size: 14px; padding: 4px 6px;
  border-radius: 6px; color: var(--ink-300);
}
.cb-row-act:hover { color: var(--accent-600); background: var(--accent-100); }
.cb-row-act.danger:hover { color: #B8421E; background: #FBEAE4; }
.cb-grid tbody tr { cursor: pointer; }
.cb-grid tbody tr.crow-sub, .cb-grid tbody tr.cb-noclick { cursor: default; }

/* wizard — type cards (W1) */
.cbw-type-cards { display: flex; gap: 14px; padding: 6px 0 10px; }
.cbw-type-card {
  flex: 1; text-align: left; border: 1px solid var(--ink-100); border-radius: 12px;
  background: #fff; padding: 18px 16px; cursor: pointer; transition: border-color .15s, box-shadow .15s;
}
.cbw-type-card:hover { border-color: var(--accent-600); box-shadow: 0 2px 8px rgba(11,42,74,.08); }
.cbw-type-name { display: block; font-weight: 600; font-size: 15px; color: var(--ink-900); margin-bottom: 6px; }
.cbw-type-desc { display: block; font-size: 12.5px; color: var(--ink-500); line-height: 1.5; }
.cbw-type-card svg { width: 26px; height: 26px; color: var(--ink-700); margin-bottom: 8px; display: block; }
.cbw-type-card:hover svg { color: var(--accent-600); }
.cbw-toggles { display: flex; flex-direction: column; gap: 8px; }
.cbw-toggle { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--ink-700); }
.cbw-toggle input { accent-color: var(--accent-600); }
#cbw-client, #cbw-depth { width: 100%; box-sizing: border-box; border: 1px solid var(--ink-100); border-radius: 8px; padding: 9px 12px; font-size: 13.5px; color: var(--ink-700); background: #fff; }
/* #78-session prototype fidelity (Duncan's picks, 2026-07-12): "+" add
   button beside pill inputs + "Suggestions:" label row. */
.wiz-pillrow { display: flex; gap: 8px; align-items: stretch; }
.wiz-pillrow .chips-input { flex: 1; }

/* ===== #81-S3/S4 (IA plan §4) — large body-level popouts on the wiz scaffold:
   the pre-send checker (#psx) + the Reply Monitor (#rmx). Paint-check enforced. */
.wiz.popout { width: min(1180px, calc(100vw - 48px)); max-height: min(92vh, 940px); }
.wiz.popout .wiz-body { padding-bottom: 24px; }
.cb-d-namerow { display: flex; align-items: center; gap: 12px; }
.dash-head .camp-linkish {
  font-size: 11.5px; color: var(--accent-600); background: none; border: none; padding: 0;
  cursor: pointer; font-family: var(--sans); float: right; font-weight: 500;
}
.dash-head .camp-linkish:hover { text-decoration: underline; }
.wiz-pillrow input { min-width: 0; }
.wiz-add {
  flex: none; width: 40px; border: 1px solid var(--ink-100); border-radius: 8px;
  background: #fff; color: var(--ink-500); font-size: 18px; line-height: 1;
  cursor: pointer; transition: border-color .15s, color .15s;
}
.wiz-add:hover { border-color: var(--accent-600); color: var(--accent-600); }
.wiz-sug-row { display: flex; gap: 8px; align-items: flex-start; }
.wiz-sug-label { flex: none; font-size: 11.5px; color: var(--ink-300); margin-top: 10px; }

/* detail — company row bits (C8) */
.cb-logo {
  display: inline-flex; align-items: center; justify-content: center;
  width: 26px; height: 26px; border-radius: 7px; margin-right: 9px;
  background: var(--accent-100); color: var(--accent-600); font-weight: 700; font-size: 12px;
  vertical-align: middle; flex: none;
}
.cb-company-cell { display: flex; align-items: center; }
.cb-count-chip {
  display: inline-block; margin-left: 8px; border-radius: 999px; padding: 0 8px;
  font-size: 11px; background: var(--paper-100); color: var(--ink-500);
}
.cb-li-ico { font-size: 12px; text-decoration: none; margin-right: 8px; }
.cb-expand-all {
  border: 1px solid var(--ink-100); background: #fff; border-radius: 8px;
  padding: 4px 10px; cursor: pointer; font-size: 13px; color: var(--ink-500);
}
.cb-expand-all.on, .cb-expand-all:hover { color: var(--accent-600); border-color: var(--accent-600); }

/* detail — contacts sub-table (C9/C10/C11) */
.cb-sub-avatar {
  display: inline-flex; align-items: center; justify-content: center;
  width: 22px; height: 22px; border-radius: 50%; margin-right: 8px;
  background: var(--paper-100); color: var(--ink-500); font-weight: 600; font-size: 10.5px;
}
.cb-sub-controls { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.cb-sub-controls .mono { font-size: 12px; }
.cb-sub-pager button {
  border: 1px solid var(--ink-100); background: #fff; border-radius: 6px;
  padding: 1px 8px; cursor: pointer; font-size: 12px; color: var(--ink-500);
}
.cb-sub-pager button:disabled { opacity: .4; cursor: default; }
.cb-sub-perpage { font-size: 12px; color: var(--ink-300); }
.cb-sub-perpage select { border: 1px solid var(--ink-100); border-radius: 6px; padding: 1px 4px; font-size: 12px; }

/* C12 — sticky bar */
.cb-sticky {
  position: fixed; bottom: 18px; left: 50%; transform: translateX(-50%);
  display: flex; align-items: center; gap: 12px; z-index: 60;
  background: #fff; border: 1px solid var(--ink-100); border-radius: 12px;
  box-shadow: 0 6px 24px rgba(11,42,74,.14); padding: 10px 14px;
}

/* exports view (E2/E3) */
.cb-x-progress { min-width: 180px; }
.cb-x-bar {
  height: 6px; border-radius: 999px; background: var(--paper-100); overflow: hidden; margin-top: 4px;
}
.cb-x-bar > span { display: block; height: 100%; background: var(--accent-600); transition: width .4s; }
.cb-x-status { text-transform: capitalize; }
.cb-x-status.completed { color: var(--status-ready, #1F8A55); }
.cb-x-status.failed { color: #B8421E; }
.cb-x-status.running, .cb-x-status.queued { color: var(--status-wait, #B8861E); }

/* ===== WS11 slice 2 (#88) — dual-mode login gate + setup + client shell ===== */
.login-card input[type="email"],
.login-card input[type="text"] {
  width: 100%; box-sizing: border-box; padding: 10px 12px; margin-bottom: 10px;
  border: 1px solid var(--ink-100); border-radius: 8px; font: inherit; font-size: 14px;
  background: #fff; color: var(--ink-700);
}
.login-card input[type="email"]:focus,
.login-card input[type="text"]:focus { outline: none; border-color: var(--accent-600); box-shadow: 0 0 0 3px var(--accent-100); }
.login-card input[type="password"] { margin-bottom: 10px; }
.login-alt { margin: 16px 0 0; font-size: 12.5px; }
.login-alt a { color: var(--ink-300); text-decoration: none; }
.login-alt a:hover { color: var(--accent-600); text-decoration: underline; }

/* #221: `#page-portal .ct-table-wrap` deleted — the only portal-scoped .ct-*
   override, and its producer (portalCampaignRows) went at M5. The .ct-* rules
   themselves STAY: the operator Campaigns table and icps.js still emit them. */

/* CB-1 (#104) — honest surface: companies left in a campaign by an earlier,
   broader search that no longer match the saved filter. Read-only flagging;
   the amber "warn" tokens signal "look, but nothing's broken". */
.cb-filter-check {
  margin: 10px 0 4px; padding: 10px 14px; border-radius: 8px;
  background: var(--status-wait-bg); color: var(--ink-700);
  border: 1px solid #EAD9AE; font-size: 13px; line-height: 1.5;
}
.cb-filter-check .cb-fc-ico { color: var(--status-wait); font-weight: 700; }
.cb-filter-check b { color: var(--ink-900); }

/* #193 — the Campaign Checker line. Deliberately the ACCENT tokens, not the
   amber "warn" ones above: this is an opportunity, not a defect. Nothing is
   broken when it fires; it is telling the operator where enrichment pays. */
.cb-unmapped {
  margin: 10px 0 4px; padding: 10px 14px; border-radius: 8px;
  background: var(--accent-100); color: var(--ink-700);
  border: 1px solid #C9DCFB; font-size: 13px; line-height: 1.5;
}
.cb-unmapped .cb-um-ico { color: var(--accent-600); font-weight: 700; }
.cb-unmapped b { color: var(--ink-900); }
.cb-unmapped .cb-um-caveat { display: block; margin-top: 4px; color: var(--ink-500); font-size: 12px; }
tr.cb-row-offfilter { background: var(--status-wait-bg); }
tr.cb-row-offfilter:hover { background: #F2E7C9; }
.cb-offfilter-badge {
  display: inline-block; font: 600 10px var(--sans); text-transform: uppercase;
  letter-spacing: 0.03em; color: var(--status-wait); background: #FBF3DF;
  border: 1px solid #EAD9AE; border-radius: 4px; padding: 1px 5px;
  vertical-align: middle; white-space: nowrap;
}

/* ========================================================================
   F4 #110 (2026-07-17) — pipeline reshape: client-simple vs admin-deep.
   ======================================================================== */

/* The one switch (rows 30/31/32): anything carrying .adm-only exists only in
   the admin view. Default (no body class) = the simple, demo-safe view.
   display:none !important so it wins over component display rules; elements
   keep their natural display when the class is on the body. */
body:not(.lg-adminview) .adm-only { display: none !important; }
/* Export-cart checkboxes in the per-company sub-tables are cart furniture —
   admin-view only, same rule (row 26). */
body:not(.lg-adminview) .cb-ct-check { display: none; }

.cb-adminview-toggle {
  display: inline-flex; align-items: center; gap: 6px;
  font: 500 12px var(--sans); color: var(--ink-500); cursor: pointer;
  padding: 4px 8px; border: 1px solid var(--ink-100); border-radius: 6px;
  background: #fff; user-select: none;
}
.cb-adminview-toggle input { accent-color: var(--accent-600); margin: 0; }
body.lg-adminview .cb-adminview-toggle { border-color: var(--accent-600); color: var(--accent-600); }

/* Row 32 — the replacement line: informational, not a warning (the queue
   self-heals by design; the amber family stays CB-1's). */
.camp-advance-line {
  background: var(--paper-100); border-color: var(--ink-100);
}
.camp-advance-line .cb-fc-ico { color: var(--accent-600); }
.camp-advance-line .camp-linkish {
  background: none; border: 0; padding: 0; cursor: pointer;
  color: var(--accent-600); font: 500 13px var(--sans);
}
.camp-advance-line .camp-linkish:hover { text-decoration: underline; }

/* Row 34 — the send-schedule readout on the Launch panel. */
.camp-launch-schedule-out { font-size: 12.5px; color: var(--ink-500); margin-left: 8px; }
.camp-launch-schedule-out b { color: var(--ink-700); }
#camp-launch-schedule {
  background: none; border: 0; padding: 0; cursor: pointer;
  color: var(--accent-600); font: 500 12.5px var(--sans);
}
#camp-launch-schedule:hover { text-decoration: underline; }
#camp-launch-schedule:disabled { color: var(--ink-300); cursor: default; }

/* Rows 38/40 — the per-company contact queue, grouped (§5.7 made visible). */
.clq-group {
  background: #fff; border: 1px solid var(--ink-100); border-radius: 10px;
  padding: 12px 16px; margin-bottom: 10px;
  opacity: 0; animation: rowin 300ms ease forwards;
}
.clq-head {
  display: flex; align-items: center; gap: 10px; margin-bottom: 8px; flex-wrap: wrap;
}
.clq-company { font: 600 14px var(--sans); color: var(--ink-900); }
.clq-domain { font: 400 12px var(--mono); color: var(--ink-300); }
.clq-slots { font-size: 11.5px; color: var(--ink-300); margin-left: auto; }
.clq-replace {
  font: 500 12px var(--sans); color: var(--accent-600);
  background: none; border: 1px solid var(--ink-100); border-radius: 6px;
  padding: 3px 9px; cursor: pointer;
}
.clq-replace:hover { border-color: var(--accent-600); }
.clq-row {
  display: flex; align-items: center; gap: 9px; padding: 5px 0;
  border-top: 1px solid var(--paper-100); font-size: 13px;
}
.clq-row .cname { cursor: pointer; }
.clq-row.clq-active .cname { font-weight: 600; color: var(--ink-900); }
.clq-row.clq-backup { color: var(--ink-500); }
.clq-row.clq-backup .cname { color: var(--ink-500); }
.clq-rank { width: 14px; text-align: right; color: var(--ink-300); font-size: 11.5px; }
.clq-dot {
  width: 8px; height: 8px; border-radius: 50%;
  border: 1.5px solid var(--ink-100); background: transparent; flex: 0 0 auto;
}
.clq-dot.on { background: var(--status-ready); border-color: var(--status-ready); }
.clq-meta { color: var(--ink-300); font-size: 12px; }

/* ===== #221 — the #177/#181 switch CSS was deleted from this stylesheet =====
   `.ct-toggle`, `.cs-toggle`, `.cs-track`, `.cs-knob`, `.cs-word` and the
   `tr.portal-camp-row.is-off` / `tr.portal-email-row.is-off` dimming block all
   had exactly one producer — portalCampaignRows in core.js — which lost its
   last caller when M5 moved the client campaign list into the Nuxt app. No
   surviving legacy module emits any of these tokens. The live styling is
   frontend/app/assets/css/main.css, and Duncan's #181 ruling (dim a
   switched-off row on BOTH lists, because a client must never be able to
   approve copy for a campaign that cannot send) is honoured there.
   NOT deleted, deliberately: `.ct-name` / `.ct-num` / `.ct-date` /
   `.ct-table-wrap` / `.camp-status`, which the operator console still uses. ===== */
/* M11 (#228): the client-shell, portal-stage, Build-tab, chain-search,
   review/teaser and saved-line CSS all DELETED with the legacy client
   shell - their only producers were core.js portal functions removed in
   the same session, and the live styling is
   frontend/app/assets/css/main.css. */
