/* ============================================================ */
/* AICRO Dashboards — shared shell                                */
/* Tokens lifted verbatim from campaign-qa-dashboard/mock.html    */
/* ============================================================ */
:root{
  --bg:#ffffff;
  --ink:#1d1d1f;
  --ink-2:#86868b;
  --ink-3:#b8b8bd;
  --rule:#e5e5e7;
  --rule-soft:#f2f2f4;
  --hover:#fafafa;
  --blue:#0071e3;
  --accent:#21A8F2;       /* AICRO brand Sky Blue — active filter chips / toggles */
  --accent-ink:#0b6fb0;   /* darker Sky Blue for hover */
  --green:#30a46c;
  --amber:#e0a020;
  --red:#d93025;
  --indigo:#5a67d8;
  /* Owner color system — shared token surface for bench stripes, calendar
     pill stripes, Client Planning owner chips, capacity bar fills. Ad-hoc
     names hash into the palette via app.js ownerColorClass(). */
  --owner-david:#5a67d8;
  --owner-jawad:#30a46c;
  --owner-anthony:#e0a020;
  --owner-josh:#7c3aed;
  --owner-unassigned:#b8b8bd;
  /* Load-tier tints for calendar heatmap. Light enough to scan without
     fighting the existing today-cell blue. */
  --load-tint-low:rgba(0,113,227,0.04);
  --load-tint-hot:rgba(224,160,32,0.10);
  --load-tint-over:rgba(217,48,37,0.10);
  --body-font:-apple-system,BlinkMacSystemFont,"SF Pro Text","SF Pro","Helvetica Neue",Helvetica,Arial,sans-serif;
  --display-font:-apple-system,BlinkMacSystemFont,"SF Pro Display","SF Pro","Helvetica Neue",Helvetica,Arial,sans-serif;
  --mono-font:ui-monospace,"SF Mono",SFMono-Regular,Menlo,Monaco,Consolas,monospace;
}
*{box-sizing:border-box}
html,body{
  margin:0;padding:0;background:var(--bg);color:var(--ink);
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
  font-family:var(--body-font);font-size:13px;line-height:1.5;
  font-feature-settings:"tnum" on,"lnum" on;letter-spacing:-0.005em;
}
a{color:var(--blue);text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer;letter-spacing:inherit;text-align:left}

.wrap{max-width:1440px;margin:0 auto;padding:48px 48px 120px}

/* --- Header --- */
.hd{display:flex;align-items:flex-end;justify-content:space-between;gap:48px;margin-bottom:32px}
.hd h1{font-family:var(--display-font);font-size:32px;line-height:1.05;font-weight:600;letter-spacing:-0.025em;margin:0 0 8px}
.hd .sub{color:var(--ink-2);font-size:13px;display:flex;gap:16px;align-items:center;flex-wrap:wrap}
.hd .sub .dot{width:6px;height:6px;border-radius:50%;background:var(--green);display:inline-block;box-shadow:0 0 0 3px rgba(48,164,108,0.14);animation:pulse 2.4s ease-in-out infinite}
.hd .sub .sep{color:var(--ink-3)}
.hd .refresh{color:var(--blue);font-size:13px;font-weight:500;display:inline-flex;align-items:center;gap:8px}
.hd .refresh:hover{opacity:0.65}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:0.45}}

/* --- Tabs --- */
.tabs{display:flex;gap:0;border-bottom:0.5px solid var(--rule);margin-bottom:0}
.tab{
  font-family:var(--display-font);
  font-size:14px;font-weight:500;color:var(--ink-2);
  padding:16px 0;margin-right:32px;
  border-bottom:1.5px solid transparent;
  transition:color .15s,border-color .15s;
  letter-spacing:-0.005em;
}
.tab:hover{color:var(--ink)}
.tab.active{color:var(--ink);border-bottom-color:var(--ink)}

