
:root{
  /* --- Events redesign spec §0, with Amanda's palette substitutions ---
     Spec called for navy #08213F / cyan #2AA8E0 / page #E7ECF3. Navy and cyan
     replaced with the Sigma brand values (#003074, #03AEE6); page kept as spec.
     #003074 is lighter than the spec's #08213F, so the deeper shade used for
     contrast against it is #00224F, which the codebase already used for hover. */
  --sp-navy:#003074;      /* rail, hero base, footer, panel headers */
  --sp-navy-deep:#00224F; /* depth against sp-navy */
  --sp-blue:#1665C0;      /* active nav, links, progress fills */
  --sp-cyan:#03AEE6;      /* active pills, readiness rings, accents */
  --sp-crimson:#8C1D2E;   /* urgent, overdue, blockers */
  --sp-green:#1E7A46;     /* complete, favourable */
  --sp-gold:#A9821B;      /* due soon 31-90d */
  --sp-gold-tx:#8A6410;
  --sp-slate:#8FA6C2;     /* just tracking, de-emphasised */
  --sp-slate-lt:#C3D0E0;
  --sp-page:#E7ECF3;
  --sp-bd:#DCE4EE;
  --sp-bd-lt:#EEF2F7;
  --sp-tx:#12233D;
  --sp-tx-body:#3A4A63;
  --sp-tx-mut:#5A6B82;
  --sp-tx-faint:#8796AC;
  --sp-rail-ink:#C6D8EC;

  /* Brand values taken straight from the Sigma Defense logo artwork. */
  /* Official Sigma Defense palette. Dark Blue / Bright Blue are primary;
     Red / Gray are secondary. Green + amber are kept only for traffic-light
     status meaning, which the brand palette has no equivalent for. */
  --navy:#003074; --navy2:#001c45; --cyan:#03AEE6; --cyan-bg:#e3f6fd;
  --gray:#5D697E; --bg:#f4f6f9; --card:#ffffff; --text:#1c2530; --muted:#5D697E;
  --red:#921836; --red-bg:#f7e3e9; --yellow:#8a6d1f; --yellow-bg:#fdf1d9; --green:#1e7b45; --green-bg:#d9f2e3;
  --sigma-gradient:linear-gradient(90deg,#921836 0%,#003074 38%,#03AEE6 76%,#ffffff 100%);
  --blue:#003074; --blue-bg:#dbe6f5; --radius:10px; --gap:16px;
}
*{margin:0;padding:0;box-sizing:border-box;}
:focus-visible{outline:2px solid var(--cyan);outline-offset:2px;border-radius:3px;}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important;}}
body{font-family:'Biryani',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;background:var(--bg);color:var(--text);line-height:1.5;}
/* the §1 shell manages its own gutters; a fixed cap here left dead space
   either side of the content column on wide screens */