/* --- Shared filter chip system (Client + Owner share visual language) --- */
.filters{padding:20px 0 4px;margin-bottom:8px;border-bottom:0.5px solid var(--rule);display:flex;flex-direction:column;gap:16px}
.filter-row{display:flex;flex-direction:column;gap:10px}
.filter-row .flabel{font-size:10px;text-transform:uppercase;letter-spacing:0.1em;color:var(--ink-3);font-weight:600}
.flabel-hint{text-transform:none;letter-spacing:0;font-weight:400;font-size:10px;color:var(--ink-3);opacity:0.7;margin-left:4px}
.chip-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.chip-group{display:flex;gap:6px;flex-wrap:wrap;flex:1}
.client-chip,
.tab-secondary .gtme-chip{
  display:inline-flex;align-items:center;gap:8px;
  font-size:12px;color:var(--ink-2);padding:6px 12px;border-radius:6px;
  border:0.5px solid var(--rule);background:#fff;
  transition:background .12s ease-out,border-color .12s ease-out,color .12s ease-out;
  white-space:nowrap;min-width:96px;justify-content:space-between;
  cursor:pointer;
}
.client-chip:hover,
.tab-secondary .gtme-chip:hover{color:var(--ink);border-color:var(--ink-3);background:var(--hover)}
.client-chip.on,
.tab-secondary .gtme-chip.on{color:var(--ink);background:#f2f2f4;border-color:var(--ink-3);font-weight:500}
.client-chip .nm{}
.client-chip .ct,
.tab-secondary .gtme-chip .ct{
  font-size:11px;color:var(--ink-3);font-variant-numeric:tabular-nums;
  font-weight:500;letter-spacing:0;margin-left:0;
}
.client-chip.on .ct,
.tab-secondary .gtme-chip.on .ct{color:var(--ink-2)}
.chip-clear{
  font-size:11px;color:var(--ink-2);text-transform:uppercase;letter-spacing:0.08em;
  background:none;border:0;cursor:pointer;padding:6px 8px;font-weight:500;
  font-variant-numeric:tabular-nums;
}
.chip-clear:hover{color:var(--red)}
.chip-clear.chip-clear-empty{color:var(--ink-3);pointer-events:none}

/* --- Tab panels --- */
.panel{display:none;padding-top:32px}
.panel.active{display:block}

/* ============================================================ */
/* GTME Weekly tab                                                */
/* ============================================================ */
/* Tightened filter bar: filters share a row when possible, labels sit
   inline with their chip rows instead of stacking above them — saves
   ~80px of viewport so the calendar is in-view immediately. */
.tab-secondary{padding:10px 0;border-bottom:0.5px solid var(--rule-soft);margin-bottom:12px;display:flex;justify-content:flex-start;align-items:center;gap:18px;flex-wrap:wrap}
.tab-secondary .flabel{font-size:10px;text-transform:uppercase;letter-spacing:0.1em;color:var(--ink-3);font-weight:600;margin-right:6px}
.tab-secondary .filter-row{flex:0 0 auto;flex-direction:row;align-items:center;gap:8px}
.tab-secondary .filter-row-right{margin-left:auto}
/* Tighten Client row too — same compact treatment when it exists. */
.filters{padding:10px 0 6px;margin-bottom:6px}
.filters .filter-row{flex-direction:row;align-items:center;gap:8px}
.filters .filter-row .flabel{margin-right:6px}
.client-chip,
.tab-secondary .gtme-chip{padding:4px 10px;min-width:0;font-size:11px}
.client-chip .ct,
.tab-secondary .gtme-chip .ct{font-size:10px}

/* Owner chip: client-scoped highlight states */
.tab-secondary .gtme-chip{border-left:2px solid var(--ink-3)}
.tab-secondary .gtme-chip.david{border-left-color:var(--owner-david)}
.tab-secondary .gtme-chip.jawad{border-left-color:var(--owner-jawad)}
.tab-secondary .gtme-chip.anthony{border-left-color:var(--owner-anthony)}
.tab-secondary .gtme-chip.josh{border-left-color:var(--owner-josh)}
.tab-secondary .gtme-chip.on-client{
  background:#eff6ff;border-color:var(--blue);color:var(--ink);font-weight:600;
  box-shadow:0 0 0 1px var(--blue);
}
.tab-secondary .gtme-chip.on-client .ct b{color:var(--blue);font-weight:700}
.tab-secondary .gtme-chip.on-client .ct-of{color:var(--ink-3);font-weight:400}
.tab-secondary .gtme-chip.off-client{opacity:0.4}
.tab-secondary .gtme-chip.off-client:hover{opacity:0.75}
.tab-secondary .gtme-chip.on{background:var(--accent);color:#fff;border-color:var(--accent)}
.tab-secondary .gtme-chip.on .ct{color:rgba(255,255,255,0.8)}
.tab-secondary .gtme-chip.on .ct b{color:#fff}

/* Section header */
.sec{margin:0 0 40px}
.sec h2{font-family:var(--display-font);font-size:18px;font-weight:600;letter-spacing:-0.018em;margin:0 0 4px}
.sec .deck{color:var(--ink-2);font-size:13px;margin-bottom:16px}

/* Bench */
.bench{
  display:grid;
  /* minmax(0, 1fr) prevents columns with long content (link rows, brief URLs)
     from auto-sizing wider than their siblings — keeps all 6 columns equal. */
  grid-template-columns:repeat(6,minmax(0,1fr));
  border-top:0.5px solid var(--rule);
  border-bottom:0.5px solid var(--rule);
}
.bench-col{
  padding:0;
  border-right:0.5px solid var(--rule-soft);
  min-height:420px;
  cursor:pointer;
  transition:background .12s;
  display:flex;flex-direction:column;
}
.bench-col:last-child{border-right:none}
.bench-col:hover{background:var(--hover)}
.bench-col.active{background:#f2f2f4}
.bench-col.unassigned .bench-name{color:var(--ink-2)}

.bench-head{padding:16px;border-bottom:0.5px solid var(--rule-soft)}
.bench-name{font-family:var(--display-font);font-size:18px;font-weight:600;letter-spacing:-0.015em;color:var(--ink);line-height:1}
.bench-role{font-size:10px;color:var(--ink-3);text-transform:uppercase;letter-spacing:0.06em;margin-top:6px;font-weight:500}
.bench-counts{display:flex;gap:12px;margin-top:8px;font-size:12px;color:var(--ink-2);font-variant-numeric:tabular-nums}
.bench-counts span b{color:var(--ink);font-weight:600}
.bench-counts .over b{color:var(--red)}
.bench-counts .sep{color:var(--ink-3)}

.hd-week{font-weight:500;color:var(--ink)}

/* Capacity bar */
.cap{margin-top:12px}
.cap-label{display:flex;justify-content:space-between;align-items:baseline;font-size:12px;color:var(--ink-2);font-variant-numeric:tabular-nums;margin-bottom:4px}
.cap-label .cap-pct{font-weight:600;color:var(--ink)}
.cap-track{height:6px;background:var(--rule-soft);border-radius:3px;overflow:hidden;position:relative}
.cap-fill{height:100%;border-radius:3px;transition:width .25s ease;background:var(--green)}
.cap-fill.amber{background:var(--amber)}
.cap-fill.red{background:var(--red)}
.cap-sub{font-size:12px;color:var(--ink-3);margin-top:4px;font-variant-numeric:tabular-nums}

/* Methodology details panel */
.methodology{margin:0 0 16px;font-size:12px}
.methodology summary{
  list-style:none;cursor:pointer;color:var(--ink-3);font-size:12px;
  display:inline-flex;align-items:center;gap:8px;padding:4px 0;
  user-select:none;
}
.methodology summary::-webkit-details-marker{display:none}
.methodology summary::before{content:"ⓘ";font-size:12px}
.methodology summary:hover{color:var(--blue)}
.methodology[open] summary{color:var(--ink-2)}
.methodology .methodology-body{
  margin-top:12px;padding:16px;
  background:var(--rule-soft);border-radius:6px;
  color:var(--ink-2);line-height:1.55;
}
.methodology .methodology-body h4{
  margin:0 0 4px;font-size:10px;text-transform:uppercase;letter-spacing:0.07em;
  color:var(--ink-3);font-weight:600;
}
.methodology .methodology-body h4:not(:first-child){margin-top:16px}
.methodology .methodology-body code{
  font-family:var(--mono-font);font-size:12px;
  background:#fff;padding:1px 6px;border-radius:3px;border:0.5px solid var(--rule);
}
.methodology .methodology-body p{margin:0 0 4px}

.bench-tasks{padding:8px 12px 16px;display:flex;flex-direction:column;gap:8px;flex:1}
.bench-empty{padding:16px;color:var(--ink-3);font-size:12px;font-style:italic}

.task-card{
  background:transparent;
  border:0.5px solid var(--rule);
  border-radius:6px;
  padding:12px;
  position:relative;
  transition:background .12s,border-color .12s;
  min-width:0;          /* let card shrink below content; prevents column overflow */
  overflow:hidden;
}
.task-card .t-name{overflow-wrap:anywhere;word-break:break-word}
.task-card .t-link{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
.task-card:hover{background:var(--hover);border-color:var(--ink-3)}
.task-card.overdue{border-left:2px solid var(--red);padding-left:11px}
.task-card.next2w{border-left:2px solid var(--amber);padding-left:11px}
.task-card.week3{border-left:2px solid var(--green);padding-left:11px}
.task-card .t-top{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:4px}
.task-card .t-client{font-size:10px;color:var(--ink);text-transform:uppercase;letter-spacing:0.06em;font-weight:700}
.task-card .t-due{font-size:12px;color:var(--ink-2);font-variant-numeric:tabular-nums;white-space:nowrap}
.task-card.overdue .t-due{color:var(--red);font-weight:500}
.task-card .t-name{font-size:14px;color:var(--ink);line-height:1.35;letter-spacing:-0.005em}
.task-card .t-meta{display:flex;gap:12px;align-items:center;margin-top:8px;font-size:12px;color:var(--ink-2);flex-wrap:wrap}
.task-card .t-status{display:inline-flex;gap:6px;align-items:center}
.task-card .t-status .d{width:6px;height:6px;border-radius:50%;display:inline-block;background:var(--ink-3)}
.task-card .t-status.ip .d{background:var(--amber)}
.task-card .t-status.na .d{background:#07DE83}
.task-card .t-status.na{color:#0a7d4d;font-weight:600}
.task-card .t-brief{display:inline-flex;gap:6px;align-items:center;font-variant-numeric:tabular-nums}
.task-card .t-brief .b-dot{width:6px;height:6px;border-radius:50%;display:inline-block;background:var(--ink-3)}
.task-card .t-brief.has .b-dot{background:var(--green)}
.task-card .t-brief.miss .b-dot{background:var(--red)}
.task-card .t-brief a{color:inherit;text-decoration:none}
.task-card .t-brief a:hover{color:var(--blue)}
.task-card .t-expand{margin-left:auto;color:var(--ink-3);font-size:12px;cursor:pointer;user-select:none;padding:2px 4px;border-radius:3px}
.task-card .t-expand:hover{color:var(--blue);background:var(--hover)}
.task-card .t-summary{display:none;margin-top:8px;padding-top:8px;border-top:0.5px dashed var(--rule);font-size:12px;color:var(--ink-2);line-height:1.45}
.task-card.open .t-summary{display:block}
.task-card .t-summary.loading{font-style:italic;color:var(--ink-3)}

/* Priority Tier pills — mirror portfolio-health PriorityTierBadge.tsx palette */
.task-card .t-tier{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:3px;font-size:10px;font-weight:700;line-height:1;letter-spacing:0;margin-right:8px;vertical-align:1px;font-variant-numeric:tabular-nums}
.task-card .t-tier.tier-a{background:#047857;color:#fff;box-shadow:inset 0 0 0 1px #065f46}
.task-card .t-tier.tier-b{background:#bbf7d0;color:#14532d;box-shadow:inset 0 0 0 1px #86efac}
.task-card .t-tier.tier-c{background:#fff;color:#18181b;box-shadow:inset 0 0 0 1px #a1a1aa}

/* Task Type pill — neutral so it sits behind Priority Tier visually. */
.task-card .t-type{display:inline-block;font-size:9px;font-weight:600;line-height:1;letter-spacing:0.04em;text-transform:uppercase;padding:2px 5px;border-radius:3px;margin-left:8px;color:var(--ink-2);background:var(--rule-soft);box-shadow:inset 0 0 0 0.5px var(--rule);vertical-align:1px}

/* Days-overdue chip */
.task-card .t-overdue{display:inline-block;font-size:10px;font-weight:700;color:#fff;background:var(--red);padding:2px 6px;border-radius:3px;margin-right:8px;letter-spacing:0;font-variant-numeric:tabular-nums}

/* Client-highlight states (5-column bench mode when a client is selected) */
.task-card.dim{opacity:0.32}
.task-card.dim:hover{opacity:0.7}
.task-card.match{background:#eff6ff;border-color:var(--blue)}
.task-card.match:hover{background:#dbeafe}

/* Focused-bench mode: single-column, richer cards */
.bench.focused{display:block}
.focused-col{border:0.5px solid var(--rule);border-radius:8px;background:#fff;overflow:hidden}
.focused-head{padding:16px 24px;border-bottom:0.5px solid var(--rule);background:var(--hover);display:flex;justify-content:space-between;align-items:flex-start;gap:24px;flex-wrap:wrap}
.focused-title{font-size:18px;font-weight:700;color:var(--ink);letter-spacing:-0.01em}
.focused-sub{font-size:10px;color:var(--ink-3);text-transform:uppercase;letter-spacing:0.08em;margin-top:4px}
.focused-cap{min-width:260px}
.focused-counts{font-size:13px;color:var(--ink-2)}
.focused-grid{padding:16px 24px;display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:12px}
.task-card.focused{padding:12px}
.task-card.focused .t-name{font-size:14px;margin-top:4px}
.task-card.focused .t-fxmeta{display:flex;gap:16px;flex-wrap:wrap;margin-top:8px;font-size:12px;color:var(--ink-3);font-variant-numeric:tabular-nums}
.task-card.focused .t-fxmeta .fx-meta{letter-spacing:0.01em}
.task-card.focused .t-fxdesc{margin-top:8px;padding-top:8px;border-top:0.5px dashed var(--rule);font-size:12px;color:var(--ink-2);line-height:1.45}

/* Companion link row — Brief / AT / Camp, only for populated URLs */
.task-card .t-links{display:flex;gap:6px;align-items:center;margin-top:8px;padding-top:8px;border-top:0.5px dashed var(--rule);flex-wrap:wrap}
.task-card .t-link{font-size:11px;line-height:1;padding:4px 8px;border-radius:3px;background:var(--hover);color:var(--ink-2);text-decoration:none;border:0.5px solid var(--rule);font-weight:500;letter-spacing:0.01em}
.task-card .t-link:hover{background:var(--blue);color:#fff;border-color:var(--blue)}

/* Section collapse toggle (used on The Bench) */
.sec h2{display:flex;align-items:center;gap:10px}
.sec-toggle{background:transparent;border:0.5px solid var(--rule);width:24px;height:24px;border-radius:4px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;color:var(--ink-2);padding:0;line-height:1;transition:background .12s,border-color .12s}
.sec-toggle:hover{background:var(--hover);border-color:var(--ink-3);color:var(--ink)}
.sec-toggle .chev{display:inline-block;font-size:14px;transition:transform .15s ease}
.sec.collapsed .sec-toggle .chev{transform:rotate(-90deg)}
.sec-body{display:block}
.sec.collapsed .sec-body{display:none}

/* Calendar tier marker on pills */
.ct-item .ct-tier{display:inline-block;font-size:10px;font-weight:700;margin-right:6px;letter-spacing:0;padding:0 4px;border-radius:2px;line-height:1.5}
.ct-item .ct-tier.ct-tier-a{background:#047857;color:#fff}
.ct-item .ct-tier.ct-tier-b{background:#bbf7d0;color:#14532d}
.ct-item .ct-tier.ct-tier-c{background:#fff;color:#18181b;box-shadow:inset 0 0 0 0.5px #a1a1aa}

/* Calendar — daily grid. Cells hold capacity-scheduled tasks (2/operator/
   weekday in priority order). Due date drives queue priority, not grid
   placement. Weeks + Needs Assignment are collapsible. Cells cap at
   CAL_CELL_CAP (5) cards before a "+N more" affordance reveals the rest. */
.cal{border-top:0.5px solid var(--rule);border-bottom:0.5px solid var(--rule)}
.cal-week{display:block}
.cal-week-body{display:block;overflow:hidden}
.cal-week.collapsed .cal-week-body{display:none}
.cal-week-label.cal-toggle,
.cal-needs-head.cal-toggle{
  display:flex;justify-content:space-between;align-items:baseline;
  width:100%;padding:14px 16px;
  font-size:10px;text-transform:uppercase;letter-spacing:0.09em;color:var(--ink-3);font-weight:600;
  border:0;background:transparent;cursor:pointer;
  border-bottom:0.5px solid var(--rule-soft);
  transition:background .12s,color .12s;
}
.cal-week-label.cal-toggle:hover,
.cal-needs-head.cal-toggle:hover{background:var(--hover);color:var(--ink-2)}
.cal-week-title{display:inline-flex;align-items:center;gap:8px;color:var(--ink);font-size:12px;letter-spacing:0.06em}
.cal-week-title .chev,
.cal-needs-title .chev{display:inline-block;font-size:12px;color:var(--ink-2);transition:transform .15s ease}
.cal-week.collapsed .cal-week-title .chev,
.cal-needs.collapsed .cal-needs-title .chev{transform:rotate(-90deg)}
.cal-week-meta{display:inline-flex;align-items:baseline;gap:14px;font-weight:400}
.cal-week-meta .rng{color:var(--ink-2);letter-spacing:0;text-transform:none;font-size:12px}
.cal-week-count{font-size:11px;color:var(--ink-3);letter-spacing:0;text-transform:none;font-variant-numeric:tabular-nums}
.cal-week-count b{color:var(--ink);font-weight:600}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr)}
.cal-day{
  border-right:0.5px solid var(--rule-soft);
  border-bottom:0.5px solid var(--rule-soft);
  padding:12px;
  min-height:140px;
  display:flex;flex-direction:column;
}
.cal-day:nth-child(7n){border-right:none}
.cal-day.weekend{background:#fafafb}
.cal-day.today{background:rgba(0,113,227,0.04)}
.cal-day.weekend .cal-head,
.cal-day.past .cal-head{opacity:0.5}
.cal-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px;gap:8px}
.cal-head .cal-head-left{display:flex;align-items:baseline;gap:8px;min-width:0}
.cal-head .cal-head-right{display:inline-flex;align-items:center;gap:6px}
.cal-dow{font-size:11px;color:var(--ink-3);text-transform:uppercase;letter-spacing:0.10em;font-weight:600}
.cal-num{font-family:var(--display-font);font-size:22px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;letter-spacing:-0.02em;line-height:1}
.cal-day.today{box-shadow:inset 2px 0 0 var(--blue)}
.cal-day.today .cal-num{color:var(--blue)}
.cal-day.today .cal-dow{color:var(--blue)}
/* Heatmap tint per total cell load. Today's blue accent overrides via box-shadow. */
.cal-day[data-load="low"]{background:var(--load-tint-low)}
.cal-day[data-load="hot"]{background:var(--load-tint-hot)}
.cal-day[data-load="over"]{background:var(--load-tint-over)}
/* Labeled alert pills in the cell header. Replaced cryptic "!" + "OD" glyphs
   with explicit text so the meaning is on-screen, not in a tooltip. Pills
   stack on their own row below the day-num row. */
.cal-alerts{
  display:flex;flex-wrap:wrap;gap:4px;margin:-4px 0 6px 0;
}
.cal-alert{
  display:inline-flex;align-items:center;
  font-size:10px;font-weight:700;line-height:1;
  padding:3px 7px;border-radius:3px;
  background:var(--red);color:#fff;letter-spacing:0.02em;
  cursor:help;white-space:nowrap;
}
.cal-alert::before{content:"⚠ ";font-weight:700;margin-right:2px}
.cal-overdue-pill{
  display:inline-flex;align-items:center;
  font-size:10px;font-weight:700;line-height:1;
  padding:3px 7px;border-radius:3px;
  background:#fee2e2;color:#991b1b;letter-spacing:0.02em;
  border:0.5px solid #fecaca;white-space:nowrap;
}
.cal-day-count{
  font-size:11px;color:var(--ink-2);font-weight:500;
  font-variant-numeric:tabular-nums;letter-spacing:0;
  text-transform:none;
}
/* Per-operator load badges below the cell header — quick "who is hot today" scan.
   No-wrap so they stay on one line; overflow scrolls horizontally only when the
   cell can't fit all operators. */
.cal-op-strip{
  display:flex;flex-wrap:wrap;gap:3px;
  margin:0 0 6px 0;
}
.cal-op-badge{
  display:inline-flex;align-items:center;gap:3px;
  font-size:10px;font-weight:600;letter-spacing:0;
  padding:1px 5px;border-radius:3px;
  background:var(--rule-soft);color:var(--ink);
  font-variant-numeric:tabular-nums;
  border-left:2px solid var(--ink-3);
  border-top:0;border-right:0;border-bottom:0;
  font-family:inherit;line-height:1.4;
}
.cal-op-badge.clickable{cursor:pointer;transition:background .12s,color .12s,box-shadow .12s}
.cal-op-badge.clickable:hover{background:#fff;box-shadow:0 0 0 1px var(--ink-3)}
.cal-op-badge.active{background:var(--ink);color:#fff;font-weight:700}
.cal-op-badge.active.david{box-shadow:inset 3px 0 0 var(--owner-david)}
.cal-op-badge.active.jawad{box-shadow:inset 3px 0 0 var(--owner-jawad)}
.cal-op-badge.active.anthony{box-shadow:inset 3px 0 0 var(--owner-anthony)}
.cal-op-badge.active.josh{box-shadow:inset 3px 0 0 var(--owner-josh)}
.cal-op-badge.over{background:#fee2e2;color:#991b1b;border-left-color:var(--red)}
.cal-op-badge.david{border-left-color:var(--owner-david)}
.cal-op-badge.jawad{border-left-color:var(--owner-jawad)}
.cal-op-badge.anthony{border-left-color:var(--owner-anthony)}
.cal-op-badge.josh{border-left-color:var(--owner-josh)}
.cal-tasks{display:flex;flex-direction:column;gap:4px}
/* "+N more" / "Show less" affordance — kicks in when a cell exceeds the cap.
   Sits at the bottom of the cell so all 7 cells in a row stay vertically
   uniform regardless of which one is expanded. */
.cal-more{
  margin-top:6px;align-self:flex-start;
  font-size:11px;font-weight:500;color:var(--ink-2);
  background:none;border:0;padding:2px 0;cursor:pointer;
  letter-spacing:0;
}
.cal-more:hover{color:var(--blue)}

/* Needs Assignment — sits at the bottom of the calendar (below Week 2).
   Collapsible, amber-accented to signal "action required" without competing
   with overdue red. */
.cal-needs{
  border-top:1px dashed var(--amber);
  background:#fff8ed;
}
.cal-needs.collapsed .cal-needs-body{display:none}
.cal-needs-head.cal-toggle{
  background:transparent;border-bottom:0.5px dashed rgba(224,160,32,0.5);
  color:var(--ink-2);
}
.cal-needs-head.cal-toggle:hover{background:rgba(224,160,32,0.06);color:var(--ink)}
.cal-needs-title{display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:600;color:var(--ink);text-transform:uppercase;letter-spacing:0.08em}
.cal-needs-count{font-size:11px;color:var(--ink-2);font-variant-numeric:tabular-nums;letter-spacing:0;text-transform:none;font-weight:400}
.cal-needs-count b{color:var(--amber);font-weight:700}
.cal-needs-body{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(280px,1fr));
  gap:6px;
  padding:14px 16px;
}
.cal-needs-body .ct-item{background:#fff;border-left-color:var(--amber)}

.ct-item{
  font-size:12px;line-height:1.3;
  padding:6px 8px;
  border-radius:4px;
  background:var(--hover);
  border-left:2px solid var(--ink-3);
}
.ct-item:hover{background:#f2f2f4}
.ct-item{border-left-width:3px}
.ct-item.david{border-left-color:var(--owner-david)}
.ct-item.jawad{border-left-color:var(--owner-jawad)}
.ct-item.josh{border-left-color:var(--owner-josh)}
.ct-item.anthony{border-left-color:var(--owner-anthony)}
.ct-item.other-1{border-left-color:#0d9488}
.ct-item.other-2{border-left-color:#be185d}
.ct-item.other-3{border-left-color:#475569}
.ct-item.other-4{border-left-color:#a16207}
.ct-item.unassigned{border-left-color:var(--ink-3);background:repeating-linear-gradient(45deg,var(--hover) 0,var(--hover) 4px,#f2f2f4 4px,#f2f2f4 5px)}
/* Client-highlight states for calendar pills (mirror bench card pattern) */
.ct-item.dim{opacity:0.32}
.ct-item.dim:hover{opacity:0.7}
.ct-item.match{background:#eff6ff;box-shadow:inset 0 0 0 1px var(--blue)}
.ct-item.match:hover{background:#dbeafe}
.ct-item .own{font-size:10px;color:var(--ink-3);text-transform:uppercase;letter-spacing:0.09em;font-weight:600}
.ct-item .nm{display:block;color:var(--ink);font-size:12px;line-height:1.3;margin-top:2px}

/* Clients tab — per-client planned vs unassigned table */
.clients-table{margin-top:16px;border:0.5px solid var(--rule);border-radius:8px;overflow:hidden}
.ct-table{width:100%;border-collapse:collapse;font-size:13px;background:#fff}
.ct-table thead th{
  background:var(--hover);
  font-weight:600;
  font-size:11px;
  text-transform:uppercase;
  letter-spacing:0.06em;
  color:var(--ink-2);
  padding:10px 12px;
  border-bottom:0.5px solid var(--rule);
  cursor:pointer;
  user-select:none;
  white-space:nowrap;
  vertical-align:top;
}
.ct-table thead th .ct-th-label{display:block;color:var(--ink);font-weight:600}
.ct-table thead th .ct-th-sub{
  display:block;
  font-size:9px;font-weight:500;letter-spacing:0.04em;text-transform:none;
  color:var(--ink-3);margin-top:2px;
}
.ct-table thead th:hover{color:var(--ink)}
.ct-table .al-left{text-align:left}
.ct-table .al-right{text-align:right;font-variant-numeric:tabular-nums}
.ct-table tbody tr{border-bottom:0.5px solid var(--rule);transition:background 0.1s}
.ct-table tbody tr:last-child{border-bottom:0}
.ct-table tbody tr:hover{background:var(--hover);cursor:pointer}
.ct-table tbody tr.match{background:#dbeafe}
.ct-table tbody tr.match:hover{background:#bfdbfe}
.ct-table tbody tr.dim{opacity:0.4}
.ct-table tbody td{padding:10px 12px;color:var(--ink)}
.ct-table .ct-name{font-weight:500}
.ct-table .ct-unassigned-warn{color:#b45309}
.ct-table .ct-unassigned-warn b{color:#b45309}
.ct-table .t-tier{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:3px;font-size:10px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums}
.ct-table .t-tier.tier-a{background:#047857;color:#fff;box-shadow:inset 0 0 0 1px #065f46}
.ct-table .t-tier.tier-b{background:#bbf7d0;color:#14532d;box-shadow:inset 0 0 0 1px #86efac}
.ct-table .t-tier.tier-c{background:#fff;color:#18181b;box-shadow:inset 0 0 0 1px #a1a1aa}

/* Bench column "+N more" affordance — used to cap tall columns (esp. Unassigned) */
.bench-tasks .bench-more{
  display:block;
  width:100%;
  margin-top:8px;
  padding:8px 12px;
  font-size:12px;
  font-weight:500;
  color:var(--ink-2);
  background:var(--hover);
  border:0.5px dashed var(--rule);
  border-radius:6px;
  cursor:pointer;
  text-align:center;
  transition:background 0.1s, color 0.1s;
}
.bench-tasks .bench-more:hover{background:#e5e7eb;color:var(--ink)}

/* QA tab placeholder until other session lands their handler */
.qa-placeholder{
  border:0.5px dashed var(--rule);
  border-radius:8px;
  padding:48px;
  text-align:center;
  color:var(--ink-2);
  font-size:14px;
  background:var(--hover);
}
.qa-placeholder b{color:var(--ink);font-weight:600}

/* Loading + empty states */
.loading{display:inline-block;width:12px;height:12px;border:1.5px solid var(--rule);border-top-color:var(--ink-2);border-radius:50%;animation:spin 0.7s linear infinite;vertical-align:-2px;margin-left:10px}
@keyframes spin{to{transform:rotate(360deg)}}
.muted{color:var(--ink-3)}

/* ===========================================================================
   Proposals tab — scheduler ghost slots, modal why-panel, inputs card,
   always-on signal queue. Lifted from scheduler-mockup.html so the live
   surface matches the canonical visual reference exactly.
   ========================================================================= */

/* Inputs card — top-of-tab "what data did this run see" */
.inputs-card{display:flex;flex-wrap:wrap;gap:24px;background:var(--hover);border:0.5px solid var(--rule);border-radius:8px;padding:16px 20px;margin-bottom:24px;font-size:12px}
.inputs-card .ic-cell{display:flex;flex-direction:column;gap:2px;min-width:140px}
.inputs-card .ic-cell .lbl{font-size:10px;color:var(--ink-3);text-transform:uppercase;letter-spacing:0.07em;font-weight:600;display:inline-flex;align-items:center;gap:5px}
/* Visible discovery affordance — small ? circle next to each field label so
   operators see there's a tooltip to discover. The whole .ic-cell carries
   title="" too, so hovering anywhere on the cell shows the same explanation. */
.inputs-card .ic-cell-help{
  display:inline-flex;align-items:center;justify-content:center;
  width:13px;height:13px;border-radius:50%;
  background:var(--ink-3);color:#fff;
  font-size:9px;font-weight:700;line-height:1;
  cursor:help;transition:background .12s;
  letter-spacing:0;text-transform:none;
}
.inputs-card .ic-cell:hover .ic-cell-help{background:var(--blue)}
.inputs-card .ic-cell .val{font-size:14px;color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums;word-break:break-word}
.inputs-card .ic-cell .val .badge{font-size:10px;background:#eff6ff;color:var(--blue);padding:2px 6px;border-radius:3px;margin-left:6px;font-weight:500;letter-spacing:0}

/* Compare toggle (visual only — Phase 3 polish slot) */
.compare-toolbar{display:flex;align-items:center;gap:24px;margin-bottom:20px;padding:12px 0;border-bottom:0.5px dashed var(--rule)}
.compare-toolbar .seg{display:inline-flex;border:0.5px solid var(--rule);border-radius:6px;overflow:hidden}
.compare-toolbar .seg button{padding:6px 14px;font-size:12px;color:var(--ink-2);background:#fff;border-right:0.5px solid var(--rule);cursor:pointer;border:0;font-family:inherit}
.compare-toolbar .seg button:last-child{border-right:none}
.compare-toolbar .seg button.active{background:var(--ink);color:#fff;font-weight:500}
.compare-toolbar .legend{display:flex;gap:18px;margin-left:auto;font-size:11px;color:var(--ink-2);align-items:center}
.compare-toolbar .legend span{display:inline-flex;align-items:center;gap:6px}
.legend-swatch{width:14px;height:14px;border-radius:3px;display:inline-block}
.legend-swatch.solid{background:#fff;border:0.5px solid var(--rule);border-left:2px solid var(--blue)}
.legend-swatch.ghost{background:repeating-linear-gradient(45deg,#fff 0,#fff 4px,#f2f2f4 4px,#f2f2f4 5px);border:1px dashed var(--blue);border-radius:3px}

/* Scheduler ghost slot — collapsed card on the calendar.
   Full detail (reason, factors, actions) lives in the modal opened on click. */
.ghost-slot{
  position:relative;
  background:repeating-linear-gradient(45deg,#fff 0,#fff 4px,#f2f2f4 4px,#f2f2f4 5px);
  border:1px dashed var(--blue);
  border-radius:6px;padding:6px 8px;
  cursor:pointer;
  transition:background .12s,border-color .12s,transform .08s;
}
.ghost-slot:hover{background:#fff;border-color:var(--ink);transform:translateY(-1px)}
.ghost-slot:focus-visible{outline:2px solid var(--blue);outline-offset:2px}
.ghost-slot .gs-top{display:flex;justify-content:space-between;align-items:center;gap:6px;margin-bottom:3px}
.ghost-slot .gs-prov{
  font-size:8px;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;
  padding:1px 5px;border-radius:2px;
  color:#fff;background:var(--ink-3);
}
.ghost-slot .gs-prov.lookalike{background:#0d9488}
.ghost-slot .gs-prov.signal{background:#0071e3}
.ghost-slot .gs-prov.proven{background:#30a46c}
.ghost-slot .gs-prov.trend{background:#ea580c}
.ghost-slot .gs-prov.client-ask{background:#db2777}
.ghost-slot .gs-prov.conference{background:#7c3aed}
.ghost-slot .gs-conf{
  font-size:10px;font-weight:700;letter-spacing:0.02em;
  padding:1px 6px;border-radius:3px;
  color:#fff;background:var(--green);
  font-variant-numeric:tabular-nums;
}
.ghost-slot .gs-conf.amber{background:var(--amber)}
.ghost-slot .gs-conf.red{background:var(--red)}
.ghost-slot .gs-name{
  font-size:12px;color:var(--ink);line-height:1.3;font-weight:500;letter-spacing:-0.005em;
  overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
}
.ghost-slot .gs-risk-dot{
  display:inline-block;width:6px;height:6px;border-radius:50%;
  background:var(--red);margin-right:4px;vertical-align:1px;
}

/* Modal overlay for the why-panel */
.modal-backdrop{
  display:none;position:fixed;inset:0;
  background:rgba(0,0,0,0.32);
  z-index:1000;
  align-items:flex-start;justify-content:center;
  padding:80px 20px 20px;
  overflow-y:auto;
}
.modal-backdrop.open{display:flex}
.modal{
  position:relative;
  background:#fff;border:0.5px solid var(--rule);border-radius:10px;
  max-width:680px;width:100%;
  box-shadow:0 12px 48px rgba(0,0,0,0.18);
  padding:0;overflow:hidden;
}
.modal-head{
  padding:20px 24px 16px;border-bottom:0.5px solid var(--rule);
  display:flex;justify-content:space-between;align-items:flex-start;gap:16px;
}
.modal-head .mh-left{flex:1;min-width:0}
.modal-head .mh-prov-row{display:flex;align-items:center;gap:8px;margin-bottom:6px;flex-wrap:wrap}
.modal-head .mh-prov{font-size:9px;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;padding:2px 6px;border-radius:3px;color:#fff;background:var(--ink-3)}
.modal-head .mh-prov.lookalike{background:#0d9488}
.modal-head .mh-prov.signal{background:#0071e3}
.modal-head .mh-prov.proven{background:#30a46c}
.modal-head .mh-prov.trend{background:#ea580c}
.modal-head .mh-prov.client-ask{background:#db2777}
.modal-head .mh-prov.conference{background:#7c3aed}
.modal-head .mh-day{font-size:11px;color:var(--ink-2);letter-spacing:0.04em;text-transform:uppercase;font-weight:500}
.modal-head h3{margin:0;font-family:var(--display-font);font-size:18px;font-weight:600;line-height:1.3;letter-spacing:-0.01em;color:var(--ink)}
.modal-head .mh-conf{
  font-size:14px;font-weight:700;font-variant-numeric:tabular-nums;
  padding:6px 12px;border-radius:6px;color:#fff;background:var(--green);
  align-self:flex-start;flex-shrink:0;
}
.modal-head .mh-conf.amber{background:var(--amber)}
.modal-head .mh-conf.red{background:var(--red)}
/* Track-F3 #5: right-side cluster — Airtable link sits above the confidence
   chip when present; otherwise the chip occupies the same slot it did in F2. */
.modal-head .mh-right{
  display:flex;flex-direction:column;align-items:flex-end;gap:8px;flex-shrink:0;
}
.modal-head .modal-at-link{
  font-size:11px;font-weight:500;letter-spacing:0.02em;
  color:var(--blue);text-decoration:none;
  padding:4px 8px;border:0.5px solid var(--blue);border-radius:5px;
  background:#fff;transition:background .12s,color .12s;
  white-space:nowrap;
}
.modal-head .modal-at-link:hover{background:var(--blue);color:#fff}
.modal-close{position:absolute;top:14px;right:14px;width:28px;height:28px;border-radius:50%;background:var(--rule-soft);color:var(--ink-2);font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;border:0;transition:background .12s,color .12s;font-family:inherit}
.modal-close:hover{background:var(--ink);color:#fff}

.modal-body{padding:20px 24px}
.modal-body h4{font-family:var(--display-font);font-size:11px;text-transform:uppercase;letter-spacing:0.08em;color:var(--ink-3);font-weight:600;margin:0 0 8px}
.modal-body h4:not(:first-child){margin-top:20px}
.modal-body .reason-block,.modal-body .hypothesis-block{font-size:14px;color:var(--ink);line-height:1.55;letter-spacing:-0.005em}
.modal-body .proof-block{font-size:12px;color:var(--ink-2);line-height:1.5;font-family:var(--mono-font);background:var(--rule-soft);padding:10px 12px;border-radius:5px;border-left:2px solid var(--ink-3)}
.modal-body .brief-block{font-size:13px;color:var(--ink);line-height:1.6;background:#f8fafc;border:0.5px solid var(--rule);padding:14px 16px;border-radius:6px;letter-spacing:-0.003em}
.modal-body .brief-block::before{content:"DRAFT BRIEF · auto-generated · editable on accept";display:block;font-size:9px;font-weight:700;letter-spacing:0.08em;color:var(--ink-3);margin-bottom:8px;text-transform:uppercase}
/* #1 Track record — measured history of this concept. Sky-Blue accent marks it
   as the trust/proof element of the detail modal. */
.modal-body .track-record-block{font-size:13px;color:var(--ink);line-height:1.55;background:rgba(33,168,242,0.06);border-left:2px solid #21A8F2;padding:10px 12px;border-radius:5px;letter-spacing:-0.003em}
.modal-body .risk-block{margin-top:8px;padding:10px 12px;background:#fef2f2;border:0.5px solid #fecaca;border-radius:6px;font-size:12px;color:var(--red);line-height:1.5}
.modal-body .risk-block::before{content:"⚠ ";font-weight:700}
.modal-body .notes-block{font-size:12px;color:var(--ink-2);line-height:1.5;font-family:var(--mono-font);background:var(--rule-soft);padding:10px 12px;border-radius:5px}
.modal-body .notes-block ul{margin:0;padding-left:18px}

.modal-body table{width:100%;border-collapse:collapse;font-size:12px;margin-top:4px}
.modal-body th{text-align:left;padding:6px 8px;font-weight:600;color:var(--ink-3);font-size:10px;letter-spacing:0.07em;text-transform:uppercase;border-bottom:0.5px solid var(--rule);background:var(--hover)}
.modal-body td{padding:8px;color:var(--ink-2);border-bottom:0.5px solid var(--rule-soft);vertical-align:middle;font-size:12px;line-height:1.4}
.modal-body td.factor{color:var(--ink);font-weight:500;width:28%;white-space:nowrap}
.modal-body td.factor small{display:block;color:var(--ink-3);font-size:10px;font-weight:400;letter-spacing:0.04em;text-transform:uppercase}
.modal-body td.score{color:var(--ink);font-variant-numeric:tabular-nums;font-weight:700;width:10%;text-align:right}
.modal-body td.bar{padding:8px 12px;width:24%}
.modal-body .scorebar{height:6px;background:var(--rule-soft);border-radius:3px;overflow:hidden}
.modal-body .scorebar div{height:100%;background:var(--blue);border-radius:3px;transition:width .35s}
.modal-body td.note{color:var(--ink-2);font-size:12px}
.modal-body .composite-row{padding:12px 8px 4px;display:flex;justify-content:space-between;align-items:baseline;font-size:13px;color:var(--ink);font-weight:600;border-top:0.5px solid var(--ink);margin-top:8px}
.modal-body .composite-row.muted{border-top:0.5px dashed var(--rule);color:var(--ink-2);font-weight:500;padding-top:8px;margin-top:0}

.modal-foot{padding:16px 24px;border-top:0.5px solid var(--rule);background:var(--hover);display:flex;gap:8px;justify-content:flex-end}
.modal-foot button{font-size:12px;padding:8px 16px;border:0.5px solid var(--rule);border-radius:5px;color:var(--ink-2);background:#fff;font-weight:500;letter-spacing:0.02em;cursor:pointer;transition:background .12s,color .12s,border-color .12s;font-family:inherit}
.modal-foot button.accept{color:#fff;background:var(--green);border-color:var(--green);font-weight:600}
.modal-foot button.accept:hover{background:#26885a}
.modal-foot button.reject{color:var(--red);border-color:var(--red)}
.modal-foot button.reject:hover{background:var(--red);color:#fff}
/* Track-F3 #1: Muted Reject for AT slots — same red hue, lower contrast so
   the button reads as "available but not the primary action." Still
   clickable; handler is the same console-log + flash-dim stub. */
/* Muted Reject for AT slots — keeps the red hue (per Josh) but at reduced
   opacity so it reads as "available but not the primary action." */
.modal-foot button.reject.muted{opacity:0.55;color:var(--red);border-color:var(--red)}
.modal-foot button.reject.muted:hover{background:var(--red);color:#fff;opacity:0.85}
.modal-foot button.dismiss{color:var(--ink-2)}
.modal-foot button.dismiss:hover{color:var(--ink);background:var(--rule-soft)}

/* Always-on signal queue (review surface, not subject to in-flight penalty) */
.signal-queue{margin:24px 0;border:0.5px solid var(--rule);border-radius:8px;overflow:hidden}
.signal-queue-head{padding:14px 18px;background:#fff8ed;border-bottom:0.5px solid #e8c875;display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}
.signal-queue-head h3{margin:0;font-family:var(--display-font);font-size:14px;font-weight:600;letter-spacing:-0.01em;color:var(--ink)}
.signal-queue-head .sq-meta{font-size:11px;color:var(--ink-2);font-weight:500}
.signal-queue-head .sq-pill{font-size:9px;font-weight:700;letter-spacing:0.08em;text-transform:uppercase;padding:2px 6px;border-radius:3px;background:var(--amber);color:#fff;margin-left:auto}
.signal-queue-deck{padding:12px 18px;font-size:12px;color:var(--ink-2);line-height:1.5;background:#fffbf3}
.signal-queue-body{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:0}
.signal-queue-empty{padding:24px 18px;font-size:12px;color:var(--ink-2);line-height:1.55;text-align:center;background:#fefefe}
.sq-cell{padding:14px 18px;border-right:0.5px solid var(--rule-soft);border-top:0.5px solid var(--rule-soft);display:flex;flex-direction:column;gap:4px;cursor:pointer;transition:background .12s}
.sq-cell:hover{background:#fefefe}
.sq-cell .sq-source{font-size:11px;font-weight:600;color:var(--ink);letter-spacing:-0.005em}
.sq-cell .sq-counts{display:flex;align-items:baseline;gap:8px;font-size:13px;color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums}
.sq-cell .sq-counts .total{font-size:24px;font-family:var(--display-font);font-weight:600;letter-spacing:-0.02em}
.sq-cell .sq-counts .ta{font-size:10px;font-weight:600;color:var(--green);background:#ecfdf5;padding:1px 5px;border-radius:3px;letter-spacing:0.04em;text-transform:uppercase}
.sq-cell .sq-desc{font-size:11px;color:var(--ink-2);line-height:1.4;margin-top:2px}
.sq-cell .sq-foot{display:flex;justify-content:space-between;align-items:center;margin-top:6px;font-size:10px;color:var(--ink-3);text-transform:uppercase;letter-spacing:0.07em;font-weight:500}
.sq-cell .sq-foot .route{color:var(--blue)}

/* Proposals empty states + loading */
.proposals-empty{padding:48px 24px;text-align:center;color:var(--ink-2);font-size:14px;line-height:1.55;background:var(--hover);border:0.5px dashed var(--rule);border-radius:8px}
.proposals-empty b{color:var(--ink);font-weight:600}
.proposals-empty .picker{margin-top:14px;display:flex;gap:6px;justify-content:center;flex-wrap:wrap}
.proposals-empty .picker button{font-size:12px;padding:5px 12px;border:0.5px solid var(--rule);border-radius:6px;background:#fff;color:var(--ink-2);cursor:pointer;font-family:inherit}
.proposals-empty .picker button:hover{color:var(--ink);border-color:var(--ink-3)}

/* ---------------------------------------------------------------------------
   Empty-state diagnostic — rendered when a client has 0 proposed campaigns.
   Layout: diagnostic reasons card → inputs card → action row. Reuses
   --hover background and --rule border tokens so it sits next to the inputs
   card as a paired surface, not a disconnected alert.
   ----------------------------------------------------------------------- */
.empty-state-diagnostic{
  background:var(--hover);
  border:0.5px solid var(--rule);
  border-left:3px solid var(--amber, #f59e0b);
  border-radius:8px;
  padding:16px 20px;
  margin-bottom:20px;
  font-size:13px;
  line-height:1.55;
  color:var(--ink-2);
}
.empty-state-diagnostic .empty-state-title{
  font-size:11px;
  color:var(--ink-3);
  text-transform:uppercase;
  letter-spacing:0.08em;
  font-weight:600;
  margin-bottom:10px;
}
.empty-state-diagnostic .empty-state-reasons{
  margin:0;
  padding-left:18px;
  list-style:disc;
}
.empty-state-diagnostic .empty-state-reasons li{
  margin:4px 0;
  color:var(--ink);
}
.empty-state-actions{
  display:flex;
  gap:10px;
  flex-wrap:wrap;
  margin-top:8px;
  margin-bottom:24px;
}
.empty-state-actions .empty-state-action{
  font-size:13px;
  font-weight:500;
  padding:8px 16px;
  border-radius:6px;
  cursor:pointer;
  font-family:inherit;
  text-decoration:none;
  line-height:1.2;
  display:inline-flex;
  align-items:center;
  gap:6px;
  border:0.5px solid var(--rule);
}
.empty-state-actions .empty-state-action.primary{
  background:var(--blue);
  color:#fff;
  border-color:var(--blue);
}
.empty-state-actions .empty-state-action.primary:hover{
  opacity:0.92;
}
.empty-state-actions .empty-state-action.secondary{
  background:#fff;
  color:var(--ink);
}
.empty-state-actions .empty-state-action.secondary:hover{
  border-color:var(--ink-3);
  color:var(--ink);
}
.proposals-meta{display:flex;align-items:center;gap:14px;margin-bottom:12px;font-size:11px;color:var(--ink-3);text-transform:uppercase;letter-spacing:0.08em;font-weight:600;flex-wrap:wrap}
.proposals-meta .when{text-transform:none;letter-spacing:0;color:var(--ink-2);font-weight:500}
.proposals-meta .force-link{margin-left:auto;text-transform:none;letter-spacing:0;color:var(--blue);cursor:pointer;font-weight:500}
.proposals-meta .proposals-updated{margin-left:auto;text-transform:none;letter-spacing:0;color:var(--ink-2);font-weight:500;font-size:12px}
/* Refresh proposed campaigns button — mirrors the .hd .refresh affordance so
   the operator sees the same pattern everywhere (blue text + icon + hover
   fade). The "~30s" hint sits beside the label so duration is visible. */
.proposals-meta .proposals-refresh{
  display:inline-flex;align-items:center;gap:6px;
  font-size:13px;font-weight:500;color:var(--blue);
  background:none;border:0;cursor:pointer;
  text-transform:none;letter-spacing:0;
  padding:6px 0;font-family:inherit;
}
.proposals-meta .proposals-refresh:hover{opacity:0.65}
.proposals-meta .proposals-refresh .pr-icon{font-size:14px;line-height:1}
.proposals-meta .proposals-refresh .pr-hint{
  color:var(--ink-3);font-size:11px;font-weight:500;
  background:var(--rule-soft);padding:2px 6px;border-radius:3px;
  font-variant-numeric:tabular-nums;
}

/* Proposals chip row — multi-client picker above the calendar.
   Reuses .client-chip from the Clients tab and adds a capability-tier
   color stripe so operators can scan green/amber/red at a glance. */
.chip-row.proposals{display:flex;gap:6px;flex-wrap:wrap;align-items:center;padding:8px 0 14px;border-bottom:0.5px solid var(--rule-soft);margin-bottom:14px}
.chip-row.proposals .client-chip{cursor:help;position:relative}
.chip-row.proposals .client-chip[data-cap-tier]{border-left-width:3px;border-left-style:solid}
.chip-row.proposals .client-chip[data-cap-tier="green"]{border-left-color:var(--green)}
.chip-row.proposals .client-chip[data-cap-tier="amber"]{border-left-color:var(--amber)}
.chip-row.proposals .client-chip[data-cap-tier="red"]{border-left-color:var(--red)}
.chip-row.proposals .client-chip[data-cap-tier="green"].on{background:#ecfdf5;border-color:var(--green);box-shadow:inset 0 0 0 0.5px var(--green)}
.chip-row.proposals .client-chip[data-cap-tier="amber"].on{background:#fffbeb;border-color:var(--amber);box-shadow:inset 0 0 0 0.5px var(--amber)}
.chip-row.proposals .client-chip[data-cap-tier="red"].on{background:#fef2f2;border-color:var(--red);box-shadow:inset 0 0 0 0.5px var(--red)}
.proposals-chip-note{display:block;font-size:10px;color:var(--ink-3);margin:6px 0 12px;letter-spacing:0;text-transform:none;font-weight:400}

/* Track-F2 #3: custom CSS-only tooltip for non-active proposals chips.
   Replaces browser title= so the 320px min-width can keep all five sources
   on one line (the previous browser tooltip wrapped "Tasks ✅" onto a 2nd
   line on narrow chips). Active chip skips the tooltip — its capability
   info renders inline via .cap-inline below the chip row. */
.chip-row.proposals .client-chip[data-cap-tooltip]{cursor:help}
.chip-row.proposals .client-chip[data-cap-tooltip]::after{
  content:attr(data-cap-tooltip);
  position:absolute;left:50%;top:calc(100% + 6px);transform:translateX(-50%);
  min-width:320px;max-width:380px;
  background:#1f2937;color:#fff;
  font-size:11px;font-weight:500;letter-spacing:0;
  padding:8px 12px;border-radius:6px;
  white-space:nowrap;text-transform:none;
  box-shadow:0 6px 24px rgba(0,0,0,0.18);
  opacity:0;pointer-events:none;
  transition:opacity .12s ease-out;
  z-index:200;
}
.chip-row.proposals .client-chip[data-cap-tooltip]:hover::after,
.chip-row.proposals .client-chip[data-cap-tooltip]:focus-visible::after{opacity:1}

/* Track-F2 #4: inline capability panel for the active client. Sits directly
   below the chip row, lists every source with ✅/❌ + miss reason, then the
   sit-out / partial factor tails. Mirrors the tooltip text but with more
   room to breathe so operators can read it without hovering. */
.cap-inline{
  margin:0 0 14px;padding:14px 16px;
  background:#fafbfc;border:0.5px solid var(--rule);border-radius:8px;
  font-size:12px;color:var(--ink-2);line-height:1.5;
}
.cap-inline-title{
  font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:0.08em;
  color:var(--ink-3);margin-bottom:8px;
}
.cap-inline-row{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:baseline}
.cap-inline-src{font-size:12px;color:var(--ink);font-weight:500}
.cap-inline-src.ok{color:var(--ink)}
.cap-inline-src.miss{color:var(--ink-2)}
.cap-inline-sep{color:var(--ink-3);font-weight:400}
.cap-inline-tail{margin-top:6px;font-size:11px;color:var(--ink-2)}
.cap-inline-tail-lbl{font-style:italic;color:var(--ink-3);margin-right:4px}

/* Track-F2 #5: slot-type legend above the calendar. Solid swatch = current
   Airtable task; dashed = scheduler-proposed. Visual styling matches the
   .compare-toolbar .legend-swatch pattern in the original mockup. */
.proposals-legend{
  display:flex;flex-wrap:wrap;gap:18px;align-items:center;
  margin:6px 0 14px;font-size:11px;color:var(--ink-2);
}
.proposals-legend-item{display:inline-flex;align-items:center;gap:6px}
.proposals-legend .legend-swatch{width:18px;height:14px;border-radius:3px;display:inline-block}
.proposals-legend .swatch-airtable{background:#fff;border:1px solid var(--blue)}
.proposals-legend .swatch-generated{
  background:repeating-linear-gradient(45deg,#fff 0,#fff 4px,#f2f2f4 4px,#f2f2f4 5px);
  border:1px dashed var(--blue);
}

/* Track-F2 #5: ghost-slot variants. Generated proposals keep the existing
   dashed-border + diagonal-stripe treatment; AT-task slots get a solid blue
   border and plain white background so the operator can spot real Airtable
   work at a glance. */
.ghost-slot.gs-airtable-task{
  background:#fff;
  border:1.5px solid var(--blue);
}
.ghost-slot.gs-airtable-task:hover{background:#f8fafc;border-color:var(--blue);transform:translateY(-1px)}
.ghost-slot.gs-generated{
  background:repeating-linear-gradient(45deg,#fff 0,#fff 4px,#f2f2f4 4px,#f2f2f4 5px);
  border:1px dashed var(--blue);
}
.ghost-slot.gs-generated:hover{background:#fff;border-color:var(--ink);transform:translateY(-1px)}

/* Track-F2 #9: modal subtitle — full task_name in smaller text under the
   H3 short_title when the two strings differ. Reads as quiet context. */
.modal-head .mh-subtitle{
  margin-top:4px;font-size:12px;color:var(--ink-2);
  line-height:1.4;font-weight:400;letter-spacing:0;
}

/* Track-F2 #10: (?) info icon in the factor-table factor column. Tooltip is
   CSS-only via data-factor-tip; matches the chip cap-tooltip pattern for
   visual consistency. */
.modal-body td.factor .factor-info{
  display:inline-flex;align-items:center;justify-content:center;
  width:14px;height:14px;border-radius:50%;
  background:var(--rule-soft);color:var(--ink-3);
  font-size:9px;font-weight:700;font-family:inherit;
  cursor:help;position:relative;vertical-align:1px;
  margin-left:4px;line-height:1;letter-spacing:0;
  text-transform:none;
}
.modal-body td.factor .factor-info:hover,
.modal-body td.factor .factor-info:focus-visible{background:var(--ink-3);color:#fff;outline:none}
.modal-body td.factor .factor-info::after{
  content:attr(data-factor-tip);
  position:absolute;left:50%;bottom:calc(100% + 6px);transform:translateX(-50%);
  min-width:240px;max-width:320px;
  background:#1f2937;color:#fff;
  font-size:11px;font-weight:500;letter-spacing:0;text-transform:none;
  padding:8px 12px;border-radius:6px;line-height:1.4;
  white-space:normal;text-align:left;
  box-shadow:0 6px 24px rgba(0,0,0,0.18);
  opacity:0;pointer-events:none;
  transition:opacity .12s ease-out;
  z-index:1100;
}
.modal-body td.factor .factor-info:hover::after,
.modal-body td.factor .factor-info:focus-visible::after{opacity:1}

/* Toast notifications for accept-flow feedback. */
#scheduler-toast-host{position:fixed;top:18px;right:18px;display:flex;flex-direction:column;gap:8px;z-index:10000;pointer-events:none;max-width:380px}
.scheduler-toast{
  display:flex;align-items:flex-start;gap:10px;
  background:#fff;border:0.5px solid var(--rule);border-radius:8px;
  padding:12px 14px;font-size:13px;color:var(--ink);line-height:1.45;
  box-shadow:0 4px 16px rgba(0,0,0,0.08);
  pointer-events:auto;
  animation:scheduler-toast-in .2s ease-out;
}
.scheduler-toast.dismissing{opacity:0;transform:translateY(-4px);transition:opacity .2s,transform .2s}
.scheduler-toast.success{border-left:3px solid var(--green)}
.scheduler-toast.error{border-left:3px solid var(--red)}
.scheduler-toast.info{border-left:3px solid var(--blue)}
.scheduler-toast .st-body{flex:1}
.scheduler-toast .st-body a{color:var(--blue);font-weight:500}
.scheduler-toast .st-close{
  background:none;border:0;color:var(--ink-3);font-size:18px;line-height:1;
  cursor:pointer;padding:0;margin:-2px -4px 0 0;
}
.scheduler-toast .st-close:hover{color:var(--ink)}
@keyframes scheduler-toast-in{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}

/* ============================================================ */
/* Owner chips (Client Planning + capacity rails)                 */
/* ============================================================ */
.ct-owners{display:inline-flex;flex-wrap:wrap;gap:4px;align-items:center}
.ct-owner-chip{
  display:inline-flex;align-items:center;gap:4px;
  font-size:10px;font-weight:700;line-height:1;
  padding:3px 6px 3px 5px;
  border-radius:10px;
  background:var(--rule-soft);color:var(--ink);
  border-left:2px solid var(--ink-3);
  letter-spacing:0.02em;
  font-variant-numeric:tabular-nums;
  white-space:nowrap;
}
.ct-owner-chip .ct-owner-ct{
  font-size:9px;font-weight:600;color:var(--ink-2);
  background:#fff;border-radius:8px;padding:1px 5px;
  letter-spacing:0;
}
.ct-owner-chip.david{border-left-color:var(--owner-david)}
.ct-owner-chip.jawad{border-left-color:var(--owner-jawad)}
.ct-owner-chip.anthony{border-left-color:var(--owner-anthony)}
.ct-owner-chip.josh{border-left-color:var(--owner-josh)}
.ct-owner-chip.unassigned{border-left-color:var(--owner-unassigned);color:var(--ink-2);font-style:italic}
.ct-owner-chip.other-1{border-left-color:#0d9488}
.ct-owner-chip.other-2{border-left-color:#be185d}
.ct-owner-chip.other-3{border-left-color:#475569}
.ct-owner-chip.other-4{border-left-color:#a16207}

/* Expandable per-client day strip (Client Planning) */
.ct-row-toggle{
  display:inline-flex;align-items:center;justify-content:center;
  width:18px;height:18px;border-radius:3px;
  background:transparent;color:var(--ink-3);
  font-size:11px;cursor:pointer;border:0;
  transition:background .12s,color .12s,transform .12s;
}
.ct-row-toggle:hover{color:var(--ink);background:var(--rule-soft)}
.ct-row.expanded .ct-row-toggle{transform:rotate(90deg);color:var(--ink)}
.ct-strip-row{background:#fafbfc}
.ct-strip-row td{padding:0 !important}
.ct-strip-wrap{padding:12px 14px 16px 14px;display:flex;flex-direction:column;gap:8px}
.ct-strip-head{display:flex;justify-content:space-between;align-items:center;font-size:10px;color:var(--ink-3);text-transform:uppercase;letter-spacing:0.08em;font-weight:600}
.ct-strip-head .ct-strip-legend{display:inline-flex;gap:8px;text-transform:none;letter-spacing:0;font-weight:500;color:var(--ink-2)}
.ct-strip-head .ct-strip-legend .ls{display:inline-flex;align-items:center;gap:4px;font-size:11px}
.ct-strip-head .ct-strip-legend .ls .sw{display:inline-block;width:10px;height:10px;border-radius:2px;background:var(--rule)}
.ct-strip-grid{display:grid;grid-template-columns:repeat(14,minmax(0,1fr));gap:3px}
.ct-strip-cell{
  display:flex;flex-direction:column;align-items:center;justify-content:flex-end;
  padding:6px 4px 8px;border-radius:4px;background:#fff;border:0.5px solid var(--rule);
  min-height:64px;position:relative;
}
.ct-strip-cell.weekend{background:#fafafb;opacity:0.55}
.ct-strip-cell.past{opacity:0.55}
.ct-strip-cell.today{box-shadow:inset 0 -2px 0 var(--blue)}
.ct-strip-cell.over{background:#fee2e2;border-color:#fecaca}
.ct-strip-cell.hot{background:#fef3c7;border-color:#fde68a}
.ct-strip-cell .csc-dow{font-size:9px;color:var(--ink-3);text-transform:uppercase;letter-spacing:0.06em;font-weight:600}
.ct-strip-cell .csc-num{font-size:11px;color:var(--ink-2);font-variant-numeric:tabular-nums;margin-bottom:auto}
.ct-strip-cell .csc-total{font-size:14px;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;line-height:1;margin-top:2px}
.ct-strip-cell .csc-stack{display:flex;gap:2px;margin-top:3px;height:4px;width:100%;justify-content:center}
.ct-strip-cell .csc-stack .seg{height:4px;width:4px;border-radius:1px;background:var(--ink-3)}
.ct-strip-cell .csc-stack .seg.david{background:var(--owner-david)}
.ct-strip-cell .csc-stack .seg.jawad{background:var(--owner-jawad)}
.ct-strip-cell .csc-stack .seg.anthony{background:var(--owner-anthony)}
.ct-strip-cell .csc-stack .seg.josh{background:var(--owner-josh)}
.ct-strip-cell .csc-stack .seg.unassigned{background:var(--owner-unassigned)}

/* Behind-pace pill in bench head */
.cap-pace-pill{
  display:inline-flex;align-items:center;gap:4px;
  font-size:9px;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;
  padding:2px 6px;border-radius:3px;background:#fef3c7;color:#92400e;
  border:0.5px solid #fde68a;margin-left:6px;
}
.cap-pace-pill.behind{background:#fee2e2;color:#991b1b;border-color:#fecaca}
.cap-pace-pill::before{content:"●";font-size:8px;color:currentColor;opacity:0.7}

/* Bench column owner-color stripe (top-of-column accent) */
.bench-col.david .bench-head{box-shadow:inset 0 3px 0 var(--owner-david)}
.bench-col.jawad .bench-head{box-shadow:inset 0 3px 0 var(--owner-jawad)}
.bench-col.anthony .bench-head{box-shadow:inset 0 3px 0 var(--owner-anthony)}
.bench-col.josh .bench-head{box-shadow:inset 0 3px 0 var(--owner-josh)}
.bench-col.unassigned .bench-head{box-shadow:inset 0 3px 0 var(--owner-unassigned)}

/* Section variant: backup queue (Bench when collapsed-by-default below calendar) */
.sec-backup > h2{font-size:14px;color:var(--ink-2);font-weight:600}
.sec-backup > h2 .sec-backup-label{
  font-size:10px;font-weight:600;color:var(--ink-3);text-transform:uppercase;
  letter-spacing:0.10em;margin-left:8px;
}
.sec-backup .deck{font-size:12px;color:var(--ink-3)}

/* Two-Week Calendar: lift visual prominence as the primary section */
.sec-primary > h2{font-size:22px;letter-spacing:-0.02em;font-weight:600}
.sec-primary > h2::before{
  content:"";display:inline-block;width:4px;height:18px;
  background:var(--blue);border-radius:2px;
  margin-right:10px;vertical-align:-2px;
}
.sec-primary .deck{font-size:13px;color:var(--ink-2)}

/* Calendar pill: tighter visual hierarchy + heavier client name */
.ct-item{padding:7px 9px 7px 8px}
.ct-item .own{display:none}  /* owner now communicated via left-stripe color */
.ct-item.unassigned .own{display:inline}
.ct-item .nm{margin-top:0;font-size:12px;color:var(--ink);line-height:1.32}

/* ============================================================ */
/* Bench enhancements — Next Action callout, numbered priority,   */
/* dim-when-client-filter-on, CM chip                             */
/* ============================================================ */
.bench-col.dim{opacity:0.35;filter:grayscale(0.5)}
.bench-col.dim:hover{opacity:0.85;filter:none}

/* Next Action callout in the bench head — points at the top-priority card */
.bench-next{
  margin-top:10px;padding:8px 10px;
  background:#fff;border:0.5px solid var(--rule);border-radius:6px;
  display:flex;align-items:center;gap:8px;
  font-size:11px;color:var(--ink);
  box-shadow:0 1px 0 rgba(0,0,0,0.02);
}
.bench-next .bn-label{
  font-size:9px;font-weight:700;letter-spacing:0.08em;text-transform:uppercase;
  background:var(--blue);color:#fff;padding:2px 6px;border-radius:3px;
  white-space:nowrap;
}
.bench-next .bn-task{
  font-size:11px;color:var(--ink);font-weight:500;line-height:1.3;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  flex:1;min-width:0;
}
.bench-next.bench-next-clear{background:#ecfdf5;border-color:#a7f3d0}
.bench-next.bench-next-clear .bn-label{background:var(--green)}
.bench-next.bench-next-clear .bn-task{color:#065f46}

/* Numbered priority badge — subtle, low-contrast so it doesn't compete with
   the card content. Communicates queue order without visual weight. */
.task-priority-num{
  position:absolute;top:9px;left:8px;
  font-size:11px;font-weight:600;color:var(--ink-3);line-height:1;
  font-variant-numeric:tabular-nums;letter-spacing:0;
  z-index:2;pointer-events:none;
  min-width:14px;text-align:right;
}
.task-priority-num::after{content:".";color:var(--ink-3)}
.task-card{padding-left:30px}  /* make room for the priority number */
.task-card.overdue{padding-left:29px}
.task-card.next2w{padding-left:29px}
.task-card.week3{padding-left:29px}

/* Bench cards: declutter — link row hidden by default, surfaced on hover */
.bench-tasks .task-card .t-links{
  display:none;
}
.bench-tasks .task-card:hover .t-links{display:flex}
/* Hide the always-on "summary ▾" affordance on bench cards. Description is
   still accessible via the Airtable link in the hover-link row + the focused
   bench view shows full description inline. */
.bench-tasks .task-card .t-expand{display:none}

/* CM column chip in Client Planning */
.ct-cm-chip{
  display:inline-flex;align-items:center;
  font-size:10px;font-weight:700;line-height:1;
  padding:3px 7px;border-radius:10px;
  background:#eff6ff;color:#1e40af;
  border-left:2px solid var(--blue);
  letter-spacing:0.02em;
}

/* Owner-chip emphasized state when a client filter is active and this owner
   is on the selected client. Used in Client Planning rows for the GTM column. */
.ct-owner-chip{box-shadow:none;transition:box-shadow .12s,transform .12s,background .12s;font-family:inherit;border-top:0;border-right:0;border-bottom:0;line-height:1.25}
.ct-owner-chip.clickable{cursor:pointer}
.ct-owner-chip.clickable:hover{background:#fff;box-shadow:0 0 0 1px var(--ink-3)}
.ct-owner-chip.active{background:var(--ink);color:#fff;font-weight:700}
.ct-owner-chip.active .ct-owner-ct{background:rgba(255,255,255,0.18);color:#fff}

/* ============================================================ */
/* v2: Filter UX upgrade — global CLEAR ALL, active summary,      */
/* stronger section labels, Duplicates toggle.                    */
/* ============================================================ */
.filters-head{
  display:flex;justify-content:space-between;align-items:center;
  margin-bottom:4px;padding-bottom:6px;
  border-bottom:0.5px dashed var(--rule-soft);
}
.active-filters-summary{
  font-size:11px;color:var(--ink-3);text-transform:uppercase;letter-spacing:0.08em;
  font-weight:600;
}
.active-filters-summary.on{color:var(--ink);text-transform:none;letter-spacing:0;font-weight:500;font-size:12px}
.chip-clear-all{
  font-size:11px;text-transform:uppercase;letter-spacing:0.08em;
  background:#4a4a55;color:#fff;border:0;cursor:pointer;
  padding:6px 12px;border-radius:4px;font-weight:600;
  transition:background .12s,opacity .12s;
}
.chip-clear-all:hover{background:#33333c}
.chip-clear-all.chip-clear-empty{background:var(--rule-soft);color:var(--ink-3);pointer-events:none}

/* Upgrade .flabel — bolder, larger, more prominent across both filter rows */
.filters .filter-row .flabel,
.tab-secondary .flabel{
  font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:0.10em;
  color:var(--ink);
}
.tab-secondary{padding:14px 0;gap:18px 22px}

/* Duplicates toggle button — sits in the rightmost filter slot. Pulses
   subtly when the dataset has duplicates and the user hasn't activated the
   filter yet (zero-state is dim, active is red). */
.dup-toggle{
  border:0.5px dashed var(--ink-3);background:#fff;
}
.dup-toggle.has-dups{border-color:var(--red);border-style:solid;color:var(--red);font-weight:600}
.dup-toggle.has-dups .ct{color:var(--red);font-weight:700}
.dup-toggle.on{background:var(--red);color:#fff;border-color:var(--red)}
.dup-toggle.on .ct{background:rgba(255,255,255,0.18);color:#fff;padding:0 5px;border-radius:8px}
.dup-toggle:not(.has-dups):not(.on){opacity:0.55}

/* ============================================================ */
/* v2: Duplicate flagging — DUP badges on bench cards + cal pills */
/* ============================================================ */
.task-card.is-dup{
  /* red right edge so it doesn't fight bucket left-border */
  box-shadow:inset -3px 0 0 var(--red);
}
.task-card .badge-dup{
  display:inline-block;font-size:9px;font-weight:700;line-height:1;
  letter-spacing:0.06em;padding:2px 5px;border-radius:3px;
  background:var(--red);color:#fff;margin-left:8px;vertical-align:1px;
}
.ct-item.is-dup{
  outline:1px solid var(--red);outline-offset:-1px;
}
.ct-item .badge-dup-small{
  display:inline-block;font-size:8px;font-weight:700;line-height:1;
  letter-spacing:0.05em;padding:1px 4px;border-radius:2px;
  background:var(--red);color:#fff;margin-left:6px;
}

/* ============================================================ */
/* v2: Clients tab fulfillment header strip                       */
/* ============================================================ */
.cl-header-strip{
  margin-bottom:20px;
}
.cl-header-strip[hidden]{display:none}
.cl-header-strip-inner{
  display:flex;flex-wrap:wrap;gap:14px;align-items:center;
  padding:14px 18px;background:#f5f9fc;
  border-left:3px solid var(--blue);border-radius:6px;
  font-size:13px;
}
.cl-header-strip .cl-header-label{
  font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:0.08em;
  color:var(--ink-2);
}
.cl-header-strip .cl-header-total{
  font-size:18px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;
  letter-spacing:-0.01em;
}
.cl-header-strip .cl-header-total .cl-header-target{
  font-size:14px;color:var(--ink-3);font-weight:500;margin-left:2px;
}
.cl-header-strip .cl-header-sep{color:var(--ink-3)}
.cl-header-strip .cl-header-ops{
  display:flex;flex-wrap:wrap;gap:10px;flex:1;
}
.cl-header-strip .cl-header-source{
  font-size:11px;color:var(--ink-3);text-decoration:none;white-space:nowrap;
  transition:color .12s;
}
.cl-header-strip .cl-header-source:hover{color:var(--blue);text-decoration:underline;text-underline-offset:2px;}
.cl-header-strip .cl-op{
  display:inline-flex;align-items:center;gap:6px;
  padding:4px 10px;border-radius:4px;background:#fff;
  border-left:2px solid var(--ink-3);font-size:12px;
  font-variant-numeric:tabular-nums;
}
.cl-header-strip .cl-op.david{border-left-color:var(--owner-david)}
.cl-header-strip .cl-op.jawad{border-left-color:var(--owner-jawad)}
.cl-header-strip .cl-op.anthony{border-left-color:var(--owner-anthony)}
.cl-header-strip .cl-op.josh{border-left-color:var(--owner-josh)}
.cl-header-strip .cl-op-name{font-weight:600;color:var(--ink)}
.cl-header-strip .cl-op-vals{color:var(--ink-2);font-weight:500}
.cl-header-strip .cl-op-vals.amber{color:var(--amber);font-weight:600}
.cl-header-strip .cl-op-vals.red{color:var(--red);font-weight:700}
.cl-header-strip .cl-op-target{color:var(--ink-3);font-size:11px}

/* Send-day color thresholds in Clients table cells */
.ct-table .td-warn{color:var(--red);font-weight:700}
.ct-table .td-soft-warn{color:#b97a00;font-weight:600}
/* Out of sending runway (rounds to 0 days left). Loud pill so GTME cannot miss
   a client about to go dark, distinct from the 1-6 day red warn text. */
.ct-table .td-urgent{color:#fff;background:var(--red);font-weight:800;border-radius:6px;text-align:center}
/* 30-day activity cell: sends · replies · positives, so an active client
   showcases real work even with 0 open build-tasks. */
.ct-table .ct-activity{white-space:nowrap}
.ct-act{display:inline-flex;align-items:baseline;gap:3px;font-variant-numeric:tabular-nums}
.ct-act-n{font-weight:700;color:var(--ink,#1c1c24)}
.ct-act-n.ct-act-pos{color:var(--green,#07de83)}
.ct-act-l{font-size:9px;color:var(--ink-3,#9aa0ab);text-transform:uppercase;letter-spacing:.02em}
.ct-act-sep{color:var(--ink-3,#c2c7cf);margin:0 1px}
.ct-act-empty{color:var(--ink-3,#9aa0ab)}

/* ============================================================ */
/* v2: GTM Output tab — segmented window toggle + bars + table + */
/* inline SVG sparkline.                                          */
/* ============================================================ */
.gtm-window-toggle{
  display:inline-flex;gap:0;margin:14px 0 24px;
  border:0.5px solid var(--rule);border-radius:6px;overflow:hidden;
}
.gtm-window-toggle .seg-btn{
  padding:8px 18px;font-size:12px;font-weight:500;color:var(--ink-2);
  background:#fff;border-right:0.5px solid var(--rule);cursor:pointer;
  font-family:inherit;transition:background .12s,color .12s;
  letter-spacing:0.02em;
}
.gtm-window-toggle .seg-btn:last-child{border-right:none}
.gtm-window-toggle .seg-btn:hover{color:var(--ink);background:var(--hover)}
.gtm-window-toggle .seg-btn.active{background:var(--accent);color:#fff;font-weight:600}

.gtm-summary{
  display:flex;flex-wrap:wrap;gap:24px;margin-bottom:24px;
  padding:16px 20px;background:var(--hover);border-radius:8px;
  border:0.5px solid var(--rule);
}
.gtm-summary-cell{display:flex;flex-direction:column;gap:4px;min-width:160px}
.gtm-summary-cell .gtm-summary-label{
  font-size:10px;font-weight:700;color:var(--ink-3);
  text-transform:uppercase;letter-spacing:0.08em;
}
.gtm-summary-cell .gtm-summary-val{
  font-family:var(--display-font);font-size:22px;font-weight:600;color:var(--ink);
  font-variant-numeric:tabular-nums;letter-spacing:-0.02em;line-height:1.1;
}
.gtm-summary-cell .gtm-summary-target{font-size:14px;color:var(--ink-3);font-weight:500}

.gtm-section{margin:0 0 28px}
.gtm-section h3{
  font-family:var(--display-font);font-size:14px;font-weight:600;color:var(--ink);
  text-transform:uppercase;letter-spacing:0.08em;
  margin:0 0 12px;
}

/* Operator scorecard grid — mirrors the Weekly Plan bench-card visual so the
   GTM Output reads as the same surface aggregated over W/M/Q. 6-column grid
   on desktop, wraps on smaller widths. */
.gtm-op-cards{
  display:grid;
  grid-template-columns:repeat(6, minmax(0, 1fr));
  gap:12px;
}
@media (max-width: 1100px){.gtm-op-cards{grid-template-columns:repeat(3, minmax(0, 1fr))}}
@media (max-width: 720px){.gtm-op-cards{grid-template-columns:repeat(2, minmax(0, 1fr))}}
.gtm-op-card{
  display:flex;flex-direction:column;gap:8px;
  padding:14px 14px 12px;
  background:#fff;border:0.5px solid var(--rule);border-radius:8px;
  position:relative;overflow:hidden;
}
.gtm-op-card::before{
  content:"";position:absolute;top:0;left:0;right:0;height:3px;
  background:var(--ink-3);
}
.gtm-op-card-clickable{cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease}
.gtm-op-card-clickable:hover{border-color:var(--accent,#21A8F2);box-shadow:0 2px 10px rgba(33,168,242,0.10);transform:translateY(-1px)}
.gtm-op-card-clickable:focus-visible{outline:2px solid var(--accent,#21A8F2);outline-offset:2px}
.gtm-op-card.david::before{background:var(--owner-david)}
.gtm-op-card.jawad::before{background:var(--owner-jawad)}
.gtm-op-card.anthony::before{background:var(--owner-anthony)}
.gtm-op-card.josh::before{background:var(--owner-josh)}
.gtm-op-card-head{display:flex;flex-direction:column;gap:2px;margin-top:4px}
.gtm-op-card-name{font-family:var(--display-font);font-size:18px;font-weight:600;color:var(--ink);letter-spacing:-0.015em;line-height:1}
.gtm-op-card-role{font-size:10px;color:var(--ink-3);text-transform:uppercase;letter-spacing:0.06em;font-weight:500}
.gtm-op-card-num{display:flex;align-items:baseline;gap:4px;margin:4px 0 2px;font-variant-numeric:tabular-nums}
.gtm-op-card-big{font-family:var(--display-font);font-size:28px;font-weight:600;color:var(--ink);letter-spacing:-0.025em;line-height:1}
.gtm-op-card-target{font-size:13px;color:var(--ink-3);font-weight:500}
.gtm-op-card-bar{height:6px;background:var(--rule-soft);border-radius:3px;overflow:hidden}
.gtm-op-card-fill{height:100%;background:var(--green);transition:width .25s ease;border-radius:3px}
.gtm-op-card-fill.amber{background:var(--amber)}
.gtm-op-card-fill.red{background:var(--red)}
.gtm-op-card-foot{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--ink-3);font-variant-numeric:tabular-nums}
.gtm-op-card-pct{font-weight:600;color:var(--ink-2)}
.gtm-op-card-pct.amber{color:var(--amber)}
.gtm-op-card-pct.red{color:var(--red)}
.gtm-op-card-pace{font-size:11px}

.gtm-client-table{
  width:100%;border-collapse:collapse;font-size:13px;
  border:0.5px solid var(--rule);border-radius:8px;overflow:hidden;
}
.gtm-client-table thead th{
  background:var(--hover);font-size:11px;font-weight:700;color:var(--ink-2);
  text-transform:uppercase;letter-spacing:0.06em;
  padding:10px 14px;border-bottom:0.5px solid var(--rule);
}
.gtm-client-table tbody td{padding:10px 14px;border-bottom:0.5px solid var(--rule-soft)}
.gtm-client-table tbody tr:last-child td{border-bottom:0}
.gtm-client-table tbody tr:hover{background:var(--hover)}

.gtm-trend{margin:6px 0 8px;overflow-x:auto}
.gtm-trend svg{display:block}
.gtm-trend-note{font-size:11px;color:var(--ink-3);font-style:italic;line-height:1.5}
.gtm-trend-hit{transition:fill .12s ease}
.gtm-trend-hit:hover{fill:rgba(33,168,242,0.08)}

/* ---- GTM Output drill-down ("click the number, see what shipped") ---- */
.gtm-summary-clickable{
  appearance:none;text-align:left;font:inherit;cursor:pointer;
  background:#fff;border:0.5px solid var(--rule);border-radius:8px;
  padding:12px 16px;margin:-12px -4px;transition:border-color .15s ease, box-shadow .15s ease, background .15s ease;
}
.gtm-summary-clickable:hover{border-color:#21A8F2;box-shadow:0 1px 6px rgba(33,168,242,0.12)}
.gtm-summary-clickable.is-open{border-color:#21A8F2;background:rgba(33,168,242,0.04)}
.gtm-summary-caret{font-size:10px;color:#21A8F2;transition:transform .15s ease;display:inline-block}
.gtm-summary-clickable.is-open .gtm-summary-caret{transform:rotate(180deg)}
.gtm-summary-arms{font-size:11px;color:var(--ink-2);margin-top:5px;font-variant-numeric:tabular-nums}
.gtm-summary-arms b{color:var(--ink);font-weight:600}
.gtm-section-hint{font-size:10px;font-weight:500;color:var(--ink-3);text-transform:none;letter-spacing:0;margin-left:8px;font-style:italic}
.gtm-client-row{cursor:pointer}
.gtm-client-caret{color:#21A8F2;font-weight:700;opacity:0;transition:opacity .12s ease}
.gtm-client-row:hover .gtm-client-caret{opacity:1}

.gtm-drill{
  margin:-12px 0 24px;padding:16px 18px;
  background:linear-gradient(180deg, rgba(33,168,242,0.05), rgba(33,168,242,0.01));
  border:0.5px solid rgba(33,168,242,0.35);border-radius:10px;
  animation:gtmDrillIn .18s ease;
}
@keyframes gtmDrillIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
.gtm-drill-head{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.gtm-drill-title{font-family:var(--display-font);font-size:14px;font-weight:600;color:var(--ink);letter-spacing:-0.01em}
.gtm-drill-n{font-size:11px;font-weight:700;color:#21A8F2;background:rgba(33,168,242,0.12);padding:2px 8px;border-radius:20px;font-variant-numeric:tabular-nums}
.gtm-drill-close{margin-left:auto;appearance:none;border:none;background:none;cursor:pointer;color:var(--ink-3);font-size:14px;line-height:1;padding:2px 4px;border-radius:4px}
.gtm-drill-close:hover{color:var(--ink);background:var(--hover)}
.gtm-drill-filter{font-weight:600;color:#21A8F2}
.gtm-drill-clear{appearance:none;border:none;background:none;cursor:pointer;color:#21A8F2;font-size:10px;padding:0 2px}
.gtm-drill-empty{font-size:13px;color:var(--ink-2);font-style:italic;padding:6px 2px}
.gtm-drill-day{margin-bottom:14px}
.gtm-drill-day:last-child{margin-bottom:0}
.gtm-drill-day-head{display:flex;align-items:baseline;gap:8px;margin-bottom:6px;padding-bottom:4px;border-bottom:0.5px solid rgba(33,168,242,0.2)}
.gtm-drill-day-label{font-size:11px;font-weight:700;color:var(--ink-2);text-transform:uppercase;letter-spacing:0.06em}
.gtm-drill-day-count{font-size:10px;color:var(--ink-3);font-variant-numeric:tabular-nums}
.gtm-drill-row{display:flex;align-items:center;gap:10px;padding:6px 4px;border-radius:6px;transition:background .1s ease}
.gtm-drill-row:hover{background:rgba(33,168,242,0.06)}
.gtm-drill-name{flex:1;font-size:13px;font-weight:500;color:var(--ink);line-height:1.3}
.gtm-drill-meta{display:flex;align-items:center;gap:8px;flex-shrink:0;font-variant-numeric:tabular-nums}
.gtm-drill-client{font-size:11px;font-weight:600;color:var(--ink-2);background:var(--hover);padding:2px 8px;border-radius:20px;white-space:nowrap}
.gtm-drill-owner{font-size:11px;color:var(--ink-2);white-space:nowrap}
.gtm-drill-time{font-size:11px;color:var(--ink-3);min-width:48px;text-align:right}
@media (max-width:640px){
  .gtm-drill-row{flex-wrap:wrap}
  .gtm-drill-name{flex-basis:100%}
}

/* ---- In-process (proposed → moved to Two-Week this session) ---- */
/* The gradient fill is the cue that a card came off the Proposals board and is
   now in process. Sky-blue (AICRO accent) so it reads distinctly from a normal
   card (white) and a proposed card (green). (Doug 2026-06-03.) */
.task-card.promoted{
  position:relative;
  background:linear-gradient(135deg, rgba(33,168,242,0.16) 0%, rgba(33,168,242,0.04) 70%, #fff 100%);
  border-color:rgba(33,168,242,0.5);
  box-shadow:0 1px 8px rgba(33,168,242,0.12);
}
.task-card.promoted::after{
  content:"in process";
  position:absolute;top:8px;right:8px;
  font-size:9px;font-weight:700;letter-spacing:0.05em;text-transform:uppercase;
  color:#21A8F2;background:rgba(33,168,242,0.12);
  padding:2px 6px;border-radius:20px;
}
.ct-item.promoted{
  background:linear-gradient(135deg, rgba(33,168,242,0.18), rgba(33,168,242,0.05));
  box-shadow:inset 2px 0 0 #21A8F2;
}
.ct-item.promoted .own::before{
  content:"";display:inline-block;width:5px;height:5px;border-radius:50%;
  background:#21A8F2;margin-right:4px;vertical-align:middle;
  animation:promotedPulse 1.8s ease-in-out infinite;
}
@keyframes promotedPulse{0%,100%{opacity:1}50%{opacity:0.35}}

/* Demand-driven volume chip on the Proposals client-readiness roster. */
.rd-vol{
  display:inline-block;font-size:10px;font-weight:700;font-variant-numeric:tabular-nums;
  color:var(--ink-2);background:var(--hover);border:0.5px solid var(--rule);
  padding:1px 6px;border-radius:20px;margin-right:6px;vertical-align:middle;cursor:help;
}
.rd-vol.up{color:#21A8F2;background:rgba(33,168,242,0.1);border-color:rgba(33,168,242,0.3)}

/* Provisional flag on the per-arm channel lens (source differs from the roll-up,
   under review — see NOTES.md). */
.gtm-arms-flag{
  display:inline-block;margin-left:6px;font-size:9px;font-weight:700;
  letter-spacing:0.04em;text-transform:uppercase;cursor:help;
  color:var(--amber);background:rgba(224,160,32,0.12);
  padding:1px 6px;border-radius:20px;vertical-align:middle;
}
.gtm-summary-arms-note{
  margin-top:5px;font-size:10px;line-height:1.45;color:var(--ink-2);font-weight:400;
  max-width:520px;border-left:2px solid rgba(224,160,32,0.4);padding-left:8px;
}

/* ============================================================ */
/* Team Output at-a-glance card (top of Two-Week Plan tab)        */
/* ============================================================ */
.team-output{
  display:flex;flex-direction:column;gap:12px;
  padding:20px 24px;margin:24px 0 12px;
  border:0.5px solid var(--rule);border-radius:10px;background:#fff;
}
.team-output .to-row-main{display:flex;align-items:flex-end;gap:36px;flex-wrap:wrap}
.team-output .to-divider{width:1px;align-self:stretch;background:var(--rule);margin:4px 0}
.team-output .to-metric{display:flex;flex-direction:column;gap:4px;min-width:0}
.team-output .to-metric.to-metric-team{margin-right:4px}
.team-output .to-metric-label{
  font-size:10px;text-transform:uppercase;letter-spacing:0.1em;
  color:var(--ink-3);font-weight:600;white-space:nowrap;
}
.team-output .to-metric-val{
  font-family:var(--display-font);font-size:22px;font-weight:600;
  letter-spacing:-0.018em;color:var(--ink);font-variant-numeric:tabular-nums;
  display:flex;align-items:baseline;gap:6px;line-height:1.1;
}
.team-output .to-metric-team .to-metric-val{font-size:32px;letter-spacing:-0.025em}
.team-output .to-num{font-family:var(--display-font);font-weight:600;line-height:1;color:var(--ink)}
.team-output .to-denom{font-size:16px;color:var(--ink-2);font-weight:500}
.team-output .to-pct{font-size:12px;font-weight:600;padding:3px 8px;border-radius:4px;letter-spacing:-0.005em;margin-left:6px}
.team-output .to-pct.green{color:#065f46;background:#ecfdf5}
.team-output .to-pct.amber{color:#7c5300;background:#fef3c7}
.team-output .to-pct.red{color:#7f1d1d;background:#fee2e2}
.team-output .to-sub{font-size:12px;color:var(--ink-2);display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.team-output .to-sub .sep{color:var(--ink-3)}
.team-output .to-sub a{color:var(--blue);font-weight:500}
.team-output .to-sub a:hover{text-decoration:underline}
/* Visible data-source attribution under any section header. Same pattern as
   the team-output .to-sub so every tab's source link reads identically. */
.source-line{font-size:12px;color:var(--ink-2);margin:4px 0 12px;line-height:1.5}
.source-line a{color:var(--blue);font-weight:500;text-decoration:none}
.source-line a:hover{text-decoration:underline}
.source-line code{font-family:var(--mono-font);font-size:11px;background:var(--rule-soft);padding:1px 5px;border-radius:3px;color:var(--ink)}
/* GTM Output data-hygiene note: surfaces launches missing a GTME owner so
   the per-op cards reconcile with the team total instead of silently hiding
   the gap. Amber, not red — this is a curation issue, not a system failure. */
.gtm-hygiene-note{font-size:12px;color:#92400e;background:#fef3c7;border:1px solid rgba(224,160,32,0.35);
  border-radius:6px;padding:8px 12px;margin:0 0 12px;line-height:1.5}
.gtm-hygiene-note a{color:#92400e;font-weight:600;text-decoration:underline}
.gtm-hygiene-note code{font-family:var(--mono-font);font-size:11px;background:rgba(255,255,255,0.6);padding:1px 5px;border-radius:3px}
.gtm-hygiene-note .gtm-hygiene-samples{opacity:0.85;font-style:italic}
.gtm-op-card-orphan{border-top-color:var(--amber) !important;background:rgba(224,160,32,0.05)}
.gtm-op-card-orphan .gtm-op-card-name{color:#92400e}
.gtm-op-card-orphan .gtm-op-card-big{color:#92400e}
.team-output .trend-arrow{display:inline-block;font-size:18px;line-height:1}
.team-output .trend-arrow.green{color:var(--green)}
.team-output .trend-arrow.red{color:var(--red)}
.team-output .trend-arrow.flat{color:var(--ink-3)}
.team-output .trend-delta{font-size:13px;color:var(--ink-2);font-weight:500}

/* Individual GTM Breakdown */
.team-output .to-breakdown{display:flex;flex-direction:column;gap:8px;padding-top:12px;border-top:0.5px solid var(--rule-soft)}
.team-output .to-breakdown-label{font-size:10px;text-transform:uppercase;letter-spacing:0.1em;color:var(--ink-3);font-weight:600}
.team-output .to-breakdown-tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.team-output .to-tile{
  display:flex;justify-content:space-between;align-items:baseline;
  padding:10px 14px;border-radius:6px;
  border-left:3px solid var(--ink-3);background:var(--rule-soft);gap:12px;
}
.team-output .to-tile.green{border-left-color:var(--green);background:#ecfdf5}
.team-output .to-tile.amber{border-left-color:var(--amber);background:#fef3c7}
.team-output .to-tile.red{border-left-color:var(--red);background:#fee2e2}
.team-output .to-tile-name{font-family:var(--display-font);font-size:14px;font-weight:600;color:var(--ink);letter-spacing:-0.01em}
.team-output .to-tile-num{display:flex;align-items:baseline;gap:6px;font-variant-numeric:tabular-nums}
.team-output .to-tile-shipped{font-family:var(--display-font);font-size:20px;font-weight:600;letter-spacing:-0.018em;color:var(--ink);line-height:1}
.team-output .to-tile-target{font-size:13px;color:var(--ink-2);font-weight:500}
.team-output .to-tile-pct{font-size:11px;font-weight:700;color:var(--ink);padding:2px 6px;border-radius:3px;background:rgba(255,255,255,0.7);margin-left:4px}

/* ============================================================ */
/* Bigger calendar pill cards + status chip + ship-order badge    */
/* ============================================================ */
.ct-item{padding:8px 10px}
.ct-item .nm{font-size:13px;line-height:1.35;margin-top:3px}
.ct-item .ct-status{
  display:inline-block;font-size:9px;font-weight:700;
  padding:1px 5px;border-radius:3px;margin-right:6px;
  letter-spacing:0.06em;text-transform:uppercase;line-height:1.4;
  vertical-align:1px;font-variant-numeric:tabular-nums;
}
.ct-item .ct-status-todo{color:#52525b;background:#f4f4f5;box-shadow:inset 0 0 0 0.5px #d4d4d8}
.ct-item .ct-status-build{color:#7c5300;background:#fef3c7}
.ct-item .ct-status-qa{color:#05603a;background:#d2f6e4;box-shadow:inset 0 0 0 0.5px rgba(7,222,131,0.45)} /* QA = green, matches the calendar bar + bench */
/* Per-operator priority chip — one solid, owner-colored badge carrying the
   GTME's own rank for the day (their #1, #2, #3). The fill is the owner's
   color, so a glance reads BOTH whose card it is and where it sits in that
   person's queue. Replaces the old ct-ship (#N) + ct-ord (1st/2nd) pair, which
   showed two competing numbers. Driven by the per-operator ordinal, persisted
   to the Task Hub Ship Order field. */
.ct-item .ct-prio{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:16px;height:16px;padding:0 4px;
  font-size:10px;font-weight:800;color:#fff;
  background:var(--ct-owner-color,var(--owner-unassigned));
  border-radius:5px;margin-right:6px;line-height:1;
  font-variant-numeric:tabular-nums;vertical-align:1px;
}
/* Owner color, surfaced as a custom property so the priority chip (and any
   future owner-tinted element) can pick it up without a per-class rule each. */
.ct-item.david{--ct-owner-color:var(--owner-david)}
.ct-item.jawad{--ct-owner-color:var(--owner-jawad)}
.ct-item.anthony{--ct-owner-color:var(--owner-anthony)}
.ct-item.josh{--ct-owner-color:var(--owner-josh)}
.ct-item.unassigned{--ct-owner-color:var(--owner-unassigned)}
.ct-item.other-1{--ct-owner-color:#0d9488}
.ct-item.other-2{--ct-owner-color:#be185d}
.ct-item.other-3{--ct-owner-color:#475569}
.ct-item.other-4{--ct-owner-color:#7c5cff}

/* Owner section header inside a day cell — only rendered when a day holds more
   than one operator. A colored dot + name + count opens each operator's stack
   so the boundary between queues is unmistakable, not carried by the card's
   side-stripe color alone. Owner-colored to tie the section to the person. */
.cal-owner-divider{
  display:flex;align-items:center;gap:6px;
  margin:9px 2px 4px;font-size:10px;font-weight:700;
  letter-spacing:.04em;text-transform:uppercase;
  color:var(--ct-owner-color,var(--ink-2));
}
.cal-tasks > .cal-owner-divider:first-child{margin-top:2px}
.cal-owner-divider .cod-dot{width:8px;height:8px;border-radius:50%;flex:0 0 auto;background:var(--ct-owner-color,var(--owner-unassigned))}
.cal-owner-divider .cod-count{margin-left:auto;font-weight:600;color:var(--ink-3);font-variant-numeric:tabular-nums;text-transform:none}
.cal-owner-divider.david{--ct-owner-color:var(--owner-david)}
.cal-owner-divider.jawad{--ct-owner-color:var(--owner-jawad)}
.cal-owner-divider.anthony{--ct-owner-color:var(--owner-anthony)}
.cal-owner-divider.josh{--ct-owner-color:var(--owner-josh)}
.cal-owner-divider.unassigned{--ct-owner-color:var(--owner-unassigned)}
.cal-owner-divider.other-1{--ct-owner-color:#0d9488}
.cal-owner-divider.other-2{--ct-owner-color:#be185d}
.cal-owner-divider.other-3{--ct-owner-color:#475569}
.cal-owner-divider.other-4{--ct-owner-color:#7c5cff}

/* Clear button stays readable when empty (affordance visible without selection). */
.chip-clear.chip-clear-empty{color:var(--ink-2);pointer-events:none;opacity:0.85}

/* ============================================================ */
/* Proposals tab header — title + Refresh button (workflow_dispatch) */
/* ============================================================ */
.proposals-header{
  display:flex;align-items:flex-start;justify-content:space-between;
  gap:24px;margin-bottom:14px;
}
.proposals-header-text{flex:1;min-width:0}
.proposals-header-text h2{margin:0 0 6px}

/* Topic-to-campaign ideation: entry button + modal form */
.proposals-header-actions{flex:0 0 auto;display:flex;align-items:center}
.ideate-btn{appearance:none;cursor:pointer;font:inherit;font-size:13px;font-weight:600;
  color:var(--accent-ink);background:rgba(33,168,242,0.08);border:0.5px solid rgba(33,168,242,0.32);
  border-radius:8px;padding:7px 14px;transition:background .14s,color .14s,border-color .14s}
.ideate-btn:hover{background:var(--accent);color:#fff;border-color:var(--accent)}
.ideate-modal .mh-sub{font-size:12px;color:var(--ink-2);margin-top:4px;line-height:1.5;max-width:46ch}
.ideate-label{display:block;font-size:10px;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;
  color:var(--ink-3);margin:14px 0 5px}
.ideate-label:first-child{margin-top:0}
.ideate-input,.ideate-select,.ideate-topic{width:100%;box-sizing:border-box;font:inherit;font-size:13px;
  color:var(--ink);background:var(--bg);border:0.5px solid var(--rule);border-radius:8px;padding:8px 10px}
.ideate-input:focus,.ideate-select:focus,.ideate-topic:focus{outline:2px solid var(--accent);outline-offset:1px;border-color:var(--accent)}
.ideate-topic{resize:vertical;min-height:64px;line-height:1.5}
.ideate-ro{font-size:13px;color:var(--ink-2);background:var(--rule-soft);border-radius:8px;padding:8px 10px;line-height:1.5}
.ideate-error{margin-top:12px;font-size:12px;color:var(--red);background:rgba(217,48,37,0.08);border-radius:6px;padding:7px 10px}
.ideate-done{font-size:14px;color:var(--green);font-weight:600;padding:8px 0}
.ideate-done a{color:var(--accent-ink)}
.ideate-foot{display:flex;gap:8px;justify-content:flex-end;margin-top:20px;padding-top:14px;border-top:0.5px solid var(--rule)}
.ideate-foot button{appearance:none;cursor:pointer;font:inherit;font-size:13px;font-weight:500;
  border:0.5px solid var(--rule);border-radius:8px;padding:8px 16px;background:var(--bg);color:var(--ink)}
.ideate-foot button.accept{color:#fff;background:var(--accent);border-color:var(--accent);font-weight:600}
.ideate-foot button.accept:hover{background:#1a8fd0}
.ideate-foot button.accept:disabled{opacity:0.6;cursor:default}
.ideate-foot button.dismiss{color:var(--ink-2)}
.ideate-foot button.dismiss:hover{color:var(--ink)}

/* Stepper — three stages so the flow is self-evident. */
/* One calm progress line: Describe -> Review -> Launch (no competing numbers). */
.ideate-stepper{display:flex;align-items:center;gap:10px;margin:0;padding:14px 24px 0;font-size:12.5px;color:var(--ink-3)}
.ideate-stage{font-weight:600}
.ideate-stage.on{color:var(--accent)}
.ideate-stage.done{color:var(--ink-2)}
.ideate-arw{color:var(--ink-3)}

/* Body field labels — intent-first, no step numbers. */
.ideate-field{margin-bottom:18px}
.ideate-intent-label{font-size:15px;font-weight:600;letter-spacing:-0.01em;color:var(--ink);margin-bottom:10px}
.ideate-for-lead{font-size:13px;color:var(--ink-2);margin-bottom:9px}
.ideate-review-lead{font-size:13px;font-weight:600;color:var(--ink);margin-bottom:12px}

/* Apple-intuitive multi-select: tappable client chips with a clear checked state. */
.ideate-client-grid{display:flex;flex-wrap:wrap;gap:8px}
.ideate-client-chip{appearance:none;cursor:pointer;font:inherit;font-size:13px;font-weight:500;
  display:inline-flex;align-items:center;gap:7px;color:var(--ink-2);background:var(--bg);
  border:0.5px solid var(--rule);border-radius:20px;padding:6px 13px 6px 9px;
  transition:background .14s,color .14s,border-color .14s}
.ideate-client-chip:hover{border-color:var(--ink-3);color:var(--ink)}
.ideate-client-chip .ideate-chip-check{display:inline-flex;align-items:center;justify-content:center;
  width:17px;height:17px;border-radius:50%;font-size:11px;font-weight:700;
  color:var(--ink-3);background:var(--rule-soft);border:0.5px solid var(--rule)}
.ideate-client-chip.on{color:#fff;background:var(--accent);border-color:var(--accent);font-weight:600}
.ideate-client-chip.on .ideate-chip-check{color:var(--accent);background:#fff;border-color:#fff}
.ideate-hint{font-size:11px;color:var(--ink-3);margin-top:9px}
.ideate-result-list{margin:8px 0 0;padding-left:18px;font-size:13px;color:var(--ink-2);line-height:1.7}
.ideate-result-list a{color:var(--accent-ink)}

/* #6 Refine step — the AI's parse shown as removable chips + live compose line,
   plus a free-text addendum. Plus the Review step's "Who it reaches" title
   toggles + region chips. All on the same Cloud/Sky-Blue language as the rest
   of the ideate modal. No fabricated copy/channel/reach surfaces. */
.ideate-label-hint{font-weight:500;text-transform:none;letter-spacing:0;color:var(--ink-3);font-size:11px;margin-left:6px}
.ideate-assist{display:flex;gap:9px;align-items:flex-start;font-size:13px;line-height:1.5;color:var(--ink-2);margin-bottom:14px}
.ideate-assist-mark{flex:0 0 auto;width:22px;height:22px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;background:rgba(33,168,242,0.10);color:var(--accent-ink);font-size:12px}
.ideate-compose{font-size:14px;line-height:1.5;color:var(--ink);background:var(--rule-soft);border-radius:8px;padding:11px 13px;margin-bottom:16px}
.ideate-dims{display:flex;flex-direction:column;gap:10px;margin-bottom:18px}
.ideate-dim{display:flex;gap:10px;align-items:baseline}
.ideate-dim-label{flex:0 0 84px;font-size:10px;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;color:var(--ink-2);padding-top:4px}
.ideate-dim-chips{flex:1;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.ideate-rchip{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;color:var(--ink);background:var(--bg);border:1px solid var(--rule);border-radius:14px;padding:3px 5px 3px 10px}
.ideate-rchip-x{appearance:none;border:0;background:transparent;cursor:pointer;color:var(--ink-3);font-size:14px;line-height:1;padding:0 2px;border-radius:50%}
.ideate-rchip-x:hover{color:var(--red)}
.ideate-rchip-none{font-size:12px;color:var(--ink-3);font-style:italic}
.ideate-titles{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:6px}
.ideate-trow{appearance:none;cursor:pointer;font:inherit;font-size:12.5px;font-weight:500;display:inline-flex;align-items:center;gap:7px;color:var(--ink);background:var(--bg);border:1px solid var(--rule);border-radius:8px;padding:5px 11px}
.ideate-trow:hover{border-color:var(--ink-3)}
.ideate-trow .ideate-cb{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:4px;border:1px solid var(--ink-3);font-size:10px;color:transparent}
.ideate-trow.on{color:#fff;background:var(--accent);border-color:var(--accent);font-weight:600}
.ideate-trow.on .ideate-cb{color:var(--accent);background:#fff;border-color:#fff}
.ideate-typerow{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:4px}
.ideate-type{appearance:none;cursor:pointer;font:inherit;font-size:12.5px;font-weight:500;color:var(--ink);background:var(--bg);border:1px solid var(--rule);border-radius:8px;padding:5px 13px}
.ideate-type:hover{border-color:var(--ink-3)}
.ideate-type.on{color:#fff;background:var(--accent);border-color:var(--accent);font-weight:600}
.ideate-regionchips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:4px}
.ideate-region{font-size:11.5px;font-weight:600;color:var(--accent-ink);background:rgba(33,168,242,0.08);border-radius:6px;padding:3px 9px}

/* Refresh button — Sky Blue accent for the AICRO brand. Sits next to the
   tab title and triggers a GitHub Actions workflow_dispatch that rebuilds
   the scheduler snapshot. Status text appears next to the label while the
   run is in flight. */
.refresh-btn{
  display:inline-flex;align-items:center;gap:10px;
  font-size:13px;font-weight:600;color:#fff;
  background:#21A8F2;
  border:0;border-radius:6px;
  padding:8px 14px;
  cursor:pointer;
  font-family:inherit;letter-spacing:-0.005em;
  transition:background .12s ease-out,opacity .12s ease-out;
  white-space:nowrap;
}
.refresh-btn:hover{background:#1a8ed2}
.refresh-btn:disabled{opacity:0.55;cursor:not-allowed}
.refresh-btn .refresh-status{
  font-size:11px;font-weight:500;color:rgba(255,255,255,0.85);
  font-family:var(--mono-font);letter-spacing:0;
}
.refresh-btn .refresh-status:empty{display:none}

/* ---------------------------------------------------------------------------
   Unified refresh widget (v2). Used by both the top "Refresh data" button and
   the Proposals tab "Refresh campaigns" button. Mirrors the client-health
   dashboard pattern: outlined button + animated spinner icon + alongside
   status pill that color-shifts amber/green/red across the rebuild lifecycle.
   ----------------------------------------------------------------------- */
.refresh-wrap{display:inline-flex;align-items:center;gap:10px;flex-wrap:wrap}

.refresh-btn-v2{
  display:inline-flex;align-items:center;gap:8px;
  font-size:13px;font-weight:500;color:var(--ink);
  background:#fff;
  border:0.5px solid var(--rule);
  border-radius:8px;
  padding:7px 14px;
  cursor:pointer;
  font-family:inherit;letter-spacing:-0.003em;
  transition:background .12s ease-out,border-color .12s ease-out,opacity .12s ease-out;
  white-space:nowrap;
  line-height:1.2;
}
.refresh-btn-v2:hover{background:var(--hover);border-color:var(--ink-3)}
.regen-type-select{
  font-size:13px;font-weight:500;color:var(--ink);font-family:inherit;letter-spacing:-0.003em;
  background:#fff;border:0.5px solid var(--rule);border-radius:8px;
  padding:7px 10px;cursor:pointer;line-height:1.2;
  transition:border-color .12s ease-out;
}
.regen-type-select:hover{border-color:var(--ink-3)}
.refresh-btn-v2:disabled,
.refresh-btn-v2.busy{
  opacity:0.65;cursor:default;
  background:var(--hover);
}
.refresh-btn-v2 .refresh-icon{
  display:inline-block;
  font-size:14px;line-height:1;
  color:var(--ink-2);
}
.refresh-btn-v2:hover .refresh-icon{color:var(--ink)}
.refresh-btn-v2 .refresh-icon.spin,
.refresh-pill-icon.spin{
  animation:refresh-spin 0.9s linear infinite;
  transform-origin:center;
}
@keyframes refresh-spin{
  from{transform:rotate(0deg)}
  to{transform:rotate(360deg)}
}

/* Status pill — sits to the left of the button. Hidden by default; the JS
   handler toggles .hidden + the state class (rebuilding/success/error). */
.refresh-pill{
  display:inline-flex;align-items:center;gap:6px;
  font-size:11px;font-weight:600;
  padding:4px 10px;
  border-radius:999px;
  border:1px solid transparent;
  letter-spacing:0.03em;
  text-transform:uppercase;
  font-family:var(--display-font, inherit);
  white-space:nowrap;
  line-height:1.4;
}
.refresh-pill.hidden{display:none}
.refresh-pill .refresh-pill-icon{font-size:12px;line-height:1;display:inline-block}
.refresh-pill .refresh-pill-text{letter-spacing:0.02em}
.refresh-pill.rebuilding{
  background:#FEF3C7;
  color:#92400E;
  border-color:#FCD34D;
}
.refresh-pill.success{
  background:#D1FAE5;
  color:#065F46;
  border-color:#6EE7B7;
  text-transform:none;
  letter-spacing:0;
  font-weight:500;
}
.refresh-pill.error{
  background:#FEE2E2;
  color:#991B1B;
  border-color:#FCA5A5;
  text-transform:none;
  letter-spacing:0;
  font-weight:500;
}

/* ---------------------------------------------------------------------------
   "How this works" pop-out — Proposals tab explainer drawer. Right-side
   modal modeled on apps/portfolio-health "How to read". Slides in over
   a backdrop dim; ESC, backdrop click, and the × button all close.
   ----------------------------------------------------------------------- */
.howto-link{
  display:inline-flex;align-items:center;gap:5px;
  font-size:11px;font-weight:500;color:var(--ink-2);
  background:transparent;border:0;padding:4px 8px;border-radius:6px;
  cursor:pointer;font-family:inherit;letter-spacing:0;
  vertical-align:middle;margin-left:8px;
  transition:background .12s,color .12s;
}
.howto-link:hover{background:var(--hover);color:var(--ink)}
.howto-link .howto-link-icon{
  display:inline-flex;align-items:center;justify-content:center;
  width:14px;height:14px;border-radius:50%;
  background:var(--blue);color:#fff;
  font-size:9px;font-weight:700;line-height:1;
}
.howto-link .howto-link-label{font-size:11px}

.howto-modal-root{
  position:fixed;inset:0;z-index:90;
  display:none;
}
.howto-modal-root.open{display:flex;justify-content:flex-end}
.howto-backdrop{
  position:absolute;inset:0;
  background:rgba(15,23,42,0.4);
  backdrop-filter:blur(2px);
  -webkit-backdrop-filter:blur(2px);
  animation:howto-fade-in .15s ease-out;
}
.howto-drawer{
  position:relative;
  width:100%;max-width:640px;height:100%;
  background:#fff;
  box-shadow:-8px 0 32px rgba(15,23,42,0.18);
  display:flex;flex-direction:column;
  overflow:hidden;
  animation:howto-slide-in .2s ease-out;
}
@keyframes howto-fade-in{from{opacity:0}to{opacity:1}}
@keyframes howto-slide-in{from{transform:translateX(20px);opacity:0}to{transform:translateX(0);opacity:1}}
.howto-header{
  position:sticky;top:0;z-index:1;
  background:#fff;
  border-bottom:0.5px solid var(--rule);
  padding:16px 24px;
  display:flex;align-items:center;justify-content:space-between;
}
.howto-header h2{
  font-family:var(--display-font);
  font-size:18px;font-weight:600;letter-spacing:-0.015em;
  margin:0;color:var(--ink);
}
.howto-close{
  background:none;border:0;color:var(--ink-3);
  font-size:24px;line-height:1;width:32px;height:32px;
  border-radius:6px;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;
  font-family:inherit;
}
.howto-close:hover{background:var(--hover);color:var(--ink)}
.howto-body{
  flex:1;overflow-y:auto;
  padding:8px 24px 32px;
  font-size:13px;line-height:1.6;color:var(--ink-2);
}
.howto-section{padding:16px 0;border-bottom:0.5px solid var(--rule-soft, var(--rule))}
.howto-section:last-child{border-bottom:0}
.howto-section h3{
  font-family:var(--display-font);
  font-size:14px;font-weight:600;letter-spacing:-0.005em;
  margin:0 0 10px;color:var(--ink);
}
.howto-section p{margin:0 0 10px}
.howto-section p:last-child{margin-bottom:0}
.howto-section em{font-style:italic;color:var(--ink)}
.howto-section b{color:var(--ink);font-weight:600}
.howto-section code{
  font-family:var(--mono-font);
  font-size:11.5px;background:var(--hover);
  padding:1px 5px;border-radius:3px;color:var(--ink);
}
.howto-list{margin:8px 0 12px;padding-left:20px}
.howto-list li{margin:6px 0}
.howto-list .howto-list{margin:6px 0 0}
.howto-note{
  background:var(--hover);
  border-left:3px solid var(--ink-3);
  padding:10px 14px;
  font-size:12.5px;
  color:var(--ink-2);
  border-radius:0 6px 6px 0;
  margin-top:10px;
}

/* Per-client refresh affordance lives inside .proposals-meta. Pull it to the
   right so it sits at the end of the meta row, mirroring the top "Refresh
   data" placement visually. */
.proposals-meta .proposals-client-refresh{
  margin-left:auto;
}
.proposals-meta .proposals-client-refresh .refresh-btn-v2{
  padding:5px 11px;
  font-size:12px;
}
.proposals-meta .proposals-client-refresh .refresh-pill{
  font-size:10px;
  padding:3px 9px;
}

/* ============================================================ */
/* Q2 dashboard enhancements                                    */
/*   - Account Coverage map (Clients tab)                       */
/*   - per-client Airtable link                                 */
/*   - Trend by GTME (GTM Output tab)                           */
/*   - per-card planner notes                                   */
/*   - Two-Week Plan load-balance banner                        */
/* ============================================================ */

/* --- Account Coverage map ----------------------------------- */
.coverage-map{margin-top:4px}
.cov-source{font-size:11px;color:var(--ink-2);margin-bottom:8px}
.cov-source a{color:var(--blue);text-decoration:none}
.cov-source a:hover{text-decoration:underline}
.cov-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(240px,1fr));
  gap:12px;
}
.coverage-empty{color:var(--ink-2);font-size:13px;padding:12px 0}
.cov-card{
  border:1px solid var(--rule);
  border-top:3px solid var(--owner-unassigned);
  border-radius:10px;
  padding:12px 14px;
  background:var(--bg);
}
.cov-card.david{border-top-color:var(--owner-david)}
.cov-card.jawad{border-top-color:var(--owner-jawad)}
.cov-card.anthony{border-top-color:var(--owner-anthony)}
.cov-card.josh{border-top-color:var(--owner-josh)}
.cov-card.unassigned{border-top-color:var(--owner-unassigned)}
.cov-card-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:10px}
.cov-card-owner{font-weight:650;font-size:14px;color:var(--ink)}
.cov-card-count{font-size:11px;color:var(--ink-2)}
.cov-card-clients{display:flex;flex-wrap:wrap;gap:6px}
.cov-chip{
  display:inline-flex;align-items:center;gap:5px;
  border:1px solid var(--rule);border-radius:14px;
  padding:3px 9px;font-size:12px;color:var(--ink);
  background:var(--bg);cursor:pointer;transition:background .12s,border-color .12s;
}
.cov-chip:hover{background:var(--hover)}
.cov-chip.on{background:var(--accent);color:#fff;border-color:var(--accent)}
.cov-chip-ct{
  font-size:10px;font-weight:600;
  background:var(--green);color:#fff;border-radius:8px;
  padding:0 5px;line-height:15px;
}
.cov-chip.on .cov-chip-ct{background:rgba(255,255,255,0.25)}
/* Inline legend in the coverage source line explaining the green badge. */
.cov-legend{display:inline-flex;align-items:center;gap:4px;color:var(--ink-2)}
.cov-legend-dot{display:inline-block;vertical-align:middle}

/* --- coverage drag-to-reassign affordance ------------------- */
.cov-chip{cursor:grab}
.cov-chip:active{cursor:grabbing}
.cov-chip.dragging{opacity:0.45}
.cov-card[data-cov-drop-owner]{transition:background .12s,box-shadow .12s,border-color .12s}
.cov-card.drop-target{
  background:color-mix(in srgb, var(--accent) 8%, var(--bg));
  box-shadow:0 0 0 2px var(--accent) inset;
}

/* --- per-client Airtable link (Clients table) --------------- */
.ct-at-link{
  margin-left:8px;font-size:10px;font-weight:600;
  color:var(--blue);text-decoration:none;
  border:1px solid var(--rule);border-radius:5px;padding:1px 5px;
  white-space:nowrap;vertical-align:middle;
}
.ct-at-link:hover{background:var(--hover);border-color:var(--blue)}

/* Proposed Two-Week Load reuses the .team-output container; small overrides
   here. Subtitle inside .to-tile-name carries the W1/W2 split so the chip
   stays Apple-clean (no extra row, no separate utilization cluster). */
.proposed-output{margin-top:12px}
.team-output .to-tile-name{display:flex;flex-direction:column;gap:2px}
.to-tile-sub{font-size:10px;font-weight:600;color:var(--ink-2);text-transform:uppercase;letter-spacing:0.03em;font-variant-numeric:tabular-nums}

/* --- Feedback loop strip (Workstream A) ----
   The proposal learning loop made visible. Shares the .team-output shell with
   the shipped + proposed strips; a Sky-Blue left edge marks it as the loop
   surface, the reuse-worthy count reads green, the unresolved nudge reads amber. */
.loop-health-output{margin-top:12px;border-left:3px solid var(--accent)}
.lh-title{margin-bottom:10px}
.loop-health-output #lh-reuse{color:var(--green)}
.lh-nudge{
  margin-top:14px;padding:12px 14px;border-radius:8px;
  background:var(--load-tint-hot);border:0.5px solid rgba(224,160,32,0.35);
}
.lh-nudge-head{font-size:13px;font-weight:600;color:var(--ink);display:flex;align-items:center;gap:8px}
.lh-nudge-more{font-size:11px;font-weight:500;color:var(--amber)}
.lh-nudge-sub{font-size:12px;color:var(--ink-2);margin-top:4px}
.lh-nudge-list{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-direction:column;gap:6px}
.lh-nudge-list li{font-size:12px;display:flex;align-items:baseline;gap:8px}
.lh-nudge-client{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:0.04em;color:var(--ink-3);min-width:96px}
.lh-nudge-list a{color:var(--accent-ink);text-decoration:none}
.lh-nudge-list a:hover{text-decoration:underline}

/* --- Recently Launched band (new-account ramp visibility) ----
   Reuses the client-dashboard (portfolio-health) StatePill tones:
   on_track=emerald, ramping=sky, watch=amber, pre_launch=slate. */
.na-band{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:14px}
.na-card{
  position:relative;border:0.5px solid var(--rule);border-radius:10px;
  background:#fff;padding:16px 18px;cursor:pointer;
  transition:border-color .12s;
}
.na-card:hover{border-color:var(--accent)}
/* Left status stripe by state. */
.na-card::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;border-radius:12px 0 0 12px}
.na-card.na-on_track::before{background:#30a46c}
.na-card.na-ramping::before{background:var(--accent)}
.na-card.na-watch::before{background:var(--amber)}
.na-card.na-attention::before{background:var(--red)}
.na-card.na-pre_launch::before{background:var(--ink-3)}
/* Attention surfaces through the left stripe and the state pill, not a loud
   red border. Apple-restrained: structure carries the signal, not chrome. */
.na-card.na-attention{border-color:var(--rule)}

.na-card-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.na-state{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:700;
  text-transform:uppercase;letter-spacing:0.03em;border-radius:999px;padding:3px 9px}
.na-dot{width:6px;height:6px;border-radius:50%;background:currentColor;opacity:0.85}
.na-state-on_track{background:#d1fae5;color:#065f46}
.na-state-ramping{background:rgba(33,168,242,0.14);color:#0b6fb0}
.na-state-watch{background:#fef3c7;color:#92400e}
.na-state-attention{background:#fee2e2;color:#991b1b}
.na-state-pre_launch{background:#f1f5f9;color:#475569}

.na-card .t-tier{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;
  border-radius:3px;font-size:10px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums}
.na-card .t-tier.tier-a{background:#047857;color:#fff;box-shadow:inset 0 0 0 1px #065f46}
.na-card .t-tier.tier-b{background:#475569;color:#fff}
.na-card .t-tier.tier-c{background:#94a3b8;color:#fff}
.na-kpi{margin-left:auto;font-size:11px;font-weight:600;color:var(--ink-2);
  border:1px solid var(--rule);border-radius:6px;padding:1px 7px;white-space:nowrap}
.na-kpi-tr{color:var(--ink-3);font-weight:700}

.na-card-name{font-size:16px;font-weight:700;color:var(--ink);display:flex;align-items:center;gap:8px}
.na-owner{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:0.03em;
  border-radius:5px;padding:1px 6px;background:var(--hover);color:var(--ink-2)}
.na-owner.owner-david{background:rgba(90,103,216,0.12);color:var(--owner-david)}
.na-owner.owner-jawad{background:rgba(48,164,108,0.12);color:var(--owner-jawad)}
.na-owner.owner-anthony{background:rgba(224,160,32,0.14);color:#9a6b00}
.na-owner.owner-josh{background:rgba(124,58,237,0.12);color:var(--owner-josh)}
.na-age{font-size:12px;color:var(--ink-2);margin:3px 0 11px;font-variant-numeric:tabular-nums}

/* Uniform tile grid — auto-fit lets tiles flow naturally when some are hidden
   (empty meetings / noise / etc.) instead of leaving placeholder dashes. */
.na-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;margin-bottom:12px}
.na-tile{border:0.5px solid var(--rule);border-radius:8px;padding:9px 11px;background:#fafafa}
.na-tile-l{font-size:10px;text-transform:uppercase;letter-spacing:0.04em;color:var(--ink-2);font-weight:600;margin-bottom:3px}
.na-tile-v{font-size:15px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;font-family:var(--display-font);letter-spacing:-0.018em}
.na-tile.na-good{background:rgba(48,164,108,0.08);border-color:rgba(48,164,108,0.25)}
.na-tile.na-good .na-tile-v{color:#1f7a4d}
.na-tile.na-ok{background:rgba(33,168,242,0.07);border-color:rgba(33,168,242,0.22)}
.na-tile.na-warn{background:rgba(224,160,32,0.09);border-color:rgba(224,160,32,0.28)}
.na-tile.na-warn .na-tile-v{color:#9a6b00}
.na-tile.na-attn{background:rgba(217,48,37,0.08);border-color:rgba(217,48,37,0.30)}
.na-tile.na-attn .na-tile-v{color:#991b1b}

.na-note{font-size:12px;line-height:1.45;color:var(--ink-2);margin-bottom:10px}
.na-at{font-size:11px;font-weight:600;color:var(--blue);text-decoration:none;
  border:1px solid var(--rule);border-radius:6px;padding:3px 9px}
.na-at:hover{background:var(--hover);border-color:var(--blue)}

/* NEW badge inline on the planning-table client name. */
.ct-new-badge{margin-left:7px;font-size:9px;font-weight:700;text-transform:uppercase;
  letter-spacing:0.04em;border-radius:5px;padding:1px 5px;vertical-align:middle;white-space:nowrap}
/* Status-vs-activity contradiction badge (stale Airtable Status). Amber, hover
   for detail. The recurrence guard from the 2026-06-23 GTME calendar review. */
.ct-status-warn{margin-left:7px;font-size:9px;font-weight:700;letter-spacing:0.03em;
  border-radius:5px;padding:1px 5px;vertical-align:middle;white-space:nowrap;
  background:#fef3c7;color:#92400e;cursor:help}

/* --- Trend by GTME (GTM Output) ----------------------------- */
.gtm-trend-by-op{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(160px,1fr));
  gap:12px;
}
.gtm-trend-empty{color:var(--ink-2);font-size:13px;font-style:italic}
.gtm-op-trend{
  border:1px solid var(--rule);border-radius:10px;
  padding:8px 10px 4px;color:var(--owner-unassigned);
}
.gtm-op-trend.david{color:var(--owner-david)}
.gtm-op-trend.jawad{color:var(--owner-jawad)}
.gtm-op-trend.anthony{color:var(--owner-anthony)}
.gtm-op-trend.josh{color:var(--owner-josh)}
.gtm-op-trend-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:2px}
.gtm-op-trend-name{font-weight:600;font-size:13px;color:var(--ink)}
.gtm-op-trend-last{font-weight:700;font-size:14px;color:inherit}
.gtm-op-trend-svg{display:block;overflow:visible}

/* --- per-card planner notes --------------------------------- */
.ct-note-btn{
  margin-left:auto;flex:0 0 auto;
  border:none;background:transparent;cursor:pointer;
  font-size:11px;line-height:1;color:var(--ink-3);
  padding:1px 3px;border-radius:4px;opacity:0;transition:opacity .12s,color .12s;
}
.ct-item:hover .ct-note-btn,.task-card:hover .ct-note-btn{opacity:1}
.ct-note-btn:hover{color:var(--blue);background:var(--hover)}
.ct-note-btn.has-note{opacity:1;color:var(--amber)}
/* Soft-close (✕) affordance: sits beside the note glyph. Always visible (dimmed)
   so a remove action is discoverable without hovering, brightening on hover. */
.ct-close-btn{margin-left:0;opacity:.45}
.ct-close-btn:hover{color:var(--red,#dc2626);background:var(--hover);opacity:1}

/* Per-client weekly campaign summary — volume + mix per client, atop calendar. */
.client-week-summary{margin:0 0 14px}
.cws-head-row{display:flex;align-items:baseline;gap:10px;margin:0 0 8px;flex-wrap:wrap}
.cws-title{font-weight:650;font-size:13px;color:var(--ink-1,#1c1c24)}
.cws-sub{font-size:11px;color:var(--ink-3,#8a8a99)}
.cws-cards{display:flex;flex-wrap:wrap;gap:8px}
.cws-card{position:relative;min-width:152px;flex:0 1 auto;border:1px solid var(--line,#e5e5ec);border-radius:10px;padding:8px 10px;background:var(--surface,#fff);cursor:pointer;transition:border-color .12s,box-shadow .12s}
.cws-card:hover{border-color:var(--blue,#21A8F2);box-shadow:0 1px 6px rgba(33,168,242,.12)}
.cws-card.thin{border-color:var(--red,#dc2626);background:rgba(220,38,38,.04)}
.cws-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:6px}
.cws-name{font-weight:600;font-size:12.5px;color:var(--ink-1,#1c1c24)}
.cws-count{font-weight:700;font-size:15px;color:var(--ink-1,#1c1c24);display:flex;align-items:baseline;gap:6px}
.cws-wk{font-weight:500;font-size:10px;color:var(--ink-3,#8a8a99)}
.cws-chips{display:flex;flex-wrap:wrap;gap:4px}
.cws-chip{font-size:10px;line-height:1.5;padding:1px 6px;border-radius:6px;background:var(--hover,#f3f3f7);color:var(--ink-2,#55556a);white-space:nowrap}
.cws-none{font-size:10px;color:var(--red,#dc2626)}
/* Idea-pack freshness warning chip: stale / missing / empty / unreadable
   generation. Amber so it reads as "attention" without the red of a hard fail. */
.cws-stale{font-size:10px;line-height:1.5;padding:1px 6px;border-radius:6px;background:#fef3c7;color:#92400e;font-weight:600;white-space:nowrap}
.cws-flag{position:absolute;top:-6px;right:8px;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:#fff;background:var(--red,#dc2626);padding:1px 5px;border-radius:4px}

/* Ticket affordance — opens the campaign's Airtable record. ALWAYS VISIBLE
   (not hover-gated) so every card visibly links to its individual campaign;
   rendered in brand blue so it reads as a link, not chrome. Bumps to full
   strength + a hover wash on card hover. */
.ct-ticket-btn{
  flex:0 0 auto;
  border:none;background:transparent;cursor:pointer;text-decoration:none;
  font-size:12px;line-height:1;color:var(--blue);font-weight:600;
  padding:1px 3px;border-radius:4px;opacity:.75;transition:opacity .12s,color .12s,background .12s;
}
.ct-item:hover .ct-ticket-btn,.task-card:hover .ct-ticket-btn{opacity:1}
.ct-ticket-btn:hover{color:var(--blue);background:var(--hover)}
.ct-item .ct-ticket-btn{margin-left:0}

/* Operator-name source link (GTM Output op cards + Team Output breakdown
   tiles). The name stays the same weight/color so the card reads unchanged;
   a hover underline in brand blue signals "click me to validate in Airtable."
   Inherits font from the parent .gtm-op-card-name / .to-tile-name. */
.op-source-link{
  color:inherit;text-decoration:none;cursor:pointer;
  transition:color .12s;
}
.op-source-link:hover{color:var(--blue);text-decoration:underline;text-underline-offset:2px;}

/* Owner-reassign affordance on calendar pills + bench cards. Mirrors note-btn
   visual rhythm. The note button uses margin-left:auto to push right, so the
   owner button sits just to its left (DOM order). */
.ct-owner-btn{
  flex:0 0 auto;
  border:none;background:transparent;cursor:pointer;
  font-size:11px;line-height:1;color:var(--ink-3);
  padding:1px 3px;border-radius:4px;opacity:0;transition:opacity .12s,color .12s;
}
.ct-item:hover .ct-owner-btn,.task-card:hover .ct-owner-btn{opacity:1}
.ct-owner-btn:hover{color:var(--blue);background:var(--hover)}
/* Multi-assignee guard — disabled affordance for tasks with co-owners.
   The picker only writes a single recid, so clicking it on a co-owned task
   would silently drop the other owner. UI refuses the click; operator edits
   the task in Airtable instead. */
.ct-owner-btn.disabled{
  opacity:0.4;cursor:not-allowed;
}
.ct-item:hover .ct-owner-btn.disabled,.task-card:hover .ct-owner-btn.disabled{opacity:0.55}
.ct-owner-btn.disabled:hover{color:var(--ink-3);background:transparent}
/* Push the brief chip + owner button to the right edge.
   Owner button gets margin-left:auto so it (and the trailing affordances)
   anchor right. The brief chip sits to its left in DOM order. */
.ct-item .ct-owner-btn{margin-left:auto}
.ct-item .ct-brief-btn{margin-left:0}
.ct-item .ct-note-btn{margin-left:0}

/* Brief affordance on calendar pills. Has-brief = subtle 📄 link; no-brief =
   amber chip with "no brief" text, visually loud so it can't be missed. */
.ct-brief-btn{
  flex:0 0 auto;
  border:none;background:transparent;
  font-size:11px;line-height:1;color:var(--ink-3);
  padding:1px 3px;border-radius:4px;
  text-decoration:none;
  transition:opacity .12s,background .12s,color .12s;
}
.ct-brief-btn.has-brief{
  opacity:0;cursor:pointer;
}
.ct-item:hover .ct-brief-btn.has-brief{opacity:1}
.ct-brief-btn.has-brief:hover{color:var(--blue);background:var(--hover)}
.ct-brief-btn.has-brief.no-url{cursor:default;color:var(--ink-3)}
.ct-brief-btn.draft-brief{
  /* Always visible + actionable — "no brief" is now a button that drafts one. */
  opacity:1;cursor:pointer;
  color:var(--amber,#b45309);
  background:rgba(224,160,32,0.12);
  font-size:10px;font-weight:600;
  padding:1px 6px;
  white-space:nowrap;
}
.ct-brief-btn.draft-brief:hover{color:#fff;background:var(--accent);}
.ct-brief-btn.draft-brief:disabled{cursor:default;opacity:0.7}
.ct-item:has(.ct-brief-btn.draft-brief){
  /* Subtle amber edge so the whole pill reads "not ready" at a glance. */
  box-shadow:inset 0 0 0 1px rgba(224,160,32,0.30);
}

/* (Removed) .ct-ord + .ct-ship — the old per-day ordinal and #N ship badge were
   replaced by the single owner-colored .ct-prio chip (see above). Kept this note
   so the history of the priority treatment is legible in one place. */

/* Status chip — was a static span; now a click-to-cycle button. Keep the
   visual identical to the prior chip (no operator should notice a chrome
   change), only the cursor + hover tell signal that it's interactive. */
.ct-status{
  cursor:pointer;
  border:none;
  font:inherit;
  transition:filter .12s,box-shadow .12s;
}
.ct-status:hover{
  filter:brightness(1.08);
  box-shadow:0 0 0 1px rgba(0,0,0,0.12);
}

/* In-progress visual accent on calendar pills + bench cards. The pulsing
   amber dot on the left edge makes "actively being worked" read across a
   full calendar week at a glance. Subtle so a long-running IN PROGRESS
   doesn't burn the operator's retinas. */
.ct-item.in-progress{
  box-shadow:inset 2px 0 0 0 var(--amber,#e0a020),0 0 0 1px rgba(224,160,32,0.18);
}
.ct-item.in-progress::before{
  content:'';
  position:absolute;left:-2px;top:50%;
  width:6px;height:6px;border-radius:50%;
  background:var(--amber,#e0a020);
  transform:translateY(-50%);
  box-shadow:0 0 0 0 rgba(224,160,32,0.7);
  animation:ct-pulse 2s ease-out infinite;
}
.ct-item{position:relative}
@keyframes ct-pulse{
  0%{box-shadow:0 0 0 0 rgba(224,160,32,0.55)}
  70%{box-shadow:0 0 0 6px rgba(224,160,32,0)}
  100%{box-shadow:0 0 0 0 rgba(224,160,32,0)}
}
@media (prefers-reduced-motion: reduce){
  .ct-item.in-progress::before{animation:none}
}

/* Awaiting approval (internal QA) — Caribbean Green (#07DE83), the brand's
   positive/ready accent. The old 6px pulsing dot read too subtly at calendar
   density, so this is a categorical treatment: a wide solid left bar + a faint
   card tint, so a campaign sitting in QA is unmistakable across a full week.
   The status pill + tooltip keep it from reading as already-approved. Distinct
   from .in-progress (amber dot) and .promoted (blue gradient fill). */
.ct-item.needs-approval{
  box-shadow:inset 4px 0 0 0 #07DE83,0 0 0 1px rgba(7,222,131,0.24);
  background:color-mix(in srgb, #07DE83 8%, var(--bg,#fff));
}

/* Owner picker popover — anchored below the affordance by inline style. */
.owner-picker{
  z-index:1000;
  background:var(--bg);border:1px solid var(--rule);border-radius:10px;
  box-shadow:0 8px 30px rgba(0,0,0,0.16);padding:8px;
}
.owner-picker-head{font-size:11px;font-weight:600;color:var(--ink-2);margin-bottom:6px;text-transform:uppercase;letter-spacing:.03em}
.owner-picker-list{display:flex;flex-direction:column;gap:2px}
.owner-picker-row{
  display:flex;align-items:baseline;justify-content:space-between;
  border:none;background:transparent;cursor:pointer;
  padding:6px 8px;border-radius:6px;font-size:13px;color:var(--ink);
  text-align:left;transition:background .1s;
}
.owner-picker-row:hover{background:var(--hover)}
.owner-picker-row.selected{background:color-mix(in srgb, var(--accent) 12%, var(--bg));font-weight:600}
.owner-picker-name{font-weight:600}
.owner-picker-row.selected .owner-picker-name{color:var(--accent)}
.owner-picker-role{font-size:10px;color:var(--ink-3);margin-left:8px}
.ct-item.has-note{box-shadow:inset 0 0 0 1px rgba(224,160,32,0.35)}
.t-note{
  margin-top:6px;padding:6px 8px;border-radius:6px;
  background:rgba(224,160,32,0.10);border-left:2px solid var(--amber);
  font-size:12px;color:var(--ink);white-space:pre-wrap;
}
.note-editor{
  position:absolute;z-index:1000;width:320px;
  background:var(--bg);border:1px solid var(--rule);border-radius:10px;
  box-shadow:0 8px 30px rgba(0,0,0,0.16);padding:10px;
}
.note-editor-head{font-size:11px;font-weight:600;color:var(--ink-2);margin-bottom:6px;text-transform:uppercase;letter-spacing:.03em}
.note-editor-text{
  width:100%;min-height:84px;resize:vertical;box-sizing:border-box;
  border:1px solid var(--rule);border-radius:6px;padding:8px;
  font-family:var(--body-font);font-size:13px;color:var(--ink);
}
.note-editor-text:focus{outline:none;border-color:var(--blue)}
.note-editor-actions{display:flex;align-items:center;gap:8px;margin-top:8px}
.note-editor-status{flex:1;font-size:11px;color:var(--ink-2)}
.note-editor-status.err{color:var(--red)}
.note-editor-actions button{
  border:1px solid var(--rule);border-radius:6px;padding:5px 12px;
  font-size:12px;cursor:pointer;background:var(--bg);color:var(--ink);
}
.note-cancel:hover{background:var(--hover)}
.note-save{background:var(--blue)!important;color:#fff!important;border-color:var(--blue)!important}
.note-save:hover{background:#005bbf!important}
.note-save:disabled{opacity:.6;cursor:default}

/* --- Two-Week Plan load-balance banner ---------------------- */
.load-balance{
  border:1px solid var(--rule);border-radius:10px;
  padding:12px 14px;margin-bottom:14px;background:var(--bg);
  border-left:3px solid var(--ink-3);
}
.load-balance.over{border-left-color:var(--red);background:var(--load-tint-over)}
.load-balance.lumpy{border-left-color:var(--amber);background:var(--load-tint-hot)}
.load-balance.ok{border-left-color:var(--green)}
.lb-head{display:flex;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap}
.lb-title{font-weight:650;font-size:14px;color:var(--ink)}
.lb-verdict{font-size:11px;font-weight:600;border-radius:10px;padding:2px 9px;text-transform:uppercase;letter-spacing:.03em}
.lb-verdict.lb-over{background:var(--red);color:#fff}
.lb-verdict.lb-lumpy{background:var(--amber);color:#fff}
.lb-verdict.lb-ok{background:var(--green);color:#fff}
.lb-summary{font-size:12px;color:var(--ink-2)}
.lb-body{display:flex;align-items:flex-end;gap:18px;flex-wrap:wrap}
.lb-chart{display:flex;align-items:flex-end;gap:6px;height:74px}
.lb-col{display:flex;flex-direction:column;align-items:center;gap:2px;width:28px}
.lb-col-n{font-size:11px;font-weight:600;color:var(--ink-2)}
.lb-bar{display:flex;align-items:flex-end;height:44px;width:18px;background:var(--rule-soft);border-radius:3px;overflow:hidden}
.lb-bar-fill{width:100%;background:var(--blue);border-radius:3px}
.lb-col.over .lb-bar-fill{background:var(--red)}
.lb-col.today .lb-col-d{color:var(--ink);font-weight:700}
.lb-col-d{font-size:10px;color:var(--ink-3)}
.lb-rec{flex:1;min-width:240px;font-size:13px;color:var(--ink);line-height:1.5}

/* ============================================================ */
/* Round 2 — GTM Output accuracy, coverage on tab 1, actionable */
/* load balance, note flagging                                  */
/* ============================================================ */

/* --- Account Coverage collapsible on the Two-Week Plan tab --- */
.coverage-details{margin:0 0 14px;border:1px solid var(--rule);border-radius:10px;background:var(--bg);padding:4px 12px 12px}
.coverage-details > summary{cursor:pointer;font-weight:650;font-size:14px;color:var(--ink);padding:8px 0;list-style:none;display:flex;align-items:baseline;gap:8px}
.coverage-details > summary::-webkit-details-marker{display:none}
.coverage-details > summary::before{content:'▾';color:var(--ink-3);font-size:11px;transition:transform .15s}
.coverage-details:not([open]) > summary::before{transform:rotate(-90deg)}
.coverage-summary-hint{font-weight:400;font-size:12px;color:var(--ink-2)}

/* --- GTM Output: per-operator in-card trend sparkline -------- */
.gtm-op-card-trend{margin-top:8px;padding-top:8px;border-top:1px solid var(--rule-soft);color:var(--blue)}
.gtm-op-card.david .gtm-op-card-trend{color:var(--owner-david)}
.gtm-op-card.jawad .gtm-op-card-trend{color:var(--owner-jawad)}
.gtm-op-card.anthony .gtm-op-card-trend{color:var(--owner-anthony)}
.gtm-op-card.josh .gtm-op-card-trend{color:var(--owner-josh)}
.gtm-op-card-trend-svg{display:block;overflow:visible}
.gtm-op-card-trend-cap{display:block;margin-top:2px;font-size:9px;text-transform:uppercase;letter-spacing:0.06em;color:var(--ink-3)}

/* --- Load Balance: actionable issue list -------------------- */
.lb-issues{flex:1;min-width:260px;margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:6px}
.lb-issue{font-size:13px;line-height:1.45;color:var(--ink);padding-left:18px;position:relative}
.lb-issue::before{position:absolute;left:0;top:1px;font-size:12px}
.lb-issue-day::before{content:'🔴'}
.lb-issue-op::before{content:'👤'}
.lb-issue-brief::before{content:'📄'}
.lb-clear{flex:1;min-width:240px;font-size:13px;color:var(--green);line-height:1.5;font-weight:500}

/* --- Note flag row on calendar pills ------------------------ */
.ct-note-flag{display:flex;align-items:center;gap:4px;margin-top:3px;padding:2px 5px;border-radius:4px;background:rgba(224,160,32,0.14);cursor:pointer;max-width:100%}
.ct-note-flag:hover{background:rgba(224,160,32,0.24)}
.ct-note-flag-icon{font-size:9px;flex:0 0 auto;line-height:1}
.ct-note-flag-text{font-size:10px;color:#8a6a14;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:500}
.ct-item.has-note{box-shadow:inset 2px 0 0 var(--amber)}


/* ============================================================ */
/* Insights — compact single callout + scrollable dot pager      */
/* ============================================================ */
.insights-strip{display:flex;align-items:center;gap:12px;margin:0 0 14px;border:1px solid var(--rule);border-left:3px solid var(--accent);border-radius:10px;background:var(--bg);padding:9px 14px}
.insights-label{flex:0 0 auto;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:0.06em;color:var(--ink-2)}
.insight{display:flex;align-items:center;gap:7px;flex:1;min-width:0;font-size:13px;color:var(--ink);line-height:1.4}
.insight-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.insight-icon{font-size:14px;flex:0 0 auto}
.insights-dots{display:flex;align-items:center;gap:5px;flex:0 1 auto;max-width:160px;overflow-x:auto;padding:2px 0}
.insights-dots::-webkit-scrollbar{height:4px}
.insights-dots::-webkit-scrollbar-thumb{background:var(--rule);border-radius:2px}
.idot{flex:0 0 auto;width:7px;height:7px;border-radius:50%;border:0;padding:0;background:var(--ink-3);cursor:pointer;transition:background .12s}
.idot.on{background:var(--accent)}
.idot:hover{background:var(--accent-ink)}

/* ============================================================ */
/* Visual-only card drag (reschedule in view, no Airtable write) */
/* ============================================================ */
.ct-item[draggable="true"]{cursor:grab}
.ct-item.dragging{opacity:0.45;cursor:grabbing}
.cal-day.drag-over{outline:2px dashed var(--accent);outline-offset:-2px;background:rgba(33,168,242,0.06)}
/* Intra-cell reorder insertion line — shows where a dragged card will land
   when dropped above/below a sibling card in the same day. */
.ct-item.drop-before{box-shadow:0 -2px 0 0 var(--accent)}
.ct-item.drop-after{box-shadow:0 2px 0 0 var(--accent)}
.ct-moved{margin-left:6px;font-size:8px;text-transform:uppercase;letter-spacing:0.04em;font-weight:700;color:#fff;background:var(--accent);border-radius:6px;padding:0 5px;line-height:13px}
.moves-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 12px;padding:8px 14px;border:1px dashed var(--accent);border-radius:10px;background:rgba(33,168,242,0.06);font-size:13px;color:var(--ink)}
.moves-reset{flex:0 0 auto;border:1px solid var(--accent);background:var(--bg);color:var(--accent-ink);border-radius:6px;padding:4px 12px;font-size:12px;font-weight:600;cursor:pointer}
.moves-reset:hover{background:var(--accent);color:#fff}

/* ============================================================ */
/* #5 Overdue reflow — calm, suggest-only rebalance nudge.       */
/* Sky-Blue action on a Cloud surface, sibling of insights-strip */
/* and moves-banner (above the calendar). Two states: collapsed  */
/* (Review / Not now) and expanded (task list + Reassign / Cancel). */
/* ============================================================ */
.reflow-banner{display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;margin:0 0 14px;border:1px solid var(--rule);border-left:3px solid var(--accent);border-radius:10px;background:var(--bg);padding:9px 14px}
.reflow-banner:has(.reflow-list){align-items:flex-start}
.reflow-icon{flex:0 0 auto;font-size:16px;line-height:1.2;color:var(--accent)}
.reflow-text{flex:1 1 60%;min-width:200px;font-size:13px;line-height:1.45;color:var(--ink)}
.reflow-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-left:auto}
.reflow-banner:has(.reflow-list) .reflow-actions{flex:1 1 100%;flex-direction:column;align-items:stretch;margin-left:0}
.reflow-list{list-style:none;margin:2px 0 0;padding:0;display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--ink-2);line-height:1.35}
.reflow-list li{padding:5px 9px;background:var(--rule-soft);border-radius:6px}
.reflow-task-client{font-weight:600;color:var(--ink);margin-right:5px}
.reflow-confirm-row{display:flex;gap:8px;margin-top:2px}
.reflow-review,.reflow-do{border:1px solid var(--accent);background:var(--accent);color:#fff;border-radius:6px;padding:5px 13px;font-size:12px;font-weight:600;cursor:pointer;transition:background .12s,border-color .12s}
.reflow-review:hover,.reflow-do:hover{background:var(--accent-ink);border-color:var(--accent-ink)}
.reflow-dismiss,.reflow-cancel{border:1px solid var(--rule);background:transparent;color:var(--ink-2);border-radius:6px;padding:5px 13px;font-size:12px;font-weight:500;cursor:pointer;transition:background .12s,color .12s}
.reflow-dismiss:hover,.reflow-cancel:hover{background:var(--hover);color:var(--ink)}

/* ============================================================ */
/* Clients tab — GTM Lead · Backup coverage chips               */
/* ============================================================ */
.ct-coverage{display:flex;flex-wrap:wrap;gap:4px;align-items:center}
.ct-cov-chip{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--rule);border-left-width:3px;border-radius:13px;padding:2px 9px;font-size:12px;color:var(--ink);background:var(--bg);cursor:default}
.ct-cov-chip.clickable{cursor:pointer}
.ct-cov-chip.clickable:hover{background:var(--hover)}
.ct-cov-chip.active{background:var(--accent);color:#fff;border-color:var(--accent)}
.ct-cov-chip.backup{opacity:0.72;font-size:11px}
.ct-cov-chip.none{color:var(--ink-3);font-style:italic;border-left-color:var(--rule)}
.ct-cov-role{font-size:8px;text-transform:uppercase;letter-spacing:0.05em;font-weight:700;color:var(--ink-3)}
.ct-cov-chip.active .ct-cov-role{color:rgba(255,255,255,0.8)}
.ct-cov-chip.david{border-left-color:var(--owner-david)}
.ct-cov-chip.jawad{border-left-color:var(--owner-jawad)}
.ct-cov-chip.anthony{border-left-color:var(--owner-anthony)}
.ct-cov-chip.josh{border-left-color:var(--owner-josh)}

/* --- Drag polish: lift on grab + pulse when a card lands ----- */
.ct-item{transition:box-shadow .12s,transform .12s}
.ct-item.dragging{box-shadow:0 6px 18px rgba(0,0,0,0.18);transform:scale(1.02)}
.ct-item.just-moved{animation:ct-land 0.85s ease-out 1}
@keyframes ct-land{
  0%{box-shadow:0 0 0 0 rgba(33,168,242,0.55);background:rgba(33,168,242,0.14)}
  100%{box-shadow:0 0 0 6px rgba(33,168,242,0);background:transparent}
}

/* =====================================================================
   PROPOSALS DIGEST (2026-05-31 redesign)
   Book-level ranked digest of proposed campaigns. White cards, Sky Blue
   accents, confidence rail on the left. Replaces the single-client
   calendar + duplicate chip selector.
   ===================================================================== */

/* --- Summary bar --- */
.dg-summary{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;
  padding:0 0 14px;margin-bottom:16px;border-bottom:0.5px solid var(--rule)}
.dg-summary-lead{font-size:14px;color:var(--ink-2)}
.dg-summary-lead b{color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums}
.dg-updated{margin-left:12px;font-size:11px;color:var(--ink-3)}
.dg-summary-ctrl{display:flex;align-items:center;gap:12px}
.dg-audience{font-size:10px;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;
  color:var(--accent-ink);background:rgba(33,168,242,0.10);padding:3px 8px;border-radius:4px;cursor:help}
.dg-sort{display:inline-flex;border:0.5px solid var(--rule);border-radius:7px;overflow:hidden;background:var(--bg)}
.dg-sort-btn{appearance:none;border:0;background:transparent;cursor:pointer;font:inherit;
  font-size:12px;font-weight:500;color:var(--ink-2);padding:6px 14px;transition:background .15s,color .15s}
.dg-sort-btn:hover{color:var(--ink);background:var(--hover)}
.dg-sort-btn.on{color:#fff;background:var(--accent);font-weight:600}
.dg-sort-btn+.dg-sort-btn{border-left:0.5px solid var(--rule)}

/* --- Jump strip (navigation, not a selector) --- */
.dg-jump-strip{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}
.dg-jump{display:inline-flex;align-items:center;gap:6px;appearance:none;cursor:pointer;font:inherit;
  font-size:12px;color:var(--ink-2);background:var(--bg);border:0.5px solid var(--rule);
  border-radius:14px;padding:4px 10px 4px 8px;transition:border-color .15s,color .15s,background .15s}
.dg-jump:hover{color:var(--ink);border-color:var(--ink-3);background:var(--hover)}
.dg-jump-nm{font-weight:500}
.dg-jump-ct{font-size:11px;font-variant-numeric:tabular-nums;color:var(--ink-3);
  background:var(--rule-soft);border-radius:8px;padding:0 6px;min-width:18px;text-align:center}

/* --- Data-source tier dot --- */
.dc-tier-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;
  vertical-align:middle;flex:0 0 auto}
.dc-tier-dot.green{background:var(--green)}
.dc-tier-dot.amber{background:var(--amber)}
.dc-tier-dot.red{background:var(--red)}
.dc-tier-dot.unknown{background:var(--ink-3)}

/* --- Digest list + cards --- */
.dg-list{display:flex;flex-direction:column;gap:12px}
.digest-card{display:flex;background:var(--bg);border:0.5px solid var(--rule);border-radius:10px;
  overflow:hidden;transition:border-color .15s,box-shadow .15s}
.digest-card:hover{border-color:var(--ink-3);box-shadow:0 1px 4px rgba(0,0,0,0.05)}
.digest-card.dg-flash{animation:dg-flash 1.2s ease-out 1}
@keyframes dg-flash{0%{box-shadow:0 0 0 3px rgba(33,168,242,0.45)}100%{box-shadow:0 0 0 3px rgba(33,168,242,0)}}

/* Confidence rail (left) */
.dc-rail{flex:0 0 56px;display:flex;align-items:flex-start;justify-content:center;padding-top:16px;
  border-right:0.5px solid var(--rule);background:var(--rule-soft)}
.dc-rail.green{background:rgba(48,164,108,0.08);border-right-color:rgba(48,164,108,0.35)}
.dc-rail.amber{background:rgba(224,160,32,0.08);border-right-color:rgba(224,160,32,0.35)}
.dc-rail.red{background:rgba(217,48,37,0.07);border-right-color:rgba(217,48,37,0.30)}
.dc-conf{font-family:var(--display-font);font-size:15px;font-weight:700;letter-spacing:-0.02em;
  font-variant-numeric:tabular-nums;color:var(--ink)}
.dc-rail.green .dc-conf{color:var(--green)}
.dc-rail.amber .dc-conf{color:#b07d10}
.dc-rail.red .dc-conf{color:var(--red)}

.dc-main{flex:1;min-width:0;padding:14px 16px}
.dc-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:8px}
.dc-client{display:inline-flex;align-items:center;font-size:12px;font-weight:600;color:var(--ink)}
.dc-sig{font-size:9px;font-weight:700;letter-spacing:0.07em;text-transform:uppercase;
  padding:2px 7px;border-radius:4px;color:#fff;background:var(--ink-3)}
.dc-sig.lookalike{background:#0d9488}
.dc-sig.signal{background:#0071e3}
.dc-sig.proven{background:#30a46c}
.dc-sig.trend{background:#ea580c}
.dc-sig.client-ask{background:#db2777}
.dc-day{font-size:11px;color:var(--ink-2);font-variant-numeric:tabular-nums}
.dc-day.unscheduled{color:var(--ink-3);font-style:italic}
.dc-risk{font-size:10px;font-weight:600;color:var(--red);background:#fef2f2;border:0.5px solid #fecaca;
  border-radius:4px;padding:1px 6px}
.dc-title{margin:0 0 6px;font-family:var(--display-font);font-size:16px;font-weight:600;
  letter-spacing:-0.015em;color:var(--ink);line-height:1.25}
.dc-thesis{margin:0 0 6px;font-size:13px;line-height:1.5;color:var(--ink)}
.dc-proof{margin:0 0 8px;font-size:12px;line-height:1.45;color:var(--ink-2);
  display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
.dc-proof-k{font-weight:700;font-size:9px;letter-spacing:0.08em;text-transform:uppercase;
  color:var(--ink-3);margin-right:6px}
.dc-drivers{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.dc-driver{display:inline-flex;align-items:center;gap:5px;font-size:11px;
  background:var(--rule-soft);border-radius:5px;padding:2px 8px}
.dc-driver-k{color:var(--ink-2);text-transform:capitalize}
.dc-driver-v{font-weight:700;font-variant-numeric:tabular-nums;color:var(--ink)}

/* Card actions */
.dc-actions{display:flex;align-items:center;gap:8px}
.dc-actions-spacer{flex:1}
.dc-btn{appearance:none;cursor:pointer;font:inherit;font-size:12px;font-weight:500;
  border-radius:6px;padding:6px 14px;border:0.5px solid var(--rule);background:var(--bg);
  color:var(--ink-2);transition:all .15s;text-decoration:none;display:inline-flex;align-items:center}
.dc-btn:hover{color:var(--ink);border-color:var(--ink-3);background:var(--hover)}
.dc-btn.ghost{border-color:transparent;background:transparent;color:var(--accent-ink);padding-left:0}
.dc-btn.ghost:hover{background:transparent;color:var(--accent);text-decoration:underline}
.dc-btn.link{color:var(--ink-2)}
.dc-btn.reject{color:var(--red);border-color:transparent}
.dc-btn.reject:hover{background:#fef2f2;border-color:#fecaca;color:var(--red)}
.dc-btn.accept{color:#fff;background:var(--accent);border-color:var(--accent);font-weight:600}
.dc-btn.accept:hover{background:var(--accent-ink);border-color:var(--accent-ink);color:#fff}
.dc-accepted{font-size:12px;font-weight:600;color:var(--green)}
.dc-accepted a{color:var(--accent-ink)}

/* Card expand */
.dc-expand{margin-top:14px;padding-top:14px;border-top:0.5px solid var(--rule);
  display:flex;flex-direction:column;gap:14px}
.dc-expand[hidden]{display:none}  /* class selector beats [hidden]'s display:none — restore it */
.dc-x-block .dc-x-h{font-size:9px;font-weight:700;letter-spacing:0.08em;text-transform:uppercase;
  color:var(--ink-3);margin-bottom:5px}
.dc-x-block p{margin:0;font-size:13px;line-height:1.55;color:var(--ink)}
.dc-expand .risk-block{margin-top:0;padding:10px 12px;background:#fef2f2;border:0.5px solid #fecaca;
  border-radius:6px;font-size:12px;color:var(--red);line-height:1.5}
/* Factor table inside the expand (buildFactorsTable, modal-scoped CSS doesn't reach here) */
.dc-expand table{width:100%;border-collapse:collapse;font-size:12px}
.dc-expand th{text-align:left;font-size:9px;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;
  color:var(--ink-3);padding:0 8px 6px;border-bottom:0.5px solid var(--rule)}
.dc-expand td{padding:6px 8px;border-bottom:0.5px solid var(--rule-soft);vertical-align:top}
.dc-expand td.factor{color:var(--ink);font-weight:500;width:30%}
.dc-expand td.factor small{display:block;color:var(--ink-3);font-size:10px;font-weight:400;
  letter-spacing:0.03em;text-transform:uppercase}
.dc-expand td.score{font-variant-numeric:tabular-nums;color:var(--ink);width:12%}
.dc-expand td.bar{width:24%}
.dc-expand .scorebar{height:6px;background:var(--rule-soft);border-radius:3px;overflow:hidden}
.dc-expand .scorebar div{height:100%;background:var(--accent);border-radius:3px}
.dc-expand td.note{color:var(--ink-2);font-size:12px}
.dc-expand .factor-info{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;
  border-radius:50%;background:var(--rule-soft);color:var(--ink-3);font-size:9px;font-weight:700;cursor:help;margin-left:4px}
.dc-expand .composite-row{padding:10px 8px 2px;display:flex;justify-content:space-between;align-items:baseline;
  font-size:13px;color:var(--ink);font-weight:600;border-top:0.5px solid var(--ink);margin-top:6px}
.dc-expand .composite-row.muted{border-top:0.5px dashed var(--rule);color:var(--ink-2);font-weight:500;margin-top:0}

/* --- By-client grouping --- */
.dg-section{margin-bottom:26px}
.dg-section .dg-list,.dg-section>.digest-card{margin-top:0}
.dg-section .digest-card{margin-bottom:12px}
.dg-section-head{display:flex;align-items:center;gap:12px;margin-bottom:12px;padding-bottom:8px;
  border-bottom:0.5px solid var(--rule)}
.dg-section-name{display:inline-flex;align-items:center;font-family:var(--display-font);font-size:16px;
  font-weight:600;letter-spacing:-0.015em;color:var(--ink)}
.dg-section-count{font-size:11px;color:var(--ink-3);font-variant-numeric:tabular-nums}
/* Two-week bench indicator (W1 / W2 counts vs target, amber when under). */
.dg-bench{display:inline-flex;align-items:center;gap:5px}
.bench-wk{font-size:10px;font-weight:600;letter-spacing:0.02em;color:var(--ink-2);
  background:var(--rule-soft);border-radius:20px;padding:2px 8px;font-variant-numeric:tabular-nums}
.bench-wk.under{color:#9a6a06;background:rgba(224,160,32,0.14)}
.dg-section-head .refresh-wrap{margin-left:auto}
/* Per-client refresh sits quiet on each block: compact, icon-led, subtle until hover. */
.dg-section-head .refresh-btn-client{font-size:11px;gap:5px;padding:3px 10px;color:var(--ink-2)}
.dg-section-head .refresh-btn-client .refresh-label{font-size:11px}
.dg-section-head .refresh-btn-client:hover{color:var(--ink)}

/* --- Empty / zero states --- */
.dg-zero{padding:8px 0}
.dg-zero-title{font-family:var(--display-font);font-size:16px;font-weight:600;color:var(--ink);margin-bottom:4px}
.dg-zero-sub{font-size:12px;color:var(--ink-2);margin-bottom:16px}
.dg-client-empty{margin-bottom:18px}
.dg-client-empty-head{display:flex;align-items:center;gap:10px;font-size:13px;font-weight:600;
  color:var(--ink);margin-bottom:8px}

/* --- Wiring & refinements panel --- */
.wiring-notes{margin:0 0 20px;border:0.5px solid var(--rule);border-radius:8px;background:#fbfcfd}
.wiring-notes>summary{cursor:pointer;list-style:none;padding:11px 16px;font-size:12px;font-weight:600;
  color:var(--ink);display:flex;align-items:center;gap:8px}
.wiring-notes>summary::-webkit-details-marker{display:none}
.wiring-notes>summary::before{content:"▸";color:var(--ink-3);font-size:10px;transition:transform .15s}
.wiring-notes[open]>summary::before{transform:rotate(90deg)}
.wn-badge{font-size:10px;font-weight:700;color:#fff;background:var(--amber);border-radius:9px;
  padding:0 7px;min-width:18px;text-align:center}
.wn-body{padding:4px 16px 14px;display:grid;grid-template-columns:1fr 1fr;gap:18px}
.wn-group-h{font-size:9px;font-weight:700;letter-spacing:0.07em;text-transform:uppercase;
  color:var(--ink-3);margin-bottom:7px}
.wn-group ul{margin:0;padding-left:16px}
.wn-group li{font-size:12px;line-height:1.5;color:var(--ink-2);margin-bottom:6px}
.wn-group code{font-family:var(--mono-font);font-size:11px;background:var(--rule-soft);
  padding:1px 4px;border-radius:3px;color:var(--ink)}
.wn-none{font-size:12px;color:var(--ink-2);font-style:italic;margin:0}
@media (max-width:720px){.wn-body{grid-template-columns:1fr}}

/* --- Proposals calendar view (multi-client, extension of Two-Week Plan) --- */
.dg-layout{display:inline-flex;border:0.5px solid var(--rule);border-radius:7px;overflow:hidden;background:var(--bg)}
.dg-layout-btn{appearance:none;border:0;background:transparent;cursor:pointer;font:inherit;
  font-size:12px;font-weight:500;color:var(--ink-2);padding:6px 14px;transition:background .15s,color .15s}
.dg-layout-btn:hover{color:var(--ink);background:var(--hover)}
.dg-layout-btn.on{color:#fff;background:var(--accent);font-weight:600}
.dg-layout-btn+.dg-layout-btn{border-left:0.5px solid var(--rule)}

.proposals-cal{margin-top:4px}
.proposals-cal .cal-week{margin-bottom:18px}
.proposals-cal .cal-week-label{display:flex;align-items:baseline;justify-content:space-between;
  padding:6px 2px;border-bottom:0.5px solid var(--rule)}
.proposals-cal .cal-week-title{color:var(--ink-2);font-size:11px;font-weight:600;letter-spacing:0.08em;text-transform:uppercase}
.proposals-cal .cal-day{min-height:88px;padding:8px 7px;border-right:0.5px solid var(--rule);border-bottom:0.5px solid var(--rule)}
.proposals-cal .cal-head{margin-bottom:6px}
.proposals-cal .cal-num{font-size:16px}
.proposals-cal .cal-tasks{gap:5px}

/* Compact proposal chip inside a day cell */
.cal-prop{display:flex;flex-direction:column;gap:3px;text-align:left;width:100%;appearance:none;cursor:pointer;
  font:inherit;background:var(--bg);border:0.5px solid var(--rule);border-left:3px solid var(--ink-3);
  border-radius:5px;padding:5px 7px;transition:border-color .12s,box-shadow .12s,transform .08s}
.cal-prop:hover{box-shadow:0 1px 4px rgba(0,0,0,0.06);transform:translateY(-1px)}
.cal-prop:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.cal-prop.green{border-left-color:var(--green)}
.cal-prop.amber{border-left-color:var(--amber)}
.cal-prop.red{border-left-color:var(--red)}
.cal-prop.accepted{background:#f0fdf4;border-color:#bbf7d0}
.cp-top{display:flex;align-items:center;gap:5px}
.cp-conf{font-size:11px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--ink)}
.cal-prop.green .cp-conf{color:var(--green)}
.cal-prop.amber .cp-conf{color:#b07d10}
.cal-prop.red .cp-conf{color:var(--red)}
.cp-sig{font-size:8px;font-weight:700;letter-spacing:0.05em;text-transform:uppercase;color:#fff;background:var(--ink-3);
  border-radius:2px;padding:1px 4px}
/* State marker — orthogonal to the source tag; lowercase + muted so it reads as
   a quiet annotation, never competing with the uppercase source pill. */
.prop-state{font-size:8px;font-weight:600;letter-spacing:0.02em;border-radius:3px;padding:1px 5px;
  text-transform:lowercase;white-space:nowrap}
.prop-state.new{color:var(--ink-3);background:transparent;border:0.5px solid var(--rule)}
.prop-state.queued{color:#fff;background:var(--ink-3)}
.cp-sig.lookalike{background:#0d9488}
.cp-sig.signal{background:#0071e3}
.cp-sig.proven{background:#30a46c}
.cp-sig.trend{background:#ea580c}
.cp-sig.client-ask{background:#db2777}
/* #1 Track-record chip — the measured history behind the source pill. A quiet
   Sky-Blue memory marker, distinct from the uppercase source tag; tabular
   numerals for the run count + median PRR. Full sentence lives in the title. */
.cp-track{font-size:9px;font-weight:700;font-variant-numeric:tabular-nums;color:#21A8F2;
  background:rgba(33,168,242,0.10);border-radius:3px;padding:1px 5px;white-space:nowrap;cursor:default}
.cp-risk{font-size:10px;color:var(--red)}
.cp-accepted{font-size:10px;color:var(--green);font-weight:700;margin-left:auto}
.cp-client{display:inline-flex;align-items:center;font-size:10px;font-weight:600;color:var(--ink-2)}
.cp-client .dc-tier-dot{width:6px;height:6px;margin-right:4px}
.cp-title{font-size:11px;line-height:1.3;color:var(--ink);font-weight:500;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

/* Unscheduled backlog strip below the grid */
.cal-backlog{margin-top:8px}
.cal-backlog-head{display:flex;align-items:baseline;justify-content:space-between;
  padding:6px 2px;border-bottom:0.5px solid var(--rule);margin-bottom:10px}
.cal-backlog-title{color:var(--ink-2);font-size:11px;font-weight:600;letter-spacing:0.08em;text-transform:uppercase}
.cal-backlog-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:8px}

/* --- Client Readiness strip (Apple-style "is this client wired") --- */
.readiness-strip{display:grid;grid-template-columns:repeat(auto-fill,minmax(252px,1fr));gap:12px;margin-bottom:22px}
.rc{appearance:none;cursor:pointer;text-align:left;font:inherit;background:var(--bg);
  border:0.5px solid var(--rule);border-radius:14px;padding:15px 16px 13px;
  display:flex;flex-direction:column;gap:11px;transition:box-shadow .16s,border-color .16s,transform .08s}
.rc:hover{box-shadow:0 2px 12px rgba(0,0,0,0.06);border-color:var(--ink-3);transform:translateY(-1px)}
.rc:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.rc-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.rc-name{font-family:var(--display-font);font-size:15px;font-weight:600;letter-spacing:-0.015em;color:var(--ink)}
.rc-badge{font-size:10px;font-weight:700;letter-spacing:0.03em;padding:3px 10px;border-radius:20px;white-space:nowrap}
.rc-badge.ready{color:#0f7a4d;background:rgba(48,164,108,0.12)}
.rc-badge.partial{color:#9a6a06;background:rgba(224,160,32,0.15)}
.rc-badge.needs{color:#b3261e;background:rgba(217,48,37,0.10)}
.rc-sources{display:flex;flex-wrap:wrap;gap:6px}
.rc-src{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:500;
  padding:3px 9px 3px 7px;border-radius:20px;border:0.5px solid var(--rule);cursor:help}
.rc-src .rc-dot{width:6px;height:6px;border-radius:50%;flex:0 0 auto}
.rc-src.on{color:var(--ink);background:var(--bg);border-color:rgba(48,164,108,0.40)}
.rc-src.on .rc-dot{background:var(--green)}
.rc-src.off{color:var(--ink-3);background:var(--rule-soft);border-color:transparent}
.rc-src.off .rc-dot{background:var(--ink-3);opacity:0.45}
.rc-foot{font-size:11px;color:var(--ink-3);font-variant-numeric:tabular-nums;margin-top:1px}
.wn-badge.muted{background:var(--ink-3)}

/* --- Bigger, roomier calendar tiles (final-pass polish) --- */
.proposals-cal .cal-day{min-height:130px;padding:10px 9px}
.proposals-cal .cal-num{font-size:18px}
.proposals-cal .cal-tasks{gap:7px}
.cal-prop{padding:9px 11px;gap:5px;border-radius:9px;border-left-width:4px}
.cal-prop:hover{box-shadow:0 2px 9px rgba(0,0,0,0.07)}
.cp-top{gap:6px}
.cp-conf{font-size:14px;letter-spacing:-0.01em}
.cp-sig{font-size:9px;padding:1px 5px}
.cp-client{font-size:11px}
.cp-client .dc-tier-dot{width:7px;height:7px}
.cp-title{font-size:13px;line-height:1.35;-webkit-line-clamp:3}

/* --- Client Readiness (scalable: count header + collapsible dense roster) --- */
.readiness{border:0.5px solid var(--rule);border-radius:14px;background:var(--bg);margin-bottom:20px;overflow:hidden}
.rd-summary{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:12px 16px}
.rd-toggle{appearance:none;border:0;background:transparent;cursor:pointer;font:inherit;display:inline-flex;align-items:center;gap:8px;color:var(--ink)}
.rd-chev{color:var(--ink-3);font-size:11px;transition:transform .15s}
.readiness.open .rd-chev{transform:rotate(90deg)}
.rd-title{font-family:var(--display-font);font-size:14px;font-weight:600;letter-spacing:-0.01em}
.rd-total{font-size:12px;color:var(--ink-3)}
.rd-counts{display:inline-flex;gap:6px;flex-wrap:wrap}
.rd-count{appearance:none;cursor:pointer;font:inherit;font-size:12px;font-weight:500;color:var(--ink-2);
  background:var(--bg);border:0.5px solid var(--rule);border-radius:20px;padding:4px 11px 4px 9px;
  display:inline-flex;align-items:center;gap:6px;transition:background .14s,color .14s,border-color .14s}
.rd-count:hover{border-color:var(--ink-3);color:var(--ink)}
.rd-count b{color:var(--ink);font-variant-numeric:tabular-nums}
.rd-cdot{width:7px;height:7px;border-radius:50%}
.rd-count.ready .rd-cdot{background:var(--green)}
.rd-count.partial .rd-cdot{background:var(--amber)}
.rd-count.needs .rd-cdot{background:var(--red)}
.rd-count.on{background:var(--ink);color:#fff;border-color:var(--ink)}
.rd-count.on b{color:#fff}
.rd-roster{border-top:0.5px solid var(--rule);max-height:380px;overflow-y:auto}
.rd-row{display:grid;grid-template-columns:160px 92px 1fr auto;align-items:center;gap:14px;width:100%;
  appearance:none;cursor:pointer;text-align:left;font:inherit;background:transparent;border:0;
  border-bottom:0.5px solid var(--rule-soft);padding:10px 16px;transition:background .12s}
.rd-row:last-child{border-bottom:0}
.rd-row:hover{background:var(--hover)}
.rd-name{font-size:13px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rd-badge{font-size:10px;font-weight:700;letter-spacing:0.03em;padding:2px 9px;border-radius:20px;justify-self:start;white-space:nowrap}
.rd-badge.ready{color:#0f7a4d;background:rgba(48,164,108,0.12)}
.rd-badge.partial{color:#9a6a06;background:rgba(224,160,32,0.15)}
.rd-badge.needs{color:#b3261e;background:rgba(217,48,37,0.10)}
.rd-srcs{display:flex;flex-wrap:wrap;gap:5px;min-width:0}
.rd-src{display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:500;padding:2px 7px 2px 6px;
  border-radius:14px;border:0.5px solid var(--rule);cursor:help;white-space:nowrap}
.rd-src .rd-dot{width:5px;height:5px;border-radius:50%;flex:0 0 auto}
.rd-src.on{color:var(--ink-2);border-color:rgba(48,164,108,0.40)}
.rd-src.on .rd-dot{background:var(--green)}
.rd-src.off{color:var(--ink-3);background:var(--rule-soft);border-color:transparent}
.rd-src.off .rd-dot{background:var(--ink-3);opacity:0.45}
.rd-count-n{font-size:11px;color:var(--ink-3);white-space:nowrap;font-variant-numeric:tabular-nums;justify-self:end}
.rd-conf-n{color:#7c3aed;font-weight:600}
.rd-empty{padding:18px 16px;color:var(--ink-3);font-size:12px;text-align:center}
@media (max-width:760px){.rd-row{grid-template-columns:1fr auto;gap:8px}.rd-srcs{grid-column:1 / -1}}

/* --- Conferences (parallel channel: distinct purple, calendar + list + modal) --- */
.dc-rail.conf{background:rgba(124,58,237,0.08);border-right-color:rgba(124,58,237,0.35)}
.dc-rail.conf .dc-conf{color:#7c3aed;font-size:11px;letter-spacing:0.04em}
.dc-sig.conference{background:#7c3aed;color:#fff}
.mh-prov.conference{background:#7c3aed;color:#fff}
.cp-sig.conference{background:#7c3aed;color:#fff}
.cal-prop.conf{border-left-color:#7c3aed;background:rgba(124,58,237,0.05)}
.cal-prop.conf .cp-title{color:#5b21b6}
.cp-fit{font-size:10px;font-weight:700;color:#7c3aed;margin-left:auto}
.dg-conf-section{margin-bottom:24px}
.dg-conf-head{display:flex;align-items:baseline;gap:10px;margin-bottom:12px;padding-bottom:8px;border-bottom:0.5px solid var(--rule)}
.dg-conf-title{font-family:var(--display-font);font-size:15px;font-weight:600;color:#7c3aed;letter-spacing:-0.01em}
.conf-modal-note{margin-top:14px;padding:11px 13px;background:rgba(124,58,237,0.06);border-radius:8px;font-size:12px;line-height:1.55;color:var(--ink-2)}
.conf-modal-note code{font-family:var(--mono-font);font-size:11px;background:var(--rule-soft);padding:1px 4px;border-radius:3px;color:var(--ink)}

/* --- Calendar tile: clickable body + Create-campaign footer (launch from calendar) --- */
.cal-prop .cp-body{display:flex;flex-direction:column;gap:4px;cursor:pointer}
.cal-prop .cp-body:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}
.cp-foot{margin-top:3px}
.cp-create{appearance:none;width:100%;cursor:pointer;font:inherit;font-size:11px;font-weight:600;
  color:var(--accent-ink);background:rgba(33,168,242,0.08);border:0.5px solid rgba(33,168,242,0.32);
  border-radius:6px;padding:4px 8px;transition:background .14s,color .14s,border-color .14s}
.cp-create:hover{background:var(--accent);color:#fff;border-color:var(--accent)}
.cp-created{font-size:10px;font-weight:600;color:var(--green);display:block;line-height:1.3}
.cp-created a{color:var(--accent-ink)}

/* #3 Variant grouping — one card for the same concept across sender/variant
   swaps. The ⧉ marker flags the grouping; the switcher row picks which variant
   the body/Create/Brief act on. Sky-Blue active state, Cloud chrome. */
.cp-variants{font-size:9px;font-weight:700;color:var(--accent-ink,#0b6fb0);background:rgba(33,168,242,0.12);
  border-radius:3px;padding:1px 5px;white-space:nowrap}
.cp-variant-row{display:flex;flex-wrap:wrap;gap:3px;margin-top:3px}
.cp-variant{appearance:none;cursor:pointer;font:inherit;font-size:9px;font-weight:600;line-height:1.2;
  color:var(--ink-2);background:#F1F5F9;border:0.5px solid #E2E8F0;border-radius:10px;padding:1px 7px;
  transition:background .12s,color .12s,border-color .12s}
.cp-variant:hover{border-color:rgba(33,168,242,0.4)}
.cp-variant.on{color:#fff;background:#21A8F2;border-color:#21A8F2}

/* #4 Inline draft-brief preview on a proposed card. A read-before-you-commit
   disclosure of the brief the scheduler already wrote; full read in the modal. */
.cp-brief-btn{appearance:none;cursor:pointer;font:inherit;font-size:10px;font-weight:600;
  color:var(--accent-ink,#0b6fb0);background:transparent;border:0;padding:3px 2px 0;align-self:flex-start}
.cp-brief-btn:hover{text-decoration:underline}
.cp-brief-btn.on{text-decoration:underline}
.cp-brief-preview{margin-top:4px;background:#F1F5F9;border-left:2px solid #21A8F2;border-radius:0 5px 5px 0;
  padding:6px 8px}
.cp-brief-text{font-size:10px;line-height:1.45;color:var(--ink-2);white-space:pre-wrap}
.cp-brief-full{appearance:none;cursor:pointer;font:inherit;font-size:9px;font-weight:700;
  color:var(--accent-ink,#0b6fb0);background:transparent;border:0;padding:4px 0 0;display:inline-block}
.cp-brief-full:hover{text-decoration:underline}

/* --- Scope bar: in-view GTME + client selection (GTME view / client-only view) --- */
.scope-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:16px}
.scope-lead{font-size:10px;font-weight:700;letter-spacing:0.08em;text-transform:uppercase;color:var(--ink-3)}
.scope-gtmes{display:inline-flex;gap:6px;flex-wrap:wrap}
.scope-chip{appearance:none;cursor:pointer;font:inherit;font-size:12px;font-weight:500;color:var(--ink-2);
  background:var(--bg);border:0.5px solid var(--rule);border-radius:20px;padding:5px 13px;transition:background .14s,color .14s,border-color .14s}
.scope-chip:hover{border-color:var(--ink-3);color:var(--ink)}
.scope-chip.on{background:var(--accent);color:#fff;border-color:var(--accent);font-weight:600}
.scope-sep{color:var(--ink-3)}
.scope-client{font-size:12px;color:var(--ink);display:inline-flex;align-items:center}
.scope-client.muted{color:var(--ink-3)}
.scope-client-lbl{font-size:10px;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;color:var(--ink-3);margin-right:5px}
.scope-hint{color:var(--ink-3);font-size:11px;margin-left:4px}
.scope-clear{appearance:none;border:0;background:var(--rule-soft);cursor:pointer;color:var(--ink-2);
  border-radius:50%;width:17px;height:17px;font-size:10px;line-height:1;margin-left:6px;display:inline-flex;align-items:center;justify-content:center}
.scope-clear:hover{background:var(--red);color:#fff}

/* --- Priority rank + client-need indicators --- */
.dc-rail{flex-direction:column;gap:4px}
.dc-rank{font-size:11px;font-weight:700;color:var(--accent-ink);font-variant-numeric:tabular-nums;line-height:1}
.dc-need{font-size:10px;font-weight:600;padding:2px 8px;border-radius:20px;white-space:nowrap}
.dc-need.urgent{color:#b3261e;background:rgba(217,48,37,0.10)}
.dc-need.watch{color:#9a6a06;background:rgba(224,160,32,0.14)}
.digest-card.urgent{border-left:2px solid var(--red)}
.cp-rank{font-size:10px;font-weight:700;color:var(--accent-ink);font-variant-numeric:tabular-nums}
.cal-prop.urgent{border-left-color:var(--red)}
.rd-need{font-size:10px;font-weight:600;padding:2px 7px;border-radius:12px;white-space:nowrap}
.rd-need.urgent{color:#b3261e;background:rgba(217,48,37,0.10)}
.rd-need.watch{color:#9a6a06;background:rgba(224,160,32,0.14)}
.rd-need-wrap{justify-self:start;min-width:0}
/* roster row now carries a need column between sources and the count */
.rd-row{grid-template-columns:150px 86px minmax(0,1fr) auto auto}
@media (max-width:760px){.rd-row{grid-template-columns:1fr auto;gap:8px}.rd-srcs,.rd-need-wrap{grid-column:1 / -1}}

/* --- Action clarity + sort label --- */
.dg-ctrl-lbl{font-size:10px;font-weight:700;letter-spacing:0.08em;text-transform:uppercase;color:var(--ink-3);margin-right:2px}
.dg-action-line{margin-top:6px;font-size:12px;color:var(--ink-2);line-height:1.5}
.dg-action-line b{color:var(--ink);font-weight:600}
.dg-lead-counts{font-size:14px;color:var(--ink-2)}
.dg-lead-counts b{color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums}

/* --- Lifecycle: prior-outcome memory + dismissed (not actioned) --- */
.dc-prior{font-size:10px;font-weight:600;color:#0f7a4d;background:rgba(48,164,108,0.10);
  border-radius:12px;padding:2px 8px;white-space:nowrap;cursor:help}
.dc-dismissed{font-size:12px;font-weight:600;color:var(--ink-3)}
.digest-card.dismissed{opacity:0.58}
.digest-card.dismissed .dc-title{text-decoration:line-through;text-decoration-color:var(--ink-3)}

/* --- Feedback loop panel --- */
.feedback-loop{margin:0 0 20px;border:0.5px solid var(--rule);border-radius:12px;background:#fbfcfd}
.feedback-loop>summary{cursor:pointer;list-style:none;padding:12px 16px;font-size:13px;font-weight:600;
  color:var(--ink);display:flex;align-items:center;gap:10px}
.feedback-loop>summary::-webkit-details-marker{display:none}
.feedback-loop>summary::before{content:"▸";color:var(--ink-3);font-size:10px;transition:transform .15s}
.feedback-loop[open]>summary::before{transform:rotate(90deg)}
.fl-sub{font-size:11px;font-weight:400;color:var(--ink-3);margin-left:auto}
.fl-badge{font-size:9px;font-weight:700;letter-spacing:0.05em;text-transform:uppercase;padding:2px 8px;border-radius:20px}
.fl-badge.live{color:#0f7a4d;background:rgba(48,164,108,0.14)}
.fl-badge.pending{color:#9a6a06;background:rgba(224,160,32,0.15)}
.fl-body{padding:4px 16px 16px}
.fl-stages{display:flex;align-items:stretch;gap:8px;margin-bottom:12px;flex-wrap:wrap}
.fl-stage{flex:1;min-width:96px;background:var(--bg);border:0.5px solid var(--rule);border-radius:10px;padding:12px 10px;text-align:center}
.fl-stage-n{font-family:var(--display-font);font-size:20px;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;line-height:1}
.fl-stage-l{font-size:11px;font-weight:600;color:var(--ink);margin-top:5px}
.fl-stage-s{font-size:10px;color:var(--ink-3);margin-top:2px}
.fl-arrow{display:flex;align-items:center;color:var(--ink-3);font-size:16px}
.fl-note{font-size:12px;color:var(--ink-2);line-height:1.55;margin-bottom:10px}
.fl-note b{color:var(--ink)}
.fl-note code,.fl-group code,.fl-learn code{font-family:var(--mono-font);font-size:11px;background:var(--rule-soft);padding:1px 4px;border-radius:3px;color:var(--ink)}
.fl-table{width:100%;border-collapse:collapse;font-size:12px;margin-bottom:10px}
.fl-table th{text-align:left;font-size:9px;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;color:var(--ink-3);padding:0 8px 6px;border-bottom:0.5px solid var(--rule)}
.fl-table td{padding:6px 8px;border-bottom:0.5px solid var(--rule-soft);color:var(--ink);font-variant-numeric:tabular-nums}
.fl-table td:first-child{text-transform:capitalize;color:var(--ink-2)}
.fl-learn{font-size:12px;color:var(--ink-2);line-height:1.5;font-style:italic}
.fl-group-h{font-size:9px;font-weight:700;letter-spacing:0.07em;text-transform:uppercase;color:var(--ink-3);margin:4px 0 7px}
.fl-group ul{margin:0;padding-left:16px}
.fl-group li{font-size:12px;line-height:1.5;color:var(--ink-2);margin-bottom:6px}
@media (max-width:760px){.fl-arrow{display:none}.fl-stage{min-width:44%}}

/* --- Source-family legend (bounded 6-family taxonomy) --- */
.dg-legend{display:flex;align-items:center;gap:10px 12px;flex-wrap:wrap;
  padding:9px 12px;margin-bottom:18px;background:var(--rule-soft);border-radius:9px;
  font-size:11px;color:var(--ink-2)}
.lg-lead{font-size:9px;font-weight:700;letter-spacing:0.07em;text-transform:uppercase;color:var(--ink-3)}
.lg-sep{color:var(--ink-3)}
.lg-tag{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.lg-code{width:9px;height:9px;border-radius:3px;background:var(--ink-3);flex:0 0 auto}
.lg-code.lookalike{background:#0d9488}
.lg-code.signal{background:#0071e3}
.lg-code.proven{background:#30a46c}
.lg-code.trend{background:#ea580c}
.lg-code.client-ask{background:#db2777}
.lg-code.conference{background:#7c3aed}
.lg-note{font-size:10px;color:var(--ink-3);font-style:italic}
.lg-state{font-size:8px;font-weight:600;letter-spacing:0.02em;border-radius:3px;padding:1px 5px;text-transform:lowercase}
.lg-state.new{color:var(--ink-3);background:transparent;border:0.5px solid var(--rule)}
.lg-state.queued{color:#fff;background:var(--ink-3)}
.lg-conf{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.lg-dot{width:7px;height:7px;border-radius:50%}
.lg-dot.green{background:var(--green)}
.lg-dot.amber{background:var(--amber)}
.lg-dot.red{background:var(--red)}

/* --- Proposals consolidation (2026-06-02): two-week window + bench, queued
       removed, refresh recency surfaced, per-card CRM leverage ---------------- */

/* Source tag fallback for an idea with no known family (was the "new" state). */
.dc-sig.proposed{background:var(--rule-soft);color:var(--ink-2);border:0.5px solid var(--rule)}

/* CRM-seed proof chip — the closed-won count. Quiet teal, pairs with the ⛁ icon
   on the Lookalike source pill (which carries the CRM provenance itself). */
.dc-crm{display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:600;
  color:#0d7d72;background:rgba(13,148,136,0.10);border:0.5px solid rgba(13,148,136,0.28);
  border-radius:4px;padding:2px 7px;white-space:nowrap;cursor:help}

/* Data-source icon on the source pill (the "logo" of where the idea came from:
   CRM ⛁, recording 🎙, market research 📊, etc.) + in the legend. Sized to sit
   on the uppercase pill baseline without inflating its height. */
.src-ic{font-size:10px;line-height:1;margin-right:1px;filter:grayscale(0.15)}
.dc-sig .src-ic,.cp-sig .src-ic,.gs-prov .src-ic,.mh-prov .src-ic{margin-right:3px}
.lg-ic{font-size:11px;line-height:1;margin:0 1px 0 2px}

/* Lifecycle pill — Proposed (a decision) vs Planned (committed work in Airtable).
   The headline distinction for the consolidation into the Two-Week Plan tab. */
.dc-life{font-size:9px;font-weight:700;letter-spacing:0.05em;text-transform:uppercase;
  padding:2px 7px;border-radius:4px;white-space:nowrap;cursor:help}
.dc-life.proposed-state{color:var(--accent-ink);background:rgba(33,168,242,0.08);border:0.5px solid rgba(33,168,242,0.30)}
.dc-life.planned{color:#1d7a4d;background:rgba(48,164,108,0.12);border:0.5px solid rgba(48,164,108,0.40)}
.digest-card.planned{border-color:rgba(48,164,108,0.35)}
.digest-card.planned .dc-rail{box-shadow:inset 3px 0 0 rgba(48,164,108,0.55)}
/* Calendar-chip lifecycle dot. */
.cp-life{font-size:10px;line-height:1;flex:0 0 auto}
.cp-life.proposed-state{color:var(--ink-3)}
.cp-life.planned{color:var(--green)}
.cal-prop.planned{box-shadow:inset 2px 0 0 rgba(48,164,108,0.55)}

/* Capacity awareness — the realistic build line, surfaced like the Two-Week
   Plan's load-balance so proposals never exceed what the team can ship. */
/* Calendar fail-safe message — shown only if every week section threw, so #cal
   is never silently blank after a filter change. */
.cal-fallback{padding:20px;border:0.5px dashed var(--rule);border-radius:10px;
  color:var(--ink-2);font-size:13px;background:var(--rule-soft)}
.cal-fallback b{color:var(--ink)}

.dg-cap{margin-left:8px;font-size:11px;color:var(--ink-3);cursor:help}
.dg-cap.over{color:var(--red);font-weight:600}
.cal-week-cap{margin-left:8px;font-size:11px;color:var(--ink-3);cursor:help}
.cal-week-cap.over{color:var(--red);font-weight:600}

/* Refresh recency strip — a single calm line above the count summary. */
.freshness{display:flex;align-items:center;gap:9px;flex-wrap:wrap;
  padding:8px 12px;margin-bottom:12px;background:var(--rule-soft);border-radius:9px;
  font-size:11.5px;color:var(--ink-2)}
.freshness .fr-dot{width:6px;height:6px;border-radius:50%;background:var(--green);flex:0 0 auto;
  box-shadow:0 0 0 3px rgba(48,164,108,0.14)}
.freshness.stale .fr-dot{background:var(--amber);box-shadow:0 0 0 3px rgba(224,160,32,0.16)}
.freshness .fr-main b{color:var(--ink);font-weight:600}
.freshness .fr-abs{color:var(--ink-3);font-variant-numeric:tabular-nums}
.freshness .fr-sep{color:var(--ink-3)}
.freshness .fr-cad,.freshness .fr-src,.freshness .fr-mr{color:var(--ink-2)}
.freshness .fr-src{cursor:help;border-bottom:0.5px dotted var(--ink-3)}
.freshness .fr-refresh{appearance:none;margin-left:auto;cursor:pointer;font:inherit;
  font-size:11px;font-weight:500;color:var(--accent-ink);background:var(--bg);
  border:0.5px solid var(--rule);border-radius:7px;padding:4px 10px;
  transition:border-color .15s,color .15s,background .15s}
.freshness .fr-refresh:hover{color:#fff;background:var(--accent);border-color:var(--accent)}

/* Empty in-window state (everything is on the bench). */
.dg-window-empty{font-size:13px;color:var(--ink-2);background:var(--rule-soft);
  border:0.5px solid var(--rule);border-radius:9px;padding:14px 16px;margin-bottom:14px}
.dg-window-empty b{color:var(--ink);font-weight:600}

/* Bench section — the collapsible pull-forward backlog below the in-window list. */
.dg-bench-section{margin-top:18px;border-top:0.5px solid var(--rule);padding-top:14px}
.dg-bench-head{display:flex;align-items:center;gap:9px;width:100%;appearance:none;cursor:pointer;
  font:inherit;text-align:left;background:transparent;border:0;padding:4px 2px;color:var(--ink-2)}
.dg-bench-head:hover{color:var(--ink)}
.dg-bench-chev{font-size:11px;color:var(--ink-3);transition:transform .15s}
.dg-bench-section.open .dg-bench-chev{transform:rotate(90deg)}
.dg-bench-title{font-size:13px;font-weight:600;color:var(--ink)}
.dg-bench-head .dg-section-count{font-size:11px;font-variant-numeric:tabular-nums;color:var(--ink-3);
  background:var(--rule-soft);border-radius:8px;padding:0 7px;min-width:18px;text-align:center}
.dg-bench-note{font-size:11.5px;color:var(--ink-3);font-style:italic}
.dg-bench-list{margin-top:12px;opacity:0.92}

/* Collapsible calendar bench (mirrors the list bench), so the calendar's
   pull-forward backlog folds away too (Doug, 2026-06-03). */
.cal-backlog-head{display:flex;align-items:center;gap:9px;width:100%;appearance:none;cursor:pointer;
  font:inherit;text-align:left;background:transparent;border:0;padding:6px 2px;color:var(--ink-2)}
.cal-backlog-head:hover{color:var(--ink)}
.cal-backlog-chev{font-size:11px;color:var(--ink-3);transition:transform .15s}
.cal-backlog.open .cal-backlog-chev{transform:rotate(90deg)}

/* Quieter source pills (Doug, 2026-06-03 — reduce calendar noise). Tinted, not
   bright-filled: colored text on a light wash with a hairline, so the cards read
   calm and the color still codes the source. Overrides the bright fills above. */
.dc-sig,.cp-sig{font-weight:600;color:var(--ink-2);background:var(--rule-soft);border:0.5px solid var(--rule)}
.dc-sig.lookalike,.cp-sig.lookalike{color:#0d7d72;background:rgba(13,148,136,0.10);border-color:rgba(13,148,136,0.26)}
.dc-sig.signal,.cp-sig.signal{color:#0a6fb0;background:rgba(0,113,227,0.10);border-color:rgba(0,113,227,0.26)}
.dc-sig.proven,.cp-sig.proven{color:#1d7a4d;background:rgba(48,164,108,0.12);border-color:rgba(48,164,108,0.30)}
.dc-sig.trend,.cp-sig.trend{color:#c2410c;background:rgba(234,88,12,0.10);border-color:rgba(234,88,12,0.26)}
.dc-sig.client-ask,.cp-sig.client-ask{color:#be185d;background:rgba(219,39,76,0.10);border-color:rgba(219,39,76,0.26)}
.dc-sig.conference,.cp-sig.conference{color:#6d28d9;background:rgba(124,58,237,0.10);border-color:rgba(124,58,237,0.26)}

/* Proposed vs Planned card color (Doug, 2026-06-03 — ahead of the two-week-plan
   merge, a proposed card must read as obviously not-yet-committed next to a
   planned/in-flight one). Proposed = dashed sky edge + faint sky wash; Planned
   keeps the solid border + green rail accent from round 1. Dashed = "draft". */
.digest-card.proposed{border:1px dashed rgba(33,168,242,0.45);background:rgba(33,168,242,0.03)}
.digest-card.proposed:hover{border-color:rgba(33,168,242,0.7)}
.cal-prop.proposed{outline:1px dashed rgba(33,168,242,0.45);outline-offset:-2px;background:rgba(33,168,242,0.035)}

/* Per-client rank badge (shown in client view + the external product, where the
   global #N is hidden) — quieter than the global rank, reads as "k of n". */
.dc-rank.per-client,.cp-rank.per-client{font-weight:600;color:var(--ink-2);background:var(--rule-soft);
  border:0.5px solid var(--rule)}

/* "Why this pick" seed line — the source + verbatim proof that originated the idea. */
.factor-seed{font-size:12px;color:var(--ink-2);background:var(--rule-soft);border-radius:6px;
  padding:7px 10px;margin-bottom:10px;line-height:1.45}
.factor-seed b{color:var(--ink);font-weight:600}

/* ============================================================ */
/* Unified Two-Week view — proposal chips inside the calendar    */
/* day cells + the Proposed bench beneath the operator queues.   */
/* ============================================================ */
/* Proposal chips stack below the committed task chips in a cell. */
.cal-props{display:flex;flex-direction:column;gap:4px;margin-top:4px}
/* Calm overflow: quiet, low-emphasis "+N more proposed" so a busy day reads as
   finite and intentional, never a wall. Matches the dashed "proposed" language. */
.cal-props-more{appearance:none;background:none;border:none;cursor:pointer;
  width:100%;text-align:left;margin-top:3px;padding:2px 1px;
  font-size:10px;font-weight:600;letter-spacing:0.01em;
  color:var(--accent);opacity:0.78}
.cal-props-more:hover{opacity:1;text-decoration:underline}
/* GTME-first default: per-day "N proposed campaigns" breadcrumb shown when
   proposed are hidden. A clear, tappable Sky-Blue pill (not muted chrome) so it
   reads unmistakably as "proposed campaigns, click to reveal" while the committed
   plan above stays the primary focus. One tap reveals proposed across the view. */
.cal-prop-peek{appearance:none;cursor:pointer;display:flex;align-items:center;gap:5px;
  width:100%;text-align:left;margin-top:6px;padding:4px 8px;border-radius:7px;
  background:rgba(33,168,242,0.09);border:0.5px dashed rgba(33,168,242,0.55);
  font:inherit;font-size:10px;font-weight:700;letter-spacing:0.01em;color:var(--accent)}
.cal-prop-peek:hover{background:rgba(33,168,242,0.16);border-style:solid}
.cal-prop-peek .cpp-mark{font-size:10px;line-height:1}
.cal-prop-peek .cpp-rev{margin-left:auto;font-size:11px;opacity:0.85}
/* Section-head "Show / Hide proposed" toggle. Quiet pill; lights Sky-Blue when on. */
.toggle-proposed{display:inline-flex;align-items:center;gap:6px;appearance:none;cursor:pointer;
  background:var(--bg);border:0.5px solid var(--rule);border-radius:8px;padding:6px 11px;
  font:inherit;font-size:12px;font-weight:600;color:var(--ink-2);
  transition:border-color .14s,color .14s,background .14s}
.toggle-proposed:hover{border-color:var(--ink-3);color:var(--ink)}
.toggle-proposed .tp-mark{color:var(--accent);font-size:11px}
.toggle-proposed.on{background:rgba(33,168,242,0.08);border-color:var(--accent);color:var(--accent)}
/* Micro-label dividing committed task chips from proposed chips in one cell. */
.cal-tasks-divider{font-size:9px;font-weight:600;letter-spacing:0.08em;text-transform:uppercase;
  color:var(--ink-3);margin-top:6px;padding-top:5px;border-top:0.5px dashed var(--rule)}

/* Proposed bench — full-width pull-forward lane beneath the operator columns. */
.proposals-bench-section{width:100%;flex-basis:100%;grid-column:1 / -1;margin-top:18px;
  border-top:0.5px solid var(--rule);padding-top:14px}
.proposals-bench-head{display:flex;align-items:center;gap:9px;width:100%;appearance:none;cursor:pointer;
  background:none;border:none;padding:0;color:var(--ink-2);text-align:left}
.proposals-bench-head:hover{color:var(--ink)}
.proposals-bench-chev{font-size:11px;color:var(--ink-3);transition:transform .15s}
.proposals-bench-section.open .proposals-bench-chev{transform:rotate(90deg)}
.proposals-bench-title{font-size:13px;font-weight:600;color:var(--ink)}
.proposals-bench-count{font-size:11px;color:var(--ink-3)}
.proposals-bench-section .cal-backlog-grid{margin-top:11px}

/* Two-Week section head — title + relocated action buttons on one row. */
.sec-head-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.sec-head-actions{display:flex;align-items:center;gap:8px}