.container{max-width:none;margin:0;padding:0;}
.header{background:linear-gradient(120deg,var(--navy2) 0%,var(--navy) 58%,#0a4a86 100%);color:#fff;padding:20px 26px;border-radius:var(--radius);margin-bottom:var(--gap);}
.header h1{font-size:19px;font-weight:700;letter-spacing:.2px;line-height:1.25;}
.header p{font-size:13px;color:#c9d6e8;margin-top:4px;}
.countdown-days{font-size:28px;font-weight:800;color:#fff;line-height:1.2;}
.countdown-unit{font-size:11px;color:#c9d6e8;font-weight:600;}
.countdown-name{font-size:11.5px;color:#c9d6e8;margin-top:3px;}
#load-status{font-size:12px;color:#c9d6e8;}
/* Sticks BELOW the utility bar, not over it — both were top:0 and this one is
   later in the DOM, so it painted across the breadcrumb. */
.table-controls{position:sticky;top:var(--sp-util-h,46px);z-index:20;background:var(--card);margin:-18px -20px 14px;padding:14px 20px 12px;border-bottom:1px solid #e6eaf0;border-radius:var(--radius) var(--radius) 0 0;}
.tc-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px;}
.tc-divider{width:1px;height:22px;background:#dde3ea;flex-shrink:0;}
.tc-spacer{flex:1;min-width:0;}
.tc-actions{display:flex;gap:8px;flex-shrink:0;}
.year-tabs{display:flex;gap:6px;flex-wrap:wrap;}
.year-tab{padding:7px 18px;border-radius:7px;border:1px solid #d5dce6;cursor:pointer;font-size:13px;font-weight:700;color:var(--muted);background:#fff;font-family:inherit;transition:background .15s,color .15s,border-color .15s;}
.year-tab:hover{border-color:var(--navy);color:var(--navy);}
.cmp-btn{background:var(--navy);color:#fff;border:none;border-radius:7px;padding:7px 13px;
  font-size:11.5px;font-weight:700;font-family:inherit;cursor:pointer;align-self:center;
  transition:background .2s;white-space:nowrap;}
.cmp-btn:hover{background:#00224f;}
.cmp-btn.on{background:var(--cyan);}
.cmp-wrap{background:var(--card);border-radius:var(--radius);box-shadow:0 1px 3px rgba(0,0,0,.08);
  padding:20px 22px;margin-bottom:var(--gap);}
.cmp-warn{background:var(--yellow-bg);border-left:3px solid var(--yellow);border-radius:6px;
  padding:9px 13px;font-size:11.5px;color:var(--navy);line-height:1.5;margin-bottom:14px;}
.cmp-none{font-size:12px;color:var(--muted);font-style:italic;}
.year-note{font-size:11px;color:var(--muted);font-style:italic;align-self:center;
  padding:0 4px;line-height:1.35;max-width:230px;}
.tier-tab.locked{opacity:.35;cursor:not-allowed;}
.year-tab.active{background:var(--navy);border-color:var(--navy);color:#fff;}
.tier-tabs{display:flex;gap:6px;flex-wrap:wrap;}
.tier-tab{padding:7px 14px;border-radius:7px;border:1px solid #d5dce6;cursor:pointer;font-size:12.5px;font-weight:700;background:#fff;font-family:inherit;display:inline-flex;align-items:center;gap:7px;transition:background .15s,border-color .15s;}
.tier-tab::before{content:'';width:8px;height:8px;border-radius:50%;background:currentColor;opacity:.5;flex-shrink:0;}
.tier-tab[data-tier="all"]{color:var(--navy);}
.tier-tab[data-tier="all"]::before{display:none;}
.tier-tab[data-tier="Booth"]{color:var(--green);}
.tier-tab[data-tier="Just Attend"]{color:#8a6d1f;}
.tier-tab[data-tier="Just Tracking"]{color:var(--blue);}
.tier-tab:hover{border-color:currentColor;}
/* Active keeps the tier's own hue so the colour coding still reads,
   and marks selection with an inset underline rather than a fill. */
.tier-tab.active{background:#eef2f7;border-color:currentColor;box-shadow:inset 0 -2.5px 0 currentColor;}
.tier-tab.active::before{opacity:1;}
.filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center;}
.filters select,.filters input[type=text]{padding:7px 10px;border-radius:6px;border:1px solid #d5dce6;background:#fff;color:var(--text);font-size:12.5px;font-family:inherit;}
.filters select{min-width:148px;}
.filters input[type=text]{min-width:220px;flex:1;max-width:330px;}
.filters input[type=text]::placeholder{color:#9aa4b2;}
.filters button{padding:7px 14px;border-radius:6px;border:1px solid #d5dce6;background:#fff;color:var(--muted);cursor:pointer;font-size:12.5px;font-weight:600;font-family:inherit;}
.filters button:hover{border-color:var(--navy);color:var(--navy);}
#app-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;padding:80px 20px;}
#app-loading .load-mark{width:120px;color:var(--navy);opacity:.5;animation:sigpulse 1.8s ease-in-out infinite;}
#app-loading .load-mark svg{width:100%;height:auto;display:block;}
#app-loading .load-text{font-size:12px;font-weight:700;letter-spacing:1.4px;text-transform:uppercase;color:var(--gray);opacity:.75;}
@keyframes sigpulse{0%,100%{opacity:.22;transform:scale(.97);}50%{opacity:.6;transform:scale(1.03);}}
@media (prefers-reduced-motion:reduce){#app-loading .load-mark{animation:none;opacity:.45;}}
#app-error{display:none;background:#fff3f3;border:1px solid var(--red-bg);color:#7a1420;border-radius:var(--radius);padding:16px 20px;margin-bottom:var(--gap);font-size:13px;line-height:1.6;}
#app-error code{background:rgba(0,0,0,.06);padding:1px 5px;border-radius:4px;}
.kpi-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(155px,1fr));gap:var(--gap);margin-bottom:var(--gap);}
.kpi-card{background:var(--card);border-radius:var(--radius);padding:16px 18px;box-shadow:0 1px 3px rgba(0,0,0,.08);border-left:4px solid var(--navy);}
.kpi-label{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;font-weight:600;}
.kpi-value{font-size:26px;font-weight:700;margin-top:4px;}
.dot{width:10px;height:10px;border-radius:50%;display:inline-block;}
.chart-row{display:grid;grid-template-columns:1.4fr 1fr 1fr;gap:var(--gap);margin-bottom:var(--gap);}
.chart-container{background:var(--card);border-radius:var(--radius);padding:18px 20px;box-shadow:0 1px 3px rgba(0,0,0,.08);}
.chart-container h3{font-size:13px;font-weight:700;color:var(--navy);margin-bottom:12px;text-transform:uppercase;letter-spacing:.4px;}
.chart-container canvas{max-height:260px;}
#burndown-section{margin-bottom:var(--gap);}
#timeline-container{position:relative;width:100%;}
/* Horizontal scrolling moved to an inner wrapper — an overflow container
   on the section itself would break position:sticky on the controls. */
.table-section{background:var(--card);border-radius:var(--radius);padding:18px 20px;box-shadow:0 1px 3px rgba(0,0,0,.08);margin-bottom:var(--gap);}
/* overflow-x:auto makes this a scroll container in BOTH axes (if one axis is
   not visible the other computes to auto), which re-anchors sticky children to
   this box instead of the page. Only turn it on where the table genuinely
   cannot fit. */
.table-scroll{overflow:visible;}
@media (max-width:1100px){.table-scroll{overflow-x:auto;}}
.table-section-head{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px;margin-bottom:12px;}
.table-section h3{font-size:13px;font-weight:700;color:var(--navy);text-transform:uppercase;letter-spacing:.4px;}
.export-btn{padding:7px 14px;border-radius:6px;border:1px solid var(--navy);background:#fff;color:var(--navy);font-size:12px;font-weight:700;cursor:pointer;}
.export-btn:hover{background:var(--bg);}
table{width:100%;border-collapse:collapse;font-size:12.5px;}
thead th{text-align:left;padding:9px 10px;border-bottom:2px solid #dee3ea;color:var(--muted);font-weight:700;font-size:11px;text-transform:uppercase;letter-spacing:.4px;cursor:pointer;white-space:nowrap;}
thead th:hover{color:var(--navy);}
tbody td{padding:9px 10px;border-bottom:1px solid #eef1f5;white-space:nowrap;}
tbody tr{cursor:pointer;}
tbody tr:hover{background:#f5f8fc;}
.badge{padding:3px 9px;border-radius:20px;font-size:11px;font-weight:700;display:inline-block;}
.b-red{background:var(--red-bg);color:var(--red);}
.b-yellow{background:var(--yellow-bg);color:#8a6d1f;}
.b-green{background:var(--green-bg);color:var(--green);}
.b-blue{background:var(--blue-bg);color:var(--blue);}
.detail-panel{background:var(--card);border-radius:var(--radius);padding:20px 24px;box-shadow:0 1px 3px rgba(0,0,0,.08);margin-bottom:var(--gap);display:none;}
.detail-panel.active{display:block;}
.detail-panel h2{font-size:18px;color:var(--navy);margin-bottom:4px;}
.detail-panel .sub{font-size:12.5px;color:var(--muted);margin-bottom:16px;}
.detail-block{min-width:0;}
.detail-block h4{font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--navy);margin-bottom:6px;font-weight:700;}
/* overflow-wrap lets long unbroken strings (URLs, IDs) wrap mid-word instead
   of overflowing their grid column and visually bleeding into the next one
   over — e.g. a registration link with no spaces in it. Paired with
   min-width:0 above (grid items default to min-width:auto, which blocks
   shrinking below the content's intrinsic width and defeats wrapping). */
.detail-block p{font-size:13px;color:var(--text);overflow-wrap:break-word;word-break:break-word;}
.detail-block .reception-list{font-size:13px;color:var(--text);line-height:1.5;padding-left:18px;margin:4px 0;}
.detail-block .reception-list li{margin-bottom:4px;}
.detail-block .doc-link{color:var(--navy2);font-weight:600;text-decoration:none;overflow-wrap:break-word;word-break:break-word;}
.detail-block .doc-link:hover{text-decoration:underline;}
/* The "Admin only" badge sits after the heading text. At some detail-grid
   column widths the heading text itself wraps onto 2 lines while the badge
   sits beside it — row-wrap flexbox doesn't reliably reserve space for that
   case, since a single flex item's own internal text-wrapping isn't part of
   the row-wrap/gap calculation between items. Using flex-direction:column
   instead sidesteps the ambiguity entirely: the heading text (which may
   itself wrap to 1-2 lines) is always item 1, the badge is always item 2
   stacked directly below it, full-width, regardless of how the text wraps
   or how wide the column is. Scoped to .admin-only-block so it doesn't
   change any other h4 with a badge elsewhere on the page. */
.admin-only-block h4{display:flex;flex-direction:column;align-items:flex-start;gap:4px;margin-bottom:8px;}
.checklist-wrap{margin-top:20px;}
.checklist-wrap h4{font-size:12px;text-transform:uppercase;letter-spacing:.5px;color:var(--navy);margin-bottom:10px;font-weight:700;display:flex;align-items:center;gap:10px;}
.checklist-scroll{max-height:420px;overflow-y:auto;border:1px solid #eef1f5;border-radius:8px;}
.checklist-table{width:100%;border-collapse:collapse;font-size:12.5px;}
.checklist-table thead th{position:sticky;top:0;background:var(--navy);color:#fff;text-align:left;padding:8px 10px;font-size:10.5px;text-transform:uppercase;letter-spacing:.4px;cursor:default;}
.checklist-table tbody td{padding:7px 10px;border-bottom:1px solid #eef1f5;}
.checklist-table tbody tr:hover{background:#f5f8fc;cursor:default;}
.checklist-table tbody tr.is-complete td{color:#9aa4b1;text-decoration:line-through;}
.checklist-table tbody td.chk-col{text-decoration:none !important;}
.checklist-table input[type=checkbox]{width:16px;height:16px;cursor:pointer;accent-color:var(--green);}
.checklist-phase{font-size:10.5px;color:var(--muted);font-weight:600;}
.checklist-empty{padding:16px;font-size:13px;color:var(--muted);font-style:italic;}
.inline-error{color:var(--red);font-size:11px;font-weight:700;margin-left:10px;}
.attendees-wrap{margin-top:20px;}
.attendees-wrap h4{font-size:12px;text-transform:uppercase;letter-spacing:.5px;color:var(--navy);margin-bottom:10px;font-weight:700;display:flex;align-items:center;gap:10px;}
.attendee-table{width:100%;border-collapse:collapse;font-size:12.5px;margin-bottom:10px;}
.attendee-table thead th{text-align:left;padding:7px 10px;font-size:10.5px;text-transform:uppercase;letter-spacing:.4px;color:var(--muted);border-bottom:2px solid #dee3ea;}
.attendee-table tbody td{padding:7px 10px;border-bottom:1px solid #eef1f5;}
.attendee-remove{background:none;border:none;color:var(--red);cursor:pointer;font-size:14px;font-weight:700;padding:2px 6px;}
.attendee-remove:hover{background:var(--red-bg);border-radius:4px;}
.attendee-empty{padding:10px 0;font-size:13px;color:var(--muted);font-style:italic;}
.attendee-form{display:flex;gap:8px;flex-wrap:wrap;align-items:center;}
.attendee-form input{padding:8px 10px;border:1px solid #dee3ea;border-radius:6px;font-size:12.5px;font-family:inherit;flex:1;min-width:120px;}
.attendee-form button{padding:8px 16px;border-radius:6px;border:none;background:var(--navy);color:#fff;font-size:12.5px;font-weight:700;cursor:pointer;}
.attendee-form button:hover{background:var(--navy2);}
.b-gray{background:#e8eaee;color:#6c7686;}
.attendee-status-sel{padding:3px 6px;border:1px solid #dee3ea;border-radius:5px;font-size:11.5px;font-family:inherit;background:#fff;cursor:pointer;}
.att-cancelled td:not(:last-child){opacity:.55;}
.interest-box{background:var(--blue-bg);border:1px solid #c3d4ec;border-radius:8px;padding:12px 14px;display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;}
.interest-box p{font-size:12.5px;color:var(--navy);}
.interest-btn{padding:8px 16px;border-radius:6px;border:none;background:var(--navy);color:#fff;font-size:12.5px;font-weight:700;cursor:pointer;white-space:nowrap;}
.interest-btn:hover{background:var(--navy2);}
.interest-btn:disabled{background:#9aa4b2;cursor:default;}
.interest-done{color:var(--green);font-weight:700;}
.yoy-wrap{background:var(--bg);border:1px dashed #c7cfd9;}
/* ===== Year-over-year scorecard (concept 2a) =====
   Years are COLUMNS, measures are ROWS. Every blank cell states its reason;
   the tints below are what keep "we never logged it" visually distinct from
   "the calculation is blocked" and from "that year hasn't happened". */
/* Post-show takeaways, on the Results tab. Stored one-per-line in the Events
   "Takeaways" long text field (fld67osFTCZYzmIPN) \u2014 admin-only, same gate as
   the debrief files they sit beside. */
.tk-h{display:flex;align-items:center;gap:7px;margin-top:14px;font-size:10.5px;
  font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#a9c0da;}
.tk-n{background:rgba(255,255,255,.14);color:#fff;border-radius:999px;
  padding:1px 7px;font-size:9.5px;font-variant-numeric:tabular-nums;}
.tk-sub{font-size:10.5px;color:#8fa8c6;margin:3px 0 6px;}
.tk-list{margin:9px 0 0;padding:0;list-style:none;}
/* flex:1 1 auto, never flex:1 \u2014 with flex-basis:0% the wrapper contributes no
   intrinsic height and two-line bullets get squashed. */
.tk-list li{display:flex;flex:1 1 auto;align-items:flex-start;gap:8px;
  font-size:12px;line-height:1.5;color:#dce7f5;padding:3px 0;}
.tk-list li::before{content:'';flex:none;width:5px;height:5px;border-radius:50%;
  background:var(--sp-cyan);margin-top:7px;}
.sc-card{border:1px solid #D7E0EC;border-radius:18px;overflow:hidden;background:#fff;}
.sc-head{display:flex;align-items:center;gap:12px;padding:12px 20px;
  /* Spec §3 says linear-gradient(112deg,#08213F,#0B3C7B). D-001 overrides that
     with the real Sigma navy; the D-003 spec-navy exception covers the detail
     panel only, not this card. */
  background:linear-gradient(112deg,var(--sp-navy),#0B3C7B);}
.sc-id{flex:1;min-width:0;}
.sc-eyebrow{font-size:9px;font-weight:600;letter-spacing:.18em;color:#7FC4F0;
  text-transform:uppercase;font-variant-numeric:tabular-nums;}
.sc-name{font-size:19px;font-weight:800;color:#fff;line-height:1.25;margin-top:2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
/* flex:none + nowrap is load-bearing: without it the selector label wraps to
   two lines and overflows its box. Same for both chips. */
.sc-chip{flex:none;white-space:nowrap;background:rgba(255,255,255,.1);
  border-radius:8px;padding:6px 12px;display:flex;flex-direction:column;gap:1px;}
.sc-chip-q{background:rgba(140,29,46,.85);}
.sc-chip-l{font-size:8.5px;font-weight:700;letter-spacing:.14em;color:#BBD4EC;
  text-transform:uppercase;}
.sc-chip-v{font-size:15px;font-weight:800;color:#fff;font-variant-numeric:tabular-nums;}
.sc-sel{flex:none;white-space:nowrap;background:transparent;color:#fff;
  border:1px solid rgba(255,255,255,.4);border-radius:999px;padding:7px 12px;
  font-family:inherit;font-size:12px;font-weight:600;cursor:pointer;max-width:230px;}
.sc-sel option{background:var(--navy2);color:#fff;}
/* column header */
.mx-hd{display:flex;align-items:center;padding:8px 20px;background:#F4F7FB;
  border-bottom:1px solid #DCE4EE;}
.mx-hd .mx-l{font-size:9px;font-weight:700;letter-spacing:.13em;color:#5A6B82;
  text-transform:uppercase;}
.mx-yr{font-size:14px;font-weight:700;color:#12233D;}
.mx-st{font-size:9px;font-weight:600;letter-spacing:.09em;margin-left:5px;
  text-transform:uppercase;}
.mx-st.done{color:#1E7A46;}
.mx-st.plan{color:#0B3C7B;}
.mx-row{display:flex;align-items:center;padding:9px 20px;}
.mx-row.alt{background:#FBFCFE;}
.mx-l{flex:1.6;min-width:0;}
.mx-ln{font-size:13px;font-weight:600;color:#12233D;}
/* the direction hint is INLINE, never a second line */
.mx-hint{font-size:9px;font-weight:400;letter-spacing:.08em;color:#A3B0C2;
  margin-left:7px;text-transform:uppercase;white-space:nowrap;}
.mx-c{flex:1;min-width:0;padding:0 5px;text-align:center;}
.mx-box{display:block;border-radius:6px;padding:5px 6px;font-size:12.5px;
  font-weight:700;border:1px solid transparent;font-variant-numeric:tabular-nums;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.mx-best{background:#E7F4EC;border-color:#BFE0C9;color:#1E7A46;}
.mx-worst{background:#FCF4F5;border-color:#E7C6CC;color:#8C1D2E;}
.mx-block{background:#FDF4E3;border-color:#E9CE8E;color:#8A6410;font-size:10.5px;}
.mx-miss{background:#F1F5FA;border-color:#DCE4EE;color:#8796AC;font-size:10.5px;}
.mx-val{background:#F8FAFD;border-color:#EDF1F7;color:#12233D;}
/* Dashed = this year hasn't happened. Load-bearing: it is what stops a
   forecast being read as an actual. */
.mx-future{background:#F4F7FB;border:1px dashed #C9D5E4;color:#8796AC;font-size:10.5px;}
.mx-plain{display:block;font-size:11.5px;font-weight:600;color:var(--sp-tx-body);
  font-variant-numeric:tabular-nums;}
.mx-best-col{width:88px;flex:none;text-align:right;font-size:12px;font-weight:700;
  color:#1E7A46;}
.mx-none{color:#8C1D2E;font-size:10px;letter-spacing:.06em;}
/* \u00a75 expense line items. The section a total cannot give you: where the
   money actually went. */
.xl-head{display:flex;align-items:center;gap:10px;padding:11px 20px 8px;
  border-top:1px solid #DCE4EE;}
.xl-title{font-size:10px;font-weight:700;letter-spacing:.13em;color:#12233D;
  text-transform:uppercase;}
/* flex:none + nowrap, same defect class as the header selector. */
.xl-pill{flex:none;white-space:nowrap;background:#FBF3E0;color:#8A6410;
  border:1px solid #E9CE8E;border-radius:999px;padding:2px 9px;
  font-size:9.5px;font-weight:700;letter-spacing:.04em;}
/* Says plainly that the current column is committed spend on a show that has
   not happened, so it cannot be read as a settled actual. */
.xl-pill-b{background:#EAF2FB;color:var(--sp-blue);border-color:#C3D9F2;}
.xl-cols,.xl-row{display:flex;align-items:center;gap:8px;padding:6px 20px;}
.xl-cols{font-size:8.5px;font-weight:700;letter-spacing:.12em;color:#8796AC;
  text-transform:uppercase;border-bottom:1px solid #EEF2F7;}
.xl-row{border-bottom:1px solid #F4F7FB;font-size:12px;}
.xl-cat{flex:1.5;min-width:0;font-weight:600;color:#12233D;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.xl-n{width:82px;flex:none;text-align:right;font-variant-numeric:tabular-nums;
  color:var(--sp-tx-body);}
.xl-cols .xl-n{color:#8796AC;}
.xl-share{flex:1;min-width:0;display:flex;align-items:center;gap:7px;}
.xl-bar{flex:1;min-width:0;height:7px;background:#EDF1F7;border-radius:999px;overflow:hidden;}
.xl-fill{display:block;height:100%;border-radius:999px;}
.xl-pct{flex:none;font-size:10.5px;font-weight:700;color:#5A6B82;
  font-variant-numeric:tabular-nums;width:30px;text-align:right;}
.xl-chg{width:84px;flex:none;text-align:right;}
.xl-chip{display:inline-block;border-radius:5px;padding:2px 7px;font-size:10px;
  font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap;}
.xl-up{background:#FBF3E0;color:#8A6410;}
.xl-good{background:#E7F4EC;color:#1E7A46;}
.xl-new{background:#EAF2FB;color:var(--sp-blue);}
.xl-gap{background:#F1F5FA;color:#8796AC;}
.xl-flat{background:#F1F5FA;color:#5A6B82;}
/* A blank here states its reason too \u2014 same rule as \u00a74. */
.xl-blank{font-size:9.5px;font-weight:700;letter-spacing:.06em;color:#A3B0C2;}
.xl-gapped .xl-cat{color:#8796AC;font-weight:400;}
.xl-total{background:#F8FAFD;border-top:1px solid #DCE4EE;border-bottom:none;font-weight:700;}
.xl-total .xl-n{color:#12233D;font-weight:700;}
.xl-verdict{font-size:10.5px;font-weight:400;color:#5A6B82;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.xl-empty{padding:12px 20px;font-size:11.5px;color:#5A6B82;}
@media (max-width:900px){
  .xl-share{display:none;}
  .xl-n{width:70px;}
}
/* \u00a76 verdicts + takeaways. Two boxes side by side. */
.vd-wrap{display:flex;gap:12px;padding:14px 20px 16px;align-items:stretch;}
.vd-box{flex:1;min-width:0;border:1px solid #DCE4EE;border-radius:11px;overflow:hidden;
  display:flex;flex-direction:column;}
.vd-h{display:flex;align-items:center;gap:8px;background:#F4F7FB;padding:7px 12px;
  font-size:9px;font-weight:700;letter-spacing:.13em;text-transform:uppercase;
  color:#5A6B82;border-bottom:1px solid #EEF2F7;}
.vd-pill{margin-left:auto;flex:none;white-space:nowrap;border-radius:999px;
  padding:2px 8px;font-size:9px;font-weight:700;letter-spacing:.04em;text-transform:none;}
.vd-pill.ok{background:#E7F4EC;color:#1E7A46;}
.vd-pill.no{background:#FCF4F5;color:#8C1D2E;}
/* 1 1 auto, not 1: with flex-basis:0% the body contributes no intrinsic height
   and the shorter box squashes two-line content in the taller one. */
.vd-body{flex:1 1 auto;padding:10px 12px 12px;}
.vd-row{display:flex;gap:11px;align-items:flex-start;padding:6px 0;}
.vd-yr{width:52px;flex:none;}
.vd-y{display:block;font-size:16px;font-weight:800;color:#12233D;line-height:1.1;
  font-variant-numeric:tabular-nums;}
.vd-s{display:block;font-size:9.5px;font-weight:700;letter-spacing:.05em;margin-top:1px;
  font-variant-numeric:tabular-nums;}
.vd-good{color:#1E7A46;} .vd-bad{color:#8C1D2E;}
.vd-mid{color:#8A6410;} .vd-plan{color:var(--sp-navy);}
.vd-tx{flex:1 1 auto;min-width:0;font-size:12px;font-weight:400;line-height:1.5;
  color:var(--sp-tx-body);}
.tb-deb{display:flex;gap:10px;align-items:flex-start;padding:2px 0 9px;
  border-bottom:1px solid #EEF2F7;margin-bottom:9px;}
.tb-tile{flex:none;width:30px;height:30px;border-radius:6px;background:#EAF2FB;
  color:var(--sp-blue);font-size:9px;font-weight:800;letter-spacing:.05em;
  display:flex;align-items:center;justify-content:center;}
.tb-tile-e{background:#FCF4F5;color:#8C1D2E;}
.tb-dtx{flex:1 1 auto;min-width:0;}
.tb-link{display:block;font-size:12px;font-weight:700;color:var(--sp-blue);text-decoration:none;}
.tb-link:hover{text-decoration:underline;}
.tb-sub{display:block;font-size:10.5px;color:#8796AC;margin-top:2px;}
.tb-yr{font-size:9px;font-weight:700;letter-spacing:.12em;color:#8796AC;
  text-transform:uppercase;margin-top:7px;}
.tb-list{margin:3px 0 0;padding:0;list-style:none;}
.tb-list li{display:flex;flex:1 1 auto;align-items:flex-start;gap:7px;
  font-size:12px;line-height:1.45;color:var(--sp-tx-body);padding:2px 0;}
.tb-list li::before{content:'';flex:none;width:5px;height:5px;border-radius:50%;
  background:var(--sp-navy);margin-top:6px;}
.tb-note{font-size:11.5px;color:#5A6B82;line-height:1.5;}
@media (max-width:900px){ .vd-wrap{flex-direction:column;} }
.sc-foot{display:flex;align-items:center;gap:10px;padding:9px 20px;background:#F4F7FB;
  border-top:1px solid #DCE4EE;font-size:11px;font-weight:400;color:#5A6B82;
  letter-spacing:.03em;}
@media (max-width:900px){
  .sc-head{flex-wrap:wrap;}
  .mx-hint{display:none;}
  .mx-best-col{width:62px;}
}
.yoy-wrap h4{color:var(--navy2);}
.outcomes-wrap{margin-top:20px;}
.outcomes-wrap h4{font-size:12px;text-transform:uppercase;letter-spacing:.5px;color:var(--navy);margin-bottom:8px;font-weight:700;}
.outcomes-wrap textarea{width:100%;padding:10px;border:1px solid #dee3ea;border-radius:6px;font-family:inherit;font-size:13px;resize:vertical;}
.outcomes-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-bottom:10px;}
.outcomes-metrics label{font-size:11px;color:var(--muted);font-weight:600;display:flex;flex-direction:column;gap:4px;}
.outcomes-metrics input{padding:6px 8px;border:1px solid #dee3ea;border-radius:6px;font-size:13px;font-family:inherit;}
.outcomes-metrics-readonly{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:8px;}
.outcomes-actions{display:flex;align-items:center;gap:10px;margin-top:8px;}
.outcomes-actions button{padding:7px 14px;border-radius:6px;border:none;background:var(--navy);color:#fff;font-size:12.5px;font-weight:700;cursor:pointer;}
.outcomes-actions button:hover{background:var(--navy2);}
#outcomes-status{font-size:11.5px;color:var(--muted);}
.footer{text-align:center;font-size:11.5px;color:var(--muted);padding:16px 0 4px;}
@media(max-width:1100px){.chart-row{grid-template-columns:1fr;}}
@media(max-width:700px){
  .filters{flex-direction:column;align-items:stretch;}
  .filters input[type=text], .filters select{width:100%;min-width:0;}
  .table-section-head{flex-direction:column;align-items:stretch;}
  .table-section-head > div{flex-direction:column;}
  #event-table thead{display:none;}
  #event-table, #event-table tbody, #event-table tr, #event-table td{display:block;width:100%;}
  #event-table tr{border:1px solid #eef1f5;border-radius:8px;margin-bottom:10px;padding:8px 10px;cursor:pointer;}
  #event-table td{border-bottom:none;padding:4px 0;white-space:normal;}
  #event-table td::before{content:attr(data-label);font-weight:700;color:var(--muted);font-size:10px;text-transform:uppercase;display:block;}
  .outcomes-metrics{grid-template-columns:1fr;}
}
@media print{
  .table-controls, .year-tabs, .tier-tabs, .filters, .export-btn{ display:none !important; }
  body{background:#fff;}
  .container{max-width:100%;padding:0;}
  .kpi-card, .chart-container, .table-section, .detail-panel{box-shadow:none;border:1px solid #ddd;}
}

/* ---------- view toggle ---------- */
.view-toggle{display:inline-flex;background:#e8edf4;border-radius:9px;padding:4px;gap:4px;margin-bottom:var(--gap);}
.view-toggle button{padding:8px 26px;border:none;border-radius:6px;background:transparent;color:var(--muted);font-size:13.5px;font-weight:700;font-family:inherit;cursor:pointer;transition:background .15s,color .15s;}
.view-toggle button:hover{color:var(--navy);}
.view-toggle button.active{background:var(--navy);color:#fff;}

/* ---------- top widgets ---------- */
.widget-row{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--gap);margin-bottom:var(--gap);}
@media (max-width:1000px){.widget-row{grid-template-columns:1fr;}}
.widget{background:var(--card);border-radius:var(--radius);padding:16px 18px;box-shadow:0 1px 3px rgba(0,0,0,.08);display:flex;flex-direction:column;}
.widget-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px;}
.widget-head h3{font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;display:flex;align-items:center;gap:7px;}
.widget-sel{padding:5px 8px;border-radius:6px;border:1px solid #d5dce6;background:#fff;color:var(--text);font-size:11.5px;font-family:inherit;cursor:pointer;max-width:150px;}
.w-hero{display:block;width:100%;text-align:left;background:none;border:none;padding:0 0 12px;cursor:pointer;font-family:inherit;}
.widget-total-label{font-size:11.5px;color:var(--muted);}
.wb-item{display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;border:1px solid transparent;border-radius:8px;background:none;cursor:pointer;font-family:inherit;transition:background .15s,border-color .15s;}
.wb-item:hover{background:#f4f7fb;border-color:#dde5ef;}
.wb-item .ic{width:17px;height:17px;}
.wb-item.t-booth .ic{color:var(--green);}
.wb-item.t-attend .ic{color:var(--yellow);}
.wb-item.t-track .ic{color:var(--blue);}
/* Sits inline directly under the Next Booth Shows strip rather than floating.
   Hover fills it as a preview; click pins it until dismissed. */
.wpop{background:var(--card);border:1px solid #dbe3ee;border-radius:var(--radius);
  box-shadow:0 1px 3px rgba(0,0,0,.08);margin-bottom:var(--gap);overflow:hidden;}
.wpop[hidden]{display:none;}
.wpop.preview{border-style:dashed;border-color:#c3d2e4;}
.wpop-head{display:flex;align-items:center;gap:9px;padding:13px 18px 9px;font-size:11px;
  font-weight:800;text-transform:uppercase;letter-spacing:.4px;color:var(--navy);}
.wpop-head .cnt{background:var(--navy);color:#fff;border-radius:20px;padding:2px 9px;font-size:10.5px;}
.wpop-hint{font-size:10px;font-weight:700;color:var(--muted);text-transform:none;letter-spacing:0;opacity:.85;}
.wpop-x{margin-left:auto;background:none;border:none;font-size:18px;line-height:1;color:var(--muted);
  cursor:pointer;padding:0 2px;font-family:inherit;}
.wpop-x:hover{color:var(--navy);}
.wpop-list{list-style:none;display:flex;gap:10px;overflow-x:auto;padding:0 18px 15px;margin:0;}
.wpop-item{flex:0 0 auto;width:250px;border:1px solid #e2e8f0;border-left:3px solid var(--cyan);
  border-radius:8px;padding:10px 12px;cursor:pointer;background:#fff;
  transition:border-color .15s,box-shadow .15s;}
.wpop-item:hover{border-color:var(--navy);border-left-color:var(--cyan);box-shadow:0 2px 8px rgba(0,48,116,.12);}
.wpop-name{font-size:12.5px;font-weight:700;color:var(--navy);line-height:1.3;}
.wpop-meta{font-size:11.5px;color:var(--muted);margin-top:3px;line-height:1.45;}
.wpop-days{font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:.3px;color:var(--green);margin-top:5px;}
.wpop-days.soon{color:var(--red);}
.wpop-att{font-size:11px;color:var(--muted);margin-top:5px;line-height:1.4;
  padding-top:5px;border-top:1px solid #f1f4f8;}
.wpop-att strong{color:var(--text);font-weight:700;}
.wpop-empty{padding:4px 18px 16px;font-size:12.5px;color:var(--muted);font-style:italic;}

/* ---------- nearest booth shows ---------- */
.booth-strip{background:var(--card);border-radius:var(--radius);padding:14px 18px;box-shadow:0 1px 3px rgba(0,0,0,.08);margin-bottom:var(--gap);}
.booth-strip h3{font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:10px;display:flex;align-items:center;gap:7px;}
.booth-cards{display:flex;gap:10px;overflow-x:auto;padding-bottom:4px;}
.booth-card{flex:0 0 auto;width:288px;border:1px solid #e2e8f0;border-left:3px solid var(--green);
  border-radius:8px;padding:0;overflow:hidden;cursor:pointer;background:#fff;text-align:left;
  font-family:inherit;display:block;transition:border-color .15s,box-shadow .15s;}
/* 288 x 133 is ~2.17:1, matching the source crop so nothing is thrown away. */
.bc-img{display:block;height:133px;background:#eef2f7;overflow:hidden;}
.bc-img img{width:100%;height:100%;object-fit:cover;display:block;}
.bc-name, .bc-meta{display:block;}
.booth-card:hover{border-color:var(--navy);border-left-color:var(--green);box-shadow:0 2px 8px rgba(0,0,0,.08);}
.booth-card.sel{border-color:var(--navy);background:#f7f9fc;}
.bc-name{font-size:13.5px;font-weight:700;color:var(--navy);margin-bottom:3px;line-height:1.3;}
.bc-meta{font-size:11.5px;color:var(--muted);line-height:1.45;}
.booth-empty{font-size:12.5px;color:var(--muted);font-style:italic;}

/* ---------- 67 / 33 split ---------- */
/* Full width until an event is picked, then 67/33.
   min-width:0 is load-bearing: grid items default to min-width:auto, so a
   wide table refuses to shrink below its intrinsic width, overflows its
   track and pushes the side panel out of the layout entirely. */
.split{display:grid;grid-template-columns:1fr;gap:var(--gap);align-items:start;}
.split > *{min-width:0;}
/* C-001: TWO independent states here, and conflating them is exactly how this
   broke before.
     .has-panel  the panel is open in EITHER mode. Its only job is to un-hide
                 .split-side. #detail-panel is a child of that aside, so if the
                 aside stays display:none the fixed overlay never renders at
                 all — display:none on an ancestor kills the subtree no matter
                 how the descendant is positioned.
     .has-dock   the panel is docked. THIS is what earns the 2fr/1fr reflow.
   The old .has-detail was both at once, so every open narrowed the table to
   two-thirds behind a scrim for nothing.
   The docked column is sized to the viewport and pins under the utility bar
   (see .split.has-dock .split-side), so its top is always on screen. */
.split-side{display:none;}
.split.has-panel .split-side{display:block;}
/* Open-but-not-docked: rendered, but taken out of grid flow so it contributes
   neither a track nor a gap. absolute is safe for the fixed child — only
   transform/filter/contain create a containing block for position:fixed. */
.split.has-panel:not(.has-dock) .split-side{position:absolute;width:0;height:0;overflow:visible;}
.split.has-dock{grid-template-columns:2fr 1fr;}
 /* Pinned below the utility bar so the panel's top is never scrolled out of
    view, and sized to the viewport rather than to the table — the panel now
    scrolls its own content instead of running off the bottom of the page.
    Supersedes the --dp-dock-h table-height cap. */
/* Above the sticky quarter bars (z-index 5). A sticky td with a z-index makes
   its own stacking context and would otherwise paint over the panel. */
.split.has-dock .split-side{z-index:6;position:sticky;top:var(--sp-util-h,46px);
  height:calc(100vh - var(--sp-util-h,46px) - 14px);
  /* Measured from Amanda's 31 Jul screenshot: the panel's navy began at y=42
     (directly under the 42px utility bar) and the page bottom was y=1250, so
     the visible run was 1208px. Expressed against the viewport rather than
     frozen at 1208px so it holds on any window; ~1194px at that screenshot's
     height. The floor stops a short table collapsing the panel. */
  min-height:600px;
  max-height:none;overflow:visible;min-width:0;}
@media (max-width:1180px){
  .split.has-dock{grid-template-columns:1fr;}
  .split.has-dock .split-side{position:static;max-height:none;}
}
.dp-close{margin-left:auto;background:rgba(255,255,255,.14);border:none;color:#fff;width:26px;height:26px;border-radius:6px;font-size:16px;line-height:1;cursor:pointer;flex-shrink:0;font-family:inherit;}
.dp-close:hover{background:rgba(255,255,255,.26);}
.dp-titlerow{display:flex;align-items:flex-start;gap:10px;margin-bottom:8px;}
.dp-titlerow .dp-title{margin-bottom:0;flex:1;min-width:0;}

/* ---------- navy detail panel ---------- */
.detail-panel{background:linear-gradient(160deg,var(--navy2),var(--navy));color:#fff;border-radius:var(--radius);padding:0;box-shadow:0 2px 10px rgba(0,0,0,.16);margin-bottom:var(--gap);display:none;}
.detail-panel.active{display:block;}
.dp-head{padding:18px 20px 16px;border-bottom:1px solid rgba(255,255,255,.14);}
.dp-title{font-size:17px;font-weight:800;line-height:1.25;margin-bottom:8px;}
.dp-badges{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px;}
.dp-badge{padding:3px 9px;border-radius:20px;font-size:10.5px;font-weight:800;background:rgba(255,255,255,.16);color:#fff;letter-spacing:.3px;}
.dp-badge.tier-Booth{background:rgba(30,123,69,.5);}
.dp-badge.tier-JustAttend{background:rgba(176,141,87,.55);}
.dp-badge.tier-JustTracking{background:rgba(46,95,163,.6);}
.dp-facts{display:flex;flex-direction:column;gap:7px;}
.dp-fact{display:flex;gap:9px;align-items:flex-start;font-size:12.5px;line-height:1.45;color:#dce7f5;}
.dp-fact .ic{flex-shrink:0;margin-top:1px;color:var(--cyan);}
.dp-fact strong{color:#fff;font-weight:700;}
.dp-taskbar{display:flex;gap:5px;flex-wrap:wrap;padding:12px 20px 0;}
/* Runway chips — only ever rendered on tasks that carry a Start Date, so the
   great majority of rows are untouched. Gold reads "act now" against the
   urgency scale; slate reads "parked", deliberately quiet. */
.tk-run{display:inline-block;margin-left:7px;padding:1px 6px;border-radius:4px;
  font-size:9px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;
  background:rgba(169,130,27,.28);color:#F0CE72;white-space:nowrap;vertical-align:middle;}
.tk-run.tk-wait{background:rgba(143,166,194,.2);color:var(--sp-slate-lt);}
.tk-startline{font-size:10px;color:#9db4d0;letter-spacing:.02em;margin-top:2px;
  font-variant-numeric:tabular-nums;}
/* Warehouse identifiers on booth items, and the vendor status chip. Both are
   secondary information — quiet by default, never competing with the name. */
.bm-pn{display:inline-block;margin-left:8px;font-size:10px;color:#7b8ca3;
  letter-spacing:.04em;font-variant-numeric:tabular-nums;white-space:nowrap;}

/* collapsible sections */
.dsec{border-bottom:1px solid rgba(255,255,255,.11);}
.dsec summary{list-style:none;cursor:pointer;padding:12px 20px;display:flex;align-items:center;gap:9px;font-size:11.5px;font-weight:800;text-transform:uppercase;letter-spacing:.5px;color:#fff;}
.dsec summary::-webkit-details-marker{display:none;}
.dsec summary:hover{background:rgba(255,255,255,.06);}
.dsec summary .ic{color:var(--cyan);flex-shrink:0;}
.dsec summary > span:first-of-type{flex:1;min-width:0;}
.dsec-chev{font-size:11px;color:rgba(255,255,255,.6);transition:transform .18s;}
.dsec[open] .dsec-chev{transform:rotate(180deg);}
.dsec-body{padding:0 20px 15px;font-size:12.5px;line-height:1.6;color:#dce7f5;}
.dsec-body strong{color:#fff;}
.dsec-body em{color:#b9cde6;}
.dsec-body a{color:var(--cyan);}
.dsec-body table{width:100%;border-collapse:collapse;margin-top:8px;font-size:12px;}
.dsec-body td{padding:5px 0;border-top:1px solid rgba(255,255,255,.12);color:#dce7f5;}
.dsec-body td:last-child{text-align:right;font-weight:700;color:#fff;font-variant-numeric:tabular-nums;}
.dsec-body ul{margin:0 0 0 16px;}
.dsec-body li{margin-bottom:5px;}
.ic{width:15px;height:15px;display:inline-block;vertical-align:middle;}

/* panel-scoped overrides so the light-theme sub-widgets read on navy */
.detail-panel .attendee-table thead th{color:#a9c0da;border-bottom-color:rgba(255,255,255,.2);}
.detail-panel .attendee-table tbody td{border-bottom-color:rgba(255,255,255,.1);color:#dce7f5;}
.detail-panel .attendee-empty{color:#a9c0da;}
.detail-panel .attendee-form input,.detail-panel .attendee-status-sel{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.22);color:#fff;}
.detail-panel .attendee-form input::placeholder{color:#94accb;}
.detail-panel .attendee-status-sel option{background:var(--navy2);color:#fff;}
.detail-panel .interest-box{background:rgba(3,174,230,.14);border-color:rgba(3,174,230,.4);}
.detail-panel .interest-box p{color:#dce7f5;}
.detail-panel .interest-btn{background:var(--cyan);color:#00243f;}
.detail-panel .interest-done{color:#6ee7a8;}
/* multi-select directory */
.dir-picker{flex:1 1 100%;border:1px solid rgba(255,255,255,.22);border-radius:8px;overflow:hidden;background:rgba(255,255,255,.06);}
.dir-bar{display:flex;gap:8px;padding:8px;border-bottom:1px solid rgba(255,255,255,.14);}
.dir-filter{flex:1;min-width:0;padding:6px 9px;border:1px solid rgba(255,255,255,.22);border-radius:6px;
  background:rgba(255,255,255,.1);color:#fff;font-size:12px;font-family:inherit;}
.dir-filter::placeholder{color:#94accb;}
.dir-add{padding:6px 12px;border:none;border-radius:6px;background:var(--cyan);color:#00243f;
  font-size:12px;font-weight:700;font-family:inherit;cursor:pointer;white-space:nowrap;}
.dir-add:disabled{background:rgba(255,255,255,.16);color:#94accb;cursor:default;}
.dir-list{max-height:190px;overflow-y:auto;overscroll-behavior:contain;padding:4px;}
.dir-item{display:flex;align-items:center;gap:9px;padding:6px 8px;border-radius:6px;cursor:pointer;font-size:12.5px;}
.dir-item:hover{background:rgba(255,255,255,.08);}
.dir-item input{width:15px;height:15px;accent-color:var(--cyan);cursor:pointer;flex-shrink:0;}
/* hotels table */
.hotel-scroll{overflow-x:auto;overscroll-behavior-x:contain;}
/* One row per person, in BOTH panel modes. These were stacked into labelled
   rows when the docked panel was only ~300px wide; merging the panel to a
   single column gave back the 236px the rail was using, so the real table fits
   and the stacked form is retired. Widths below are what keep it on one line
   without a horizontal scrollbar. */
.detail-panel .hotel-scroll,
.detail-panel .attendee-scroll{overflow-x:visible;}
.detail-panel .hotel-table,
.detail-panel .attendee-table{min-width:0;width:100%;table-layout:fixed;}
.detail-panel .hotel-table td,
.detail-panel .attendee-table td{vertical-align:middle;}
/* Name is the only column allowed to wrap; it takes the slack. */
.detail-panel .attendee-table th:nth-child(1),
.detail-panel .attendee-table td:nth-child(1),
.detail-panel .hotel-table th:nth-child(1),
.detail-panel .hotel-table td:nth-child(1){white-space:normal;width:auto;}
.detail-panel .attendee-table th:nth-child(2),
.detail-panel .attendee-table td:nth-child(2){width:112px;}
.detail-panel .attendee-table th:nth-child(3),
.detail-panel .attendee-table td:nth-child(3){width:78px;}
/* Status select + the two icon buttons, kept together on the one line. */
.detail-panel .attendee-table th:nth-child(4),
.detail-panel .attendee-table td:nth-child(4){width:172px;}
.detail-panel .attendee-table td:nth-child(4){white-space:nowrap;
  display:table-cell;text-align:right;}
.detail-panel .attendee-status-sel{max-width:104px;}
.detail-panel .att-mail,
.detail-panel .attendee-remove{padding:0 4px;font-size:13px;vertical-align:middle;}
.detail-panel .hotel-table th:nth-child(2),
.detail-panel .hotel-table td:nth-child(2){width:38%;}
.detail-panel .hotel-table th:nth-child(3),
.detail-panel .hotel-table td:nth-child(3){width:124px;}
.detail-panel .hotel-input{min-width:0;width:100%;}
.detail-panel .hotel-sel{width:100%;max-width:120px;}
/* Labels are only needed when the cells stack; they never do now. */
.detail-panel .hotel-table td[data-label]::before,
.detail-panel .attendee-table td[data-label]::before{content:none;}
.hotel-table{width:100%;border-collapse:collapse;font-size:12.5px;min-width:330px;}
.hotel-table thead th{text-align:left;padding:7px 10px;font-size:10.5px;text-transform:uppercase;
  letter-spacing:.4px;color:#a9c0da;border-bottom:2px solid rgba(255,255,255,.2);white-space:nowrap;}
.hotel-table tbody td{padding:7px 10px;border-bottom:1px solid rgba(255,255,255,.1);color:#dce7f5;vertical-align:top;}
.hotel-input{width:100%;min-width:130px;padding:5px 7px;border:1px solid rgba(255,255,255,.22);border-radius:5px;
  background:rgba(255,255,255,.1);color:#fff;font-size:12px;font-family:inherit;}
.hotel-input::placeholder{color:#94accb;}
.hotel-sel{padding:4px 6px;border:1px solid rgba(255,255,255,.22);border-radius:5px;
  background:rgba(255,255,255,.1);color:#fff;font-size:11.5px;font-family:inherit;cursor:pointer;}
.hotel-sel option{background:var(--navy2);color:#fff;}
/* readiness summary */
.rd-wrap{padding:14px 20px;border-bottom:1px solid rgba(255,255,255,.14);}
.rd-top{display:flex;align-items:center;gap:12px;margin-bottom:10px;}
.rd-pct{font-size:26px;font-weight:800;color:#fff;line-height:1;font-variant-numeric:tabular-nums;}
.rd-lbl{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#a9c0da;}
.rd-bar{flex:1;height:7px;border-radius:5px;background:rgba(255,255,255,.16);overflow:hidden;min-width:60px;}
.rd-bar span{display:block;height:100%;background:var(--cyan);transition:width .3s;}
.rd-bar span.low{background:#e0864f;}
.rd-bar span.high{background:#5ec98a;}
.rd-list{list-style:none;margin:0;padding:0;}
.rd-item{display:flex;gap:8px;align-items:flex-start;font-size:12px;line-height:1.45;
  color:#dce7f5;padding:3px 0;}
.rd-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0;margin-top:6px;background:var(--cyan);}
.rd-item.warn .rd-dot{background:#e8a33d;}
.rd-item.bad .rd-dot{background:#e06a6a;}
.rd-item.good .rd-dot{background:#5ec98a;}
/* checklists */
.ck-grid{display:flex;flex-direction:column;gap:1px;}
.ck-row{display:flex;gap:10px;align-items:baseline;padding:5px 0;border-top:1px solid rgba(255,255,255,.09);}
.ck-row:first-child{border-top:none;}
.ck-lbl{font-size:11.5px;font-weight:600;color:#a9c0da;flex:0 0 42%;min-width:0;}
.ck-val{font-size:12px;color:#fff;flex:1;min-width:0;word-break:break-word;}
.ck-val.empty{color:#7e97b5;font-style:italic;}
.dsec-link{color:var(--cyan);font-size:13px;font-weight:600;text-decoration:none;}
.dsec-link:hover{text-decoration:underline;}
.td-grid{display:grid;grid-template-columns:1.25fr 1fr;gap:var(--gap);align-items:start;}
@media (max-width:900px){.td-grid{grid-template-columns:1fr;}}
.td-col{background:var(--card);border-radius:var(--radius);box-shadow:0 1px 3px rgba(0,0,0,.08);
  padding:18px 20px;}
.td-h{font-size:15px;font-weight:800;color:var(--navy);letter-spacing:-.2px;}
.td-sub{font-size:11.5px;color:var(--muted);margin:4px 0 14px;line-height:1.6;}
.td-sel{font-family:inherit;font-size:11.5px;font-weight:700;color:var(--navy);
  border:1px solid #d5dce6;border-radius:5px;padding:1px 5px;background:#fff;cursor:pointer;}
.td-lbl{font-size:9.5px;font-weight:800;text-transform:uppercase;letter-spacing:.5px;
  color:var(--muted);margin:14px 0 7px;}
.td-lbl:first-child{margin-top:0;}
.td-lbl.over{color:var(--red);}
.td-task,.td-show{display:block;width:100%;text-align:left;background:#fbfcfe;border:1px solid #e8edf3;
  border-left:3px solid var(--cyan);border-radius:8px;padding:10px 13px;margin-bottom:7px;
  cursor:pointer;font-family:inherit;transition:transform .14s,box-shadow .14s,border-color .14s;}
.td-task:hover,.td-show:hover{transform:translateX(2px);box-shadow:0 2px 8px rgba(0,48,116,.09);
  border-color:#cfdae7;border-left-color:var(--navy);}
.td-task.over{border-left-color:var(--red);background:var(--red-bg);}
.td-when{font-size:9.5px;font-weight:800;text-transform:uppercase;letter-spacing:.45px;
  color:var(--muted);}
.td-task.over .td-when{color:var(--red);}
.td-task-n{font-size:12.5px;font-weight:700;color:var(--navy);margin-top:3px;line-height:1.35;}
.td-task-e{font-size:11px;color:var(--muted);margin-top:3px;}
.td-show{border-left-color:var(--navy);}
.td-days{font-size:9.5px;font-weight:800;text-transform:uppercase;letter-spacing:.45px;color:var(--cyan);}
.td-show-n{font-size:13px;font-weight:800;color:var(--navy);margin-top:3px;line-height:1.3;}
.td-show-m{font-size:11px;color:var(--muted);margin-top:3px;}
.td-bar{height:4px;background:#e8edf3;border-radius:3px;margin-top:9px;overflow:hidden;}
.td-bar-f{height:100%;border-radius:3px;transition:width .5s ease;}
.td-bar-f.hi{background:var(--green);} .td-bar-f.mid{background:var(--yellow);}
.td-bar-f.lo{background:var(--red);}
.td-pct{font-size:10px;font-weight:700;color:var(--muted);margin-top:4px;}
.td-empty{font-size:12px;color:var(--muted);line-height:1.65;background:#fbfcfe;
  border:1px dashed #dbe3ec;border-radius:8px;padding:16px 18px;}
/* ---------- mobile ----------
   The itinerary is the one screen people actually open standing in a
   convention hall, so it collapses to stacked cards rather than tables. */
@media (max-width:720px){
  body{font-size:14px;}
  .view-toggle{overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;}
  .view-toggle::-webkit-scrollbar{display:none;}
  .view-toggle button{white-space:nowrap;flex-shrink:0;}
  .role-note{display:none;}

  /* itinerary: tables become cards */
  .it-tbl thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);}
  .it-tbl,.it-tbl tbody,.it-tbl tr,.it-tbl td{display:block;width:100%;}
  .it-tbl tr{background:#fbfcfe;border:1px solid #e8edf3;border-left:3px solid var(--cyan);
    border-radius:9px;padding:11px 13px;margin-bottom:9px;}
  .it-tbl td{border:none;padding:2px 0;display:flex;gap:9px;align-items:baseline;}
  .it-tbl td::before{content:attr(data-label);flex:0 0 84px;font-size:9.5px;font-weight:800;
    text-transform:uppercase;letter-spacing:.4px;color:var(--muted);}
  .it-tbl td:first-child{font-size:14px;font-weight:800;color:var(--navy);
    padding-bottom:5px;margin-bottom:4px;border-bottom:1px solid #eef1f5;}
  .it-tbl td:first-child::before{display:none;}
  .it-kv{grid-template-columns:1fr;gap:2px;}
  .it-k{font-size:9.5px;text-transform:uppercase;letter-spacing:.4px;padding-top:7px;}
  .it-v{padding-bottom:5px;border-bottom:1px solid #f1f4f8;}
  .it-doc{padding:16px 15px;}
  .it-day{scroll-margin-top:60px;}

  /* EWA tab: tables become cards, exactly as the itinerary's do. A four-column
     table and a six-column one both squash to nothing at 390px. */
  .ewa-tbl thead{display:none;}
  .ewa-tbl,.ewa-tbl tbody,.ewa-tbl tr,.ewa-tbl td{display:block;width:100%;}
  /* ⚠ A FLEX ITEM WILL NOT SHRINK BELOW ITS CONTENT unless it is told to. One
     buyer's description is 100 characters and it drove the page to 701px wide
     inside a 390px window. */
  .ewa-tbl td > *{min-width:0;overflow-wrap:anywhere;}
  .ewa-tbl td{flex-wrap:wrap;}
  .ewa-tbl tr{background:#fbfcfe;border:1px solid #e8edf3;border-left:3px solid var(--sp-slate-lt);
    border-radius:9px;padding:11px 13px;margin-bottom:9px;}
  .ewa-tbl tr.ewa-nogo{border-left-color:var(--sp-crimson);}
  .ewa-tbl tr.ewa-nogo td:first-child{border-left:none;padding-left:0;}
  .ewa-tbl td{border:none;padding:2px 0;display:flex;gap:9px;align-items:baseline;}
  .ewa-tbl td::before{content:attr(data-label);flex:0 0 78px;font-size:9.5px;font-weight:800;
    text-transform:uppercase;letter-spacing:.4px;color:var(--muted);}
  .ewa-tbl td:first-child{font-size:14px;font-weight:800;color:var(--navy);
    padding-bottom:5px;margin-bottom:4px;border-bottom:1px solid #eef1f5;}
  .ewa-tbl td:first-child::before{display:none;}

  /* everything else: let wide tables scroll rather than squash */
  .table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}
  .td-grid{gap:12px;}
  .td-col{padding:15px 16px;}
  .emp-grid,.mem-grid{grid-template-columns:1fr;}
  .dpt-btn{font-size:10px;padding:7px 8px;}
  .dpt-btn svg{display:none;}
}

/* ---------- craft ----------
   Empty states should teach rather than announce nothing. Transitions are
   short enough to feel responsive, not decorative. */
.empty-state{background:#fbfcfe;border:1px dashed #dbe3ec;border-radius:10px;
  padding:22px 24px;text-align:left;}
.empty-state h4{font-size:13px;font-weight:800;color:var(--navy);margin:0 0 6px;}
.empty-state p{font-size:12px;color:var(--muted);line-height:1.65;margin:0 0 4px;max-width:520px;}
.empty-state code{background:#eef2f7;border-radius:4px;padding:1px 5px;font-size:11px;
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--navy);}
.view-toggle button{transition:background .18s,color .18s;}
.widget,.chart-container,.table-section{transition:box-shadow .2s;}
/* vendor phone hint on the expense rows — kept from the old vendor styles */
.ven-tip{border-bottom:1px dotted var(--muted);cursor:help;}

/* ---------- MarketOps design language ----------
   Tokens from the MarketOps handoff: navy #0A1F3C, teal #0E7490 / #22D3EE,
   surfaces #F6F8FB / #FBFCFE, borders #E4EAF2 / #E2E8F0, mono labels in
   Biryani with wide tracking \u2014 the brand face rather than the handoff's
   Instrument Sans / IBM Plex Mono. Scoped to .mo so it can't leak into the
   older tabs until they're migrated too. */
.mo{color:#0F172A;display:flex;flex-direction:column;gap:18px;}
.mo-head{display:flex;justify-content:space-between;align-items:flex-start;gap:18px;flex-wrap:wrap;}
.mo-h1{font-size:23px;font-weight:600;letter-spacing:-.015em;margin:0;color:#0F172A;}

.mo-search{width:100%;max-width:420px;padding:9px 13px;border:1px solid #E2E8F0;border-radius:9px;
  font-family:inherit;font-size:13px;background:#fff;color:#0F172A;transition:border-color .15s,box-shadow .15s;}
.mo-search:focus{outline:none;border-color:#0E7490;box-shadow:0 0 0 3px rgba(14,116,144,.11);}
.mo-search::placeholder{color:#94A3B8;}
.mo-card{background:#fff;border:1px solid #E4EAF2;border-radius:14px;
  box-shadow:0 1px 2px rgba(15,23,42,.04);overflow:hidden;}
.mo-tbl{width:100%;}
.mo-tr{display:grid;grid-template-columns:1.5fr 1.2fr .9fr 1.1fr .55fr .7fr .7fr;
  gap:12px;padding:11px 18px;align-items:center;border-bottom:1px solid #F1F5F9;
  cursor:pointer;transition:background .13s;font-size:13px;}
.mo-tr:last-child{border-bottom:none;}
.mo-tr:hover{background:#FBFCFE;}
.mo-tr.on{background:#F7FBFD;box-shadow:inset 3px 0 0 #0E7490;}
.mo-th{font-weight:700;font-size:9.5px;letter-spacing:.1em;
  text-transform:uppercase;color:#94A3B8;background:#FBFCFE;cursor:default;
  border-bottom:1px solid #E4EAF2;}
.mo-th:hover{background:#FBFCFE;}
.mo-tr .nm{font-weight:600;color:#0F172A;}
.mo-tr .mut{color:#64748B;}
.mo-tr .num{text-align:right;}
.mo-tr .mono{font-variant-numeric:tabular-nums;font-size:12px;}
.mo-tr .strong{font-weight:600;color:#0F172A;}
/* §8.4: a missing phone reads "Not on file" in italic grey, never blank. */
.mo-tr .none{color:#A3B0C2;font-style:italic;}
.mo-panels{display:grid;grid-template-columns:1fr 1.15fr 1fr;gap:14px;align-items:start;}
.mo-p{padding:18px 20px;}
.mo-pl{font-weight:700;font-size:9.5px;letter-spacing:.11em;
  text-transform:uppercase;color:#94A3B8;margin-bottom:9px;}
.mo-pn{font-size:16px;font-weight:600;line-height:1.3;color:#0F172A;}
.mo-pm{font-size:12.5px;color:#64748B;margin-top:4px;line-height:1.55;}
.mo-pm.none,.mo-fv.none{color:#94A3B8;font-style:italic;}
.mo-big{font-variant-numeric:tabular-nums;font-size:26px;font-weight:600;letter-spacing:-.02em;color:#0F172A;
  }
.mo-fields{margin-top:14px;padding-top:13px;border-top:1px solid #F1F5F9;
  display:flex;flex-direction:column;gap:10px;}
.mo-fl{font-weight:700;font-size:9px;letter-spacing:.1em;
  text-transform:uppercase;color:#94A3B8;}
.mo-fv{font-size:13px;color:#0F172A;margin-top:2px;word-break:break-word;}
.mo-fv a{color:#0E7490;}
.mo-fv a:hover{color:#155E75;text-decoration:underline;}
.mo-bars{margin-top:15px;padding-top:13px;border-top:1px solid #F1F5F9;
  display:flex;flex-direction:column;gap:9px;}
.mo-bar{display:grid;grid-template-columns:1fr 76px auto;gap:10px;align-items:center;}
.mo-bl{font-size:12px;color:#475569;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mo-bt{height:6px;border-radius:999px;background:#EEF2F7;overflow:hidden;}
.mo-bf{height:100%;border-radius:999px;background:#0E7490;transition:width .45s ease;}
.mo-bv{font-variant-numeric:tabular-nums;font-size:11.5px;color:#0F172A;font-weight:600;}
.mo-evs{margin-top:13px;padding-top:12px;border-top:1px solid #F1F5F9;
  display:flex;flex-direction:column;gap:6px;}
.mo-ev{display:flex;justify-content:space-between;gap:12px;font-size:12.5px;color:#475569;}
.mo-ev .mono{font-variant-numeric:tabular-nums;font-size:11.5px;color:#0F172A;}
.mo-notes{font-size:12.5px;color:#33415A;line-height:1.65;white-space:pre-line;
  max-height:280px;overflow-y:auto;}
.mo-empty{padding:26px 20px;font-size:13px;color:#64748B;line-height:1.65;}
.mo-empty h4{font-size:14.5px;font-weight:600;color:#0F172A;margin:0 0 7px;}
.mo-empty p{margin:0 0 6px;max-width:560px;}
.mo-empty code{background:#F1F5F9;border-radius:4px;padding:1px 5px;
  font-size:11.5px;color:#0F172A;font-weight:600;}
@media (max-width:1180px){
  .mo-panels{grid-template-columns:1fr;}
  .mo-tr{grid-template-columns:1.4fr 1fr .8fr .6fr .7fr;font-size:12px;padding:10px 14px;}
  .mo-tr > :nth-child(4),.mo-tr > :nth-child(7){display:none;}
}
/* §7 replaced the flat expense table with a ledger grouped by show, so the
   #expense-table fixed-width column rules that used to live here are gone.
   The grid template on .fgr keeps the columns aligned across every group.
   Below 1000px the columns genuinely do not fit, so the ledger scrolls. */
@media (max-width:1000px){
  .fled{overflow-x:auto;}
  .fgr,.fgh{min-width:840px;}
}
.xe-sel{font-family:inherit;font-size:11px;color:var(--navy);background:transparent;
  border:1px solid transparent;border-radius:5px;padding:3px 5px;cursor:pointer;max-width:150px;
  transition:border-color .16s,background .16s;}
.xe-sel.wide{max-width:190px;}
.xe-sel:hover{border-color:#d5dce6;background:var(--card);}
.xe-sel:focus{outline:none;border-color:var(--cyan);background:var(--card);}
.xe-sel.ok{border-color:var(--green);background:var(--green-bg);}
.xe-sel.bad{border-color:var(--red);background:var(--red-bg);}
.xe-sel:disabled{opacity:.5;}
.lead-box{display:flex;flex-direction:column;gap:6px;}
.lead-box label{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.5px;
  color:#9fb8d4;}
.lead-in{width:130px;padding:7px 10px;border:1px solid rgba(255,255,255,.22);border-radius:7px;
  background:rgba(255,255,255,.07);color:#fff;font-family:inherit;font-size:15px;font-weight:700;
  font-variant-numeric:tabular-nums;transition:border-color .16s,background .16s;}
.lead-in:focus{outline:none;border-color:var(--cyan);background:rgba(255,255,255,.12);}
.lead-in.ok{border-color:var(--green);}
.lead-in.bad{border-color:var(--red);}
.lead-note{font-size:11px;color:#a9c0da;line-height:1.5;}
.lead-files{margin-top:12px;padding-top:11px;border-top:1px solid rgba(255,255,255,.13);}
.lead-files-h{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.5px;
  color:#9fb8d4;margin-bottom:6px;}
/* --- status chips, matching the Airtable single-select values --- */
.st-chip{display:inline-block;font-size:8.5px;font-weight:800;letter-spacing:.07em;
  text-transform:uppercase;padding:4px 9px;border-radius:999px;white-space:nowrap;}
.st-completed{background:#E6F4EC;color:var(--sp-green);}
.st-reserved{background:#E7F5FC;color:#0A6E96;}
.st-depositpaid{background:#E7F5FC;color:#0A6E96;}
.st-planning{background:#FBF3E0;color:var(--sp-gold-tx);}
.st-tracking{background:#EEF2F7;color:var(--sp-tx-mut);}
/* Status is context, not a call to action — keep it flat and low-contrast so
   Days Until stays the only thing shouting in a row. */
#event-table .st-chip{font-size:9px;font-weight:600;letter-spacing:.1em;
  padding:4px 9px;border-radius:5px;}
.st-notstarted{background:#F4F6F9;color:var(--sp-tx-faint);}
#event-table th.num,#event-table td.num{text-align:right;}

/* ================= §7 quarter groups — executive table =================
   Scanning 20–50 rows fast is the whole job here. The rules that follow trade
   dividers for whitespace: one hairline between rows instead of zebra banding,
   a fixed row height so the eye can track down a column without re-anchoring,
   and exactly one loud element per row (Days Until). Everything else is quiet.
   Lane bars, the Upcoming/Complete pill, the repeated column sub-header and
   the month strip were all removed — see the decisions log. */
/* Each quarter bar pins under the filter block and is pushed out by the next
   one — that hand-off is native sticky behaviour, no JS. --sp-qtop is measured
   in syncStickyOffsets() because the filter block wraps to a different height
   depending on window width. */
tr.q-head td{background:var(--sp-navy);color:#fff;padding:15px 18px 13px;
  border:none;vertical-align:baseline;position:sticky;top:var(--sp-qtop,150px);z-index:5;}
/* Quarter reads first and loudest; its summary is cyan and clearly subordinate. */
.q-t{font-size:16px;font-weight:800;letter-spacing:.005em;color:#fff;}
/* Months sit between the quarter and its summary: same cyan family but lighter
   weight, so the reading order is quarter -> span -> counts. */
.q-mo{font-size:11.5px;font-weight:400;letter-spacing:.06em;color:#BFE6F7;
  margin-left:12px;}
.q-m{font-size:10.5px;font-weight:600;letter-spacing:.11em;text-transform:uppercase;
  color:var(--sp-cyan);margin-left:16px;}
.t-chip{display:inline-block;width:74px;text-align:center;font-size:9px;font-weight:700;
  letter-spacing:.09em;padding:5px 0;border-radius:5px;}
.t-chip.lane-booth{background:#E6F4EC;color:var(--sp-green);}
.t-chip.lane-attend{background:#FBF3E0;color:var(--sp-gold-tx);}
.t-chip.lane-track{background:#EEF2F7;color:var(--sp-tx-mut);}
/* Event name is the anchor of the row — largest thing in the body. */
#event-table td.ev-n{font-size:14px;font-weight:600;color:var(--sp-tx);letter-spacing:-.005em;}
/* Days Until: the one figure meant to be read at a glance. Tabular so the
   digits line up down the column, sized above everything else in the row. */
.du{font-size:14.5px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.01em;}
.du-red{color:var(--sp-crimson);}
.du-yellow{color:var(--sp-gold-tx);}
.du-blue{color:var(--sp-navy);}
.du-green{color:var(--sp-green);}
.du-grey,.du-gray{color:var(--sp-tx-faint);}
/* With the panel docked the table loses a third of its width, and eight columns
   at full padding exceed the space — which is what pushed the quarter bars out
   over the panel. Tighten the row and drop Total Spend, which is redundant while
   the panel is open: it shows SPEND for the selected event already. */
.split.has-dock #event-table tbody tr:not(.q-head) td{padding:12px 10px;}
.split.has-dock #event-table thead th{padding:10px 10px;}
.split.has-dock tr.q-head td{padding:13px 12px 11px;}
.split.has-dock #event-table td.ev-n{font-size:13px;}
.split.has-dock #event-table th[data-f="estCost"],
.split.has-dock #event-table td[data-label="Total Spend"]{display:none;}
/* One hairline, no zebra. Banding fights the whitespace and adds no signal
   once the row height is constant. */
#event-table tbody tr:not(.q-head) td{padding:15px 18px;border-bottom:1px solid var(--sp-bd-lt);
  background:#fff;vertical-align:middle;height:56px;box-sizing:border-box;}
#event-table tbody tr:not(.q-head):last-child td{border-bottom:none;}
#event-table tbody tr:not(.q-head):hover td{background:#F7FAFD;}
#event-table thead th{padding:11px 18px;font-size:9.5px;font-weight:700;
  letter-spacing:.13em;text-transform:uppercase;}
#event-table td[data-label="Dates"],#event-table td[data-label="Location"],
#event-table td[data-label="Focus"]{color:var(--sp-tx-body);font-size:12.5px;}
.mono-c{font-variant-numeric:tabular-nums;}
#event-table td.num{text-align:right;}
#event-table td[data-label="Total Spend"]{font-size:12.5px;color:var(--sp-tx);font-weight:600;}

/* ================= §8 two-column workspace ================= */
/* Single column. The left rail was removed — it repeated the event name, the
   tier/status chips, the dates and the countdown that the header already
   carried, and it cost 236px of width, which is what forced sideways scrolling
   in the docked panel. Its three figures became .dp-stats and its four buttons
   moved into the header. */
.dp-cols{display:block;min-height:100%;}
/* Readiness / Spend / Countdown as one strip. Wraps, never scrolls. */
.dp-stats{display:flex;flex-wrap:wrap;gap:10px;margin-top:16px;}
.dp-stat{flex:1 1 130px;min-width:0;background:rgba(255,255,255,.07);
  border-radius:9px;padding:10px 12px;}
.dp-stat-l{font-size:8.5px;font-weight:700;letter-spacing:.13em;text-transform:uppercase;
  color:#7E9BC0;}
.dp-stat-v{font-size:19px;font-weight:800;color:#fff;line-height:1.15;margin-top:3px;
  font-variant-numeric:tabular-nums;}
.dp-r-track{height:5px;background:rgba(255,255,255,.16);border-radius:999px;
  margin-top:8px;overflow:hidden;}
.dp-r-fill{height:100%;background:var(--sp-cyan);border-radius:999px;transition:width .5s ease;}
/* All four actions in one wrapping row under the facts, so they are reachable
   without hunting a separate column. */
.dp-r-acts{margin-top:16px;padding-top:14px;border-top:1px solid rgba(255,255,255,.14);
  display:flex;flex-wrap:wrap;gap:8px;}
.dp-r-acts > *{flex:1 1 150px;min-width:0;text-align:center;}
.dp-r-cta{background:var(--sp-cyan);color:var(--sp-navy);border:none;border-radius:8px;
  padding:10px 12px;font-family:inherit;font-size:12.5px;font-weight:700;cursor:pointer;
  transition:filter .15s;}
.dp-r-cta:hover{filter:brightness(1.08);}
.dp-r-alt{display:block;text-align:center;border:1px solid rgba(255,255,255,.28);
  border-radius:8px;padding:9px 12px;font-size:12.5px;font-weight:700;color:#fff;
  text-decoration:none;transition:background .15s;}
.dp-r-alt:hover{background:rgba(255,255,255,.1);color:#fff;}
/* Print sheet / Add to calendar moved here from a footer strip below the panel,
   so every action for an event sits in one column. */
.dp-r-btn{width:100%;background:none;font-family:inherit;cursor:pointer;}
.dp-main{min-width:0;background:#0B2C55;}
.dpt-pane{background:#0A2749;}
.dpt-bar{background:var(--sp-navy);}
/* One column everywhere now, so docked mode only needs tightening. */
.detail-panel.dp-dock{max-width:100%;}
.detail-panel.dp-dock .dp-head{padding:14px 16px 12px;}
.detail-panel.dp-dock .dp-stat{flex:1 1 100%;}
.detail-panel.dp-dock .dp-r-acts > *{flex:1 1 calc(50% - 4px);}
.detail-panel.dp-dock .dpt-btn{flex:1 1 auto;justify-content:center;padding-left:10px;padding-right:10px;}
/* Tabs wrap rather than scroll — all four labels must be reachable without
   dragging the panel sideways. */
.dpt-bar{background:var(--sp-navy);display:flex;flex-wrap:wrap;}

/* ================= §8 detail panel ================= */
/* C-001 — two open modes, chosen by where the click came from.
   DO NOT collapse these into one rule.

     .dp-dock  Opened from an events-table row. Rides in .split-side, sticky and
               capped to the table section's height. NO SCRIM, so the nav rail
               and the utility bar (search, Cmd-K, Attention) stay reachable
               while you page through shows.
     .dp-full  Opened from anywhere else — hero chip, drill row, attention
               drawer, global search, timeline bar, booth card, Today,
               Memberships. Fixed, full page height, 820px, scrim shown.

   The scrim is right:820px, never inset:0, so it cannot run underneath the
   panel it exists to dim. */
.detail-panel.active{display:block;}
.detail-panel.dp-full{position:fixed;top:0;right:0;bottom:0;width:820px;
  max-width:100%;z-index:125;margin:0;border-radius:0;overflow-y:auto;
  box-shadow:-10px 0 40px rgba(8,33,63,.3);}
/* Docked: plain in-flow block. .split-side above owns the sticking and the
   height cap, so the panel itself only has to stop adding a trailing gap. */
.detail-panel.dp-dock{position:static;margin-bottom:0;
  height:100%;min-height:100%;overflow-y:auto;overscroll-behavior:contain;}
.dp-scrim{position:fixed;top:0;bottom:0;left:0;right:820px;
  background:rgba(8,33,63,.34);z-index:124;}
.dp-scrim[hidden]{display:none;}
.dpt-btn.on{background:var(--sp-cyan);color:var(--sp-navy);}
@media (max-width:900px){
  .detail-panel.dp-full{width:100%;}
  /* Panel is full-bleed here, so an 820px inset would leave a sliver of scrim
     stranded off the left edge. */
  .dp-scrim{right:0;}
}

/* ================= §5 faceted sidebar ================= */
/* Sidebar gone; .sp-split is a single full-width column now. Kept as a wrapper
   rather than unwound so the table column keeps its corner clip and scroll. */
.sp-split{display:flex;gap:18px;align-items:flex-start;overflow:visible;}
 /* overflow:hidden here silently killed position:sticky on the quarter bars.
    `clip` is the one containment value that does NOT create a scroll container,
    so sticky keeps working while horizontal overflow is still contained — and
    pairing overflow-x:clip with overflow-y:visible is legal (visible only
    degrades to auto when the other axis is hidden/scroll/auto, not clip).
    Without this the quarter bars, which span the table via colspan, ran out
    over the docked detail panel. */
.sp-tblcol{flex:1;min-width:0;border-radius:0 12px 12px 0;
  overflow-x:clip;overflow-y:visible;}
@media (max-width:980px){
  .sp-split{flex-direction:column;}
  .sp-tblcol{width:100%;}
}

/* ================= §6 attention drawer ================= */
.sp-draw{position:fixed;top:0;right:0;bottom:0;width:344px;max-width:100%;z-index:130;
  background:#fff;box-shadow:-8px 0 32px rgba(8,33,63,.22);display:flex;flex-direction:column;}
.sp-draw[hidden]{display:none;}
.dw-head{background:var(--sp-navy);color:#fff;padding:15px 17px;display:flex;
  justify-content:space-between;align-items:flex-start;gap:12px;}
.dw-t{font-size:15px;font-weight:700;}
.dw-s{font-size:9.5px;font-weight:700;letter-spacing:.1em;color:#9FBBDC;margin-top:3px;}
.dw-x{background:none;border:none;color:#9FBBDC;font-size:22px;line-height:1;cursor:pointer;}
.dw-x:hover{color:#fff;}
.dw-chips{display:flex;gap:5px;padding:11px 14px;border-bottom:1px solid var(--sp-bd);
  flex-wrap:wrap;background:#FBFCFE;}
.dw-chip{background:#fff;border:1px solid var(--sp-bd);border-radius:999px;padding:4px 10px;
  font-family:inherit;font-size:11px;font-weight:600;color:var(--sp-tx-mut);cursor:pointer;}
.dw-chip.on{background:var(--sp-navy);border-color:var(--sp-navy);color:#fff;}
.dw-body{flex:1;overflow-y:auto;}
.dw-item{padding:12px 15px;border-bottom:1px solid var(--sp-bd-lt);border-left:3px solid transparent;}
.dw-item.overdue{border-left-color:var(--sp-crimson);}
.dw-item.soon,.dw-item.missing{border-left-color:var(--sp-gold);}
.dw-n{font-size:12.5px;font-weight:700;color:var(--sp-tx);line-height:1.35;}
.dw-m{font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  color:var(--sp-tx-mut);margin-top:4px;}
.dw-acts{display:flex;gap:7px;margin-top:8px;}
.dw-a{background:#F1F5FA;border:none;border-radius:6px;padding:5px 10px;font-family:inherit;
  font-size:11px;font-weight:600;color:var(--sp-navy);cursor:pointer;}
.dw-a:hover{background:#E2EAF4;}
.dw-a:disabled{opacity:.5;cursor:default;}
.dw-empty{padding:22px 15px;font-size:12px;color:var(--sp-tx-mut);font-style:italic;}
.dw-foot{padding:11px 15px;border-top:1px solid var(--sp-bd);font-size:10.5px;
  color:var(--sp-tx-faint);background:#FBFCFE;}

/* ================= §5a event calendar (replaces the dots timeline) =================
   Concept 5a. Palette uses the live Sigma tokens (D-001), NOT the master spec's
   #08213F/#2AA8E0, which are stale.
   The host must NOT clip: day tooltips deliberately escape the calendar body, so
   .sp-tlw carries no overflow and the header/footer round their own corners. */
.sp-tlw{background:#fff;border:1px solid var(--sp-bd);border-radius:18px;
  box-shadow:0 1px 2px rgba(15,23,42,.04);margin-bottom:var(--gap);}
.ec-head{padding:14px 22px;background:linear-gradient(112deg,var(--sp-navy-deep),var(--sp-navy));
  border-radius:17px 17px 0 0;display:flex;align-items:center;gap:18px;flex-wrap:wrap;}
.ec-eyebrow{font-size:9px;font-weight:600;letter-spacing:.18em;color:#7FC4F0;
  font-family:ui-monospace,Menlo,monospace;}
.ec-range{font-size:20px;font-weight:800;color:#fff;line-height:1.15;}
.ec-chips{display:flex;gap:8px;margin-left:auto;flex-wrap:wrap;align-items:center;}
.ec-chip{flex:none;white-space:nowrap;padding:6px 11px;border-radius:8px;
  background:rgba(255,255,255,.1);color:#fff;}
.ec-chip i{display:block;font-style:normal;font-size:8.5px;font-weight:600;letter-spacing:.14em;
  color:#9FC7EC;font-family:ui-monospace,Menlo,monospace;}
.ec-chip b{font-size:13px;font-weight:700;font-variant-numeric:tabular-nums;}
.ec-chip.hot{background:rgba(140,29,46,.9);} .ec-chip.hot i{color:#F2C9D0;}
.ec-chip.today{background:rgba(3,174,230,.22);border:1px solid var(--sp-cyan);}
.ec-fold{flex:none;background:rgba(255,255,255,.12);border:none;color:#fff;cursor:pointer;
  font-family:inherit;font-size:11px;font-weight:700;padding:7px 12px;border-radius:8px;}
.ec-fold:hover{background:rgba(255,255,255,.22);}
.ec-tools{padding:12px 22px;background:#F4F7FB;border-bottom:1px solid #D7E0EC;
  display:flex;gap:18px;align-items:center;flex-wrap:wrap;}
.ec-grp{display:flex;align-items:center;gap:7px;}
.ec-grp>span{font-size:9px;font-weight:600;letter-spacing:.14em;color:#5A6B82;
  font-family:ui-monospace,Menlo,monospace;}
.ec-pills{display:flex;gap:3px;flex-wrap:wrap;}
.ec-pill{padding:4px 10px;border-radius:6px;border:1px solid #D7E0EC;background:#fff;
  font-family:inherit;font-size:11px;font-weight:600;color:#5A6B82;cursor:pointer;}
.ec-pill:hover{border-color:var(--sp-navy);color:var(--sp-navy);}
.ec-pill.on{background:var(--sp-navy);border-color:var(--sp-navy);color:#fff;}
.ec-inherit{margin-left:auto;font-size:10px;color:#7A8CA3;font-style:italic;}
.ec-body{padding:16px 22px;}
.ec-months{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;}
@media (max-width:1240px){ .ec-months{grid-template-columns:repeat(3,minmax(0,1fr));} }
@media (max-width:960px){ .ec-months{grid-template-columns:repeat(2,minmax(0,1fr));} }
@media (max-width:640px){ .ec-months{grid-template-columns:minmax(0,1fr);} }
.ec-mo{border:1px solid #D7E0EC;border-radius:11px;background:#fff;min-width:0;}
.ec-mo-h{display:flex;align-items:center;gap:8px;padding:8px 11px;background:#F4F7FB;
  border-bottom:1px solid #D7E0EC;border-radius:10px 10px 0 0;}
.ec-mo-h b{font-size:13px;font-weight:700;}
.ec-cnt{margin-left:auto;font-size:9.5px;font-weight:700;padding:2px 7px;border-radius:20px;
  background:#E3EBF5;color:var(--sp-navy);}
.ec-cnt.zero{background:#EEF2F7;color:#A3B0C2;font-weight:600;}
.ec-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;padding:9px 10px;}
.ec-wd{font-size:8.5px;font-weight:600;color:#A3B0C2;text-align:center;padding-bottom:2px;
  font-family:ui-monospace,Menlo,monospace;}
.ec-day{position:relative;height:22px;border-radius:5px;display:flex;align-items:center;
  justify-content:center;font-size:9.5px;font-weight:600;background:#F4F7FB;color:#A3B0C2;
  border:none;padding:0;font-family:ui-monospace,Menlo,monospace;}
.ec-day.blank{background:transparent;}
.ec-day.has{color:#fff;cursor:pointer;}
.ec-day.t-booth{background:var(--sp-green);}
.ec-day.t-attend{background:var(--sp-gold);}
.ec-day.t-track{background:var(--sp-slate);}
.ec-day.multi{outline:2px dashed var(--sp-crimson);outline-offset:-1px;}
.ec-day.today{box-shadow:0 0 0 2px var(--sp-cyan);}
.ec-day.has:hover{box-shadow:0 4px 14px rgba(8,33,63,.34);z-index:30;}
.ec-badge{position:absolute;top:-5px;right:-4px;min-width:13px;height:13px;border-radius:7px;
  background:var(--sp-crimson);color:#fff;font-size:8px;font-weight:700;line-height:13px;
  text-align:center;padding:0 3px;}
.ec-mo-f{padding:7px 11px;border-top:1px solid #D7E0EC;font-size:10px;font-weight:600;
  color:#5A6B82;border-radius:0 0 10px 10px;font-family:ui-monospace,Menlo,monospace;}
.ec-tip{position:absolute;bottom:calc(100% + 7px);width:250px;background:var(--sp-navy-deep);
  color:#fff;border-radius:9px;padding:10px 11px;pointer-events:none;z-index:40;
  opacity:0;visibility:hidden;transition:opacity .1s;text-align:left;
  box-shadow:0 10px 30px rgba(8,33,63,.4);}
.ec-day.has:hover .ec-tip{opacity:1;visibility:visible;}
.ec-tip.l{left:-4px;} .ec-tip.r{right:-4px;}
.ec-tip-d{font-size:9px;font-weight:700;letter-spacing:.12em;color:#7FC4F0;padding-bottom:6px;
  border-bottom:1px solid rgba(255,255,255,.14);margin-bottom:7px;
  font-family:ui-monospace,Menlo,monospace;}
.ec-tip-e{display:flex;gap:7px;margin-bottom:7px;}
.ec-tip-e i{flex:none;width:8px;height:8px;border-radius:2px;margin-top:4px;}
.ec-tip-e b{display:block;font-size:12px;font-weight:700;line-height:1.3;letter-spacing:0;}
.ec-tip-e em{display:block;font-style:normal;font-size:9px;color:#A9C4E2;margin-top:2px;
  font-family:ui-monospace,Menlo,monospace;}
.ec-tip-f{font-size:8.5px;font-weight:700;letter-spacing:.12em;color:#7FC4F0;padding-top:6px;
  border-top:1px solid rgba(255,255,255,.14);font-family:ui-monospace,Menlo,monospace;}
.ec-mv-wd{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;margin-bottom:7px;}
.ec-mv-wd span{font-size:10px;font-weight:700;letter-spacing:.14em;color:#5A6B82;padding-left:2px;
  font-family:ui-monospace,Menlo,monospace;}
.ec-mv{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;}
.ec-mc{min-height:118px;padding:8px 9px;border-radius:10px;background:#fff;
  border:1px solid #D7E0EC;position:relative;}
.ec-mc.wknd{background:#FAFCFE;}
.ec-mc.adj{background:#FAFBFD;opacity:.5;}
.ec-mc.today{background:#F7FCFF;border-color:var(--sp-cyan);}
.ec-mc-n{font-size:12px;font-weight:700;font-family:ui-monospace,Menlo,monospace;}
.ec-mc-o{position:absolute;top:7px;right:8px;font-size:7.5px;font-weight:700;letter-spacing:.1em;
  color:var(--sp-crimson);background:#F6E4E7;border-radius:4px;padding:2px 5px;
  font-family:ui-monospace,Menlo,monospace;}
.ec-ch{display:block;width:100%;text-align:left;margin-top:5px;padding:4px 6px;border:none;
  border-left:3px solid var(--sp-slate);border-radius:0 5px 5px 0;background:#EEF2F7;
  font-family:inherit;cursor:pointer;}
.ec-ch.k-booth{border-left-color:var(--sp-green);background:#E6F4EC;}
.ec-ch.k-attend{border-left-color:var(--sp-gold);background:#FBF3E0;}
.ec-ch.k-track{border-left-color:var(--sp-slate);background:#EEF2F7;}
.ec-ch.cont{opacity:.78;}
.ec-ch b{display:block;font-size:10.5px;font-weight:600;line-height:1.25;}
.ec-ch em{display:block;font-style:normal;font-size:9px;color:#5A6B82;margin-top:1px;
  font-family:ui-monospace,Menlo,monospace;}
.ec-ch.lit{background:#EAF6FD;box-shadow:0 0 0 2px var(--sp-cyan);}
.ec-ov{margin:2px 22px 16px;border:1px solid #E7C6CC;border-left:3px solid var(--sp-crimson);
  border-radius:11px;}
.ec-ov-h{display:flex;align-items:center;gap:12px;padding:8px 13px;background:#FCF4F5;
  border-radius:9px 9px 0 0;flex-wrap:wrap;}
.ec-ov-h b{font-size:10px;font-weight:700;letter-spacing:.1em;color:var(--sp-crimson);
  font-family:ui-monospace,Menlo,monospace;}
.ec-ov-h span{font-size:11px;color:#5A6B82;}
.ec-ov-h u{margin-left:auto;text-decoration:none;font-size:9.5px;font-weight:700;
  letter-spacing:.08em;color:var(--sp-crimson);font-family:ui-monospace,Menlo,monospace;}
.ec-ov-r{display:flex;align-items:center;gap:11px;padding:8px 13px;border-top:1px solid #F0E2E5;
  flex-wrap:wrap;}
.ec-ov-r:nth-child(even){background:#FBFCFE;}
.ec-shared{flex:none;width:120px;font-size:9px;font-weight:700;letter-spacing:.08em;
  background:#F6E4E7;color:var(--sp-crimson);border-radius:5px;padding:4px 7px;text-align:center;
  font-family:ui-monospace,Menlo,monospace;}
.ec-win{flex:none;width:104px;font-size:11px;font-weight:700;color:var(--sp-crimson);
  font-family:ui-monospace,Menlo,monospace;}
.ec-side{flex:1 1 190px;min-width:170px;display:flex;align-items:center;gap:7px;}
.ec-side i{flex:none;width:9px;height:9px;border-radius:2px;}
.ec-side button{background:none;border:none;padding:0;font-family:inherit;text-align:left;cursor:pointer;}
.ec-side b{display:block;font-size:11.5px;font-weight:700;}
.ec-side b:hover{color:var(--sp-blue);text-decoration:underline;}
.ec-side em{display:block;font-style:normal;font-size:9px;color:#5A6B82;
  font-family:ui-monospace,Menlo,monospace;}
.ec-arr{flex:none;font-size:11px;font-weight:700;color:var(--sp-crimson);}
.ec-note{flex:none;width:190px;text-align:right;font-size:10px;color:#5A6B82;}
.ec-jump{flex:none;padding:5px 10px;border-radius:6px;border:1px solid #D7E0EC;background:#fff;
  font-family:inherit;font-size:10.5px;font-weight:700;color:var(--sp-navy);cursor:pointer;}
.ec-jump:hover{border-color:var(--sp-navy);background:#F4F7FB;}
.ec-foot{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:10px 22px;
  background:#F4F7FB;border-top:1px solid #D7E0EC;border-radius:0 0 17px 17px;}
.ec-lg{display:flex;align-items:center;gap:6px;font-size:10.5px;color:#5A6B82;}
.ec-lg i{width:14px;height:14px;border-radius:4px;display:block;}
.ec-hint{margin-left:auto;font-size:9px;font-weight:600;letter-spacing:.1em;color:#A3B0C2;
  font-family:ui-monospace,Menlo,monospace;}
.ec-empty{padding:28px 4px;text-align:center;color:#5A6B82;font-size:13px;font-style:italic;}
.ec-closed{padding:14px 18px;}
.ec-open-btn{padding:9px 18px;border-radius:8px;border:1px solid #d5dce6;background:#fff;
  color:var(--sp-navy);font-size:12.5px;font-weight:700;font-family:inherit;cursor:pointer;
  display:inline-flex;align-items:center;gap:8px;}
.ec-open-btn:hover{border-color:var(--sp-navy);background:#F4F7FB;}
@media print{ .ec-tools,.ec-fold{display:none !important;} }

/* ================= §9 analytics ================= */
.sp-ana{background:#fff;border:1px solid var(--sp-bd);border-radius:14px;
  box-shadow:0 1px 2px rgba(15,23,42,.04);margin-bottom:var(--gap);overflow:hidden;}
.an-head{display:flex;justify-content:space-between;align-items:center;gap:14px;
  padding:14px 18px;border-bottom:1px solid var(--sp-bd-lt);flex-wrap:wrap;}
.an-head h3{font-size:13px;font-weight:700;color:var(--sp-navy);margin:0;
  text-transform:uppercase;letter-spacing:.06em;}
.an-tabs{display:flex;gap:4px;background:#F1F5FA;border-radius:8px;padding:3px;}
.an-tab{background:none;border:none;border-radius:6px;padding:5px 13px;font-family:inherit;
  font-size:11.5px;font-weight:700;color:var(--sp-tx-mut);cursor:pointer;transition:background .14s;}
.an-tab.on{background:var(--sp-navy);color:#fff;}
.an-body{padding:18px;}
.an-tot{font-size:30px;font-weight:800;color:var(--sp-navy);letter-spacing:-.02em;
  font-variant-numeric:tabular-nums;}
.an-tot span{font-size:12px;font-weight:600;color:var(--sp-tx-mut);margin-left:8px;letter-spacing:0;}
.an-stack{display:flex;height:22px;border-radius:6px;overflow:hidden;margin:14px 0 10px;}
.an-seg{height:100%;}
.an-leg{display:flex;gap:18px;flex-wrap:wrap;font-size:11.5px;color:var(--sp-tx-body);}
.an-leg i{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:6px;}
.an-split{display:flex;gap:24px;align-items:flex-end;flex-wrap:wrap;}
.an-rail{min-width:150px;}
.an-big{font-size:34px;font-weight:800;color:var(--sp-green);line-height:1;
  font-variant-numeric:tabular-nums;}
.an-big2{font-size:24px;font-weight:800;color:var(--sp-crimson);line-height:1;margin-top:12px;
  font-variant-numeric:tabular-nums;}
.an-rl{font-size:10px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;
  color:var(--sp-tx-faint);margin-top:3px;}
.an-link{background:none;border:none;font-family:inherit;font-size:11.5px;font-weight:700;
  color:var(--sp-blue);cursor:pointer;padding:10px 0 0;}
.an-link:hover{text-decoration:underline;}
.an-bars,.an-qs{display:flex;gap:14px;align-items:flex-end;flex:1;min-width:240px;height:170px;}
.an-bcol{flex:1;display:flex;flex-direction:column;align-items:center;height:100%;}
.an-bn{font-size:11.5px;font-weight:700;color:var(--sp-tx);font-variant-numeric:tabular-nums;
  margin-bottom:5px;}
.an-btr{flex:1;width:100%;display:flex;align-items:flex-end;}
.an-bf{width:100%;border-radius:5px 5px 0 0;min-height:2px;}
.an-bl{font-size:9.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  color:var(--sp-tx-faint);margin-top:7px;text-align:center;}
.an-note{font-size:11.5px;color:var(--sp-tx-mut);margin-top:12px;}
.an-gate{font-size:12.5px;color:var(--sp-tx-mut);font-style:italic;padding:14px 0;}

/* --- KPI tier sub-widgets: square, centred (image 2) --- */
.kp-tiers{display:flex;gap:10px;flex:1;min-width:0;}
.kp-tier{flex:1 1 0;min-width:0;aspect-ratio:1/1;max-height:86px;
  background:#F8FAFD;border:1px solid #EDF1F7;border-radius:10px;padding:8px 6px;
  cursor:pointer;font-family:inherit;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;
  text-align:center;transition:background .14s,border-color .14s;}
.kp-tier:hover{background:#EEF4FB;border-color:#D8E3F0;}
.kp-sq{width:7px;height:7px;border-radius:2px;background:currentColor;}
.kp-n{font-size:22px;font-weight:800;line-height:1;color:var(--sp-tx);
  font-variant-numeric:tabular-nums;}
.kp-l{font-size:8px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;
  color:var(--sp-tx-mut);line-height:1.2;white-space:normal;}

/* --- Marketing budget: ring + figures --- */
.bg-row{display:flex;align-items:center;gap:18px;}
.bg-ring{width:92px;height:92px;flex-shrink:0;border-radius:50%;display:grid;place-items:center;
  background:conic-gradient(var(--sp-blue) 0turn var(--p,0turn),#E3EAF3 var(--p,0turn) 1turn);}
.bg-ring-in{width:70px;height:70px;border-radius:50%;background:#fff;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  line-height:1;text-align:center;}
.bg-ring-in b{font-size:19px;font-weight:800;color:var(--sp-navy);
  font-variant-numeric:tabular-nums;display:block;}
.bg-ring-in span{font-size:7.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;
  color:var(--sp-tx-faint);margin-top:3px;display:block;}
.bg-figs{min-width:0;}
.bg-act{font-size:26px;font-weight:800;color:var(--sp-tx);letter-spacing:-.02em;
  line-height:1.05;font-variant-numeric:tabular-nums;}
.bg-sub{font-size:11.5px;color:var(--sp-tx-mut);margin-top:2px;}
.bg-rem{font-size:12.5px;font-weight:700;margin-top:6px;}
.bg-rem.under{color:var(--sp-green);} .bg-rem.over{color:var(--sp-crimson);}
.bg-foot{font-size:9.5px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;
  color:var(--sp-tx-faint);margin-top:14px;padding-top:11px;border-top:1px solid var(--sp-bd-lt);}

/* --- §4 cards: no left border rule (image 2) --- */
.booth-card{border-left:none !important;}

/* ================= §3 KPI cards ================= */
.widget-row{display:flex;gap:var(--gap);flex-wrap:wrap;}
.widget{border-left:4px solid var(--sp-cyan);}
#w-completed{border-left-color:var(--sp-green);}
#w-budget{border-left-color:var(--sp-crimson);}
#w-upcoming,#w-completed{flex:1.35 1 300px;}
#w-budget{flex:1 1 250px;}
.kp-row{display:flex;align-items:stretch;gap:14px;}
.kp-left{width:118px;flex:0 0 118px;background:none;border:none;text-align:left;
  cursor:pointer;font-family:inherit;padding:4px 6px 4px 0;border-radius:8px;
  transition:background .14s;display:flex;flex-direction:column;gap:3px;}
.kp-left:hover{background:#F4F7FB;}
.kp-tot{font-size:38px;font-weight:800;line-height:1;letter-spacing:-.03em;
  color:var(--sp-navy);font-variant-numeric:tabular-nums;}
.kp-cap{font-size:11.5px;color:var(--sp-tx-mut);line-height:1.45;}
.kp-cap em{font-style:normal;color:var(--sp-tx-faint);}
.kp-cue{font-size:9.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;
  color:var(--sp-blue);margin-top:auto;}
.kp-div{width:1px;background:var(--sp-bd);align-self:stretch;flex-shrink:0;}
.kp-tiers{display:flex;gap:8px;flex:1;min-width:0;}
.kp-tier{flex:1 1 0;min-width:0;background:#F8FAFD;border:1px solid #EDF1F7;border-radius:9px;
  padding:9px 7px;cursor:pointer;font-family:inherit;text-align:left;
  display:flex;flex-direction:column;gap:3px;transition:background .14s,border-color .14s;}
.kp-tier:hover{background:#EEF4FB;border-color:#D8E3F0;}
.kp-sq{width:8px;height:8px;border-radius:2px;background:currentColor;}
.kp-tier.t-booth{color:var(--sp-green);}
.kp-tier.t-attend{color:var(--sp-gold);}
.kp-tier.t-track{color:var(--sp-slate);background:#F1F5FA;border-color:var(--sp-bd);}
.kp-n{font-size:24px;font-weight:800;line-height:1;color:var(--sp-tx);
  font-variant-numeric:tabular-nums;}
.kp-tier.kp-off .kp-n{color:var(--sp-tx-faint);}
.kp-l{font-size:8.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  color:var(--sp-tx-mut);line-height:1.25;
  /* wrap rather than truncate \u2014 "Just Tracking" was rendering as "JUST \u2026" */
  white-space:normal;overflow-wrap:anywhere;}
@media (max-width:760px){
  .kp-row{flex-direction:column;}
  .kp-left{width:auto;flex:none;}
  .kp-div{display:none;}
}

/* ================= §10 footer ================= */
.footer{position:relative;overflow:hidden;background:var(--sp-navy);color:#B7CCE6;
  border-top:3px solid var(--sp-crimson);border-radius:14px 14px 0 0;
  margin:var(--gap) -22px 0;padding:22px 26px 20px;font-size:12px;line-height:1.6;
  display:grid;grid-template-columns:1.5fr 1fr 1fr 1fr;gap:22px;text-align:left;}
.footer .ft-wave{position:absolute;left:0;bottom:0;width:100%;height:120px;opacity:.1;
  object-fit:cover;pointer-events:none;filter:brightness(0) invert(1);}
.footer > *{position:relative;z-index:1;}
.ft-h{font-size:9px;font-weight:700;letter-spacing:.13em;text-transform:uppercase;
  color:#7E9BC0;margin-bottom:8px;}
.ft-brand{display:flex;align-items:center;gap:10px;margin-bottom:8px;}
.ft-mark{width:24px;height:24px;color:var(--sp-cyan);}
.ft-name{font-size:14px;font-weight:800;color:#fff;}
.footer a,.ft-btn{display:block;background:none;border:none;padding:2px 0;color:#B7CCE6;
  font-family:inherit;font-size:12px;text-align:left;cursor:pointer;text-decoration:none;}
.footer a:hover,.ft-btn:hover{color:#fff;text-decoration:underline;}
@media (max-width:820px){.footer{grid-template-columns:1fr 1fr;}}

/* ================= §2 hero ================= */
.sp-hero{position:relative;overflow:hidden;border-radius:16px;border-top:4px solid var(--sp-crimson);
  background:linear-gradient(115deg,var(--sp-navy) 0%,#0B3C7B 62%,var(--sp-blue) 100%);
  padding:18px 22px 0;margin-bottom:var(--gap);color:#fff;}
.hr-wave{position:absolute;left:0;width:100%;pointer-events:none;object-fit:cover;
  filter:brightness(0) invert(1);}
.hr-wave-b{bottom:0;height:170px;opacity:.16;}
.hr-wave-t{top:0;height:120px;opacity:.09;transform:scaleY(-1);}
.sp-hero > :not(.hr-wave){position:relative;z-index:1;}
.hr-brand{display:flex;align-items:center;gap:14px;padding-bottom:14px;}
.hr-mark{width:34px;height:34px;color:var(--sp-cyan);flex-shrink:0;}
.hr-div{width:1px;height:32px;background:rgba(255,255,255,.24);}
.hr-title{font-size:19px;font-weight:700;line-height:1.2;}
.hr-sub{font-size:12px;color:#B7CCE6;margin-top:2px;}
.hr-clock{display:flex;align-items:center;gap:26px;padding:6px 0 18px;flex-wrap:wrap;}
.hr-ring{width:114px;height:114px;border-radius:50%;flex-shrink:0;display:grid;place-items:center;
  background:conic-gradient(var(--sp-cyan) 0turn var(--p,0turn),rgba(255,255,255,.16) var(--p,0turn) 1turn);}
.hr-ring-in{width:88px;height:88px;border-radius:50%;background:var(--sp-navy);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;}
.hr-ring-in b{font-size:23px;font-weight:800;font-variant-numeric:tabular-nums;}
.hr-ring-in span{font-size:8.5px;font-weight:700;letter-spacing:.12em;color:#9FBBDC;}
.hr-next{flex:1;min-width:230px;}
.hr-eyebrow{font-size:9px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:#9FBBDC;}
.hr-days{font-size:62px;font-weight:800;line-height:.95;letter-spacing:-.03em;
  font-variant-numeric:tabular-nums;margin-top:4px;}
.hr-daysl{font-size:12px;color:#B7CCE6;margin-top:2px;}
.hr-name{font-size:21px;font-weight:700;margin-top:8px;line-height:1.25;}
.hr-meta{font-size:12px;color:#B7CCE6;margin-top:3px;line-height:1.5;}
.hr-chips{display:flex;flex-direction:column;gap:10px;min-width:340px;}
.hr-chip{display:flex;align-items:center;justify-content:space-between;gap:20px;
  background:rgba(255,255,255,.10);border:none;border-left:3px solid var(--sp-cyan);
  border-radius:0 9px 9px 0;padding:14px 18px;text-align:left;cursor:pointer;font-family:inherit;
  color:#fff;transition:background .15s;width:100%;}
.hr-chip:hover{background:rgba(255,255,255,.17);}
.hr-chip-tx{display:flex;flex-direction:column;gap:6px;min-width:0;}
.hr-chip-n{display:block;font-size:14.5px;font-weight:700;line-height:1.25;letter-spacing:-.005em;}
/* was #9FBBDC — lifted for contrast against the hero gradient */
.hr-chip-m{display:block;font-size:11.5px;font-weight:400;letter-spacing:.01em;
  color:#CFE0F2;line-height:1.35;}
.hr-chip-c{display:flex;flex-direction:column;align-items:flex-end;flex-shrink:0;line-height:1;}
.hr-chip-d{font-size:34px;font-weight:800;letter-spacing:-.03em;
  font-variant-numeric:tabular-nums;color:#fff;}
.hr-chip-l{font-size:9.5px;font-weight:600;letter-spacing:.13em;text-transform:uppercase;
  color:var(--sp-cyan);margin-top:5px;}
.hr-strip{background:rgba(0,0,0,.22);margin:0 -22px;padding:9px 22px;display:flex;gap:22px;
  flex-wrap:wrap;font-size:9.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#B7CCE6;}
.hr-strip .risk{color:#FF9BA8;}
@media (max-width:820px){.hr-days{font-size:44px;}.hr-clock{gap:16px;}
  .hr-chips{width:100%;min-width:0;}.hr-chip-d{font-size:28px;}}

/* ================= §3 drill-down ================= */
.sp-drill{position:fixed;inset:0;background:rgba(8,33,63,.42);z-index:120;
  display:flex;align-items:center;justify-content:center;padding:22px;}
.sp-drill[hidden]{display:none;}
.dr-box{width:620px;max-width:100%;max-height:82%;background:#fff;border-radius:14px;
  display:flex;flex-direction:column;overflow:hidden;box-shadow:0 24px 60px rgba(8,33,63,.34);}
.dr-head{background:var(--sp-navy);color:#fff;padding:15px 18px;display:flex;
  justify-content:space-between;align-items:flex-start;gap:14px;}
.dr-t{font-size:15px;font-weight:700;}
.dr-s{font-size:11.5px;color:#B7CCE6;margin-top:3px;font-variant-numeric:tabular-nums;}
.dr-x{background:none;border:none;color:#B7CCE6;font-size:22px;line-height:1;cursor:pointer;padding:0 4px;}
.dr-x:hover{color:#fff;}
.dr-note{background:#F1F5FA;color:var(--sp-tx-mut);font-size:11.5px;padding:9px 18px;
  border-bottom:1px solid var(--sp-bd);font-style:italic;}
.dr-body{overflow-y:auto;flex:1;}
.dr-row{display:flex;justify-content:space-between;gap:14px;width:100%;text-align:left;
  background:none;border:none;border-bottom:1px solid var(--sp-bd-lt);padding:12px 18px;
  cursor:pointer;font-family:inherit;transition:background .13s;}
.dr-row:hover{background:#F4F7FB;}
.dr-main{min-width:0;flex:1;}
.dr-n{font-size:13.5px;font-weight:700;color:var(--sp-tx);}
.dr-m{font-size:11.5px;color:var(--sp-tx-mut);margin-top:2px;}
.dr-bar{height:4px;background:var(--sp-bd);border-radius:999px;margin-top:7px;max-width:190px;overflow:hidden;}
.dr-fill{height:100%;background:var(--sp-cyan);border-radius:999px;}
.dr-pct{font-size:10px;font-weight:700;color:var(--sp-tx-mut);margin-top:3px;}
.dr-mon{font-size:10px;font-weight:700;color:var(--sp-slate);margin-top:6px;
  letter-spacing:.08em;text-transform:uppercase;}
.dr-side{text-align:right;flex-shrink:0;}
.dr-sp{font-size:12.5px;font-weight:700;color:var(--sp-tx);font-variant-numeric:tabular-nums;}
.dr-cd{font-size:11px;font-weight:700;margin-top:4px;font-variant-numeric:tabular-nums;}
.u-hot{color:var(--sp-crimson);}.u-warm{color:var(--sp-gold-tx);}.u-cool{color:var(--sp-navy);}
.dr-empty{padding:24px 18px;font-size:12.5px;color:var(--sp-tx-mut);font-style:italic;}
.dr-foot{display:flex;gap:9px;padding:13px 18px;border-top:1px solid var(--sp-bd);background:#FBFCFE;}
.dr-apply{flex:1;background:var(--sp-navy);color:#fff;border:none;border-radius:8px;
  padding:9px 14px;font-family:inherit;font-size:12.5px;font-weight:700;cursor:pointer;}
.dr-apply:hover{background:var(--sp-navy-deep);}
.dr-close{background:#fff;border:1px solid var(--sp-bd);border-radius:8px;padding:9px 16px;
  font-family:inherit;font-size:12.5px;font-weight:700;color:var(--sp-tx-body);cursor:pointer;}

/* ================= §4 editorial booth cards ================= */
.booth-card .bc-img{position:relative;display:block;height:150px;border-radius:12px;
  overflow:hidden;background:var(--sp-navy);}
.booth-card .bc-img img{width:100%;height:100%;object-fit:cover;display:block;}
.bc-scrim{position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(8,33,63,0) 30%,rgba(8,33,63,.92) 100%);}
.bc-badge{position:absolute;top:9px;left:9px;font-size:9.5px;font-weight:700;
  letter-spacing:.07em;text-transform:uppercase;padding:4px 8px;border-radius:5px;color:#fff;}
.bc-badge.u-hot{background:var(--sp-crimson);}
.bc-badge.u-warm{background:var(--sp-gold);}
.bc-badge.u-cool{background:var(--sp-navy);}
.bc-tier{position:absolute;top:9px;right:9px;background:#fff;color:var(--sp-navy);
  font-size:9px;font-weight:800;letter-spacing:.1em;padding:4px 8px;border-radius:5px;}
.bc-over{position:absolute;left:12px;right:12px;bottom:10px;}
.booth-card .bc-name{display:block;font-size:17px;font-weight:700;color:#fff;line-height:1.25;}
.booth-card .bc-meta{display:block;font-size:11.5px;color:#D6E3F2;margin-top:3px;}
.bc-foot{display:block;background:#fff;padding:10px 12px 11px;}
.bc-rl{display:block;font-size:9px;font-weight:700;letter-spacing:.11em;text-transform:uppercase;
  color:var(--sp-tx-faint);}
.bc-rl b{color:var(--sp-tx);font-size:12px;letter-spacing:0;margin-left:4px;}
.bc-track{display:block;height:6px;border-radius:999px;background:var(--sp-bd);margin-top:6px;overflow:hidden;}
.bc-fill{display:block;height:100%;border-radius:999px;}
.bc-fill.u-hot{background:var(--sp-crimson);}
.bc-fill.u-warm{background:var(--sp-gold);}
.bc-fill.u-cool{background:var(--sp-navy);}
.bc-fm{display:flex;justify-content:space-between;gap:10px;margin-top:7px;font-size:11px;
  color:var(--sp-tx-mut);font-variant-numeric:tabular-nums;}
.bc-blk{color:var(--sp-crimson);font-weight:700;}
.bc-ok{color:var(--sp-green);font-weight:700;}

/* ================= §1 shell ================= */
#app-content{display:flex;align-items:stretch;min-height:100vh;gap:0;}
.sp-rail{width:208px;flex:0 0 208px;background:var(--sp-navy);display:flex;
  flex-direction:column;padding:18px 12px 14px;position:sticky;top:0;
  align-self:stretch;max-height:100vh;overflow-y:auto;scrollbar-width:none;}
.sp-rail::-webkit-scrollbar{display:none;}
.sp-rail-top{display:block;padding:2px 6px 18px;}
.sp-rail-top .sp-eyebrow{margin-top:7px;}
.sp-logo{display:block;}
.sp-logo svg{width:132px;height:auto;display:block;}
.sp-eyebrow{font-size:8.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:var(--sp-rail-ink);margin-top:3px;}
.sp-sec{font-size:8.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:#7E9BC0;padding:0 6px 7px;}
.view-toggle{display:flex;flex-direction:column;gap:1px;background:none;padding:0;
  border:none;box-shadow:none;overflow:visible;}
.view-toggle button{display:flex;align-items:center;justify-content:space-between;gap:8px;
  width:100%;text-align:left;background:none;border:none;border-radius:7px;
  padding:8px 10px;font-family:inherit;font-size:12.5px;font-weight:600;
  color:var(--sp-rail-ink);cursor:pointer;transition:background .15s,color .15s;}
.view-toggle button:hover{background:rgba(255,255,255,.07);color:#fff;}
.view-toggle button.active{background:var(--sp-blue);color:#fff;}
.sp-dot{width:6px;height:6px;border-radius:50%;background:#E0576B;flex-shrink:0;}
.sp-rail-base{margin-top:auto;padding-top:16px;}
.sp-role{width:100%;background:rgba(255,255,255,.09);border:1px solid rgba(255,255,255,.15);
  border-radius:7px;color:#fff;font-family:inherit;font-size:12px;font-weight:600;
  padding:7px 9px;cursor:pointer;}
.sp-role option{color:#12233D;}
.sp-role-note{font-size:10px;color:#8FA6C2;line-height:1.45;margin-top:6px;padding:0 2px;}

.sp-main{flex:1;min-width:0;display:flex;flex-direction:column;background:var(--sp-page);}
.sp-util{display:flex;align-items:center;gap:14px;background:#fff;
  border-bottom:1px solid var(--sp-bd);padding:10px 22px;position:sticky;top:0;z-index:30;}
.sp-crumb{font-size:12.5px;font-weight:600;color:var(--sp-tx-mut);white-space:nowrap;}
.sp-crumb b{color:var(--sp-tx);font-weight:700;}
.sp-util .gs-wrap{flex:1;max-width:none;margin:0;}
.sp-kbd{position:absolute;right:10px;top:50%;transform:translateY(-50%);
  font-size:10px;font-weight:700;color:var(--sp-tx-faint);pointer-events:none;
  border:1px solid var(--sp-bd);border-radius:4px;padding:2px 5px;background:#fff;}
.sp-live{font-size:9.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;
  color:var(--sp-tx-mut);white-space:nowrap;display:flex;align-items:center;gap:6px;}
.sp-live::before{content:'';width:6px;height:6px;border-radius:50%;background:var(--sp-green);}
.sp-attn{background:var(--sp-crimson);color:#fff;border:none;border-radius:999px;
  padding:6px 8px 6px 13px;font-family:inherit;font-size:11.5px;font-weight:700;
  cursor:pointer;display:flex;align-items:center;gap:7px;white-space:nowrap;
  transition:background .15s;}
.sp-attn:hover{background:#701626;}
.sp-attn[hidden]{display:none;}
.sp-attn-n{background:rgba(255,255,255,.24);border-radius:999px;padding:1px 7px;
  font-variant-numeric:tabular-nums;}
/* The rail already takes 208px; capping the content column at the old page
   width squeezed the KPI widgets. Let it use the space it has. */
/* fluid — the content column uses whatever the viewport gives it */
.sp-body{padding:20px 22px 0;flex:1;min-width:0;width:100%;}
@media (max-width:900px){
  #app-content{flex-direction:column;}
  .sp-rail{width:auto;flex:none;height:auto;position:static;flex-direction:row;
    align-items:center;gap:10px;padding:10px 12px;overflow-x:auto;}
  .sp-rail-top{padding:0 8px 0 0;}
  .sp-sec,.sp-rail-base,.sp-eyebrow{display:none;}
  .view-toggle{flex-direction:row;gap:3px;}
  .view-toggle button{white-space:nowrap;}
  .sp-util{flex-wrap:wrap;padding:10px 14px;}
  .sp-crumb{width:100%;}
  .sp-body{padding:14px;}
}
.gs-wrap{position:relative;margin-bottom:10px;max-width:460px;}
.gs-input{width:100%;padding:9px 13px;border:1px solid #d5dce6;border-radius:9px;
  font-family:inherit;font-size:12.5px;background:var(--card);color:var(--text);
  transition:border-color .18s,box-shadow .18s;}
.gs-input:focus{outline:none;border-color:var(--cyan);box-shadow:0 0 0 3px rgba(3,174,230,.13);}
.gs-input::placeholder{color:#9aa4b2;}
.gs-results{position:absolute;top:calc(100% + 5px);left:0;right:0;z-index:40;
  background:var(--card);border:1px solid #e3e9f0;border-radius:10px;
  box-shadow:0 8px 26px rgba(0,48,116,.15);max-height:390px;overflow-y:auto;
  overscroll-behavior:contain;animation:gsIn .16s ease;}
@keyframes gsIn{from{opacity:0;transform:translateY(-3px);}to{opacity:1;transform:none;}}
.gs-grp{font-size:9px;font-weight:800;text-transform:uppercase;letter-spacing:.55px;
  color:var(--muted);padding:9px 13px 4px;background:#fbfcfe;position:sticky;top:0;}
.gs-row{display:block;width:100%;text-align:left;background:none;border:none;
  padding:8px 13px;cursor:pointer;font-family:inherit;border-top:1px solid #f2f5f9;
  transition:background .14s;}
.gs-row:hover{background:#f2f8fd;}
.gs-n{display:block;font-size:12.5px;font-weight:700;color:var(--navy);line-height:1.3;}
.gs-m{display:block;font-size:11px;color:var(--muted);margin-top:2px;}
.gs-over{color:var(--red);font-style:normal;font-weight:700;}
.gs-none{padding:16px 14px;font-size:12px;color:var(--muted);font-style:italic;}
@media (max-width:720px){.gs-wrap{max-width:none;}}
.role-sel{font-family:inherit;font-size:11.5px;font-weight:700;color:var(--navy);
  border:1px solid #d5dce6;border-radius:7px;padding:5px 9px;background:var(--card);
  cursor:pointer;transition:border-color .18s;}
.role-sel:hover{border-color:var(--navy);}
.role-note{font-size:11px;color:var(--muted);font-style:italic;}
.view-toggle button.off-role{display:none;}
.att-mail{background:none;border:none;color:var(--muted);font-size:14px;cursor:pointer;
  padding:0 5px;line-height:1;transition:color .16s,transform .16s;}
.att-mail:hover{color:var(--cyan);transform:scale(1.15);}
.att-mailall{background:var(--navy);color:#fff;border:none;border-radius:7px;
  padding:7px 13px;font-size:11px;font-weight:700;font-family:inherit;cursor:pointer;
  transition:background .18s;}
.att-mailall:hover{background:#00224f;}
.att-mailall:disabled{opacity:.45;cursor:default;}
.att-mailbar{display:flex;align-items:center;gap:11px;flex-wrap:wrap;margin-top:11px;
  padding-top:11px;border-top:1px solid rgba(255,255,255,.12);}
.att-mailnote{font-size:10.5px;color:#a9c0da;line-height:1.5;flex:1;min-width:180px;}
.att-divbar{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:0 0 11px;}
.ym-toggle{display:inline-flex;gap:2px;padding:2px;background:#eef2f7;border-radius:7px;}
.ym-btn{background:none;border:none;font-family:inherit;font-size:10.5px;font-weight:700;
  color:var(--muted);padding:5px 10px;border-radius:5px;cursor:pointer;white-space:nowrap;
  transition:background .16s,color .16s,box-shadow .16s;}
.ym-btn:hover{color:var(--navy);}
.ym-btn.on{background:var(--card);color:var(--navy);box-shadow:0 1px 2px rgba(0,48,116,.12);}
.fin-bar{display:inline-flex;gap:3px;padding:3px;margin-bottom:var(--gap);
  background:#eef2f7;border-radius:8px;}
.fin-btn{background:none;border:none;font-family:inherit;font-size:11.5px;font-weight:700;
  color:var(--muted);padding:7px 16px;border-radius:6px;cursor:pointer;
  transition:background .18s,color .18s,box-shadow .18s;}
.fin-btn:hover{color:var(--navy);}
.fin-btn.on{background:var(--card);color:var(--navy);box-shadow:0 1px 3px rgba(0,48,116,.13);}
/* ===== Finance §3-5 — one year scope for all three sub-tabs ==============
   The spec names raw hexes (#0B3C7B, #8C1D2E, #08213F, slate/cyan/gold per
   year). D-001 governs and its own §13 says match the master spec, so these
   are the brand tokens: --gray for a closed year, --cyan for the year in
   flight, --yellow for a planning year. */
.fh{background:var(--navy);border-radius:14px;padding:16px 20px;margin-bottom:var(--gap);
  display:flex;justify-content:space-between;align-items:flex-end;gap:16px;flex-wrap:wrap;}
.fh-l .fh-eb{font:600 10.5px/1.4 ui-monospace,Menlo,monospace;letter-spacing:.18em;color:#9fd9f4;}
.fh-l .fh-t{font-size:20px;font-weight:800;color:#fff;line-height:1.2;}
.fh-l .fh-s{font-size:11.5px;color:#c3d4e8;margin-top:2px;}
.fh-y{display:flex;gap:10px;flex-wrap:wrap;}
.fyc{background:rgba(255,255,255,.1);border-radius:10px;padding:9px 13px 7px;min-width:118px;
  border-bottom:3px solid var(--gray);}
.fyc.cur{border-bottom-color:var(--cyan);}
.fyc.fut{border-bottom-color:var(--yellow);}
.fyc .y{font:700 10px/1 ui-monospace,Menlo,monospace;letter-spacing:.09em;color:#c3d4e8;}
.fyc .v{font-size:21px;font-weight:800;color:#fff;line-height:1.15;margin-top:3px;
  font-variant-numeric:tabular-nums;}
.fyc .v.miss{font-size:11px;font-weight:700;color:#9fb4cd;letter-spacing:.04em;}
.fcb{background:var(--card);border-radius:14px;box-shadow:0 1px 3px rgba(0,0,0,.08);
  padding:12px 16px;margin-bottom:var(--gap);display:flex;align-items:center;gap:14px;flex-wrap:wrap;}
.fcb .fin-bar{margin-bottom:0;}
.fsl{font:700 10px/1 ui-monospace,Menlo,monospace;letter-spacing:.14em;color:var(--muted);}
.fyp{display:flex;gap:5px;flex-wrap:wrap;}
.fyp button{font-family:inherit;font-size:11.5px;font-weight:700;padding:6px 12px;border-radius:7px;
  cursor:pointer;background:#F1F5FA;color:#5A6B82;border:1px solid #DCE4EE;}
.fyp button.on{background:var(--red);color:#fff;border-color:var(--red);}
.fsn{font-size:11.5px;color:var(--muted);margin-left:auto;text-align:right;}
.fig{background:var(--navy);border-radius:12px;padding:13px 18px;margin-bottom:var(--gap);
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;}
.fig p{font-size:13.5px;color:#dbe7f4;flex:1;min-width:280px;margin:0;}
.fig b{color:#fff;font-weight:700;font-variant-numeric:tabular-nums;}
.fig-b{font:700 10px/1 ui-monospace,Menlo,monospace;letter-spacing:.1em;padding:6px 11px;
  border-radius:20px;white-space:nowrap;}
.fig-b.ahead{background:var(--red);color:#fff;}
.fig-b.on{background:var(--yellow);color:#fff;}
.fig-b.under{background:var(--green);color:#fff;}
/* Finance §6 — Budget. The strip deliberately carries SHARES, not dollars:
   the hero above it already prints each year's total, and printing the same
   number twice on one screen is how a dashboard stops being trusted. */
.fstrip{background:var(--card);border-radius:14px;box-shadow:0 1px 3px rgba(0,0,0,.08);
  padding:14px 18px;margin-bottom:var(--gap);}
.fstrip>.h{font-size:12.5px;font-weight:800;color:var(--navy);}
.fstrip>.s{font-size:11px;color:var(--muted);margin:2px 0 10px;}
.fsb{display:flex;height:14px;border-radius:7px;overflow:hidden;background:#EEF2F7;}
.fsb i{display:block;height:100%;}
.fsg{display:flex;gap:16px;flex-wrap:wrap;margin-top:10px;}
.fsg span{font-size:11.5px;color:var(--muted);display:flex;align-items:center;gap:6px;}
.fsg span>i{width:9px;height:9px;border-radius:2px;flex:none;}
.fsg b{color:var(--text);font-weight:700;font-variant-numeric:tabular-nums;}
.frec{border:1px solid #E4CDD3;background:#FBF4F5;border-left:3px solid var(--red);
  border-radius:10px;padding:11px 15px;margin-bottom:var(--gap);font-size:12.5px;
  color:var(--text);line-height:1.5;}
.frec b{font-weight:700;font-variant-numeric:tabular-nums;}
.fpn{background:var(--card);border-radius:14px;box-shadow:0 1px 3px rgba(0,0,0,.08);
  padding:15px 18px 18px;margin-bottom:var(--gap);}
.fpn>h3{font-size:13px;font-weight:800;color:var(--navy);margin:0;}
.fpn>.s{font-size:11px;color:var(--muted);margin:2px 0 12px;}
.fpn .ir-tr{padding:5px 0;grid-template-columns:minmax(200px,1.15fr) 1fr 100px;}
/* §13: the category column needs 190px or the names wrap onto two lines. */
.fpn.cm .ir-tr{grid-template-columns:minmax(190px,1fr) 1fr 46px 92px 104px;}
.fpn .ir-x{margin:0;border:0;padding:0;}
.fyo{font:700 9.5px/1 ui-monospace,Menlo,monospace;letter-spacing:.06em;padding:5px 6px;
  border-radius:5px;text-align:center;white-space:nowrap;}
.fyo.up{background:var(--red-bg);color:var(--red);}
.fyo.dn{background:var(--green-bg);color:var(--green);}
.fyo.new{background:var(--cyan-bg);color:#0E6A8C;}
.fyo.na{background:#F1F5FA;color:var(--muted);}
.fpc{text-align:right;font:700 11px/1 ui-monospace,Menlo,monospace;color:var(--muted);}
.fbd{width:100%;height:auto;display:block;}
.fbd .gl{stroke:#E7ECF3;stroke-width:1;}
.fbd .ax{font:400 9px ui-monospace,Menlo,monospace;fill:#8C99AA;}
.fbd .ln{fill:none;stroke:var(--navy);stroke-width:2;}
.fbd .ar{fill:rgba(46,95,163,.13);}
.fbd .tg{fill:none;stroke:var(--red);stroke-width:1.5;stroke-dasharray:6 4;}
.fbd .tl{font:700 9px ui-monospace,Menlo,monospace;fill:var(--red);}
.fnext ol{margin:0;padding-left:20px;}
.fnext li{font-size:12.5px;color:var(--text);margin:5px 0;line-height:1.45;}
/* Finance §7 — the expense ledger, grouped by show. Replaces one flat table
   of 88 rows, which could not answer "what did this show cost" without a
   spreadsheet. */
.fled{display:flex;flex-direction:column;gap:9px;}
.fgrp{border:1px solid #E3E9F1;border-radius:12px;overflow:hidden;background:var(--card);}
.fgh{display:grid;grid-template-columns:16px minmax(180px,1fr) 132px 112px;gap:10px;
  align-items:center;width:100%;padding:10px 14px;background:#F7F9FC;border:0;
  border-bottom:1px solid #E3E9F1;font-family:inherit;text-align:left;cursor:pointer;}
.fgh:hover{background:#EFF4FA;}
.fgc{font-size:10px;color:var(--muted);}
.fgrp.shut .fgc{display:inline-block;transform:rotate(-90deg);}
.fgrp.shut .fgb{display:none;}
.fgrp.shut .fgh{border-bottom:0;}
.fgn{font-size:12.5px;font-weight:700;color:var(--navy);}
.fgy{font:700 9px/1 ui-monospace,Menlo,monospace;letter-spacing:.07em;background:var(--navy);
  color:#fff;border-radius:4px;padding:3px 5px;margin-left:7px;font-style:normal;}
.fgm{font-size:11px;color:var(--muted);text-align:right;}
.fgv{font:800 13px/1 ui-monospace,Menlo,monospace;color:var(--navy);text-align:right;
  font-variant-numeric:tabular-nums;}
.fgr{display:grid;grid-template-columns:88px minmax(120px,1fr) 190px minmax(140px,1.25fr) 150px 100px;
  gap:10px;align-items:center;padding:6px 14px;border-bottom:1px solid #F2F5F9;font-size:12px;}
.fgr:last-child{border-bottom:0;}
.fgr .d{color:var(--muted);font-variant-numeric:tabular-nums;font-size:11px;}
.fgr .n{color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.fgr .a{text-align:right;font:700 12px/1 ui-monospace,Menlo,monospace;
  font-variant-numeric:tabular-nums;color:var(--navy);}
/* §7.4: a category is always a pill, never a blank cell. Editing it is still
   possible - the pill IS the select when the viewer can write. */
.fcp{display:inline-block;padding:3px 9px;border-radius:20px;font-size:10px;font-weight:700;
  white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis;}
.fcp.none{background:transparent;color:#8C99AA;border:1px dashed #C3CCD9;}
.xe-sel.pill{border-radius:20px;padding:3px 8px;font-size:10px;font-weight:700;max-width:186px;
  border-color:transparent;white-space:nowrap;}
.ffoot{display:grid;grid-template-columns:1fr 112px;gap:10px;padding:11px 15px;
  background:var(--navy);color:#fff;border-radius:12px;font-size:12px;font-weight:700;}
.ffoot .a{text-align:right;font-variant-numeric:tabular-nums;}
.fsrch{min-width:180px;flex:1;max-width:260px;padding:6px 10px;border:1px solid #E2E8F0;
  border-radius:8px;font-family:inherit;font-size:12px;background:var(--card);}
.fsrch:focus{outline:none;border-color:var(--cyan);}
.dpt-bar{display:flex;gap:3px;padding:4px;margin:0 0 6px;background:rgba(255,255,255,.06);
  border-radius:9px;position:sticky;top:0;z-index:3;overflow-x:auto;scrollbar-width:none;}
.dpt-bar::-webkit-scrollbar{display:none;}
.dpt-btn{flex:1;min-width:fit-content;white-space:nowrap;background:none;border:none;
  color:#9fb8d4;font-family:inherit;font-size:11px;font-weight:700;padding:7px 11px;
  border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:5px;
  transition:background .18s,color .18s;}
.dpt-btn svg{width:12px;height:12px;flex-shrink:0;}
.dpt-btn:hover{color:#fff;background:rgba(255,255,255,.07);}
.dpt-btn.on{background:var(--cyan);color:#fff;box-shadow:0 1px 4px rgba(3,174,230,.35);}
.dpt-pane{animation:dptIn .22s ease;}
@keyframes dptIn{from{opacity:0;transform:translateY(3px);}to{opacity:1;transform:none;}}
.ck-head{display:flex;align-items:center;gap:8px;margin-bottom:6px;font-size:10.5px;
  font-weight:700;color:#a9c0da;}
.ck-head .cnt{margin-left:auto;font-variant-numeric:tabular-nums;}
.att-name{font-weight:600;color:#fff;line-height:1.3;}
.att-role{font-size:11px;color:#9fb8d4;margin-top:2px;line-height:1.3;}
/* The roster can be wider than a 33% panel. Scroll the table itself rather
   than letting it stretch the sidebar and break the sticky positioning. */
.attendee-scroll{overflow-x:auto;overscroll-behavior-x:contain;margin:0 -2px;}
.detail-panel .attendee-table{min-width:330px;}
.detail-panel .attendee-table td,.detail-panel .attendee-table th{white-space:nowrap;}
.detail-panel .attendee-table td:last-child{width:1%;}
/* ---- sub-renderers were written for a white card; re-tone them for navy ----
   Each one emits its own <h4>, which the collapsible <summary> already
   provides. That duplicate inherited a dark-navy colour and rendered as
   near-invisible ghost text. Collapse the label but keep its count badge. */
.dsec-body h4{font-size:0 !important;letter-spacing:0 !important;margin:0 0 8px !important;line-height:0;}
.dsec-body h4 .badge{font-size:11px;line-height:1.7;letter-spacing:.3px;}
.dsec-body .detail-block,.dsec-body .checklist-wrap,.dsec-body .outcomes-wrap,.dsec-body .attendees-wrap{margin:0;}
.dsec-body .detail-block p,.dsec-body .detail-block .reception-list{color:#dce7f5;}
.dsec-body .detail-block .reception-list li{color:#dce7f5;}
.dsec-body .detail-block .doc-link{color:var(--cyan);font-weight:700;}
/* helper notes carry an inline colour, so they need an explicit override */
.dsec-body p[style]{color:#a9c0da !important;}
.dsec-body .checklist-scroll{border-color:rgba(255,255,255,.18);}
.dsec-body .checklist-table thead th{background:rgba(255,255,255,.13);color:#fff;}
.dsec-body .checklist-table tbody td{border-bottom-color:rgba(255,255,255,.1);color:#dce7f5;}
.dsec-body .checklist-table tbody tr:hover{background:rgba(255,255,255,.06);}
/* A bare `tbody tr:hover{background:#f5f8fc}` further up applies to every
   table on the page, including the cost breakdown inside the navy panel —
   near-white on near-white made the hovered row unreadable. */
/* The bare `tbody tr:hover{background:#f5f8fc}` higher up hits every table on
   the page. Inside the navy panel that put near-white on near-white. Force
   both the background AND the text colour so nothing can win this back. */
.detail-panel tbody tr:hover,.dsec-body tbody tr:hover{background:rgba(3,174,230,.16) !important;}
.detail-panel tbody tr:hover td,.dsec-body tbody tr:hover td{color:#ffffff !important;}
.dsec-body .checklist-table tbody tr.is-complete td{color:#8ea6c2;}
.dsec-body .checklist-phase,.dsec-body .checklist-empty{color:#a9c0da;}
.dsec-body .outcomes-wrap textarea,.dsec-body .outcomes-metrics input{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.22);color:#fff;}
.dsec-body .outcomes-wrap textarea::placeholder,.dsec-body .outcomes-metrics input::placeholder{color:#94accb;}
.dsec-body .outcomes-metrics label{color:#a9c0da;}
.dsec-body .outcomes-actions button{background:var(--cyan);color:#00243f;}
.dsec-body .outcomes-metrics-readonly .badge{background:rgba(255,255,255,.16);color:#fff;}
[hidden]{display:none !important;}
.sigmark{width:100%;height:100%;display:block;}
/* Chevron motif lifted straight from the logo, used as a watermark on the
   dark surfaces. Pointer-events off so it never intercepts a click. */
.brand-watermark{position:absolute;pointer-events:none;color:#fff;opacity:.05;}
.header{position:relative;overflow:hidden;}
.header::before{content:'';position:absolute;top:0;left:0;right:0;height:4px;background:var(--sigma-gradient);z-index:2;}
.header > *{position:relative;z-index:1;}
.header::after{content:'';position:absolute;left:0;right:0;top:-8%;height:116%;
  background:url('/wave.png') center/100% 100% no-repeat;
  opacity:.22;pointer-events:none;z-index:0;}
@media (max-width:720px){.header::after{opacity:.15;}}
.dp-head{position:relative;overflow:hidden;}
.dp-head > *{position:relative;z-index:1;}
/* position:absolute MUST be restated here. `.brand-watermark` sets it at
   specificity (0,1,0), but `.dp-head > *{position:relative}` above is also
   (0,1,0) and comes later, so it won — which dropped this 150x150 block into
   normal flow at the top of the right column and pushed every line of text
   down by ~150px. That was the "padding above the text" and the blank band in
   the middle of the docked panel: one element, both symptoms. */
.dp-head .brand-watermark{position:absolute;width:150px;height:150px;
  right:-38px;bottom:-46px;opacity:.07;}
.view-toggle button.active{box-shadow:inset 0 -2px 0 rgba(3,174,230,.85);}
/* employee directory */
.dir-tools{background:var(--card);border-radius:var(--radius);box-shadow:0 1px 3px rgba(0,0,0,.08);
  padding:14px 18px;margin-bottom:var(--gap);display:flex;gap:10px;align-items:center;flex-wrap:wrap;}
.dir-search{flex:1;min-width:200px;max-width:340px;padding:8px 11px;border:1px solid #d5dce6;
  border-radius:7px;font-size:13px;font-family:inherit;}
.emp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;}
.emp-card{background:var(--card);border-radius:var(--radius);box-shadow:0 1px 3px rgba(0,0,0,.08);
  padding:14px 16px;border-left:3px solid var(--cyan);}
.emp-name{font-size:14px;font-weight:800;color:var(--navy);line-height:1.25;}
.emp-role{font-size:12px;color:var(--text);margin-top:2px;}
.emp-dept{display:inline-block;margin-top:7px;padding:2px 8px;border-radius:20px;
  background:#eef2f7;color:var(--navy);font-size:9.5px;font-weight:700;}
.emp-div{display:inline-block;margin-top:7px;margin-right:5px;padding:2px 8px;
  border-radius:20px;background:var(--navy);color:#fff;font-size:9.5px;font-weight:700;}
.emp-contact{margin-top:9px;padding-top:8px;border-top:1px solid #eef1f5;font-size:11.5px;line-height:1.7;}
.emp-contact a{color:var(--muted);text-decoration:none;}
.emp-contact a:hover{color:var(--navy);text-decoration:underline;}
.emp-contact .none{color:#9aa4b2;font-style:italic;}
.emp-card.former{opacity:.72;border-left-color:var(--gray);}
.emp-former{display:inline-block;margin-left:7px;padding:1px 7px;border-radius:20px;
  background:#eef1f5;color:var(--muted);font-size:9px;font-weight:700;vertical-align:2px;}
.emp-formernote{margin-top:9px;font-size:10.5px;color:var(--muted);font-style:italic;line-height:1.4;}
.emp-add{margin-top:10px;width:100%;padding:6px 8px;border:1px solid #d5dce6;border-radius:6px;
  font-size:11.5px;font-family:inherit;background:#fff;color:var(--navy);cursor:pointer;
  transition:border-color .2s,background .2s;}
.emp-add:hover{border-color:var(--navy);}
.emp-add.ok{border-color:var(--green);background:var(--green-bg);}
.emp-add:disabled{opacity:.6;cursor:default;}
/* attendee search picker */
.dir-hits{max-height:180px;overflow-y:auto;overscroll-behavior:contain;margin-top:6px;
  border:1px solid rgba(255,255,255,.18);border-radius:7px;background:rgba(255,255,255,.06);}
.dir-hit{display:flex;align-items:baseline;gap:9px;padding:7px 10px;cursor:pointer;font-size:12.5px;
  border-top:1px solid rgba(255,255,255,.08);}
.dir-hit:first-child{border-top:none;}
.dir-hit:hover{background:rgba(255,255,255,.12);}
.dir-hit .nm{color:#fff;font-weight:600;}
.dir-hit .rl{color:#9fb8d4;font-size:11px;margin-left:auto;text-align:right;}
.dir-hint{padding:8px 10px;font-size:11.5px;color:#a9c0da;font-style:italic;}
.mem-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:var(--gap);}
.mem-card{background:var(--card);border-radius:var(--radius);box-shadow:0 1px 3px rgba(0,0,0,.08);
  padding:16px 18px;display:flex;flex-direction:column;position:relative;overflow:hidden;}
.mem-card::after{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--cyan);}
.mem-head{display:flex;align-items:flex-start;gap:12px;margin-bottom:12px;}
.mem-logo{width:46px;height:46px;border-radius:9px;flex-shrink:0;display:flex;
  align-items:center;justify-content:center;overflow:hidden;background:#f1f5fa;border:1px solid #e2e8f0;}
.mem-logo img{width:100%;height:100%;object-fit:contain;padding:5px;}
/* Fallback when no logo has been uploaded to the Airtable attachment field. */
.mem-logo.mono{background:linear-gradient(140deg,var(--navy),#0a4a86);border-color:transparent;
  color:#fff;font-size:14px;font-weight:800;letter-spacing:.5px;}
.mem-headtext{min-width:0;flex:1;}
.mem-members{margin-top:10px;border-top:1px solid #eef1f5;padding-top:4px;}
.mem-members summary{cursor:pointer;list-style:none;padding:7px 0;font-size:11.5px;font-weight:700;
  color:var(--navy);display:flex;align-items:center;gap:7px;}
.mem-members summary::-webkit-details-marker{display:none;}
.mem-members summary .cnt{background:#eef2f7;color:var(--navy);border-radius:20px;padding:1px 8px;font-size:10.5px;}
.mem-members summary .chev{margin-left:auto;font-size:10px;color:var(--muted);transition:transform .18s;}
.mem-members[open] summary .chev{transform:rotate(180deg);}
.mem-mlist{list-style:none;margin:0;padding:0 0 8px;max-height:230px;overflow-y:auto;overscroll-behavior:contain;}
.mem-mitem{padding:6px 8px;border-radius:6px;font-size:12px;line-height:1.35;}
.mem-mitem:hover{background:#f4f7fb;}
.mm-top{display:flex;gap:8px;align-items:baseline;}
.mm-name{font-weight:600;color:var(--navy);}
.mm-type{font-size:10.5px;color:var(--muted);margin-left:auto;text-align:right;flex-shrink:0;}
.mm-sub{font-size:10.5px;color:var(--muted);margin-top:1px;}
.mm-sub a{color:var(--muted);}
.mm-sub a:hover{color:var(--navy);}
.mem-mnone{padding:6px 8px 10px;font-size:11.5px;color:var(--muted);font-style:italic;}
.mem-abbr{font-size:15px;font-weight:800;color:var(--navy);line-height:1.2;}
.mem-name{font-size:11.5px;color:var(--muted);line-height:1.35;margin-top:3px;}
.mem-level{display:inline-block;margin-top:6px;padding:2px 9px;border-radius:20px;
  background:var(--navy);color:#fff;font-size:9.5px;font-weight:700;letter-spacing:.3px;}
.mem-facts{display:grid;grid-template-columns:1fr 1fr;gap:9px;border-top:1px solid #eef1f5;padding-top:11px;}
.mem-fact-lbl{font-size:9.5px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.3px;}
.mem-fact-val{font-size:13px;font-weight:700;color:var(--text);margin-top:2px;font-variant-numeric:tabular-nums;}
.mem-fact-val.unset{color:#9aa4b2;font-weight:600;font-style:italic;font-size:12px;}
.mem-fact-val.warn{color:var(--red);}
.mem-seats{margin-top:11px;border-top:1px solid #eef1f5;padding-top:11px;}
.mem-seatbar{height:6px;border-radius:4px;background:#e8edf4;overflow:hidden;margin-top:6px;}
.mem-seatbar span{display:block;height:100%;background:var(--cyan);}
.mem-seatbar span.full{background:var(--red);}
.mem-links{display:flex;gap:6px;flex-wrap:nowrap;margin-top:12px;}
.mem-btn{flex:1 1 0;min-width:0;padding:6px 8px;border-radius:6px;font-size:11px;font-weight:700;
  font-family:inherit;cursor:pointer;text-decoration:none;border:1px solid #d5dce6;background:#fff;
  color:var(--navy);display:inline-flex;align-items:center;justify-content:center;gap:5px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.mem-btn.primary{flex:1.5 1 0;}
.mem-btn:hover{border-color:var(--navy);}
.mem-btn.primary{background:var(--navy);border-color:var(--navy);color:#fff;}
.mem-btn.primary:hover{background:var(--navy2);}
.mem-btn[aria-disabled="true"]{opacity:.45;cursor:default;pointer-events:none;}
.mem-events{margin-top:12px;border-top:1px solid #eef1f5;padding-top:4px;}
.mem-events summary{cursor:pointer;list-style:none;padding:7px 0;font-size:11.5px;font-weight:700;
  color:var(--navy);display:flex;align-items:center;gap:7px;}
.mem-events summary::-webkit-details-marker{display:none;}
.mem-events summary .cnt{background:#eef2f7;color:var(--navy);border-radius:20px;padding:1px 8px;font-size:10.5px;}
.mem-events summary .chev{margin-left:auto;font-size:10px;color:var(--muted);transition:transform .18s;}
.mem-events[open] summary .chev{transform:rotate(180deg);}
.mem-evlist{list-style:none;margin:0;padding:0 0 8px;max-height:210px;overflow-y:auto;overscroll-behavior:contain;}
.mem-evitem{padding:6px 8px;border-radius:6px;cursor:pointer;font-size:12px;display:flex;gap:8px;align-items:baseline;}
.mem-evitem:hover{background:#f4f7fb;}
.mem-evitem .yr{font-size:10.5px;font-weight:700;color:var(--muted);flex-shrink:0;}
.mem-evitem .nm{color:var(--navy);font-weight:600;}
.mem-evnone{padding:6px 8px 10px;font-size:11.5px;color:var(--muted);font-style:italic;}
/* official vendors, inside the detail panel's Booth / Logistics section */
.ov-wrap{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.14);}
.ov-h{font-size:9.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  color:#7FC4F0;display:flex;align-items:center;gap:6px;margin-bottom:7px;}
.ov-row{padding:5px 0 6px;border-bottom:1px solid rgba(255,255,255,.07);}
.ov-row:last-child{border-bottom:0;}
.ov-n{display:block;font-size:12.5px;font-weight:700;color:#fff;}
.ov-r{display:block;font-size:11px;color:#CFE0F2;margin-top:1px;line-height:1.4;}
.ov-c{display:block;font-size:10.5px;color:#9FBBDC;margin-top:2px;
  font-variant-numeric:tabular-nums;}
/* show intel: sessions, partner stands and competitor stands. Deliberately
   reuses the .ov- tones rather than introducing a colour - the group heading
   is what separates a partner from a competitor, not a new hue. */
.si-g{margin-bottom:14px;}
.si-g:last-of-type{margin-bottom:0;}
.si-gh{font-size:9.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  color:#7FC4F0;display:flex;align-items:center;gap:7px;margin-bottom:6px;}
.si-n{background:rgba(255,255,255,.14);color:#fff;border-radius:20px;padding:1px 7px;
  font-size:10px;letter-spacing:0;font-variant-numeric:tabular-nums;}
.si-row{padding:6px 0 7px;border-bottom:1px solid rgba(255,255,255,.07);}
.si-row:last-child{border-bottom:0;}
.si-top{display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;}
.si-nm{font-size:12.5px;font-weight:700;color:#fff;}
.si-tag{flex:none;white-space:nowrap;background:rgba(3,174,230,.22);color:#7FC4F0;
  border-radius:4px;padding:1px 7px;font-size:10.5px;font-weight:700;
  font-variant-numeric:tabular-nums;}
.si-wh{font-size:11px;color:#CFE0F2;margin-top:2px;line-height:1.4;}
.si-wy{font-size:11px;color:#9FBBDC;margin-top:3px;line-height:1.5;}
.si-src{display:inline-block;margin-top:4px;font-size:12px;}

/* ---- Plan panel: three views over one body of show intelligence ----------
   The Plan tab used to be one long scroll - personas, eight timed sessions,
   twelve partner stands, ten competitor stands and two open items, every one
   of them at the same visual weight, so an executive had to read the lot to
   find out which ones were optional. Three views over the SAME rows fix that.
   Palette and type are the existing tokens; no new colours are introduced. */
.pv-bar{display:flex;align-items:center;justify-content:space-between;gap:10px;
  flex-wrap:wrap;margin:0 0 12px;}
.pv-sum{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9.5px;font-weight:600;
  letter-spacing:.1em;text-transform:uppercase;color:#9FBBDC;min-width:0;}
/* flex:none + nowrap: the header is space-between, and without both of these
   the switcher is the thing that gets compressed and "By Priority" wraps. */
.pv-tabs{flex:none;display:flex;gap:3px;padding:3px;border-radius:8px;
  background:rgba(255,255,255,.07);}
.pv-tab{white-space:nowrap;background:none;border:none;color:#C6D8EC;
  cursor:pointer;font-family:inherit;font-size:11px;font-weight:600;
  line-height:1;padding:7px 11px;border-radius:6px;}
.pv-tab:hover{background:rgba(255,255,255,.08);color:#fff;}
.pv-tab.on{background:var(--sp-cyan);color:var(--sp-navy);}
.pv-days{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px;}
.pv-day{background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.14);
  color:#C6D8EC;border-radius:999px;padding:5px 12px;font-family:inherit;
  font-size:11px;font-weight:600;cursor:pointer;white-space:nowrap;}
.pv-day:hover{background:rgba(255,255,255,.13);color:#fff;}
.pv-day.on{background:var(--sp-cyan);border-color:var(--sp-cyan);color:var(--sp-navy);}
.pv-clash{background:rgba(146,24,54,.3);border-left:3px solid var(--red);
  border-radius:0 7px 7px 0;padding:9px 12px;margin-bottom:11px;
  font-size:11.5px;color:#E7C6CC;line-height:1.5;}
.pv-clash b{color:#fff;}
.pv-ses{border-left:3px solid var(--sp-cyan);background:rgba(255,255,255,.04);
  border-radius:0 7px 7px 0;padding:9px 12px;margin-bottom:8px;}
.pv-ses.pv-x{border-left-color:var(--red);}
.pv-t{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:700;color:#7FC4F0;}
.pv-ses.pv-x .pv-t{color:#E7C6CC;}
.pv-h{font-size:12.5px;font-weight:700;color:#fff;margin-top:2px;}
.pv-loc{font-size:11px;color:#CFE0F2;margin-top:2px;line-height:1.4;}
.pv-why{font-size:11px;color:#9FBBDC;margin-top:4px;line-height:1.5;}
.pv-flag{display:inline-block;margin-left:7px;background:rgba(3,174,230,.22);
  color:#7FC4F0;border-radius:4px;padding:1px 6px;font-size:9px;font-weight:700;
  letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;}
.pv-flag.pv-red{background:rgba(146,24,54,.4);color:#E7C6CC;}
.pv-flag.pv-gold{background:rgba(138,109,31,.34);color:#E9CE8E;}
.pv-strip{margin-top:14px;padding-top:12px;border-top:1px solid rgba(255,255,255,.1);}
.pv-sh{font-size:9.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  color:#9FBBDC;margin-bottom:8px;}
.pv-chips{display:flex;flex-wrap:wrap;gap:6px;}
.pv-chip{background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.14);
  border-radius:6px;padding:5px 9px;font-size:11px;color:#DCE7F5;}
.pv-chip.pv-recon{border-color:rgba(146,24,54,.65);}
.pv-b{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;color:#7FC4F0;margin-left:6px;}
.pv-chip.pv-recon .pv-b{color:#E7C6CC;}
.pv-none{font-size:11px;color:#9FBBDC;line-height:1.5;}
/* The cheat sheet is deliberately light: it exists to be printed or
   screenshotted and carried on the floor, where a navy page is unreadable. */
.pv-cs{background:#fff;color:#12233D;border-radius:9px;padding:14px 15px;}
.pv-cs-g{display:grid;grid-template-columns:1.15fr 1fr;gap:16px;align-items:start;}
.pv-csh{font-size:9.5px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;
  color:#5A6B82;margin-bottom:7px;}
.pv-csh.pv-mt{margin-top:15px;}
.pv-dh{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;font-weight:700;
  color:#0B3C7B;letter-spacing:.06em;margin:9px 0 3px;}
.pv-cr{display:flex;gap:8px;align-items:baseline;font-size:11px;padding:2px 0;
  border-bottom:1px solid #EEF2F7;line-height:1.45;}
.pv-cr:last-child{border-bottom:0;}
.pv-ct{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;color:#5A6B82;
  flex:none;width:84px;}
.pv-cn{flex:1;min-width:0;color:#12233D;}
.pv-cn i{color:#5A6B82;font-style:normal;}
.pv-cr.pv-must .pv-cn{font-weight:700;}
.pv-cr.pv-x .pv-cn,.pv-cr.pv-x .pv-ct{color:#921836;}
.pv-cb{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;color:#3A4A63;
  flex:none;text-align:right;}
.pv-cf{margin-top:13px;padding-top:10px;border-top:1px solid #DCE4EE;}
.pv-warn{font-size:10.5px;color:#8A6410;background:#FDF1D9;border-radius:5px;
  padding:5px 8px;margin-top:5px;line-height:1.45;}
.pv-warn b{color:#8A6410;}
/* ---- Competitors tab ------------------------------------------------------
   A card grid with a profile panel. Built out of the tokens and shapes the rest
   of the page already uses - the wave hero is the same .bmh component the
   Itinerary and Booth tabs use, so the shell costs almost nothing here.
   Three states matter and must stay distinguishable: a booth we know, a show
   we CHECKED where they are absent, and a show nobody has looked at. */
.cx-wrap{display:flex;gap:var(--gap);align-items:flex-start;}
.cx-main{flex:1;min-width:0;}
.cx-ctl{background:#fff;border:1px solid var(--sp-bd);border-radius:14px;
  padding:11px 14px;display:flex;gap:12px;align-items:center;flex-wrap:wrap;
  margin-bottom:var(--gap);}
.cx-seg{display:flex;gap:2px;background:#F1F5FA;border-radius:9px;padding:3px;flex:none;}
.cx-seg button{white-space:nowrap;background:none;border:none;cursor:pointer;
  font-family:inherit;font-size:11px;font-weight:700;color:var(--sp-tx-mut);
  padding:6px 12px;border-radius:7px;}
.cx-seg button.on{background:#0B3C7B;color:#fff;}
.cx-note{margin-left:auto;font-size:11px;color:var(--muted);white-space:nowrap;}
.cx-sech{font-size:9.5px;font-weight:800;letter-spacing:.13em;text-transform:uppercase;
  color:var(--sp-tx-faint);margin:0 0 9px;}
.cx-sech em{font-style:normal;color:var(--sp-tx-mut);}
.cx-g1{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:12px;
  margin-bottom:var(--gap);}
.cx-g2{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px;
  margin-bottom:var(--gap);}
.cx-card{background:#fff;border:1px solid #D7E0EC;border-radius:12px;padding:12px 14px;
  cursor:pointer;display:flex;flex-direction:column;text-align:left;width:100%;
  font-family:inherit;}
.cx-card:hover{border-color:#1665C0;}
.cx-card.pri{border-top:3px solid var(--sp-crimson);border-color:#E7C6CC;}
.cx-card.on{border-color:#1665C0;box-shadow:0 0 0 3px rgba(22,101,192,.25);}
.cx-card.pri.on{border-color:var(--sp-crimson);box-shadow:0 0 0 3px rgba(140,29,46,.25);}
.cx-cn{font-size:16px;font-weight:800;color:var(--sp-tx);line-height:1.25;}
.cx-card.wat .cx-cn{font-size:13.5px;font-weight:700;}
.cx-hq{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;color:var(--muted);margin-top:3px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.cx-fx{font-size:11.5px;color:var(--sp-tx-body);line-height:1.45;margin-top:7px;}
.cx-card.wat .cx-fx{font-size:11px;}
.cx-chiprow{display:flex;gap:5px;flex-wrap:wrap;margin-top:auto;padding-top:9px;}
.cx-chip{background:#F1F5FA;border:1px solid var(--sp-bd);border-radius:5px;
  padding:2px 7px;font-size:10px;font-weight:600;color:var(--sp-tx-body);white-space:nowrap;}
.cx-chip.cx-boo{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;background:#EAF2FB;
  border-color:#CFE0F2;color:var(--sp-navy);}
.cx-chip.cx-unset{border-style:dashed;color:var(--muted);background:#fff;}
.cx-badge{background:var(--sp-crimson);color:#fff;border-radius:5px;padding:2px 7px;
  font-size:9px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;
  white-space:nowrap;}
.cx-t{border-radius:5px;padding:2px 8px;font-size:9.5px;font-weight:700;
  letter-spacing:.09em;text-transform:uppercase;white-space:nowrap;}
.cx-t1{background:#F6E4E7;color:var(--sp-crimson);}
.cx-t2{background:#FDF1D9;color:#8A6410;}
.cx-t3{background:#EDF1F7;color:var(--muted);}
.cx-t0{background:#FDF1D9;color:#8A6410;}
.cx-foot{display:flex;gap:8px;align-items:center;margin-top:9px;padding-top:8px;
  border-top:1px solid var(--sp-bd-lt);font-size:10.5px;color:var(--muted);}
.cx-foot .cx-open{margin-left:auto;color:#1665C0;font-weight:700;white-space:nowrap;}
.cx-top{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;}
/* The panel. Sticky and independently scrollable so a long attendance list
   never drags the card grid with it. */
.cx-p{flex:0 0 520px;position:sticky;top:0;max-height:100vh;overflow:auto;
  background:#fff;border:1px solid var(--sp-bd);border-radius:14px;}
.cx-ph{background:linear-gradient(150deg,var(--sp-navy),var(--sp-navy-deep));
  padding:15px 17px;position:relative;}
.cx-pk{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:8.5px;font-weight:700;
  letter-spacing:.16em;text-transform:uppercase;color:#7FC4F0;}
.cx-pn{font-size:20px;font-weight:800;color:#fff;line-height:1.2;margin-top:3px;
  padding-right:26px;}
.cx-phq{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;color:#CFE0F2;margin-top:4px;}
.cx-pbadges{display:flex;gap:6px;flex-wrap:wrap;margin-top:9px;}
.cx-plinks{display:flex;gap:12px;flex-wrap:wrap;margin-top:9px;font-size:11.5px;}
.cx-plinks a{color:#7FC4F0;font-weight:700;text-decoration:none;white-space:nowrap;}
.cx-plinks a:hover{text-decoration:underline;}
.cx-px{position:absolute;top:12px;right:13px;background:rgba(255,255,255,.14);
  border:none;color:#fff;width:22px;height:22px;border-radius:6px;cursor:pointer;
  font-size:14px;line-height:1;font-family:inherit;}
.cx-pb{padding:14px 17px 17px;}
.cx-h{font-size:9px;font-weight:800;letter-spacing:.13em;text-transform:uppercase;
  color:var(--sp-tx-faint);margin:15px 0 6px;}
.cx-h:first-child{margin-top:0;}
.cx-h span{color:#8A6410;margin-left:6px;letter-spacing:.09em;}
.cx-body{font-size:12px;color:var(--sp-tx-body);line-height:1.55;white-space:pre-line;}
.cx-tiles{display:grid;grid-template-columns:1fr 1fr;gap:8px;}
.cx-tile{background:#F8FAFD;border:1px solid var(--sp-bd);border-radius:9px;padding:9px 11px;}
.cx-tile.gap{background:#FDF1D9;border-color:#E9CE8E;}
.cx-tk{font-size:8.5px;font-weight:800;letter-spacing:.13em;text-transform:uppercase;
  color:var(--sp-tx-faint);}
.cx-tv{font-size:12px;font-weight:700;color:var(--sp-tx);margin-top:3px;line-height:1.4;}
.cx-tile.gap .cx-tv{color:#8A6410;}
.cx-att{display:flex;gap:9px;align-items:center;padding:5px 8px;border-radius:7px;
  margin-bottom:3px;background:#F8FAFD;border:1px solid var(--sp-bd-lt);}
.cx-att.here{background:#EAF2FB;border-color:#CFE0F2;}
.cx-att.gone{background:#FCF4F5;border-color:#E7C6CC;}
.cx-am{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9.5px;color:var(--muted);
  flex:none;width:52px;white-space:nowrap;}
.cx-as{flex:1;min-width:0;font-size:11.5px;color:var(--sp-tx);}
.cx-av{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9.5px;font-weight:700;flex:none;
  white-space:nowrap;color:var(--muted);}
.cx-att.here .cx-av{color:var(--sp-navy);}
.cx-att.gone .cx-av{color:var(--sp-crimson);}
.cx-empty{border:1px dashed var(--sp-bd);border-radius:9px;padding:11px 13px;
  font-size:11.5px;color:var(--sp-tx-body);line-height:1.5;}
.cx-empty a{color:#1665C0;font-weight:700;word-break:break-all;}
.cx-nb{background:var(--sp-navy);color:#DCE7F5;border-radius:9px;padding:11px 13px;
  font-size:11.5px;line-height:1.55;white-space:pre-line;}
.cx-gaps{background:#FDF1D9;border:1px solid #E9CE8E;border-radius:12px;
  padding:12px 15px;font-size:11.5px;color:#8A6410;line-height:1.6;}
.cx-gaps b{color:#8A6410;}
.cx-none{padding:22px 16px;font-size:12.5px;color:var(--muted);}
@media (max-width:1180px){
  .cx-wrap{flex-direction:column;}
  .cx-p{position:static;flex:1 1 auto;width:100%;max-height:none;}
}
@media (max-width:700px){
  .pv-cs-g{grid-template-columns:1fr;}
  .pv-bar{align-items:flex-start;}
}
/* generated itinerary */
/* sponsorships */
.sp-kpis{display:grid;grid-template-columns:repeat(auto-fill,minmax(158px,1fr));gap:10px;margin-bottom:var(--gap);}
.sp-kpi{background:var(--card);border-radius:var(--radius);box-shadow:0 1px 3px rgba(0,0,0,.08);
  padding:12px 14px;border-left:3px solid var(--cyan);}
.sp-kpi.money{border-left-color:var(--navy);}
.sp-kpi.warn{border-left-color:var(--red);}
.sp-kpi-l{font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--muted);line-height:1.3;}
.sp-kpi-v{font-size:21px;font-weight:800;color:var(--navy);margin-top:4px;line-height:1;font-variant-numeric:tabular-nums;}
.sp-kpi-s{font-size:10.5px;color:var(--muted);margin-top:3px;}
.sp-bar{background:var(--card);border-radius:var(--radius);box-shadow:0 1px 3px rgba(0,0,0,.08);
  padding:12px 16px;margin-bottom:var(--gap);display:flex;gap:9px;align-items:center;flex-wrap:wrap;}
.sp-tag{padding:2px 8px;border-radius:20px;font-size:9.5px;font-weight:700;background:#eef2f7;color:var(--navy);}
.sp-tag.link{background:var(--cyan-bg);color:#00527a;}
.sp-tag.alone{background:#fdf1d9;color:#8a6d1f;}
.sp-tag.lvl{background:var(--navy);color:#fff;}
.sp-none{background:var(--card);border-radius:var(--radius);padding:26px;text-align:center;
  color:var(--muted);font-size:13px;box-shadow:0 1px 3px rgba(0,0,0,.08);line-height:1.6;}
/* ===== Sponsorships 6c — Investment Report ==============================
   Spec names raw hexes (#08213F, #8C1D2E). D-001 governs and the spec's own
   §8 says match the tab, so navy is --navy and the eyebrow is --red. */
.ir{background:var(--card);border-radius:20px;border:1px solid #D7E0EC;margin-bottom:var(--gap);}

.ir-t{padding:4px 28px 10px;}
.ir-th{font:700 11px/1 ui-monospace,Menlo,monospace;letter-spacing:.14em;color:var(--red);
  padding-bottom:8px;border-bottom:1px solid #E4EAF2;margin-bottom:9px;}
.ir-tr{display:grid;grid-template-columns:150px 1fr 90px;gap:12px;align-items:center;
  padding:4px 0;font-size:13px;}
.ir-tr>span:first-child{font-weight:600;color:var(--text);}
.ir-tb{height:5px;background:#EEF2F7;border-radius:3px;overflow:hidden;}
.ir-tb i{display:block;height:100%;background:var(--navy);border-radius:3px;}
.ir-tv{text-align:right;font:700 12px/1 ui-monospace,Menlo,monospace;
  font-variant-numeric:tabular-nums;color:var(--navy);}
.ir-x{margin:16px 28px 24px;border:1px solid #DCE4EE;border-radius:14px;padding:14px 16px;overflow-x:auto;}
.ir-xh{font-size:12.5px;font-weight:800;color:var(--navy);letter-spacing:.02em;}
.ir-xs{font-size:11px;color:var(--muted);margin:2px 0 10px;}
.ir-x table{width:100%;border-collapse:collapse;font-size:11.5px;}
.ir-x th{font:700 9px/1.3 ui-monospace,Menlo,monospace;letter-spacing:.09em;color:var(--muted);
  text-transform:uppercase;text-align:right;padding:0 8px 7px;border-bottom:1px solid #E4EAF2;}
.ir-x th:first-child{text-align:left;}
.ir-x td{padding:6px 8px;text-align:right;border-bottom:1px solid #F1F5F9;
  font-variant-numeric:tabular-nums;}
.ir-x td:first-child{text-align:left;font-weight:700;color:var(--navy);}
.ir-x td.y{background:#F7F9FC;font:700 11.5px/1 ui-monospace,Menlo,monospace;color:var(--text);}
.ir-x td.y.miss{color:var(--yellow);font-size:9px;letter-spacing:.04em;}
.ir-x td.y.non{color:#B7C0CC;font-weight:400;}
.ir-chip{display:inline-block;padding:2px 8px;border-radius:20px;font-size:9.5px;font-weight:700;
  background:#eef2f7;color:var(--muted);}
.ir-chip.ok{background:var(--green-bg);color:var(--green);}
.ir-chip.over{background:var(--yellow-bg);color:var(--yellow);}

/* ===== Sponsorship box grid (concept 9a, spec sections 1-5) ==============
   Its own namespace. It deliberately shares NOTHING with .ir except the
   palette variables, so a change to one cannot silently restyle the other. */
.spg{border-radius:18px;border:1px solid #D7E0EC;background:#fff;overflow:hidden;
  margin-bottom:14px;}
.spg-h{padding:14px 22px;background:linear-gradient(112deg,var(--sp-navy-deep),var(--sp-navy));color:#fff;
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;}
.spg-eb{font-size:9.5px;font-weight:800;letter-spacing:.14em;color:#8FC7EE;}
.spg-sc{font-size:12.5px;font-weight:700;color:#fff;margin-top:2px;}
.spg-cnt{margin-left:auto;display:inline-flex;align-items:center;gap:6px;padding:4px 10px;
  border-radius:20px;background:rgba(255,255,255,.14);font-size:9.5px;font-weight:800;
  letter-spacing:.1em;color:#DCEBF8;}
.spg-cnt b{font:800 12px/1 ui-monospace,Menlo,monospace;color:#fff;letter-spacing:0;}
.spg-q{border:1px solid rgba(255,255,255,.22);background:rgba(255,255,255,.10);color:#fff;
  border-radius:8px;padding:6px 10px;font-size:12px;min-width:210px;}
.spg-q::placeholder{color:#A9C6E2;}
.spg-tabs{padding:12px 22px;background:#F4F7FB;border-bottom:1px solid #E4EBF3;
  display:flex;gap:8px;flex-wrap:wrap;}
.spg-tab{display:inline-flex;align-items:center;gap:7px;padding:7px 13px;border-radius:9px;
  border:1px solid #D7E0EC;background:#fff;color:var(--navy);cursor:pointer;
  font:700 12px/1 inherit;}
.spg-tab .n{font:800 10px/1 ui-monospace,Menlo,monospace;padding:2px 6px;border-radius:20px;
  background:#EEF3F9;color:var(--muted);}
.spg-tab[aria-pressed="true"]{background:var(--navy);border-color:var(--navy);color:#fff;}
.spg-tab[aria-pressed="true"] .n{background:rgba(255,255,255,.2);color:#fff;}
.spg-fl{padding:11px 22px;display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  border-bottom:1px solid #EEF2F7;}
.spg-fl .lab{font-size:9.5px;font-weight:800;letter-spacing:.12em;color:var(--muted);}
.spg-pill,.spg-chip{padding:5px 11px;border-radius:20px;border:1px solid #D7E0EC;background:#fff;
  color:var(--navy);cursor:pointer;font:700 11px/1 inherit;}
.spg-chip .n{font-weight:800;color:var(--muted);margin-left:5px;}
.spg-pill[aria-pressed="true"],.spg-chip[aria-pressed="true"]{background:var(--navy);
  border-color:var(--navy);color:#fff;}
.spg-chip[aria-pressed="true"] .n{color:#CFE2F5;}
.spg-sel{border:1px solid #D7E0EC;border-radius:20px;background:#fff;color:var(--navy);
  font:700 11px/1 inherit;padding:5px 9px;max-width:210px;}
.spg-rst{margin-left:auto;background:none;border:0;color:var(--cyan);cursor:pointer;
  font:700 11px/1 inherit;text-decoration:underline;padding:5px 0;}
.spg-g{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px;
  padding:16px 22px 20px;}
.spg-b{border-radius:12px;border:1px solid #E1E8F0;border-top:3px solid var(--gray);
  background:#fff;padding:11px 12px 0;cursor:pointer;text-align:left;display:flex;
  flex-direction:column;font:inherit;color:inherit;}
.spg-b:hover{border-color:#C3D2E3;}
.spg-b.on{border-color:var(--cyan);box-shadow:0 6px 18px rgba(3,174,230,.22);}
.spg-b .top{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:7px;}
.spg-b .nm{font:700 14px/1.3 inherit;color:var(--navy);min-height:2.6em;}
.spg-b .dt{font:600 9.5px/1.4 ui-monospace,Menlo,monospace;letter-spacing:.05em;
  text-transform:uppercase;color:var(--muted);margin:5px 0 9px;}
.spg-b .ft{margin-top:auto;border-top:1px solid #EEF2F7;padding:8px 0 10px;display:flex;
  align-items:center;justify-content:space-between;gap:8px;}
.spg-b .ct{font:800 12px/1 ui-monospace,Menlo,monospace;color:var(--navy);}
.spg-b .ld{font-size:10px;font-weight:700;color:var(--muted);}
.spg-gap{display:inline-block;padding:2px 7px;border-radius:20px;background:var(--yellow-bg);
  color:var(--yellow);font-size:9px;font-weight:800;letter-spacing:.05em;}
.spg-none{padding:34px 22px;text-align:center;color:var(--muted);font-size:12.5px;}
.spg-teach{max-width:520px;margin:0 auto;text-align:left;}
.spg-teach h4{margin:0 0 7px;font-size:14px;color:var(--navy);}
.spg-teach p{margin:0;line-height:1.6;}
@media(max-width:640px){.spg-g{grid-template-columns:1fr;}.spg-cnt{margin-left:0;}}

/* ---- the side panel (spec section 6) ---------------------------------
   The scrim is the whole fixed layer and carries the close handler; the
   panel stops propagation so a click inside never reaches it. Navy taken
   from --sp-navy, NOT the spec's #08213F: this codebase substitutes Sigma's
   own navy and an assertion fails the build if the spec default appears. */
.spp{position:fixed;inset:0;z-index:140;background:rgba(8,33,63,.4);
  display:flex;justify-content:flex-end;}
.spp[hidden]{display:none;}
.spp-p{width:50%;min-width:560px;max-width:100%;height:100%;overflow:auto;background:#fff;
  box-shadow:-8px 0 32px rgba(8,33,63,.22);display:flex;flex-direction:column;}
.spp-h{background:linear-gradient(112deg,var(--sp-navy-deep),var(--sp-navy));color:#fff;
  padding:18px 22px 20px;}
.spp-eb{display:flex;align-items:flex-start;gap:12px;font-size:9.5px;font-weight:800;
  letter-spacing:.13em;color:#8FC7EE;}
.spp-x{margin-left:auto;background:rgba(255,255,255,.14);border:0;color:#fff;cursor:pointer;
  width:26px;height:26px;border-radius:7px;font-size:15px;line-height:1;flex:none;}
.spp-x:hover{background:rgba(255,255,255,.26);}
.spp-nm{font:800 26px/1.22 inherit;margin:9px 0 0;}
.spp-pt{font-size:12px;color:#CFE2F5;margin-top:5px;}
.spp-cs{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px;}
.spp-c{padding:3px 9px;border-radius:20px;background:rgba(255,255,255,.14);color:#fff;
  font-size:10px;font-weight:700;}
.spp-c.gap{background:var(--yellow-bg);color:var(--yellow);}
.spp-t{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;padding:16px 22px;}
.spp-ti{border:1px solid #E4EBF3;border-radius:10px;padding:11px 12px;background:#FAFCFE;}
.spp-tl{font-size:9px;font-weight:800;letter-spacing:.12em;color:var(--muted);}
.spp-tv{font:700 13px/1.35 inherit;color:var(--navy);margin-top:5px;}
.spp-tv.mono{font-family:ui-monospace,Menlo,monospace;font-size:15px;font-weight:800;}
.spp-ts{font-size:10.5px;color:var(--muted);margin-top:4px;}
.spp-s{padding:0 22px 16px;}
.spp-sh{font-size:9.5px;font-weight:800;letter-spacing:.12em;color:var(--muted);
  padding-bottom:7px;border-bottom:1px solid #EEF2F7;margin-bottom:9px;}
.spp-r{display:grid;grid-template-columns:150px 1fr;gap:8px;font-size:12.5px;
  padding:5px 0;align-items:baseline;}
.spp-r .k{color:var(--muted);font-weight:700;}
.spp-r .v{color:var(--navy);}
.spp-gapc{margin:0 22px 16px;border-left:3px solid var(--yellow);background:var(--yellow-bg);
  border-radius:0 8px 8px 0;padding:11px 14px;}
.spp-gapc h4{margin:0 0 6px;font-size:10px;font-weight:800;letter-spacing:.1em;
  color:var(--yellow);}
.spp-gapc li{font-size:12px;color:#6b551a;margin:3px 0;}
.spp-f{margin-top:auto;border-top:1px solid #E4EBF3;padding:14px 22px 18px;background:#FAFCFE;}
.spp-btns{display:flex;gap:9px;flex-wrap:wrap;}
.spp-b1{background:var(--sp-navy);color:#fff;border:0;border-radius:8px;padding:9px 15px;
  font:700 12px/1 inherit;cursor:pointer;}
.spp-b2{background:#fff;color:var(--navy);border:1px solid #D7E0EC;border-radius:8px;
  padding:9px 15px;font:700 12px/1 inherit;cursor:pointer;}
.spp-prov{margin-top:10px;font:600 9px/1.5 ui-monospace,Menlo,monospace;letter-spacing:.08em;
  color:#93A1B5;}
.spp-none{font-size:12px;color:var(--muted);font-style:italic;}
@media(max-width:600px){.spp-p{min-width:0;width:100%;}
  .spp-t{grid-template-columns:1fr;}.spp-r{grid-template-columns:1fr;gap:2px;}}

/* GR-3: an unassigned value must be visibly unassigned on the printed page,
   never an absent row. Amber so it reads as "chase this", not as data. */
.it-na{color:var(--yellow)!important;font-style:italic;font-weight:600;}
@media print{ .it-na{color:#000!important;font-style:italic;} }
.itr-row a{color:var(--sp-cyan);text-decoration:none;font-weight:700;white-space:nowrap;}
.itr-row a:hover{text-decoration:underline;}
.it-coll-r{display:flex;align-items:baseline;gap:12px;padding:6px 0;
  border-bottom:1px solid var(--sp-bd-lt);}
.it-coll-r:last-child{border-bottom:0;}
.it-coll-l{flex:1;font-size:12.5px;color:var(--sp-tx);}
.it-coll-r a{flex:none;font-size:12px;font-weight:700;color:var(--sp-blue);text-decoration:none;
  white-space:nowrap;}
.it-coll-x{flex:none;font-size:11.5px;color:var(--sp-tx-mut);white-space:nowrap;}
.it-doc{background:var(--card);border-radius:var(--radius);box-shadow:0 1px 3px rgba(0,0,0,.08);
  padding:24px 28px;margin-bottom:var(--gap);}
.it-title{font-size:20px;font-weight:800;color:var(--navy);line-height:1.25;}
.it-sub{font-size:12.5px;color:var(--muted);margin-top:4px;line-height:1.5;}
.it-sec{margin-top:22px;}
.it-sec h3{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.6px;
  color:var(--navy);padding-bottom:6px;border-bottom:2px solid var(--cyan);margin-bottom:10px;
  display:flex;align-items:center;gap:7px;}
.it-kv{display:grid;grid-template-columns:190px 1fr;gap:4px 14px;font-size:12.5px;}
.it-k{color:var(--muted);font-weight:600;}
.it-v{color:var(--text);}
.it-v.empty{color:#9aa4b2;font-style:italic;}
.it-tbl{width:100%;border-collapse:collapse;font-size:12.5px;}
.it-tbl th:first-child,.it-tbl td:first-child{width:42%;}
.it-tbl th:nth-child(2),.it-tbl td:nth-child(2),
.it-tbl th:nth-child(3),.it-tbl td:nth-child(3){width:29%;white-space:nowrap;}
.it-tbl th{text-align:left;padding:6px 10px 6px 0;font-size:10px;text-transform:uppercase;
  letter-spacing:.4px;color:var(--muted);border-bottom:1px solid #e6eaf0;}
.it-tbl td{padding:7px 10px 7px 0;border-bottom:1px solid #f1f4f8;color:var(--text);vertical-align:top;}
.it-day{margin-bottom:16px;}
.it-dayhead{font-size:13px;font-weight:800;color:var(--navy);padding:7px 0 6px;
  border-bottom:1px solid #e6eaf0;margin-bottom:6px;}
.it-slot{display:flex;gap:12px;padding:6px 0;border-bottom:1px solid #f5f7fa;font-size:12.5px;}
.it-time{flex:0 0 118px;color:var(--navy);font-weight:700;font-variant-numeric:tabular-nums;}
.it-what{flex:1;min-width:0;}
.it-what .nm{font-weight:600;color:var(--text);}
.it-what .mt{font-size:11.5px;color:var(--muted);margin-top:1px;}
.it-tag{display:inline-block;padding:1px 7px;border-radius:20px;font-size:9.5px;font-weight:700;
  background:#eef2f7;color:var(--navy);margin-left:6px;vertical-align:1px;}
.it-tag.derived{background:var(--cyan-bg);color:#00527a;}
.it-none{font-size:12.5px;color:var(--muted);font-style:italic;padding:4px 0;}
.it-bar{background:var(--card);border-radius:var(--radius);box-shadow:0 1px 3px rgba(0,0,0,.08);
  padding:14px 18px;margin-bottom:var(--gap);display:flex;gap:10px;align-items:center;flex-wrap:wrap;}
/* ===== Itinerary §5 — hero, fact cards, on-site timeline, rail =========
   The hero (.bmh*) and rail boxes (.br-*) are the SHARED components built for
   Booth Material §4. Master spec §0.5 says build the shell once; duplicating
   them under it-* names would be two copies of one component drifting apart.
   The bm- prefix is historical — it means "the hero", not "booth only". */
.it-tabs{display:inline-flex;background:#eef2f7;border-radius:999px;padding:2px;gap:2px;}
.it-tab{border:0;background:transparent;font-family:inherit;font-size:11px;font-weight:700;
  color:var(--navy);padding:5px 13px;border-radius:999px;cursor:pointer;
  text-transform:uppercase;letter-spacing:.05em;}
.it-tab.on{background:var(--navy);color:#fff;}
.it-hint{font-size:10.5px;color:var(--muted);font-style:italic;}
.it-split{display:flex;gap:var(--gap);align-items:flex-start;}
.it-main{flex:1;min-width:0;}
.it-rail{width:320px;flex:0 0 320px;position:sticky;top:var(--sp-util-h,46px);
  display:flex;flex-direction:column;gap:10px;}
@media (max-width:1100px){
  .it-split{flex-direction:column;}
  .it-rail{width:100%;flex:none;position:static;}
}
/* §5.3 fact cards — two cards replacing the Basic Info label/value grid */
.itf-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(330px,1fr));
  gap:var(--gap);margin-bottom:var(--gap);}
.itf-card{background:var(--card);border-radius:var(--radius);box-shadow:0 1px 3px rgba(0,0,0,.08);
  padding:15px 17px 13px;border-left:3px solid var(--cyan);display:flex;flex-direction:column;}
.itf-card.room{border-left-color:var(--navy);}
.itf-head{display:flex;align-items:center;gap:8px;margin-bottom:9px;}
.itf-eyebrow{font-size:9px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:var(--muted);display:flex;align-items:center;gap:6px;}
.itf-pill{margin-left:auto;font-size:8.5px;font-weight:700;letter-spacing:.1em;
  text-transform:uppercase;border-radius:999px;padding:2px 9px;
  background:var(--green-bg);color:var(--green);}
.itf-pill.warn{background:#fdf1d9;color:#8a6d1f;}
.itf-name{font-size:16px;font-weight:700;color:var(--navy);line-height:1.25;}
.itf-name.na{color:var(--yellow);font-style:italic;font-weight:600;font-size:13px;}
.itf-addr{font-size:11.5px;color:var(--muted);margin-top:3px;line-height:1.45;}
.itf-chips{display:flex;gap:5px;flex-wrap:wrap;margin-top:10px;}
.itf-chip{background:#eef2f7;border-radius:999px;padding:3px 9px;font-size:9.5px;
  font-weight:700;color:var(--navy);letter-spacing:.05em;font-variant-numeric:tabular-nums;}
.itf-chip.cy{background:var(--cyan-bg);color:#00527a;}
.itf-foot{margin-top:auto;padding-top:11px;border-top:1px solid #eef1f5;
  font-size:11px;color:var(--muted);line-height:1.5;}
.itf-foot .crit{color:var(--red);font-weight:700;}
.itf-foot .ok{color:var(--green);font-weight:700;}
.itf-more{margin-top:8px;font-size:11px;}
.itf-more summary{cursor:pointer;list-style:none;font-weight:700;color:var(--navy);padding:3px 0;}
.itf-more summary::-webkit-details-marker{display:none;}
.itf-more .body{white-space:pre-wrap;color:var(--ink);font-size:11px;line-height:1.55;
  padding:4px 0 2px;}
/* §5.4 on-site timeline — one column per day of the on-site window */
.ito{background:var(--card);border-radius:var(--radius);box-shadow:0 1px 3px rgba(0,0,0,.08);
  padding:15px 17px;margin-bottom:var(--gap);}
.ito-h{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.6px;
  color:var(--navy);padding-bottom:6px;border-bottom:2px solid var(--cyan);margin-bottom:12px;
  display:flex;align-items:center;gap:7px;}
.ito-h .n{margin-left:auto;font-size:9.5px;color:var(--muted);letter-spacing:.08em;}
.ito-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;}
.ito-col{border:1px solid #e6eaf0;border-radius:8px;padding:10px 11px;background:#fbfcfe;}
.ito-day{font-size:11.5px;font-weight:700;color:var(--navy);}
.ito-tag{display:inline-block;margin-top:5px;border-radius:999px;padding:2px 8px;
  font-size:8.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  background:#eef2f7;color:var(--navy);}
.ito-tag.show{background:var(--cyan-bg);color:#00527a;}
.ito-tag.movein{background:#fdf1d9;color:#8a6d1f;}
.ito-tag.tear{background:#fbe4e7;color:#9c2a3a;}
.ito-row{display:flex;gap:8px;font-size:11.5px;padding:5px 0;border-top:1px solid #f1f4f8;
  margin-top:6px;}
.ito-row:first-of-type{border-top:0;}
.ito-t{flex:0 0 62px;font-weight:700;color:var(--navy);font-variant-numeric:tabular-nums;
  font-size:11px;}
.ito-t.tear{color:var(--red);}
.ito-t.movein{color:#8a6d1f;}
.ito-w{flex:1;min-width:0;color:var(--ink);}
/* §5.5 daily schedule — a proportional time grid, 7 AM to 9 PM.
   A block needs a real start AND a real end. Anything with only one recorded
   time is drawn as a dashed marker instead, because inventing the missing end
   is how a schedule starts lying: Access Times records a move-in START and no
   finish, and the redesign spec's assumed 5:00 PM was never confirmed. */
.itg{background:var(--card);border-radius:var(--radius);box-shadow:0 1px 3px rgba(0,0,0,.08);
  padding:15px 17px;margin-bottom:var(--gap);}
.itg-h{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.6px;
  color:var(--navy);padding-bottom:6px;border-bottom:2px solid var(--cyan);margin-bottom:12px;
  display:flex;align-items:center;gap:7px;flex-wrap:wrap;}
.itg-tabs{display:flex;gap:5px;margin-left:auto;}
.itg-tab{border:1px solid var(--blue-bg);background:#fff;border-radius:999px;padding:3px 10px;
  font-size:9.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--muted);cursor:pointer;font-family:inherit;}
.itg-tab:hover{border-color:var(--cyan);color:var(--navy);}
.itg-tab.on{background:var(--navy);border-color:var(--navy);color:#fff;}
.itg-wrap{position:relative;height:400px;margin-top:2px;}
.itg-hair{position:absolute;left:56px;right:0;border-top:1px solid #eef2f7;}
.itg-hr{position:absolute;left:0;width:50px;text-align:right;font-size:9.5px;
  font-variant-numeric:tabular-nums;color:var(--muted);transform:translateY(-50%);
  letter-spacing:.04em;}
.itg-lane{position:absolute;left:56px;right:0;top:0;bottom:0;}
.itg-blk{position:absolute;border-radius:8px;border-left:3px solid var(--navy);
  background:var(--blue-bg);padding:4px 8px;overflow:hidden;box-sizing:border-box;}
.itg-blk .t{font-size:11px;font-weight:700;color:var(--navy);line-height:1.25;}
.itg-blk .m{font-size:9.5px;font-variant-numeric:tabular-nums;color:var(--muted);
  display:block;margin-top:1px;}
.itg-c{display:inline-block;border-radius:999px;padding:1px 6px;font-size:8px;font-weight:700;
  letter-spacing:.09em;text-transform:uppercase;background:rgba(0,0,0,.06);color:var(--muted);
  margin-left:5px;vertical-align:1px;}
.itg-blk.show{border-left-color:var(--cyan);background:var(--cyan-bg);}
.itg-blk.show .t{color:#00527a;}
.itg-blk.movein{border-left-color:var(--yellow);background:var(--yellow-bg);}
.itg-blk.movein .t{color:#8a6d1f;}
.itg-blk.tear{border-left-color:var(--red);background:var(--red-bg);}
.itg-blk.tear .t{color:#9c2a3a;}
.itg-mk{position:absolute;left:56px;right:0;border-top:1px dashed #b9c6d6;}
.itg-mk .lb{position:absolute;top:-7px;left:0;background:var(--card);padding-right:8px;
  font-size:9.5px;color:var(--muted);white-space:nowrap;}
.itg-mk .lb b{font-variant-numeric:tabular-nums;color:var(--ink);font-weight:700;}
.itg-mk.movein{border-top-color:#d9c48a;} .itg-mk.movein .lb b{color:#8a6d1f;}
.itg-mk.tear{border-top-color:#d9a5ae;} .itg-mk.tear .lb b{color:#9c2a3a;}
.itg-foot{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-top:12px;
  padding-top:10px;border-top:1px solid #eef2f7;font-size:11px;color:var(--muted);}
.itg-foot .sp{margin-left:auto;}
/* The on-site column for the day being shown in the grid. */
.ito-col.sel{border-color:var(--cyan);box-shadow:0 0 0 1px var(--cyan);}
/* §5.6 meetings and hospitality — one card, one tab per kind. Four headings
   each reading "None scheduled" is four ways of saying nothing. */
.itm{background:var(--card);border-radius:var(--radius);box-shadow:0 1px 3px rgba(0,0,0,.08);
  padding:15px 17px;margin-bottom:var(--gap);}
.itm-h{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.6px;
  color:var(--navy);padding-bottom:6px;border-bottom:2px solid var(--cyan);margin-bottom:12px;
  display:flex;align-items:center;gap:7px;flex-wrap:wrap;}
.itm-tabs{display:flex;gap:5px;margin-left:auto;flex-wrap:wrap;}
.itm-tab{border:1px solid var(--blue-bg);background:#fff;border-radius:999px;padding:3px 10px;
  font-size:9.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--muted);cursor:pointer;font-family:inherit;display:inline-flex;gap:6px;
  align-items:center;}
.itm-tab:hover{border-color:var(--cyan);color:var(--navy);}
.itm-tab.on{background:var(--navy);border-color:var(--navy);color:#fff;}
.itm-tab .n{font-variant-numeric:tabular-nums;font-weight:800;color:var(--muted);}
/* .has and .on have equal specificity, so the LAST rule wins. A selected tab
   that also has rows carries both, and with .has last the count rendered navy
   on navy and disappeared. Order matters here — do not sort these. */
.itm-tab.has .n{color:var(--navy);}
.itm-tab.on .n{color:var(--cyan);}
.itm-empty{padding:18px 2px 6px;max-width:640px;}
.itm-empty .t{font-size:13px;font-weight:700;color:var(--navy);margin-bottom:5px;}
.itm-empty .b{font-size:11.5px;line-height:1.6;color:var(--ink);margin-bottom:12px;}
.itm-row{display:flex;gap:12px;align-items:baseline;padding:8px 0;border-top:1px solid #f1f4f8;
  font-size:11.5px;}
.itm-row:first-of-type{border-top:0;}
.itm-row .tm{flex:0 0 168px;font-variant-numeric:tabular-nums;font-weight:700;color:var(--navy);
  line-height:1.45;}
.itm-row .ti{flex:1;min-width:0;color:var(--ink);font-weight:600;}
.itm-row .wh{flex:0 0 auto;color:var(--muted);}
.itm-row .lo{flex:0 0 auto;color:var(--muted);}
.itm-foot{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-top:12px;
  padding-top:10px;border-top:1px solid #eef2f7;font-size:10px;font-weight:700;
  letter-spacing:.08em;text-transform:uppercase;color:var(--muted);}
.itm-foot .warn{color:var(--yellow);}
.itr-row{display:flex;gap:8px;font-size:11px;padding:3px 0;}
.itr-row .t{flex:0 0 118px;color:var(--muted);font-variant-numeric:tabular-nums;}
.itr-row .v{flex:1;min-width:0;color:var(--ink);font-weight:600;text-align:right;}
.itr-ck{display:flex;gap:7px;font-size:11px;padding:3px 0;align-items:baseline;}
.itr-ck .m{flex:none;font-weight:800;}
.itr-ck.no .m{color:var(--yellow);}
.itr-ck.yes .m{color:var(--green);}
.itr-ck.no span{color:var(--ink);}
.itr-ck.yes span{color:var(--muted);}
@media print{
  .view-toggle, .it-bar, .it-rail, .itf-grid, .ito, #it-hero{display:none !important;}
  .it-split{display:block;}
  .it-doc{box-shadow:none;padding:0;}
}
.layout-row{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--gap);margin-bottom:var(--gap);}
@media (max-width:900px){.layout-row{grid-template-columns:1fr;}}
/* Configuration cards are SELECTORS, not decoration — clicking one filters the
   packing list, clicking it again clears. Keeps the real booth photographs. */
/* ===== Booth Material \u00a74.1 hero / \u00a74.3 toolbar / \u00a74.5 rail ===== */
.bmh{background:linear-gradient(115deg,var(--navy) 0%,var(--navy2) 62%,#1665C0 100%);
  border-radius:var(--radius);border-top:4px solid var(--red);overflow:hidden;
  margin-bottom:var(--gap);}
.bmh-main{display:flex;align-items:center;gap:22px;padding:18px 22px;flex-wrap:wrap;}
.bmh-ring{--p:0;flex:none;width:104px;height:104px;border-radius:50%;
  background:conic-gradient(var(--cyan) calc(var(--p)*1%),rgba(255,255,255,.16) 0);
  display:flex;align-items:center;justify-content:center;}
.bmh-ring-in{width:82px;height:82px;border-radius:50%;background:var(--navy);
  display:flex;flex-direction:column;align-items:center;justify-content:center;}
.bmh-pct{font-size:23px;font-weight:800;color:#fff;line-height:1;
  font-variant-numeric:tabular-nums;}
.bmh-cap{font-size:8.5px;font-weight:700;letter-spacing:.13em;color:#9FBBDC;
  text-transform:uppercase;margin-top:3px;}
.bmh-mid{flex:1;min-width:0;}
.bmh-eyebrow{font-size:9px;font-weight:700;letter-spacing:.16em;color:#7FC4F0;
  text-transform:uppercase;}
.bmh-name{font-size:26px;font-weight:800;color:#fff;line-height:1.2;margin-top:3px;}
.bmh-facts{font-size:12px;color:#CFE0F2;margin-top:5px;}
.bmh-days{display:inline-block;margin-top:8px;background:rgba(255,255,255,.13);
  border-radius:999px;padding:3px 10px;font-size:10px;font-weight:700;
  letter-spacing:.08em;color:#fff;text-transform:uppercase;}
.bmh-days.crit{background:var(--red);}
.bmh-chips{display:flex;flex-direction:column;gap:7px;flex:none;min-width:250px;}
.bmh-chip{background:rgba(255,255,255,.09);border-left:2px solid var(--cyan);
  border-radius:0 7px 7px 0;padding:7px 11px;display:block;}
.bmh-chip.crit{border-left-color:var(--red);}
.bmh-chip.warn{border-left-color:var(--yellow);}
.bmh-chip span{display:block;font-size:8.5px;font-weight:700;letter-spacing:.13em;
  color:#9FBBDC;text-transform:uppercase;}
.bmh-chip strong{display:block;font-size:11.5px;font-weight:700;color:#fff;margin-top:2px;
  font-variant-numeric:tabular-nums;}
.bmh-strip{display:flex;gap:18px;flex-wrap:wrap;background:rgba(0,0,0,.22);
  padding:7px 22px;font-size:9.5px;font-weight:700;letter-spacing:.11em;
  text-transform:uppercase;color:#BBD4EC;}
.bmh-strip .risk{color:#FF9AA8;}
/* toolbar */
.bm-search{flex:1;min-width:190px;padding:7px 11px;border:1px solid #dee3ea;
  border-radius:7px;font-family:inherit;font-size:12.5px;color:var(--navy);}
.bm-chips{display:flex;gap:5px;flex-wrap:wrap;}
.bm-chip{background:#eef2f7;border:1px solid transparent;border-radius:999px;
  padding:4px 10px;font-family:inherit;font-size:10.5px;font-weight:700;
  color:var(--navy);cursor:pointer;font-variant-numeric:tabular-nums;}
.bm-chip.on{background:var(--navy);color:#fff;}
.bm-chip.warn.on{background:var(--yellow);}
.bm-chip.amber.on{background:var(--yellow);}
.bm-chip.ok.on{background:var(--green);}
/* list + rail */
.bm-split{display:flex;gap:var(--gap);align-items:flex-start;}
.bm-split > #bm-list{flex:1;min-width:0;}
.bm-rail{width:308px;flex:0 0 308px;position:sticky;top:var(--sp-util-h,46px);
  display:flex;flex-direction:column;gap:10px;}
.br-box{background:var(--card);border-radius:var(--radius);padding:13px 15px;
  box-shadow:0 1px 3px rgba(0,0,0,.08);}
.br-pack{background:linear-gradient(135deg,var(--navy),var(--navy2));}
.br-pack .br-l{color:#9FBBDC;}
.br-l{font-size:9px;font-weight:700;letter-spacing:.13em;color:var(--muted);
  text-transform:uppercase;margin-bottom:8px;}
.br-big{font-size:26px;font-weight:800;color:#fff;line-height:1;
  font-variant-numeric:tabular-nums;}
.br-big span{font-size:12px;font-weight:600;color:#BBD4EC;}
.br-track{height:6px;background:rgba(255,255,255,.18);border-radius:999px;
  margin-top:9px;overflow:hidden;}
.br-track > span{display:block;height:100%;background:var(--cyan);border-radius:999px;}
.br-note{font-size:10px;color:#BBD4EC;margin-top:7px;font-variant-numeric:tabular-nums;}
.br-cat{display:flex;align-items:center;gap:8px;padding:3px 0;}
.br-cname{flex:1;min-width:0;font-size:11px;color:var(--ink);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap;}
.br-cbar{width:74px;flex:none;height:5px;background:#eef2f7;border-radius:999px;overflow:hidden;}
.br-cbar > span{display:block;height:100%;border-radius:999px;}
.br-cn{width:38px;flex:none;text-align:right;font-size:10px;font-weight:700;
  color:var(--muted);font-variant-numeric:tabular-nums;}
.br-btn{display:block;width:100%;margin-top:7px;padding:8px 10px;border-radius:7px;
  border:1px solid #dee3ea;background:var(--card);font-family:inherit;font-size:11.5px;
  font-weight:700;color:var(--navy);cursor:pointer;}
.br-primary{background:var(--cyan);border-color:var(--cyan);color:var(--navy);}
.br-btn:disabled{opacity:.45;cursor:not-allowed;}
.br-warn{border-left:3px solid var(--yellow);}
.br-nrow{font-size:11px;color:var(--ink);padding:3px 0;}
.br-nrow span{display:block;font-size:9.5px;color:var(--yellow);font-weight:700;}
.br-more{color:var(--muted);font-style:italic;}
.br-srow{display:flex;justify-content:space-between;gap:10px;font-size:11px;padding:3px 0;}
.br-srow span{color:var(--muted);flex:none;}
.br-srow strong{text-align:right;color:var(--ink);font-weight:600;min-width:0;}
.br-none{margin-top:7px;font-size:10.5px;color:var(--red);font-weight:600;}
.br-empty{font-size:11px;color:var(--muted);font-style:italic;}
/* category headers */
.bm-sq{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:7px;
  vertical-align:baseline;}
.bm-pill{background:#eaf2fb;color:var(--navy2);border-radius:999px;padding:1px 8px;
  font-variant-numeric:tabular-nums;}
.bm-pill.full{background:var(--green-bg);color:var(--green);}
.bm-prog{display:inline-block;width:96px;height:5px;background:#eef2f7;border-radius:999px;
  overflow:hidden;margin-left:9px;vertical-align:middle;}
.bm-prog > span{display:block;height:100%;border-radius:999px;}
@media (max-width:1100px){
  .bm-split{flex-direction:column;}
  .bm-rail{width:100%;flex:none;position:static;}
  .bmh-chips{min-width:0;width:100%;}
}
.layout-box{background:var(--card);border-radius:var(--radius);box-shadow:0 1px 3px rgba(0,0,0,.08);
  overflow:hidden;display:flex;flex-direction:column;border:1px solid transparent;
  padding:0;font-family:inherit;text-align:left;cursor:pointer;transition:box-shadow .16s,border-color .16s;}
.layout-box:hover{box-shadow:0 3px 12px rgba(0,48,116,.16);}
.layout-box.on{border-color:var(--cyan);box-shadow:0 6px 18px rgba(3,174,230,.28);}
.layout-img{aspect-ratio:4/3;background:#f1f5fa;display:flex;align-items:center;justify-content:center;
  border-bottom:1px solid #eef1f5;}
.layout-img img{width:100%;height:100%;object-fit:contain;}
.layout-img{position:relative;}
.layout-empty{text-align:center;padding:18px;color:var(--muted);font-size:11.5px;line-height:1.5;font-style:italic;}
.layout-cap{padding:11px 14px;font-size:13px;font-weight:800;color:var(--navy);display:flex;
  align-items:center;justify-content:space-between;gap:8px;}
.layout-cap .cnt{font-size:10.5px;font-weight:700;color:var(--muted);}
/* GR-4: the split is ALWAYS printed. Without it a card reading "24 items to
   pack" looks wrong next to 16 tagged rows, and there is no way to tell that
   8 of them are untagged items that fit everything. */
.layout-split{padding:0 14px 8px;font-size:9px;font-weight:700;letter-spacing:.09em;
  color:var(--muted);font-variant-numeric:tabular-nums;}
.layout-use{padding:8px 14px;border-top:1px solid #eef1f5;font-size:11px;font-weight:700;
  color:var(--navy2);background:#fbfcfe;}
.layout-box.on .layout-use{background:var(--cyan-bg);color:var(--navy);}
.bm-allcfg{grid-column:1/-1;justify-self:start;background:var(--card);border:1px solid #dee3ea;
  border-radius:999px;padding:7px 15px;font-family:inherit;font-size:11.5px;font-weight:700;
  color:var(--navy);cursor:pointer;}
.bm-allcfg.on{background:var(--navy);color:#fff;border-color:var(--navy);}
.bm-bar{background:var(--card);border-radius:var(--radius);box-shadow:0 1px 3px rgba(0,0,0,.08);
  padding:14px 18px;margin-bottom:var(--gap);display:flex;gap:10px;align-items:center;flex-wrap:wrap;}
.bm-bar label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--muted);}
.bm-sel{padding:7px 10px;border:1px solid #d5dce6;border-radius:6px;font-size:12.5px;
  font-family:inherit;background:#fff;cursor:pointer;min-width:230px;max-width:100%;}
.bm-count{font-size:12.5px;font-weight:700;color:var(--navy);margin-left:auto;}
.bm-copy{padding:7px 14px;border-radius:6px;border:none;background:var(--navy);color:#fff;
  font-size:12px;font-weight:700;font-family:inherit;cursor:pointer;}
.bm-copy:hover{background:var(--navy2);}
.bm-copy:disabled{background:#9aa4b2;cursor:default;}
.bm-cat{background:var(--card);border-radius:var(--radius);box-shadow:0 1px 3px rgba(0,0,0,.08);
  padding:14px 18px;margin-bottom:12px;}
.bm-cat h3{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.5px;color:var(--navy);
  margin-bottom:10px;display:flex;align-items:center;gap:8px;}
.bm-cat h3 .cnt{background:#eef2f7;border-radius:20px;padding:1px 8px;font-size:10.5px;color:var(--navy);}
.bm-notes{display:block;font-size:11px;color:var(--text);line-height:1.5;margin-top:4px;
  padding-left:9px;border-left:2px solid #e3e9f0;white-space:pre-line;}
.bm-item{display:flex;align-items:flex-start;gap:11px;padding:8px 6px;border-radius:7px;
  border-top:1px solid #f1f4f8;}
.bm-item:first-of-type{border-top:none;}
.bm-item:hover{background:#f7f9fc;}
.bm-item.on{background:var(--cyan-bg);}
.bm-item input[type=checkbox]{width:16px;height:16px;margin-top:2px;accent-color:var(--cyan);
  cursor:pointer;flex-shrink:0;}
.bm-item input[type=checkbox]:disabled{cursor:not-allowed;}
.bm-body{min-width:0;flex:1;}
.bm-name{font-size:13px;font-weight:600;color:var(--text);line-height:1.3;}
.bm-meta{font-size:11px;color:var(--muted);margin-top:2px;line-height:1.4;}
.bm-sizes{display:inline-flex;gap:4px;margin-left:6px;}
.bm-size{background:#eef2f7;border-radius:4px;padding:0 5px;font-size:9.5px;font-weight:700;color:var(--navy);}
/* The chip matching the active configuration is filled, so you can see at a
   glance why a row is in the list. */
.bm-size.on{background:var(--navy);color:#fff;}
/* GR-4: an untagged item reads ANY CONFIG in amber, never a blank space. */
.bm-opts{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 12px;
  padding:9px 12px;background:#F4F7FB;border:1px solid #e3e9f0;border-radius:10px;}
.bm-olab{font-size:9px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  color:var(--muted);}
.bm-osegs{display:inline-flex;gap:3px;}
.bm-oseg{padding:4px 10px;border-radius:6px;border:1px solid #d5dce6;background:#fff;
  font-family:inherit;font-size:11px;font-weight:600;color:var(--muted);cursor:pointer;}
.bm-oseg:hover{border-color:var(--navy);color:var(--navy);}
.bm-oseg.on{background:var(--navy);border-color:var(--navy);color:#fff;}
.bm-ochk{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--text);
  cursor:pointer;}
.bm-onote{margin-left:auto;font-size:10px;font-style:italic;color:var(--muted);}
/* §7 row density. Comfortable is the default the page always had. */
#bm-list .bm-item{padding:11px 6px;}
#bm-list.bm-compact .bm-item{padding:7px 6px;}
#bm-list.bm-nonotes .bm-notes{display:none;}
.bm-sel{margin-left:8px;padding:3px 9px;border-radius:6px;border:1px solid #d5dce6;
  background:#fff;font-family:inherit;font-size:10.5px;font-weight:700;color:var(--navy);
  cursor:pointer;}
.bm-sel:hover{border-color:var(--navy);background:#F4F7FB;}
.bm-none{padding:10px 2px;font-size:12px;font-style:italic;color:var(--muted);}
.bm-any{background:var(--yellow-bg);color:var(--yellow);letter-spacing:.05em;}
.bm-shows{font-size:10.5px;color:var(--muted);margin-top:3px;}
.bm-loc{display:inline-block;padding:1px 7px;border-radius:20px;font-size:9.5px;font-weight:700;
  background:#eef2f7;color:var(--navy);margin-left:6px;vertical-align:1px;}
.bm-loc.out{background:#fdf1d9;color:#8a6d1f;}
.bm-loc.show{background:var(--cyan-bg);color:#00527a;}
.bm-loc.late{background:var(--red-bg);color:var(--red);}
.bm-alert{background:var(--red-bg);border:1px solid #e9c4cf;border-radius:var(--radius);
  padding:12px 16px;margin-bottom:var(--gap);font-size:12.5px;color:var(--red);line-height:1.5;}
.bm-alert strong{color:var(--red);}
.mem-note{background:var(--cyan-bg);border:1px solid #bfe6f7;border-radius:var(--radius);
  padding:12px 16px;font-size:12.5px;color:var(--navy);margin-bottom:var(--gap);line-height:1.5;}
.widget{position:relative;overflow:hidden;}
.widget::after{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--navy);opacity:.85;}
#w-upcoming::after{background:var(--cyan);}
#w-completed::after{background:var(--gray);}
#w-budget::after{background:var(--navy);}
.booth-card{border-left-color:var(--cyan);}
.booth-card:hover{border-left-color:var(--cyan);}
.table-section h3,.booth-strip h3,.widget-head h3{color:var(--navy);}
.footer{border-top:3px solid transparent;border-image:var(--sigma-gradient) 1;}
/* ---- Website Analytics tab ------------------------------------------------
   The agency's monthly numbers. Built out of shapes the page already has - the
   .bmh wave hero, the .cx-ctl control bar and its .cx-seg switch, the .cx-sech
   section heading - so the tab itself adds only the pieces below. No colour
   here that the palette did not already have. */
/* Shown while a tab's own code is being fetched, and if it fails to arrive.
   Deliberately the only two classes this whole mechanism adds: every colour and
   radius here is an existing token, so no new value enters the sheet. */
.tabload{background:#fff;border:1px dashed var(--sp-bd);border-radius:12px;
  padding:26px 22px;text-align:center;font-size:12.5px;color:var(--muted);
  margin:var(--gap);}
.tabload-retry{background:none;border:none;padding:0;font:inherit;color:var(--blue);
  font-weight:700;cursor:pointer;text-decoration:underline;}
.wa-empty{background:#fff;border:1px dashed var(--sp-bd);border-radius:12px;
  padding:26px 22px;text-align:center;font-size:12.5px;color:var(--muted);
  margin-bottom:var(--gap);}
.wa-note{background:var(--cyan-bg);border:1px solid #bfe6f7;border-radius:var(--radius);
  padding:11px 15px;font-size:12px;color:var(--navy);line-height:1.5;margin-bottom:var(--gap);}
.wa-warn{background:var(--yellow-bg);border-left:3px solid var(--yellow);border-radius:6px;
  padding:10px 14px;font-size:12px;color:var(--navy);line-height:1.5;margin-bottom:var(--gap);}
.wa-link{background:none;border:none;padding:0;font:inherit;color:var(--blue);
  font-weight:700;cursor:pointer;text-decoration:underline;}
.wa-k{display:grid;grid-template-columns:repeat(auto-fit,minmax(152px,1fr));gap:10px;
  margin-bottom:var(--gap);}
.wa-kc{background:#fff;border:1px solid var(--sp-bd);border-radius:12px;padding:12px 14px;}
.wa-kl{font-size:9.5px;font-weight:800;letter-spacing:.13em;text-transform:uppercase;
  color:var(--sp-tx-faint);line-height:1.35;}
.wa-kv{font-size:22px;font-weight:800;color:var(--sp-tx);line-height:1.15;margin-top:5px;
  font-variant-numeric:tabular-nums;}
.wa-kd{font-size:10.5px;font-weight:700;margin-top:3px;}
.wa-up{color:var(--sp-green);font-weight:700;}
.wa-dn{color:var(--sp-crimson);font-weight:700;}
.wa-fl,.wa-mut{color:var(--muted);font-weight:600;}
/* The page's global table rules put a pointer cursor and a row hover on every
   tbody row, because every other table on the page opens something. These
   rows open nothing, so both are taken back off here. */
.wa-t{background:#fff;border:1px solid var(--sp-bd);border-radius:12px;overflow:auto;
  margin-bottom:var(--gap);}
.wa-t table{font-size:12px;}
.wa-t thead th{cursor:default;padding:9px 12px;}
.wa-t thead th:hover{color:var(--muted);}
.wa-t tbody tr{cursor:default;}
.wa-t tbody td{padding:8px 12px;}
.wa-r{text-align:right;font-variant-numeric:tabular-nums;}
.wa-u{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;
  color:var(--muted);max-width:330px;overflow:hidden;text-overflow:ellipsis;}
.wa-bar{height:5px;width:90px;background:#EEF2F7;border-radius:3px;overflow:hidden;}
.wa-bar i{display:block;height:100%;background:var(--cyan);border-radius:3px;}
/* Five months and seven views is more switch than a phone is wide. The
   Competitors tab's .cx-seg never has to wrap, so the wrap is scoped here by
   id rather than loosened on the shared component. */
/* ⚠ A SIBLING OF .bmh-main, NOT A CHILD OF IT. The first version carried
   negative margins as though it sat inside that padded block; it does not, so
   they pushed the bar past the hero's edge and .bmh{overflow:hidden} sliced it
   in half. Caught by rendering, not by any assertion. */
.pr-short{background:rgba(0,0,0,.22);color:#fff;font-size:12px;line-height:1.5;
  padding:10px 22px;}
.pr-note{font-size:11.5px;color:var(--muted);flex:1 1 220px;min-width:0;}
.pr-exp{flex:none;}
/* ⚠ EVERY CHIP ON THIS TAB IS nowrap. A wrapped chip reads as two chips. */
.pr-tag{display:inline-block;padding:1px 8px;border-radius:20px;font-size:9.5px;
  font-weight:800;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;}
.pr-kind{display:inline-block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  font-size:9.5px;color:var(--muted);text-transform:uppercase;white-space:nowrap;}
.pr-live,.pr-won,.pr-ahead{background:#E6F4EA;color:#1B7F3B;}
.pr-hold,.pr-t-interest{background:#FDF0E3;color:#9A5B12;}
.pr-passed,.pr-none{background:#EEF2F7;color:var(--muted);}
.pr-pend,.pr-sage,.pr-t-secured,.pr-both{background:#E8F0FB;color:var(--navy);}
.pr-sigma,.pr-behind,.pr-t-live{background:#F7E7EA;color:var(--red);}
.pr-t-ops{background:#EEF2F7;color:var(--muted);}
.pr-st-dev,.pr-st-pitch{background:#EEF2F7;color:var(--muted);}
.pr-st-review{background:#F7E7EA;color:var(--red);}
.pr-st-secured{background:#E8F0FB;color:var(--navy);}
.pr-st-live{background:#E6F4EA;color:#1B7F3B;}
.pr-st-hold{background:#FDF0E3;color:#9A5B12;}
.pr-ty-byline{background:#E8F0FB;color:var(--navy);}
.pr-ty-article{background:#EEF2F7;color:var(--muted);}
.pr-ty-press{background:#E6F4EA;color:#1B7F3B;}
/* §9 asks to confirm a new purple for podcast/interview. Not added — these use
   the gold already in the palette, so the tab introduces no new colour. */
.pr-ty-podcast,.pr-ty-interview{background:#FDF0E3;color:#9A5B12;}
.pr-goals{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));}
.pr-gc{display:flex;flex-direction:column;}
.pr-gv{display:flex;align-items:baseline;gap:7px;flex-wrap:wrap;margin-top:2px;}
.pr-of{font-size:12px;color:var(--muted);font-weight:700;}
.pr-bar,.pr-tbar{position:relative;height:7px;border-radius:4px;background:#E8EDF4;
  overflow:visible;margin:9px 0 6px;}
.pr-bar i,.pr-tbar i{display:block;height:100%;background:var(--cyan);border-radius:4px;}
.pr-bar u,.pr-tbar u{position:absolute;top:-3px;width:2px;height:13px;background:var(--red);}
.pr-two{display:grid;grid-template-columns:1fr 1fr;gap:var(--gap);align-items:start;}
.pr-three{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--gap);align-items:start;}
.pr-col{min-width:0;}
.pr-court .cx-sech{color:var(--red);}
.pr-acts{list-style:none;counter-reset:a;margin:0 0 var(--gap);padding:0;background:#fff;
  border:1px solid var(--sp-bd);border-top:3px solid var(--red);border-radius:12px;overflow:hidden;}
.pr-acts li{counter-increment:a;padding:10px 14px 10px 38px;position:relative;
  border-top:1px solid #eef1f5;font-size:12.5px;line-height:1.45;}
.pr-acts li:first-child{border-top:none;}
.pr-acts li::before{content:counter(a);position:absolute;left:14px;top:10px;
  font-weight:800;font-size:12px;color:var(--muted);}
.pr-acts li.urg::before{color:var(--red);}
.pr-act-what{font-weight:700;color:var(--sp-tx);}
.pr-act-why{color:var(--muted);font-size:11.5px;margin-top:2px;}
.pr-act-meta{display:flex;align-items:center;gap:8px;margin-top:5px;flex-wrap:wrap;}
.pr-due{font-size:10.5px;font-weight:700;color:var(--muted);white-space:nowrap;}
.pr-due-urg{font-size:10.5px;font-weight:800;color:var(--red);white-space:nowrap;}
.pr-when{list-style:none;margin:0 0 var(--gap);padding:0;background:#fff;
  border:1px solid var(--sp-bd);border-radius:12px;overflow:hidden;}
.pr-when li{display:flex;align-items:flex-start;gap:9px;padding:9px 13px;
  border-top:1px solid #eef1f5;font-size:12.5px;line-height:1.45;}
.pr-when li:first-child{border-top:none;}
.pr-when li.blk{border-left:3px solid var(--red);}
.pr-when-d{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;
  color:var(--muted);flex:none;min-width:74px;padding-top:2px;}
.pr-when-t{flex:1;min-width:0;color:var(--sp-tx);}
.pr-link{background:none;border:none;padding:0;color:var(--blue);font-size:12px;
  font-weight:700;cursor:pointer;}
.pr-hl{display:grid;grid-template-columns:repeat(auto-fit,minmax(215px,1fr));
  gap:10px;margin-bottom:var(--gap);}
.pr-hlc{background:#fff;border:1px solid var(--sp-bd);border-radius:12px;padding:12px 14px;}
.pr-hlt{font-weight:700;font-size:12.5px;color:var(--sp-tx);margin:6px 0 3px;line-height:1.35;}
.pr-hlb{font-size:11.5px;color:var(--muted);line-height:1.45;}
.pr-typeline{font-size:11.5px;color:var(--muted);margin:8px 0 10px;}
.pr-mchart{display:flex;align-items:flex-end;gap:6px;height:96px;background:#fff;
  border:1px solid var(--sp-bd);border-radius:12px;padding:10px 12px 6px;}
.pr-mb{flex:1;display:flex;flex-direction:column;justify-content:flex-end;
  align-items:center;height:100%;gap:3px;}
.pr-mb span{display:block;width:100%;max-width:26px;background:var(--blue);border-radius:3px 3px 0 0;min-height:2px;}
.pr-mb em{font-style:normal;font-size:9px;color:var(--muted);text-transform:uppercase;}
.pr-mb b{font-size:10.5px;color:var(--sp-tx);}
.pr-counters .pr-ctr{background:#fff;border:1px solid var(--sp-bd);border-radius:12px;padding:12px 14px;}
.pr-ctr.sigma{border-left:4px solid var(--red);}
.pr-ctr.sage{border-left:4px solid var(--blue);}
.pr-board{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:9px;margin-bottom:var(--gap);}
.pr-bh{font-size:9.5px;font-weight:800;letter-spacing:.11em;text-transform:uppercase;
  color:var(--muted);display:flex;justify-content:space-between;gap:6px;
  padding:0 2px 7px;white-space:nowrap;}
.pr-bh span{color:var(--sp-tx);}
.pr-card{background:#fff;border:1px solid var(--sp-bd);border-left:3px solid #C9D4E2;
  border-radius:9px;padding:9px 10px;margin-bottom:8px;}
.pr-card.own-sigma{border-left-color:var(--red);}
.pr-card.own-sage{border-left-color:var(--blue);}
.pr-card.pr-none{border-left-color:#C9D4E2;}
.pr-kindline{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9px;
  color:var(--muted);text-transform:uppercase;}
.pr-ct{font-weight:700;font-size:12px;color:var(--sp-tx);line-height:1.3;margin:2px 0 3px;}
.pr-cm{font-size:10.5px;color:var(--muted);line-height:1.35;}
.pr-cn{font-size:11px;color:var(--sp-tx);margin-top:5px;line-height:1.35;}
.pr-cf{display:flex;align-items:center;justify-content:space-between;gap:6px;
  margin-top:7px;flex-wrap:wrap;}
.pr-bempty{font-size:10.5px;color:var(--muted);font-style:italic;padding:9px 2px;}
.pr-logm{font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:.08em;
  color:var(--muted);margin:4px 0 6px;}
.pr-logm span{color:var(--sp-tx);}
.pr-score{background:linear-gradient(115deg,var(--navy) 0%,var(--navy2) 62%,#1665C0 100%);
  border-radius:14px;padding:16px 18px;margin-bottom:var(--gap);color:#fff;}
.pr-sh{font-size:9.5px;font-weight:800;letter-spacing:.13em;text-transform:uppercase;
  color:rgba(255,255,255,.72);}
.pr-se{font-size:12px;color:rgba(255,255,255,.85);margin:3px 0 12px;}
.pr-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:11px;}
.pr-tile{background:rgba(255,255,255,.09);border-radius:10px;padding:11px 13px;}
.pr-tl{font-size:9.5px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;
  color:rgba(255,255,255,.72);line-height:1.35;}
.pr-tv{font-size:24px;font-weight:800;line-height:1.15;margin-top:4px;}
.pr-tv span{font-size:13px;color:rgba(255,255,255,.7);}
.pr-tile .pr-tbar{background:rgba(255,255,255,.22);}
.pr-tile .pr-tbar i{background:var(--cyan);}
.pr-tile .pr-tbar u{background:#fff;}
.pr-tp{font-size:10.5px;color:rgba(255,255,255,.8);font-weight:700;}
.pr-tb2{display:flex;align-items:center;gap:9px;margin-bottom:7px;font-size:11.5px;}
.pr-tbl{flex:none;width:150px;color:var(--sp-tx);}
.pr-tbr{flex:1;height:8px;background:#E8EDF4;border-radius:4px;overflow:hidden;}
.pr-tbr i{display:block;height:100%;background:var(--blue);border-radius:4px;}
.pr-tb2 b{flex:none;font-size:11px;color:var(--muted);min-width:18px;text-align:right;}
.pr-dmu .pr-tbl{color:var(--muted);}
.pr-dmu .pr-tbr{background:transparent;}
.pr-bench{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));
  gap:10px;margin-bottom:10px;}
.pr-bc{background:#fff;border:1px solid var(--sp-bd);border-radius:12px;padding:11px 13px;}
.pr-bc.hot{background:#FDF8EC;border-color:#E7D7A8;}
.pr-bn{font-weight:700;font-size:12.5px;color:var(--sp-tx);}
.pr-brole{font-size:10.5px;color:var(--muted);line-height:1.35;}
.pr-angle{font-size:10.5px;color:var(--muted);font-style:italic;margin-top:4px;line-height:1.4;}
.pr-nolink{font-size:10.5px;}
.pr-bcount{font-size:20px;font-weight:800;color:var(--navy);line-height:1.2;}
.pr-bi{font-size:10.5px;color:var(--muted);line-height:1.4;}
.pr-warn{background:#FDF8EC;border:1px solid #E7D7A8;border-radius:10px;padding:9px 13px;
  font-size:11.5px;color:#8A6410;margin-bottom:var(--gap);}
.pr-wall{display:grid;grid-template-columns:repeat(auto-fit,minmax(185px,1fr));gap:10px;}
.pr-wc{background:#fff;border:1px solid var(--sp-bd);border-radius:11px;padding:10px 12px;}
.pr-wc.pend{border-color:#E7D7A8;background:#FDF8EC;}
.pr-wd{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;color:var(--muted);}
.pr-wo{font-weight:700;font-size:12px;color:var(--sp-tx);margin:2px 0 2px;line-height:1.3;}
.pr-wt{font-size:11px;color:var(--muted);line-height:1.4;margin-bottom:6px;}
.pr-since{border-left:3px solid var(--cyan);padding-left:11px;margin-bottom:14px;}

/* ---- EWA division tab -----------------------------------------------------
   Reuses .bmh, .cx-ctl, .cx-seg, .cx-sech, .pr-card, .pr-note and the badges.
   These are the only rules it adds and every one of them is applied by the
   chunk. ⚠ NO NEW COLOURS — every value below is an existing palette variable. */
.ewa-tbl{width:100%;border-collapse:collapse;font-size:12.5px;margin-bottom:var(--gap);}
.ewa-tbl th{text-align:left;padding:6px 10px 6px 0;font-size:10px;text-transform:uppercase;
  letter-spacing:.4px;color:var(--sp-tx-mut);border-bottom:1px solid var(--sp-bd);}
.ewa-tbl td{padding:8px 10px 8px 0;border-bottom:1px solid var(--sp-bd-lt);
  color:var(--sp-tx-body);vertical-align:top;}
.ewa-tbl tr.ewa-nogo td:first-child{border-left:3px solid var(--sp-crimson);padding-left:8px;}
.ewa-no{color:var(--sp-crimson);font-weight:700;}
.ewa-up{color:var(--sp-green);font-weight:700;}
.ewa-sub{color:var(--sp-tx-mut);font-size:11.5px;}
.ewa-p{font-size:12.5px;color:var(--sp-tx-body);line-height:1.5;margin:6px 0;}
.ewa-org{font-size:12px;margin-bottom:4px;}
.ewa-onote{display:block;color:var(--sp-tx-mut);font-size:11px;}
.ewa-src{display:block;margin-top:6px;font-size:10px;color:var(--sp-tx-faint);}
.ewa-hold{border-left:3px solid var(--sp-gold-tx);padding-left:11px;margin:0 0 var(--gap);}
.ewa-absent{margin-top:var(--gap);}
.ewa-ul{margin:0 0 var(--gap);padding-left:18px;font-size:12.5px;color:var(--sp-tx-body);}
.ewa-ul li{margin-bottom:6px;line-height:1.5;}
.ewa-gone{opacity:.7;}
.pr-src{font-size:10px;letter-spacing:.02em;}
.pr-acts li.settled{opacity:.62;}
.pr-acts li.settled .pr-act-what{text-decoration:line-through;}
.pr-wc.lnk{display:block;text-decoration:none;}
.pr-wc.lnk:hover{border-color:var(--blue);box-shadow:0 1px 6px rgba(16,42,77,.10);}
.pr-wl{display:block;margin-top:6px;font-size:10.5px;font-weight:700;color:var(--blue);}
@media(max-width:1100px){.pr-board{grid-template-columns:repeat(3,minmax(0,1fr));}
  .pr-three{grid-template-columns:1fr;}}
@media(max-width:820px){.pr-two{grid-template-columns:1fr;}
  .pr-board{grid-template-columns:repeat(2,minmax(0,1fr));}}
#wa-ctl{row-gap:8px;}
#pr-ctl{row-gap:8px;}
#pr-ctl .cx-seg{flex-wrap:wrap;flex:0 1 auto;min-width:0;max-width:100%;}
/* The page's global tbody rule is white-space:nowrap, which suits the short
   cells every other table holds. These carry whole sentences of the agency's
   status wording, so they wrap here instead of running off the right edge. */
#pr-body .wa-t tbody td{white-space:normal;}
#pr-body .wa-t td:last-child{min-width:230px;}
#wa-ctl .cx-seg{flex-wrap:wrap;flex:0 1 auto;min-width:0;max-width:100%;}
/* Four section names is more switch than a phone is wide, the same problem the
   PR and Analytics bars have. Scoped by id for the same reason they are: the
   Competitors switch never has to wrap and the shared component stays tight. */
#ewa-ctl{row-gap:8px;}
    .ewa-pick{display:flex;align-items:center;gap:8px;flex:0 0 100%;margin-bottom:2px;}
    .ewa-pick label{font-size:12px;letter-spacing:.04em;text-transform:uppercase;
      color:var(--muted);font-weight:600;}
    .ewa-pick select{font:inherit;font-size:14px;padding:6px 10px;border-radius:8px;
      border:1px solid var(--line);background:var(--card);color:var(--ink);
      max-width:100%;min-width:0;}
#ewa-ctl .cx-seg{flex-wrap:wrap;flex:0 1 auto;min-width:0;max-width:100%;}
/* ⚠ THE PAGE'S GLOBAL tbody RULE IS white-space:nowrap. It suits the short
   cells every other table holds; one buyer here is a hundred-character
   description of what the 704th Test Group does, and unwrapped it drove the
   page to 614px inside a 390px window. Same fix the PR tab needed. */
#ewa-body .ewa-tbl tbody td,#hs-body .ewa-tbl tbody td{white-space:normal;}
/* HubSpot tab: five section names, the same wrap the EWA bar needed. */
#hs-ctl{row-gap:8px;}
#hs-ctl .cx-seg{flex-wrap:wrap;flex:0 1 auto;min-width:0;max-width:100%;}
