/*
  CM Election Predictions — sitewide cohesion layer
  Loaded after page-specific CSS. Intent: unify spacing, surfaces, controls, and mobile density
  without changing page behavior or the core visual identity.
*/
:root{
  --cmep-shell-max:1280px;
  --cmep-readable-max:980px;
  --cmep-page-pad:clamp(.85rem,2vw,1.5rem);
  --cmep-section-gap:clamp(.85rem,1.8vw,1.35rem);
  --cmep-surface:#fff;
  --cmep-surface-soft:#f8fafc;
  --cmep-border:rgba(148,163,184,.34);
  --cmep-border-soft:rgba(148,163,184,.22);
  --cmep-text:#0f172a;
  --cmep-muted:#64748b;
  --cmep-shadow-soft:0 1px 2px rgba(15,23,42,.04),0 10px 28px rgba(15,23,42,.045);
  --cmep-radius-panel:20px;
  --cmep-radius-inner:14px;
}

html{scroll-padding-top:92px}
body{
  background:
    radial-gradient(circle at top left,rgba(0,118,186,.06),transparent 34rem),
    linear-gradient(180deg,#f8fafc 0%,#f3f6fb 44%,#f8fafc 100%) !important;
  color:var(--text-main,var(--cmep-text));
}

/* Site shell: fuller use of available width, especially on mobile. */
.container,
main.container,
.page-shell,
.content-shell,
main > .wrap,
main > .wrapper{
  width:min(100% - (var(--cmep-page-pad) * 2),var(--cmep-shell-max));
  max-width:var(--cmep-shell-max) !important;
  margin-inline:auto !important;
}

/* Text/legal/about pages should remain readable instead of becoming dashboard-wide. */
body:has(.card-title:first-child),
body:has(.title-card){ }
.about-page .container,
.privacy-page .container,
.legal-page .container,
.third-party-page .container,
body:has([href*="/privacy/"]) .legal-shell{
  max-width:var(--cmep-readable-max) !important;
}

/* Shared surface grammar. */
.card,
.cm-card,
.result-card,
.race-card,
.contest-card,
.state-card,
.district-card,
.projection-card,
.featured-card,
.method-card,
.section-card,
.panel,
.tile{
  border:1px solid var(--border-subtle,var(--cmep-border)) !important;
  border-radius:var(--cmep-radius-panel) !important;
  background:var(--bg-card,var(--cmep-surface)) !important;
  box-shadow:var(--cmep-shadow-soft) !important;
}

.card + .card,
.cm-card + .cm-card,
.section-block + .section-block,
.section + .section{
  margin-top:var(--cmep-section-gap) !important;
}

.card-header,
.cm-card-header,
.section-head,
.section-header,
.card-title-row{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:.85rem;
  border-bottom:1px solid var(--cmep-border-soft);
  padding-bottom:.75rem;
  margin-bottom:.9rem;
}

.card-title,
.cm-card-title,
.card-h2,
.section-title,
h1,h2{
  letter-spacing:-.03em;
}

.card-title,
.cm-card-title,
.card-h2,
.section-title{
  font-size:clamp(1.02rem,1.5vw,1.24rem) !important;
  line-height:1.12 !important;
  color:var(--text-strong,var(--cmep-text)) !important;
}

.card-subtitle,
.cm-card-subtitle,
.meta,
.note,
.lede,
.subtitle{
  color:var(--text-muted,var(--cmep-muted)) !important;
  line-height:1.45;
}

/* Internal components should read as content inside a surface, not as more floating cards. */
.card .card,
.cm-card .cm-card,
.card .panel,
.cm-card .panel,
.card .section-block,
.cm-card .section-block,
.card .state-card,
.cm-card .state-card,
.card .district-card,
.cm-card .district-card,
.cl-card,
.gov-item,
.cmep-collapse,
.year-collapsible,
.collapsible,
.result-row,
.race-row,
.rating-row,
.kv-list,
.table-card{
  border-color:var(--cmep-border-soft) !important;
  border-radius:var(--cmep-radius-inner) !important;
  background:color-mix(in srgb,var(--bg-card,var(--cmep-surface)) 78%,var(--cmep-surface-soft) 22%) !important;
  box-shadow:none !important;
}

/* Controls: one rounded, quiet language across forecast, state, history, and election-night pages. */
.btn,
.button,
button:not(.maplibregl-ctrl button):not(.mapboxgl-ctrl button),
[role="button"],
.seg-btn,
.range-btn,
.path-button,
.changelog-seg,
.cmep-share-row button,
select,
input[type="search"],
input[type="text"],
input[type="email"]{
  border-radius:999px !important;
}

.btn,
.button,
button:not(.maplibregl-ctrl button):not(.mapboxgl-ctrl button),
[role="button"],
.seg-btn,
.range-btn,
.path-button,
.changelog-seg{
  box-shadow:none !important;
  min-height:2.25rem;
}

select,
input[type="search"],
input[type="text"],
input[type="email"]{
  border:1px solid var(--border-subtle,var(--cmep-border)) !important;
  background:var(--bg-card,var(--cmep-surface)) !important;
}

/* Tables and data lists: compact, scannable, less boxy. */
table{
  width:100%;
  border-collapse:separate !important;
  border-spacing:0 !important;
}
th{
  color:var(--text-muted,var(--cmep-muted));
  font-size:.76rem;
  text-transform:uppercase;
  letter-spacing:.045em !important;
}
td,th{padding:.62rem .7rem}
tbody tr + tr td{border-top:1px solid var(--cmep-border-soft)}

/* Pills and labels: consistent sizing so pages do not feel assembled from unrelated modules. */
.pill,
.badge,
.tag,
.party-pill,
.cm-pill,
.legend-pill,
.rating-pill,
.cl-pill,
.chip,
.label{
  border-radius:999px !important;
  font-weight:850 !important;
  line-height:1.05 !important;
  white-space:nowrap;
}

.legend,
.legend-row,
.legend-list{
  gap:.45rem !important;
}
.legend-item,
.legend-pill{
  border-color:var(--cmep-border-soft) !important;
  box-shadow:none !important;
}

/* Maps, arcs, and major visualizations should be allowed to breathe inside cards. */
.card-body,
.cm-card-body{min-width:0}
.arc-wrap,
.map-wrap,
.map-shell,
.svg-map-wrap,
.state-outline-wrap,
#cmep-house-national-map,
#cmep-senate-map,
#cmep-governor-map{
  max-width:100%;
}

/* Forecast/detail pages: keep toolbars compact and aligned. */
.toolbar,
.cm-toolbar,
.filter-bar,
.controls,
.control-row,
.search-row,
.jump-row,
.cta-row{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:.55rem !important;
}

/* Election-night pages tend to be denser; normalize surfaces without flattening the newsroom look. */
.election-night-card,
.race-tile,
.office-card,
.en-card{
  border-radius:18px !important;
  box-shadow:none !important;
  border:1px solid var(--cmep-border-soft) !important;
}

@media (min-width:1120px){
  .container,
  main.container,
  .page-shell,
  .content-shell{
    width:min(100% - 2.4rem,var(--cmep-shell-max));
  }

  .forecast-grid,
  .state-grid,
  .district-grid,
  .gov-grid,
  .cards-grid{
    gap:1rem !important;
  }
}

@media (max-width:720px){
  :root{
    --cmep-page-pad:.55rem;
    --cmep-section-gap:.7rem;
    --cmep-radius-panel:16px;
    --cmep-radius-inner:12px;
  }

  html{scroll-padding-top:76px}

  .container,
  main.container,
  .page-shell,
  .content-shell,
  main > .wrap,
  main > .wrapper{
    width:calc(100% - 1rem) !important;
  }

  .card,
  .cm-card,
  .result-card,
  .race-card,
  .contest-card,
  .state-card,
  .district-card,
  .projection-card,
  .featured-card,
  .method-card,
  .section-card,
  .panel,
  .tile{
    padding:clamp(.72rem,2.4vw,.95rem) !important;
    box-shadow:none !important;
  }

  .card-header,
  .cm-card-header,
  .section-head,
  .section-header,
  .card-title-row{
    gap:.55rem;
    padding-bottom:.58rem;
    margin-bottom:.65rem;
  }

  .card-title,
  .cm-card-title,
  .card-h2,
  .section-title{
    font-size:.98rem !important;
  }

  .card-subtitle,
  .cm-card-subtitle,
  .meta,
  .note,
  .lede,
  .subtitle{
    font-size:.82rem !important;
  }

  .toolbar,
  .cm-toolbar,
  .filter-bar,
  .controls,
  .control-row,
  .search-row,
  .jump-row,
  .cta-row{
    gap:.42rem !important;
  }

  .btn,
  .button,
  button:not(.maplibregl-ctrl button):not(.mapboxgl-ctrl button),
  [role="button"],
  .seg-btn,
  .range-btn,
  .path-button,
  .changelog-seg{
    min-height:2.05rem;
    padding:.48rem .72rem !important;
    font-size:.78rem !important;
  }

  .legend,
  .legend-row,
  .legend-list{
    flex-wrap:nowrap !important;
    overflow-x:auto;
    -webkit-overflow-scrolling:touch;
    scrollbar-width:none;
    padding-bottom:.05rem;
  }
  .legend::-webkit-scrollbar,
  .legend-row::-webkit-scrollbar,
  .legend-list::-webkit-scrollbar{display:none}
  .legend-item,
  .legend-pill{flex:0 0 auto;font-size:.68rem !important;padding:.32rem .5rem !important}

  td,th{padding:.5rem .55rem}

  .table-wrap,
  .table-scroll,
  .cm-table-wrap{
    margin-inline:-.35rem;
    padding-inline:.35rem;
    overflow-x:auto;
    -webkit-overflow-scrolling:touch;
  }
}

@media (prefers-color-scheme:dark){
  :root{
    --cmep-surface:#0f172a;
    --cmep-surface-soft:#111827;
    --cmep-border:rgba(148,163,184,.24);
    --cmep-border-soft:rgba(148,163,184,.16);
    --cmep-text:#f8fafc;
    --cmep-muted:#94a3b8;
    --cmep-shadow-soft:0 1px 2px rgba(0,0,0,.22),0 14px 34px rgba(0,0,0,.22);
  }
  body{
    background:
      radial-gradient(circle at top left,rgba(0,118,186,.12),transparent 34rem),
      linear-gradient(180deg,#020617 0%,#0b1020 48%,#020617 100%) !important;
  }
}


/*
  PASS 4 — component-level cohesion
  Shared page headers, metadata rows, forecast detail shells, compact table/list behavior,
  and consistent mobile action placement. This layer is deliberately additive.
*/
:root{
  --cmep-hero-pad-y:clamp(1rem,2.2vw,1.55rem);
  --cmep-hero-pad-x:clamp(.95rem,2vw,1.35rem);
  --cmep-control-h:2.35rem;
  --cmep-row-pad:.68rem;
}

/* Unified page-introduction pattern. */
.cmep-page-hero,
.page-head,
.title-card,
.wrap > .head,
.head.hero,
.us-hero{
  border:1px solid var(--cmep-border) !important;
  border-radius:var(--cmep-radius-panel) !important;
  background:
    linear-gradient(135deg,rgba(255,255,255,.96),rgba(248,250,252,.94)) !important;
  box-shadow:var(--cmep-shadow-soft) !important;
  padding:var(--cmep-hero-pad-y) var(--cmep-hero-pad-x) !important;
  margin:0 0 var(--cmep-section-gap) !important;
}
.cmep-page-hero{
  display:grid;
  gap:.48rem;
}
.cmep-page-hero__eyebrow,
.page-head .eyebrow,
.title-card .eyebrow,
.wrap > .head small,
.head small,
.brand small{
  color:var(--cmep-muted) !important;
  font-size:.73rem !important;
  text-transform:uppercase !important;
  letter-spacing:.11em !important;
  font-weight:900 !important;
}
.cmep-page-hero h1,
.page-head h1,
.title-card h1,
.wrap > .head h1,
.head h1,
.cm-h1{
  margin:0 !important;
  color:var(--cmep-text) !important;
  font-size:clamp(1.7rem,3.2vw,2.65rem) !important;
  line-height:1.02 !important;
  letter-spacing:-.055em !important;
}
.cmep-page-hero__lede,
.page-head .sub,
.title-card .cm-lede,
.wrap > .head .sub,
.head .sub,
.cm-lede{
  max-width:78ch;
  margin:.1rem 0 0 !important;
  color:var(--cmep-muted) !important;
  font-size:clamp(.94rem,1.25vw,1.05rem) !important;
  line-height:1.5 !important;
}
.cmep-page-hero__meta,
.cmep-meta-row,
.forecast-meta-row,
.page-actions{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:.45rem .55rem;
  margin-top:.35rem;
}
.cmep-page-hero__meta span,
.cmep-meta-row > *,
.forecast-meta-row > *,
.page-actions > *{
  border:1px solid var(--cmep-border-soft) !important;
  background:rgba(248,250,252,.82) !important;
  border-radius:999px !important;
  padding:.36rem .62rem !important;
  min-height:1.9rem;
  display:inline-flex;
  align-items:center;
  gap:.35rem;
  color:var(--cmep-muted) !important;
  font-size:.77rem !important;
  font-weight:800 !important;
  line-height:1 !important;
  box-shadow:none !important;
}

/* Forecast page shell: consistent top rhythm across Senate, House, Governor, state, detail pages. */
body.cmep-page-forecast .container,
body.cmep-page-home .container,
body.cmep-page-state .container,
body.cmep-page-detail .container,
body.cmep-page-election-night .wrap,
body.cmep-page-election-night .container{
  display:grid;
  gap:var(--cmep-section-gap);
}
body.cmep-page-forecast .card,
body.cmep-page-state .card,
body.cmep-page-detail .card,
body.cmep-page-election-night .panel{
  margin:0 !important;
}
body.cmep-page-forecast .card:first-of-type,
body.cmep-page-home .forecast-grid > .cm-card,
body.cmep-page-detail .card:first-of-type{
  overflow:clip;
}

/* Metadata and row systems for odds/rating/update snippets. */
[data-updated],
[id*="updated"],
.updated,
.last-updated,
.timestamp{
  color:var(--cmep-muted) !important;
  font-size:.8rem !important;
  font-weight:750 !important;
}
.rating-row,
.result-row,
.race-row,
.choice,
.state-list a,
.district-list a,
.cl-row,
.cmep-race-row{
  transition:background-color .16s ease,border-color .16s ease,transform .16s ease;
}
@media (hover:hover){
  .rating-row:hover,
  .result-row:hover,
  .race-row:hover,
  .choice:hover,
  .state-list a:hover,
  .district-list a:hover,
  .cl-row:hover,
  .cmep-race-row:hover{
    background:rgba(255,255,255,.72) !important;
    border-color:rgba(100,116,139,.28) !important;
    transform:translateY(-1px);
  }
}

/* Tables should behave like election data tables, not generic webpage tables. */
.table-wrap,
.table-scroll,
.cm-table-wrap,
.results-table-wrap,
.race-table-wrap{
  border:1px solid var(--cmep-border-soft) !important;
  border-radius:var(--cmep-radius-inner) !important;
  overflow:auto !important;
  background:rgba(255,255,255,.62) !important;
}
table thead th{
  position:sticky;
  top:0;
  z-index:1;
  background:color-mix(in srgb,var(--cmep-surface) 86%,var(--cmep-surface-soft) 14%) !important;
}
table td:first-child,
table th:first-child{
  padding-left:.85rem;
}
table td:last-child,
table th:last-child{
  padding-right:.85rem;
}
td.num,th.num,
td[data-type="number"],th[data-type="number"],
td:last-child:not(:first-child),th:last-child:not(:first-child){
  text-align:right;
  font-variant-numeric:tabular-nums;
}

/* Shared controls and mobile action placement. */
.page-actions,
.cta-row,
.cmep-share-row,
.actions,
.controls,
.filter-row,
.toolbar{
  gap:.5rem !important;
}
.page-actions:empty,
.actions:empty,
.controls:empty{display:none !important}
.btn:focus-visible,
.button:focus-visible,
button:focus-visible,
a:focus-visible,
select:focus-visible,
input:focus-visible{
  outline:3px solid rgba(0,118,186,.24) !important;
  outline-offset:2px !important;
}

/* Election-night pages: same system, denser operational mode. */
body.cmep-page-election-night{
  --cmep-section-gap:clamp(.7rem,1.45vw,1.05rem);
}
body.cmep-page-election-night .panel,
body.cmep-page-election-night .choice,
body.cmep-page-election-night .race-card,
body.cmep-page-election-night .contest-card{
  border-radius:16px !important;
}
body.cmep-page-election-night .choices{
  gap:.75rem !important;
}
body.cmep-page-election-night .choice{
  padding:.9rem 1rem !important;
}
body.cmep-page-election-night .choice .title{
  letter-spacing:-.025em;
}

/* Empty/loading/error states: normalize the visual grammar where pages already expose these strings/classes. */
.loading,
.empty,
.error,
.no-data,
.status-message,
[role="status"],
[aria-live="polite"]{
  border-radius:var(--cmep-radius-inner);
}
.loading:not(:empty),
.empty:not(:empty),
.error:not(:empty),
.no-data:not(:empty),
.status-message:not(:empty){
  border:1px solid var(--cmep-border-soft);
  background:rgba(248,250,252,.78);
  color:var(--cmep-muted);
  padding:.78rem .88rem;
  font-weight:750;
}
.error:not(:empty){
  border-color:rgba(185,28,28,.22);
  background:rgba(254,242,242,.82);
  color:#991b1b;
}

/* Detail pages: avoid old special-case density from overpowering the shared system. */
body.cmep-page-detail .main-grid,
body.cmep-page-detail .grid,
body.cmep-page-detail .grid2,
body.cmep-page-state .grid,
body.cmep-page-state .grid2{
  gap:var(--cmep-section-gap) !important;
}
body.cmep-page-detail .race-title,
body.cmep-page-detail .state-title,
body.cmep-page-detail .district-title{
  letter-spacing:-.045em !important;
}

@media (min-width:980px){
  body.cmep-page-home .forecast-grid,
  body.cmep-page-forecast .grid2,
  body.cmep-page-state .grid2,
  body.cmep-page-detail .grid2{
    gap:1rem !important;
  }
  .cmep-page-hero{
    grid-template-columns:minmax(0,1fr) auto;
    align-items:end;
  }
  .cmep-page-hero__lede{grid-column:1 / -1;}
  .cmep-page-hero__meta{grid-column:1 / -1;}
}

@media (max-width:700px){
  :root{
    --cmep-page-pad:.52rem;
    --cmep-section-gap:.62rem;
  }
  .container,
  main.container,
  .page-shell,
  .content-shell,
  .wrap{
    width:min(100% - .7rem,100%) !important;
  }
  .cmep-page-hero,
  .page-head,
  .title-card,
  .wrap > .head,
  .head.hero,
  .us-hero{
    padding:.82rem .72rem !important;
    border-radius:16px !important;
  }
  .cmep-page-hero h1,
  .page-head h1,
  .title-card h1,
  .wrap > .head h1,
  .head h1,
  .cm-h1{
    font-size:1.52rem !important;
    letter-spacing:-.05em !important;
  }
  .cmep-page-hero__lede,
  .page-head .sub,
  .title-card .cm-lede,
  .wrap > .head .sub,
  .head .sub,
  .cm-lede{
    font-size:.9rem !important;
    line-height:1.42 !important;
  }
  .cmep-page-hero__meta,
  .cmep-meta-row,
  .forecast-meta-row,
  .page-actions{
    flex-wrap:nowrap;
    overflow-x:auto;
    overscroll-behavior-x:contain;
    scrollbar-width:none;
    padding-bottom:.12rem;
  }
  .cmep-page-hero__meta::-webkit-scrollbar,
  .cmep-meta-row::-webkit-scrollbar,
  .forecast-meta-row::-webkit-scrollbar,
  .page-actions::-webkit-scrollbar{display:none;}
  .cmep-page-hero__meta span,
  .cmep-meta-row > *,
  .forecast-meta-row > *,
  .page-actions > *{
    flex:0 0 auto;
    min-height:1.75rem;
    padding:.3rem .52rem !important;
    font-size:.7rem !important;
  }
  td,th{padding:.55rem .55rem !important;}
  .table-wrap,
  .table-scroll,
  .cm-table-wrap,
  .results-table-wrap,
  .race-table-wrap{
    margin-inline:-.25rem;
    border-radius:13px !important;
  }
  .card-header,
  .cm-card-header,
  .section-head,
  .section-header,
  .card-title-row{
    align-items:flex-start;
    gap:.5rem;
    padding-bottom:.58rem;
    margin-bottom:.65rem;
  }
  .cta-row,
  .cmep-share-row,
  .actions,
  .controls,
  .filter-row,
  .toolbar{
    flex-wrap:nowrap !important;
    overflow-x:auto;
    scrollbar-width:none;
  }
  .cta-row::-webkit-scrollbar,
  .cmep-share-row::-webkit-scrollbar,
  .actions::-webkit-scrollbar,
  .controls::-webkit-scrollbar,
  .filter-row::-webkit-scrollbar,
  .toolbar::-webkit-scrollbar{display:none;}
}

/*
  PASS 4.1 — readability correction
  Feedback response: keep the shared page headers, but undo the over-aggressive
  left-alignment in homepage forecast modules and restore election-night contrast.
*/

/* Homepage: keep the new hero/header treatment, but restore centered forecast-module rhythm. */
body.cmep-page-home section h2,
body.cmep-home-page section h2{
  text-align:center !important;
}
body.cmep-page-home :where(#cmep-senate-arc-native,#cmep-house-arc-native) :where(.legend),
body.cmep-home-page :where(#cmep-senate-arc-native,#cmep-house-arc-native) :where(.legend){
  justify-content:center !important;
}
body.cmep-page-home :where(#cmep-senate-arc-native,#cmep-house-arc-native) :where(.vp-label),
body.cmep-home-page :where(#cmep-senate-arc-native,#cmep-house-arc-native) :where(.vp-label){
  text-align:center !important;
}
body.cmep-page-home :where(#cmep-senate-arc-native,#cmep-house-arc-native) :where(.cmep-share-row),
body.cmep-home-page :where(#cmep-senate-arc-native,#cmep-house-arc-native) :where(.cmep-share-row){
  justify-content:center !important;
}
body.cmep-page-home .changelog-controls,
body.cmep-home-page .changelog-controls{
  justify-content:center !important;
}
body.cmep-page-home .cl-stats,
body.cmep-home-page .cl-stats{
  justify-content:center !important;
}
body.cmep-page-home .cl-stat,
body.cmep-home-page .cl-stat{
  text-align:center !important;
}

/* Election-night key race cards: the sitewide .race-card surface rule was too broad.
   Reassert the live/called card contrast after the cohesion layer loads. */
body.cmep-page-election-night .race-list .race-card,
body.cmep-page-election-night .race-card.race-link{
  background:var(--bg-card,#fff) !important;
  color:var(--text-main,#111827) !important;
  border-color:var(--border-subtle,rgba(148,163,184,.34)) !important;
  box-shadow:var(--shadow-subtle,0 1px 3px rgba(15,23,42,.12)) !important;
}
body.cmep-page-election-night .race-card.called-d{
  background:linear-gradient(135deg,var(--solid-d,#0076BA),#005f97) !important;
  border-color:rgba(255,255,255,.20) !important;
  color:#fff !important;
}
body.cmep-page-election-night .race-card.called-r{
  background:linear-gradient(135deg,var(--solid-r,#EE220C),#b91c0b) !important;
  border-color:rgba(255,255,255,.20) !important;
  color:#fff !important;
}
body.cmep-page-election-night .race-card.called-o{
  background:linear-gradient(135deg,var(--toss-up,#929292),#374151) !important;
  border-color:rgba(255,255,255,.20) !important;
  color:#fff !important;
}
body.cmep-page-election-night .race-card.projected-runoff.called-d{
  background:
    repeating-linear-gradient(135deg,rgba(255,255,255,0) 0 9px,rgba(255,255,255,.28) 9px 13px),
    linear-gradient(135deg,var(--solid-d,#0076BA),#005f97) !important;
}
body.cmep-page-election-night .race-card.projected-runoff.called-r{
  background:
    repeating-linear-gradient(135deg,rgba(255,255,255,0) 0 9px,rgba(255,255,255,.28) 9px 13px),
    linear-gradient(135deg,var(--solid-r,#EE220C),#b91c0b) !important;
}
body.cmep-page-election-night .race-card.projected-runoff.called-o{
  background:
    repeating-linear-gradient(135deg,rgba(255,255,255,0) 0 9px,rgba(255,255,255,.28) 9px 13px),
    linear-gradient(135deg,var(--toss-up,#929292),#374151) !important;
}
body.cmep-page-election-night .race-card.called-d :where(.race-name,.race-sub,.race-bot .left,.race-bot .right),
body.cmep-page-election-night .race-card.called-r :where(.race-name,.race-sub,.race-bot .left,.race-bot .right),
body.cmep-page-election-night .race-card.called-o :where(.race-name,.race-sub,.race-bot .left,.race-bot .right){
  color:#fff !important;
}
body.cmep-page-election-night .race-card :where(.race-name,.race-sub,.race-bot .left,.race-bot .right){
  min-width:0;
}
body.cmep-page-election-night .race-card .race-name{
  color:var(--text-strong,#111827) !important;
  overflow:visible !important;
  text-overflow:clip !important;
}
body.cmep-page-election-night .race-card.called-d .race-name,
body.cmep-page-election-night .race-card.called-r .race-name,
body.cmep-page-election-night .race-card.called-o .race-name{
  color:#fff !important;
}
body.cmep-page-election-night .race-card .chips{
  flex-shrink:0;
}
body.cmep-page-election-night .race-card .chip{
  max-width:100%;
}
@media (max-width:560px){
  body.cmep-page-election-night .race-list{
    grid-template-columns:1fr !important;
  }
  body.cmep-page-election-night .race-card .race-top{
    align-items:flex-start !important;
  }
  body.cmep-page-election-night .race-card .chips{
    width:100%;
    justify-content:flex-start !important;
  }
  body.cmep-page-election-night .race-card .race-bot{
    align-items:flex-start !important;
  }
  body.cmep-page-election-night .race-card .race-bot .right{
    text-align:left !important;
    white-space:normal !important;
    overflow:visible !important;
    text-overflow:clip !important;
  }
}

/* Election-night map tooltips: preserve readable vote counts and prevent the global
   pill/row/table rules from squeezing or fading the numerical column. */
body.cmep-page-election-night .county-tooltip,
body.cmep-page-election-night .chart-tooltip{
  color:#111827 !important;
  background:rgba(255,255,255,.96) !important;
  border-color:rgba(148,163,184,.28) !important;
}
body.cmep-page-election-night .county-tooltip .ct-row{
  grid-template-columns:minmax(0,1fr) max-content !important;
  gap:.72rem !important;
  transform:none !important;
  background:transparent !important;
}
body.cmep-page-election-night .county-tooltip .ct-left{
  min-width:0 !important;
}
body.cmep-page-election-night .county-tooltip .ct-name{
  white-space:normal !important;
  overflow:visible !important;
  text-overflow:clip !important;
}
body.cmep-page-election-night .county-tooltip .ct-right{
  min-width:4.9rem !important;
  flex:0 0 auto !important;
  color:#111827 !important;
}
body.cmep-page-election-night .county-tooltip .ct-pct{
  color:#111827 !important;
  font-variant-numeric:tabular-nums !important;
  white-space:nowrap !important;
}
body.cmep-page-election-night .county-tooltip .ct-votes{
  color:#475569 !important;
  font-variant-numeric:tabular-nums !important;
  white-space:nowrap !important;
}
body.cmep-page-election-night .county-tooltip .ct-party,
body.cmep-page-election-night .county-tooltip .ct-note,
body.cmep-page-election-night .county-tooltip .ct-chip{
  color:#64748b !important;
}
@media (prefers-color-scheme:dark){
  body.cmep-page-election-night .county-tooltip,
  body.cmep-page-election-night .chart-tooltip{
    color:#f8fafc !important;
    background:rgba(2,6,23,.94) !important;
    border-color:rgba(148,163,184,.24) !important;
  }
  body.cmep-page-election-night .county-tooltip .ct-right,
  body.cmep-page-election-night .county-tooltip .ct-pct{
    color:#f8fafc !important;
  }
  body.cmep-page-election-night .county-tooltip .ct-votes,
  body.cmep-page-election-night .county-tooltip .ct-party,
  body.cmep-page-election-night .county-tooltip .ct-note,
  body.cmep-page-election-night .county-tooltip .ct-chip{
    color:#cbd5e1 !important;
  }
}
@media (max-width:520px){
  body.cmep-page-election-night .county-tooltip .ct-row{
    grid-template-columns:minmax(0,1fr) minmax(4.6rem,max-content) !important;
    gap:.5rem !important;
  }
  body.cmep-page-election-night .county-tooltip .ct-right{
    min-width:4.6rem !important;
  }
  body.cmep-page-election-night .county-tooltip .ct-votes{
    font-size:.72rem !important;
  }
}

/*
  PASS 4.2 — mobile real-estate and overflow correction
  Feedback response: reduce mobile compression across public pages, especially
  election-night pages, while avoiding horizontal scrollers on both mobile and desktop.
*/

/* Base overflow discipline: the page itself should never sideways-scroll. */
html,
body{
  max-width:100% !important;
  overflow-x:clip !important;
}
body.cmep-enhanced *,
body.cmep-enhanced *::before,
body.cmep-enhanced *::after{
  min-width:0;
  box-sizing:border-box;
}
body.cmep-enhanced :where(img,svg,canvas,video,iframe){
  max-width:100%;
}

/* Broad public-page width: use the viewport, but keep desktop content controlled. */
body.cmep-enhanced :where(.container,.wrap,.page-shell,.shell,.content,.main,.site-main){
  max-width:min(100%, var(--max, 1320px)) !important;
}
body.cmep-page-home .container,
body.cmep-page-forecast .container,
body.cmep-page-state .container,
body.cmep-page-detail .container,
body.cmep-page-history .container,
body.cmep-page-election-night .wrap,
body.cmep-page-election-night .container{
  width:100% !important;
}

/* Stop component-level horizontal scrollers introduced by earlier compact passes. */
body.cmep-enhanced :where(
  .cta-row,
  .cmep-share-row,
  .actions,
  .controls,
  .filter-row,
  .toolbar,
  .seg,
  .tabs,
  .nav-tabs,
  .legend,
  .mobile-path-cards,
  .cl-segments,
  .changelog-controls,
  .button-row,
  .race-actions
){
  overflow-x:visible !important;
  overflow-y:visible !important;
  flex-wrap:wrap !important;
  scrollbar-width:auto !important;
}
body.cmep-enhanced :where(
  .cta-row,
  .cmep-share-row,
  .actions,
  .controls,
  .filter-row,
  .toolbar,
  .seg,
  .tabs,
  .nav-tabs,
  .legend,
  .mobile-path-cards,
  .cl-segments,
  .changelog-controls,
  .button-row,
  .race-actions
)::-webkit-scrollbar{
  display:initial !important;
}

/* Forecast arc/path cards: stack instead of horizontal swipe cards. */
body.cmep-enhanced :where(#cmep-house-arc-native,#cmep-senate-arc-native) .mobile-path-cards{
  display:grid !important;
  grid-template-columns:1fr !important;
  gap:.7rem !important;
  padding:.25rem 0 .35rem !important;
  scroll-snap-type:none !important;
}
body.cmep-enhanced :where(#cmep-house-arc-native,#cmep-senate-arc-native) .mobile-path-card{
  width:100% !important;
  max-width:100% !important;
  min-width:0 !important;
  flex:1 1 auto !important;
  scroll-snap-align:none !important;
}

/* Tables: prefer fitting/wrapping over horizontal scroll containers. */
body.cmep-enhanced :where(.cm-table-wrap,.table-wrap,.table-wrapper,.table-scroll,.overflow-x,.race-table-wrap,.ratings-table-wrap,.results-table-wrap){
  overflow-x:visible !important;
  max-width:100% !important;
}
body.cmep-enhanced table{
  width:100% !important;
  max-width:100% !important;
  table-layout:fixed !important;
  border-collapse:separate;
}
body.cmep-enhanced :where(th,td){
  min-width:0 !important;
  max-width:100% !important;
  overflow-wrap:anywhere;
  word-break:normal;
}
body.cmep-enhanced :where(th,td) :where(a,span,div,strong,em){
  max-width:100%;
}

/* Election-night mobile layout: reduce outer chrome, not the content itself. */
body.cmep-page-election-night .wrap,
body.cmep-page-election-night .container{
  padding-left:clamp(.55rem, 2.2vw, 1rem) !important;
  padding-right:clamp(.55rem, 2.2vw, 1rem) !important;
}
body.cmep-page-election-night .panel,
body.cmep-page-election-night :where(.card,.cm-card,.result-card,.contest-card,.race-card,.state-tile){
  max-width:100% !important;
}
body.cmep-page-election-night :where(.panel,.hero,.section,.cm-card){
  border-radius:clamp(16px, 4vw, 22px) !important;
}
body.cmep-page-election-night .grid,
body.cmep-page-election-night .race-list,
body.cmep-page-election-night .results-grid,
body.cmep-page-election-night .dashboard-grid,
body.cmep-page-election-night .state-grid,
body.cmep-page-election-night #stateGrid,
body.cmep-page-election-night #recentStateGrid,
body.cmep-page-election-night #moreStateGrid{
  max-width:100% !important;
}
body.cmep-page-election-night .race-list{
  grid-template-columns:repeat(auto-fit, minmax(min(100%, 330px), 1fr)) !important;
}

/* Election-night key-race cards: give text room and avoid chip columns squeezing names. */
body.cmep-page-election-night .race-card{
  width:100% !important;
  padding:13px 14px !important;
  gap:10px !important;
}
body.cmep-page-election-night .race-card .race-top{
  display:grid !important;
  grid-template-columns:minmax(0,1fr) auto !important;
  align-items:start !important;
  gap:.7rem !important;
}
body.cmep-page-election-night .race-card .race-left{
  min-width:0 !important;
}
body.cmep-page-election-night .race-card .chips{
  max-width:100% !important;
  justify-content:flex-end !important;
  flex-wrap:wrap !important;
  min-width:0 !important;
}
body.cmep-page-election-night .race-card .chip,
body.cmep-page-election-night .race-card :where(.projection-pill,.winner-pill){
  max-width:100% !important;
  white-space:normal !important;
  text-align:center !important;
}
body.cmep-page-election-night .race-card :where(.race-name,.race-sub,.race-bot .right){
  overflow:visible !important;
  text-overflow:clip !important;
  white-space:normal !important;
}
body.cmep-page-election-night .race-card .race-bot{
  display:grid !important;
  grid-template-columns:minmax(0,1fr) auto !important;
  align-items:start !important;
  gap:.65rem !important;
}
body.cmep-page-election-night .race-card .race-bot .right{
  min-width:fit-content !important;
}

/* Election-night detail pages: map/results cards should use the available width. */
body.cmep-page-election-night :where(.map-card,.map-panel,.results-card,.results-panel,.county-panel,.summary-card,.contest-panel){
  width:100% !important;
  max-width:100% !important;
}
body.cmep-page-election-night :where(.map-card,.map-panel,.results-card,.results-panel,.county-panel,.summary-card,.contest-panel) > *{
  max-width:100% !important;
}

/* Tooltip vote counts: keep two columns, but allow the tooltip to fit the viewport. */
body.cmep-page-election-night :where(.county-tooltip,.chart-tooltip,#tooltip,.tooltip){
  max-width:min(360px, calc(100vw - 20px)) !important;
  overflow-wrap:normal !important;
}
body.cmep-page-election-night .county-tooltip .ct-row{
  grid-template-columns:minmax(0,1fr) minmax(4.7rem,max-content) !important;
}
body.cmep-page-election-night .county-tooltip :where(.ct-right,.ct-pct,.ct-votes){
  white-space:nowrap !important;
  word-break:normal !important;
  overflow-wrap:normal !important;
}

/* General mobile: spend less space on outer gutters and card chrome. */
@media (max-width:760px){
  body.cmep-enhanced :where(.container,.wrap,.page-shell,.shell,.content,.main,.site-main){
    padding-left:.55rem !important;
    padding-right:.55rem !important;
  }
  body.cmep-enhanced :where(.cm-card,.card,.panel,.result-card,.contest-card,.state-card,.district-card,.projection-card,.featured-card,.method-card){
    border-radius:16px !important;
    padding-left:.75rem !important;
    padding-right:.75rem !important;
  }
  body.cmep-enhanced :where(.page-hero,.cmep-page-hero,.hero,.masthead){
    padding-left:.8rem !important;
    padding-right:.8rem !important;
  }
  body.cmep-enhanced :where(.forecast-grid,.grid,.cards,.race-grid,.state-grid,.district-grid,.results-grid,.dashboard-grid){
    gap:.7rem !important;
  }
  body.cmep-enhanced :where(.legend,.seg,.controls,.filter-row,.toolbar,.actions,.cmep-share-row,.cta-row){
    gap:.38rem !important;
  }
  body.cmep-enhanced :where(.btn,.button,button,.cm-btn,.changelog-seg,.seg button,.legend-item,.pill,.badge,.tag,.party-pill){
    max-width:100% !important;
    white-space:normal !important;
  }
  body.cmep-enhanced table{
    font-size:clamp(.68rem, 2.65vw, .82rem) !important;
  }
  body.cmep-enhanced :where(th,td){
    padding:.48rem .38rem !important;
  }
}

/* Narrow election-night phones: prefer one clear column and full-width action rows. */
@media (max-width:560px){
  body.cmep-page-election-night .wrap,
  body.cmep-page-election-night .container{
    padding-left:.45rem !important;
    padding-right:.45rem !important;
  }
  body.cmep-page-election-night :where(.panel,.hero,.section,.cm-card){
    padding-left:.65rem !important;
    padding-right:.65rem !important;
  }
  body.cmep-page-election-night .race-list,
  body.cmep-page-election-night .state-grid,
  body.cmep-page-election-night #stateGrid,
  body.cmep-page-election-night #recentStateGrid,
  body.cmep-page-election-night #moreStateGrid{
    grid-template-columns:1fr !important;
  }
  body.cmep-page-election-night .race-card{
    padding:12px 12px !important;
  }
  body.cmep-page-election-night .race-card .race-top{
    grid-template-columns:1fr !important;
  }
  body.cmep-page-election-night .race-card .chips{
    justify-content:flex-start !important;
  }
  body.cmep-page-election-night .race-card .race-bot{
    grid-template-columns:1fr !important;
  }
  body.cmep-page-election-night .race-card .race-bot .right{
    min-width:0 !important;
    text-align:left !important;
  }
  body.cmep-page-election-night .state-tile{
    min-height:auto !important;
    padding:.78rem .72rem !important;
  }
  body.cmep-page-election-night .state-outline-wrap{
    height:62px !important;
  }
}

/* Very narrow phones: compress typography slightly rather than create overflow. */
@media (max-width:390px){
  body.cmep-enhanced :where(.container,.wrap,.page-shell,.shell,.content,.main,.site-main){
    padding-left:.38rem !important;
    padding-right:.38rem !important;
  }
  body.cmep-enhanced :where(.cm-card,.card,.panel,.result-card,.contest-card,.state-card,.district-card,.projection-card,.featured-card,.method-card){
    padding-left:.6rem !important;
    padding-right:.6rem !important;
  }
  body.cmep-page-election-night .race-card .race-name{
    font-size:.9rem !important;
  }
  body.cmep-page-election-night .race-card .race-sub,
  body.cmep-page-election-night .race-card .race-bot{
    font-size:.73rem !important;
  }
  body.cmep-page-election-night .county-tooltip,
  body.cmep-page-election-night .chart-tooltip{
    max-width:calc(100vw - 12px) !important;
  }
}

/*
  PASS 4.3 — election-night mobile spacing/alignment correction
  Targeted fixes after mobile review: remove excess top gap, use more viewport width
  below the header/projection area, avoid horizontal scroll rows, and center mobile-only
  election-night section framing where left alignment felt awkward.
*/
html,
body.cmep-enhanced{
  max-width:100%;
  overflow-x:clip;
}
body.cmep-enhanced *{
  min-width:0;
}

/* Avoid horizontal-scroll controls/metadata introduced by earlier mobile compaction. */
@media (max-width:760px){
  body.cmep-enhanced :where(.cmep-page-hero__meta,.cmep-meta-row,.forecast-meta-row,.page-actions,.legend,.legend-row,.legend-list,.controls,.filter-row,.toolbar,.actions,.cmep-share-row,.cta-row){
    flex-wrap:wrap !important;
    overflow-x:visible !important;
    overflow-y:visible !important;
    overscroll-behavior-x:auto !important;
    scrollbar-width:auto !important;
  }
  body.cmep-enhanced :where(.cmep-page-hero__meta span,.cmep-meta-row > *,.forecast-meta-row > *,.page-actions > *){
    flex:1 1 auto !important;
    justify-content:center;
    min-width:min(100%, 7.2rem) !important;
    max-width:100% !important;
    white-space:normal !important;
    text-align:center;
  }
  body.cmep-enhanced :where(.table-wrap,.table-scroll,.cm-table-wrap,.results-table-wrap,.race-table-wrap){
    overflow-x:hidden !important;
    max-width:100% !important;
  }
  body.cmep-enhanced table{
    table-layout:fixed !important;
    max-width:100% !important;
  }
}

/* Election-night: remove the odd mobile gap above the page header/title. */
@media (max-width:760px){
  body.cmep-page-election-night #cm-header{
    margin-bottom:0 !important;
  }
  body.cmep-page-election-night .wrap,
  body.cmep-page-election-night .container{
    padding-top:.35rem !important;
    margin-top:0 !important;
    row-gap:.52rem !important;
  }
  body.cmep-page-election-night .wrap > .head,
  body.cmep-page-election-night .container > .head,
  body.cmep-page-election-night .wrap > .page-head,
  body.cmep-page-election-night .container > .page-head,
  body.cmep-page-election-night .wrap > .cmep-page-hero,
  body.cmep-page-election-night .container > .cmep-page-hero{
    margin-top:0 !important;
    margin-bottom:.55rem !important;
  }
}

/* Election-night mobile: keep the title/header contained, but let content panels below it breathe. */
@media (max-width:640px){
  body.cmep-page-election-night .wrap,
  body.cmep-page-election-night .container{
    width:100% !important;
    max-width:100% !important;
    padding-left:.42rem !important;
    padding-right:.42rem !important;
  }
  body.cmep-page-election-night .wrap > :where(.section,.grid.section,.panel,.card,.cm-card):not(.head):not(.page-head):not(.cmep-page-hero),
  body.cmep-page-election-night .container > :where(.section,.grid.section,.panel,.card,.cm-card):not(.head):not(.page-head):not(.cmep-page-hero){
    margin-left:-.18rem !important;
    margin-right:-.18rem !important;
    width:calc(100% + .36rem) !important;
    max-width:calc(100% + .36rem) !important;
  }
  body.cmep-page-election-night :where(.section,.panel,.card,.cm-card,.result-card,.contest-card,.state-tile,.race-card){
    border-radius:15px !important;
  }
  body.cmep-page-election-night :where(.section,.panel,.card,.cm-card){
    padding-left:.62rem !important;
    padding-right:.62rem !important;
  }
}

/* Mobile election-night section framing: center headings/subtitles, but keep dense data tables numeric. */
@media (max-width:640px){
  body.cmep-page-election-night .section-head,
  body.cmep-page-election-night .card-header,
  body.cmep-page-election-night .panel-header,
  body.cmep-page-election-night .summary-head{
    justify-content:center !important;
    align-items:center !important;
    text-align:center !important;
    gap:.24rem .45rem !important;
  }
  body.cmep-page-election-night .section-head > *,
  body.cmep-page-election-night .card-header > *,
  body.cmep-page-election-night .panel-header > *,
  body.cmep-page-election-night .summary-head > *{
    max-width:100% !important;
  }
  body.cmep-page-election-night .section-head h2,
  body.cmep-page-election-night .section-head .m,
  body.cmep-page-election-night .card-header h2,
  body.cmep-page-election-night .panel-header h2,
  body.cmep-page-election-night .summary-head h2{
    width:100% !important;
    text-align:center !important;
  }
  body.cmep-page-election-night .head,
  body.cmep-page-election-night .brand,
  body.cmep-page-election-night .brand h1,
  body.cmep-page-election-night .brand small,
  body.cmep-page-election-night .subhead,
  body.cmep-page-election-night .hero,
  body.cmep-page-election-night .page-head{
    text-align:center !important;
    justify-content:center !important;
  }
}

/* Key-race cards on phones: center the presentation instead of leaving stranded left-aligned bits. */
@media (max-width:560px){
  body.cmep-page-election-night .race-card{
    text-align:center !important;
    padding-left:.82rem !important;
    padding-right:.82rem !important;
  }
  body.cmep-page-election-night .race-card .race-top,
  body.cmep-page-election-night .race-card .race-bot{
    justify-items:center !important;
    align-items:center !important;
    text-align:center !important;
  }
  body.cmep-page-election-night .race-card .race-left,
  body.cmep-page-election-night .race-card .race-name,
  body.cmep-page-election-night .race-card .race-sub,
  body.cmep-page-election-night .race-card .race-bot .left,
  body.cmep-page-election-night .race-card .race-bot .right{
    text-align:center !important;
    width:100% !important;
  }
  body.cmep-page-election-night .race-card .chips{
    justify-content:center !important;
    width:100% !important;
  }
  body.cmep-page-election-night .race-card .chip,
  body.cmep-page-election-night .race-card :where(.projection-pill,.winner-pill){
    flex:0 1 auto !important;
  }
}

/* State tiles and election-night cards should not force a horizontal scrollbar via nowrap text. */
@media (max-width:760px){
  body.cmep-page-election-night :where(.state-name,.state-meta,.choice .title,.choice .meta,.race-name,.race-sub,.race-bot .left,.race-bot .right){
    white-space:normal !important;
    overflow:visible !important;
    text-overflow:clip !important;
  }
  body.cmep-page-election-night :where(.state-grid,#stateGrid,#recentStateGrid,#moreStateGrid,.race-list,.results-grid,.dashboard-grid,.grid){
    width:100% !important;
    max-width:100% !important;
    overflow-x:clip !important;
  }
}

/*
  PASS 4.4 — election-night spacing, mobile width, and wrapping correction
  Scope: targeted refinements after pass 4.3 testing. Keeps the improved header,
  removes the remaining desktop top gap, gives mobile cards more usable width,
  normalizes spacing between standard/projection cards, and replaces aggressive
  ellipsis with readable wrapping for long names/called labels.
*/

/* Election-night: remove the remaining desktop/tablet gap above the page header. */
body.cmep-page-election-night{
  overflow-x:hidden !important;
}
body.cmep-page-election-night #cm-header{
  margin-bottom:0 !important;
}
body.cmep-page-election-night :where(main,.main,.site-main,.page,.page-shell,.shell,.content,.dashboard,.wrap,.container){
  margin-top:0 !important;
}
body.cmep-page-election-night :where(.wrap,.container){
  padding-top:.45rem !important;
}
body.cmep-page-election-night :where(.wrap,.container) > :where(.head,.page-head,.cmep-page-hero,.hero,.masthead):first-child{
  margin-top:0 !important;
}
body.cmep-page-election-night :where(.head,.page-head,.cmep-page-hero,.hero,.masthead){
  margin-top:0 !important;
}

/* Election-night: one consistent vertical rhythm between normal cards and projection cards. */
body.cmep-page-election-night :where(.wrap,.container,.dashboard,.content){
  row-gap:1rem !important;
}
body.cmep-page-election-night :where(.section,.panel,.card,.cm-card,.result-card,.contest-card,.race-card,.state-card,.state-tile,.projection-card){
  margin-top:0 !important;
  margin-bottom:1rem !important;
}
body.cmep-page-election-night :where(.section,.panel,.card,.cm-card,.result-card,.contest-card,.race-card,.state-card,.state-tile,.projection-card):last-child{
  margin-bottom:0 !important;
}
body.cmep-page-election-night :where(.grid,.dashboard-grid,.results-grid,.state-grid,.race-grid,.projection-grid,.cards,.card-grid){
  gap:1rem !important;
  row-gap:1rem !important;
}
body.cmep-page-election-night :where(.projection-card,.projection-tile,.projection-panel,.projection-item){
  align-self:stretch !important;
}

/* Long names, check/called rows, and candidate labels should wrap instead of disappearing behind ellipses. */
body.cmep-page-election-night :where(
  .race-name,.race-title,.race-sub,.race-label,
  .candidate-name,.cand-name,.candidate .name,.candidate-row .name,.candidate-row .candidate,
  .primary-cand .n,.primary-cand .name,.cand .n,.cand .name,
  .choice .title,.choice .meta,.state-name,.state-meta,
  .winner,.winner-name,.winner-label,.called-line,.call-line,.called-text,
  .result-title,.result-name,.contest-title,.contest-name,
  .projection-title,.projection-name,.projection-label,
  .name,.n
){
  min-width:0 !important;
  max-width:100% !important;
  white-space:normal !important;
  overflow:visible !important;
  text-overflow:clip !important;
  overflow-wrap:break-word !important;
  word-break:normal !important;
  line-height:1.22 !important;
}
body.cmep-page-election-night :where(
  .race-top,.race-bot,.candidate-row,.candidate,.primary-cand,.choice,
  .called-line,.call-line,.winner-row,.projection-row,.result-row,.contest-row
){
  min-width:0 !important;
  max-width:100% !important;
}
body.cmep-page-election-night :where(
  .race-top,.race-bot,.candidate-row,.candidate,.primary-cand,.choice,.called-line,.call-line,.winner-row,.projection-row
){
  flex-wrap:wrap !important;
}
body.cmep-page-election-night :where(.check,.checkmark,.check-icon,.called-check,.winner-check,svg[aria-hidden="true"]){
  flex:0 0 auto !important;
  min-width:auto !important;
}
body.cmep-page-election-night :where(.chip,.pill,.badge,.party-pill,.projection-pill,.winner-pill,.call-pill){
  max-width:100% !important;
  min-width:0 !important;
}

/* Keep numeric/tooling content readable but avoid forcing page-level horizontal scroll. */
body.cmep-page-election-night :where(.county-tooltip,.chart-tooltip,.cmep-site-tooltip,.tooltip,.map-tooltip){
  max-width:min(420px, calc(100vw - 16px)) !important;
  overflow-wrap:normal !important;
}
body.cmep-page-election-night :where(.county-tooltip,.chart-tooltip,.cmep-site-tooltip,.tooltip,.map-tooltip) :where(.ct-right,.num,.votes,.pct,.count){
  white-space:nowrap !important;
  text-align:right !important;
}

/* Mobile: stretch cards closer to viewport edges without causing overflow. */
@media (max-width:760px){
  body.cmep-page-election-night :where(.wrap,.container){
    width:100% !important;
    max-width:100% !important;
    padding-left:.28rem !important;
    padding-right:.28rem !important;
    padding-top:.28rem !important;
  }
  body.cmep-page-election-night :where(.wrap,.container) > :where(.head,.page-head,.cmep-page-hero,.hero,.masthead):first-child{
    margin-bottom:.7rem !important;
  }
  body.cmep-page-election-night :where(.wrap,.container) > :where(.section,.grid.section,.panel,.card,.cm-card,.result-card,.contest-card,.state-card,.projection-card):not(.head):not(.page-head):not(.cmep-page-hero):not(.hero):not(.masthead){
    margin-left:-.18rem !important;
    margin-right:-.18rem !important;
    width:calc(100% + .36rem) !important;
    max-width:calc(100% + .36rem) !important;
  }
  body.cmep-page-election-night :where(.section,.panel,.card,.cm-card,.result-card,.contest-card,.state-card,.projection-card){
    padding-left:.68rem !important;
    padding-right:.68rem !important;
    margin-bottom:.82rem !important;
  }
  body.cmep-page-election-night :where(.race-card,.state-tile,.projection-card,.result-card,.contest-card){
    padding-left:.74rem !important;
    padding-right:.74rem !important;
    margin-bottom:.82rem !important;
  }
  body.cmep-page-election-night :where(.grid,.dashboard-grid,.results-grid,.state-grid,.race-grid,.projection-grid,.cards,.card-grid){
    gap:.82rem !important;
    row-gap:.82rem !important;
  }
  body.cmep-page-election-night :where(.race-top,.race-bot,.candidate-row,.candidate,.primary-cand,.choice,.winner-row,.projection-row){
    gap:.42rem .5rem !important;
  }
  body.cmep-page-election-night :where(.chip,.pill,.badge,.party-pill,.projection-pill,.winner-pill,.call-pill){
    white-space:normal !important;
    overflow-wrap:break-word !important;
    text-align:center !important;
  }
}

/* Small phones: nearly full-bleed content cards, but still leave a safe sliver of page background. */
@media (max-width:520px){
  body.cmep-page-election-night :where(.wrap,.container){
    padding-left:.18rem !important;
    padding-right:.18rem !important;
  }
  body.cmep-page-election-night :where(.wrap,.container) > :where(.section,.grid.section,.panel,.card,.cm-card,.result-card,.contest-card,.state-card,.projection-card):not(.head):not(.page-head):not(.cmep-page-hero):not(.hero):not(.masthead){
    margin-left:-.12rem !important;
    margin-right:-.12rem !important;
    width:calc(100% + .24rem) !important;
    max-width:calc(100% + .24rem) !important;
  }
  body.cmep-page-election-night :where(.section,.panel,.card,.cm-card,.result-card,.contest-card,.state-card,.projection-card){
    border-radius:14px !important;
    padding-left:.6rem !important;
    padding-right:.6rem !important;
  }
  body.cmep-page-election-night :where(.race-card,.state-tile,.projection-card,.result-card,.contest-card){
    border-radius:14px !important;
    padding-left:.66rem !important;
    padding-right:.66rem !important;
  }
}

/* Desktop/tablet: avoid ellipsis in projection/called cards, but keep cards visually balanced. */
@media (min-width:761px){
  body.cmep-page-election-night :where(.projection-card,.race-card,.state-tile,.result-card,.contest-card){
    display:flex;
    flex-direction:column;
  }
  body.cmep-page-election-night :where(.race-name,.candidate-name,.primary-cand .n,.choice .title,.called-line,.winner-row){
    hyphens:auto;
  }
  body.cmep-page-election-night :where(.race-top,.race-bot,.candidate-row,.primary-cand,.choice,.winner-row,.projection-row){
    align-items:center !important;
  }
}

/* ======================================================================
   DESIGN COHESION PASS 4.5 — election-night width, spacing, and wrapping
   ----------------------------------------------------------------------
   Aligns result cards with the header/projection shell, uses more tablet/
   desktop width, and prevents long candidate/race labels from being lost
   behind ellipses while still guarding against horizontal overflow.
====================================================================== */

body.cmep-page-election-night{
  overflow-x:hidden !important;
}
body.cmep-page-election-night :where(.wrap,.container){
  width:100% !important;
  max-width:min(1440px, calc(100vw - 32px)) !important;
  margin-left:auto !important;
  margin-right:auto !important;
  padding-top:.45rem !important;
}
body.cmep-page-election-night :where(.wrap,.container,.page-head,.head,.state-hero,#officeViews,.office-view,#alerts,#globalWinnerBanner){
  min-width:0 !important;
}

/* Header/projection/result sections should share one width system. */
body.cmep-page-election-night :where(.page-head,.head,.state-hero,.hero,.masthead,#globalWinnerBanner,.section,.panel,.card,.cm-card,.result-card,.contest-card){
  width:100% !important;
  max-width:100% !important;
}
body.cmep-page-election-night :where(.section,.panel,.card,.cm-card,.result-card,.contest-card,.state-card,.projection-card){
  margin-left:0 !important;
  margin-right:0 !important;
}
body.cmep-page-election-night :where(.grid,.grid-2,.dashboard-grid,.results-grid,.state-grid,.race-grid,.race-list,.projection-grid,.cards,.card-grid,.district-grid){
  width:100% !important;
  max-width:100% !important;
  min-width:0 !important;
  align-items:stretch !important;
}

/* Desktop/tablet: use the available width instead of leaving a narrow centered column. */
@media (min-width:1100px){
  body.cmep-page-election-night :where(.wrap,.container){
    max-width:min(1480px, calc(100vw - 48px)) !important;
  }
  body.cmep-page-election-night :where(.race-list){
    grid-template-columns:repeat(auto-fit, minmax(min(430px, 100%), 1fr)) !important;
  }
  body.cmep-page-election-night :where(.state-grid,#stateGrid,#recentStateGrid,#moreStateGrid){
    grid-template-columns:repeat(auto-fit, minmax(min(220px, 100%), 1fr)) !important;
  }
  body.cmep-page-election-night :where(.district-grid){
    grid-template-columns:repeat(auto-fit, minmax(min(230px, 100%), 1fr)) !important;
  }
  body.cmep-page-election-night :where(#electionNightGovernor .grid-2,#electionNightSenate .grid-2,.grid-2){
    grid-template-columns:minmax(360px,.92fr) minmax(520px,1.08fr) !important;
    gap:1.05rem !important;
  }
}
@media (min-width:760px) and (max-width:1099px){
  body.cmep-page-election-night :where(.wrap,.container){
    max-width:min(1000px, calc(100vw - 28px)) !important;
  }
  body.cmep-page-election-night :where(.race-list){
    grid-template-columns:repeat(auto-fit, minmax(min(340px, 100%), 1fr)) !important;
  }
  body.cmep-page-election-night :where(.state-grid,#stateGrid,#recentStateGrid,#moreStateGrid,.district-grid){
    grid-template-columns:repeat(auto-fit, minmax(min(190px, 100%), 1fr)) !important;
  }
  body.cmep-page-election-night :where(#electionNightGovernor .grid-2,#electionNightSenate .grid-2,.grid-2){
    grid-template-columns:1fr !important;
  }
}

/* Mobile: result cards should align to the same readable shell as the header. */
@media (max-width:759px){
  body.cmep-page-election-night :where(.wrap,.container){
    max-width:100% !important;
    padding-left:.42rem !important;
    padding-right:.42rem !important;
    padding-top:.24rem !important;
  }
  body.cmep-page-election-night :where(.page-head,.head,.state-hero,.hero,.masthead,#globalWinnerBanner){
    margin-left:0 !important;
    margin-right:0 !important;
    width:100% !important;
    max-width:100% !important;
  }
  body.cmep-page-election-night :where(.section,.panel,.card,.cm-card,.result-card,.contest-card,.state-card,.projection-card){
    width:100% !important;
    max-width:100% !important;
    margin-left:0 !important;
    margin-right:0 !important;
    padding-left:.72rem !important;
    padding-right:.72rem !important;
  }
  body.cmep-page-election-night :where(.race-list,.state-grid,#stateGrid,#recentStateGrid,#moreStateGrid,.district-grid,.grid,.grid-2,.results-grid,.projection-grid,.cards,.card-grid){
    grid-template-columns:1fr !important;
    gap:.78rem !important;
  }
  body.cmep-page-election-night :where(.state-grid,#stateGrid,#recentStateGrid,#moreStateGrid){
    grid-template-columns:repeat(2, minmax(0, 1fr)) !important;
  }
}
@media (max-width:420px){
  body.cmep-page-election-night :where(.wrap,.container){
    padding-left:.28rem !important;
    padding-right:.28rem !important;
  }
  body.cmep-page-election-night :where(.section,.panel,.card,.cm-card,.result-card,.contest-card,.state-card,.projection-card){
    padding-left:.62rem !important;
    padding-right:.62rem !important;
  }
}

/* Even vertical rhythm between headers, projection banners, cards, and grids. */
body.cmep-page-election-night :where(.page-head,.head,.state-hero,.hero,.masthead){
  margin-bottom:1rem !important;
}
body.cmep-page-election-night :where(#globalWinnerBanner){
  margin-top:0 !important;
  margin-bottom:1rem !important;
}
body.cmep-page-election-night :where(.section,.panel,.card,.cm-card,.result-card,.contest-card,.state-card,.projection-card,.house-bucket){
  margin-top:0 !important;
  margin-bottom:1rem !important;
}
body.cmep-page-election-night :where(.grid,.grid-2,.dashboard-grid,.results-grid,.state-grid,.race-grid,.race-list,.projection-grid,.cards,.card-grid,.district-grid,.house-buckets){
  gap:1rem !important;
  row-gap:1rem !important;
}
@media (max-width:759px){
  body.cmep-page-election-night :where(.page-head,.head,.state-hero,.hero,.masthead,#globalWinnerBanner,.section,.panel,.card,.cm-card,.result-card,.contest-card,.state-card,.projection-card,.house-bucket){
    margin-bottom:.78rem !important;
  }
  body.cmep-page-election-night :where(.grid,.grid-2,.dashboard-grid,.results-grid,.state-grid,.race-grid,.race-list,.projection-grid,.cards,.card-grid,.district-grid,.house-buckets){
    gap:.78rem !important;
    row-gap:.78rem !important;
  }
}

/* Long labels: prefer controlled wrapping over ellipses for names, calls, checks, and projection text. */
body.cmep-page-election-night :where(
  .race-left,.race-top,.race-bot,.candidate,.candidate-row,.primary-cand,.choice,.result-row,.contest-row,
  .winner-row,.projection-row,.called-line,.call-line,.card-header,.house-bucket-head
){
  min-width:0 !important;
  max-width:100% !important;
}
body.cmep-page-election-night :where(.race-top,.candidate-row,.primary-cand,.choice,.result-row,.contest-row,.winner-row,.projection-row,.called-line,.call-line){
  display:flex;
  flex-wrap:wrap !important;
}
body.cmep-page-election-night :where(.race-top){
  align-items:flex-start !important;
}
body.cmep-page-election-night :where(.race-left){
  flex:1 1 260px !important;
}
body.cmep-page-election-night :where(.chips){
  flex:0 1 auto !important;
  max-width:min(100%, 440px) !important;
}
body.cmep-page-election-night :where(
  .race-name,.race-sub,.state-name,.state-meta,.district-name,.district-meta,.district-submeta,.district-status,
  .candidate-name,.cand-name,.candidate .name,.candidate-row .name,.candidate-row .candidate,
  .primary-cand .n,.primary-cand .name,.cand .n,.cand .name,
  .choice .title,.choice .meta,.winner,.winner-name,.winner-label,.called-line,.call-line,.called-text,
  .result-title,.result-name,.contest-title,.contest-name,.projection-title,.projection-name,.projection-label,
  .projection-text,.winner-text,.card-title,.card-help,.house-bucket-title,.name,.n
){
  min-width:0 !important;
  max-width:100% !important;
  white-space:normal !important;
  overflow:visible !important;
  text-overflow:clip !important;
  overflow-wrap:break-word !important;
  word-break:normal !important;
  hyphens:auto;
}
body.cmep-page-election-night :where(.chip,.pill,.badge,.party-pill,.projection-pill,.winner-pill,.call-pill,.live-pill,.district-status){
  min-width:0 !important;
  max-width:100% !important;
  white-space:normal !important;
  overflow:visible !important;
  text-overflow:clip !important;
  overflow-wrap:break-word !important;
}
body.cmep-page-election-night :where(.check,.checkmark,.check-icon,.called-check,.winner-check,.winner-icon,.projection-icon,svg[aria-hidden="true"]){
  flex:0 0 auto !important;
}
body.cmep-page-election-night :where(.race-bot){
  align-items:flex-start !important;
}
body.cmep-page-election-night :where(.race-bot .left,.race-bot .right){
  flex:1 1 180px !important;
  min-width:0 !important;
  white-space:normal !important;
  overflow:visible !important;
  text-overflow:clip !important;
}
body.cmep-page-election-night :where(.race-bot .right){
  text-align:right !important;
}
@media (max-width:759px){
  body.cmep-page-election-night :where(.race-left,.race-bot .left,.race-bot .right){
    flex-basis:100% !important;
  }
  body.cmep-page-election-night :where(.chips){
    justify-content:center !important;
    width:100% !important;
  }
  body.cmep-page-election-night :where(.race-bot .right){
    text-align:center !important;
  }
}

/* Tables/result lists: use full width, but do not create page-level horizontal scroll. */
body.cmep-page-election-night :where(table,.results-table,.county-table,.candidate-table){
  width:100% !important;
  max-width:100% !important;
  table-layout:auto !important;
}
body.cmep-page-election-night :where(.table-wrap,.results-wrap,.county-list,.primary-mount,.map-shell,.map-wrap,.chart-wrap){
  width:100% !important;
  max-width:100% !important;
  min-width:0 !important;
  overflow-x:clip !important;
}
body.cmep-page-election-night :where(th,td){
  min-width:0 !important;
}
body.cmep-page-election-night :where(td:first-child,th:first-child,.candidate-cell,.race-cell,.county-cell){
  white-space:normal !important;
  overflow-wrap:break-word !important;
}
body.cmep-page-election-night :where(.num,.votes,.pct,.count,.ct-right){
  white-space:nowrap !important;
}

/*
  PASS 4.6 — dark-mode header and alignment correction
  Scope: targeted follow-up to pass 4.5. Fixes hardcoded light header surfaces in dark mode
  and recenters page/election-night presentation blocks that still looked stranded on mobile.
*/

/* Page headers: keep the new header treatment, but make alignment deliberate and consistent. */
.cmep-page-hero,
.page-head,
.title-card,
.wrap > .head,
.head.hero,
.us-hero{
  text-align:center !important;
}
.cmep-page-hero,
.page-head,
.title-card,
.wrap > .head,
.head.hero,
.us-hero,
.cmep-page-hero :where(h1,p,small,.sub,.lede),
.page-head :where(h1,p,small,.sub,.lede),
.title-card :where(h1,p,small,.sub,.lede),
.wrap > .head :where(h1,p,small,.sub,.lede),
.head.hero :where(h1,p,small,.sub,.lede),
.us-hero :where(h1,p,small,.sub,.lede){
  text-align:center !important;
}
.cmep-page-hero__lede,
.page-head .sub,
.title-card .cm-lede,
.wrap > .head .sub,
.head .sub,
.cm-lede{
  margin-left:auto !important;
  margin-right:auto !important;
}
.cmep-page-hero__meta,
.cmep-meta-row,
.forecast-meta-row,
.page-actions{
  justify-content:center !important;
}

/* Dark mode: the shared header layer previously used hardcoded light gradients. */
@media (prefers-color-scheme:dark){
  .cmep-page-hero,
  .page-head,
  .title-card,
  .wrap > .head,
  .head.hero,
  .us-hero{
    background:
      radial-gradient(circle at top left,rgba(59,130,246,.16),transparent 32rem),
      linear-gradient(135deg,rgba(15,23,42,.96),rgba(2,6,23,.94)) !important;
    border-color:rgba(148,163,184,.26) !important;
    color:var(--cmep-text,#f8fafc) !important;
    box-shadow:0 1px 2px rgba(0,0,0,.28),0 16px 38px rgba(0,0,0,.25) !important;
  }
  .cmep-page-hero h1,
  .page-head h1,
  .title-card h1,
  .wrap > .head h1,
  .head h1,
  .cm-h1{
    color:#f8fafc !important;
  }
  .cmep-page-hero__eyebrow,
  .page-head .eyebrow,
  .title-card .eyebrow,
  .wrap > .head small,
  .head small,
  .brand small,
  .cmep-page-hero__lede,
  .page-head .sub,
  .title-card .cm-lede,
  .wrap > .head .sub,
  .head .sub,
  .cm-lede{
    color:#cbd5e1 !important;
  }
  .cmep-page-hero__meta span,
  .cmep-meta-row > *,
  .forecast-meta-row > *,
  .page-actions > *{
    background:rgba(15,23,42,.72) !important;
    border-color:rgba(148,163,184,.24) !important;
    color:#cbd5e1 !important;
  }
}

/* Explicit dark theme class support, in case a page/app toggle sets data-theme instead of relying on OS preference. */
html[data-theme="dark"] .cmep-page-hero,
html[data-theme="dark"] .page-head,
html[data-theme="dark"] .title-card,
html[data-theme="dark"] .wrap > .head,
html[data-theme="dark"] .head.hero,
html[data-theme="dark"] .us-hero,
html.dark .cmep-page-hero,
html.dark .page-head,
html.dark .title-card,
html.dark .wrap > .head,
html.dark .head.hero,
html.dark .us-hero,
body.dark .cmep-page-hero,
body.dark .page-head,
body.dark .title-card,
body.dark .wrap > .head,
body.dark .head.hero,
body.dark .us-hero{
  background:
    radial-gradient(circle at top left,rgba(59,130,246,.16),transparent 32rem),
    linear-gradient(135deg,rgba(15,23,42,.96),rgba(2,6,23,.94)) !important;
  border-color:rgba(148,163,184,.26) !important;
  color:#f8fafc !important;
  box-shadow:0 1px 2px rgba(0,0,0,.28),0 16px 38px rgba(0,0,0,.25) !important;
}
html[data-theme="dark"] :where(.cmep-page-hero,.page-head,.title-card,.wrap > .head,.head.hero,.us-hero) h1,
html.dark :where(.cmep-page-hero,.page-head,.title-card,.wrap > .head,.head.hero,.us-hero) h1,
body.dark :where(.cmep-page-hero,.page-head,.title-card,.wrap > .head,.head.hero,.us-hero) h1{
  color:#f8fafc !important;
}
html[data-theme="dark"] :where(.cmep-page-hero,.page-head,.title-card,.wrap > .head,.head.hero,.us-hero) :where(.sub,.lede,small,.eyebrow,.cm-lede),
html.dark :where(.cmep-page-hero,.page-head,.title-card,.wrap > .head,.head.hero,.us-hero) :where(.sub,.lede,small,.eyebrow,.cm-lede),
body.dark :where(.cmep-page-hero,.page-head,.title-card,.wrap > .head,.head.hero,.us-hero) :where(.sub,.lede,small,.eyebrow,.cm-lede){
  color:#cbd5e1 !important;
}
html[data-theme="dark"] :where(.cmep-page-hero__meta span,.cmep-meta-row > *,.forecast-meta-row > *,.page-actions > *),
html.dark :where(.cmep-page-hero__meta span,.cmep-meta-row > *,.forecast-meta-row > *,.page-actions > *),
body.dark :where(.cmep-page-hero__meta span,.cmep-meta-row > *,.forecast-meta-row > *,.page-actions > *){
  background:rgba(15,23,42,.72) !important;
  border-color:rgba(148,163,184,.24) !important;
  color:#cbd5e1 !important;
}

/* Election-night presentation blocks: center labels/headings without disturbing numeric tables. */
body.cmep-page-election-night :where(
  .section-head,.section-header,.summary-head,.card-header,.house-bucket-head,
  .projection-card,.projection-tile,.projection-panel,.projection-item,
  .race-card,.state-tile,.result-card,.contest-card
) :where(h1,h2,h3,.title,.subtitle,.sub,.kicker,.eyebrow,.card-title,.section-title,.summary-title,.projection-title,.projection-label,.projection-name){
  text-align:center !important;
}
body.cmep-page-election-night :where(.section-head,.section-header,.summary-head,.card-header,.house-bucket-head){
  justify-content:center !important;
  align-items:center !important;
  text-align:center !important;
}
body.cmep-page-election-night :where(.projection-card,.projection-tile,.projection-panel,.projection-item){
  text-align:center !important;
}
body.cmep-page-election-night :where(.projection-card,.projection-tile,.projection-panel,.projection-item) :where(.chips,.meta,.badges,.actions){
  justify-content:center !important;
}

@media (max-width:760px){
  body.cmep-page-election-night :where(.race-card,.state-tile,.result-card,.contest-card){
    text-align:center !important;
  }
  body.cmep-page-election-night :where(.race-card,.state-tile,.result-card,.contest-card) :where(.race-top,.race-bot,.candidate-row,.candidate,.primary-cand,.choice,.winner-row,.projection-row,.called-line,.call-line){
    justify-content:center !important;
    align-items:center !important;
    text-align:center !important;
  }
  body.cmep-page-election-night :where(.race-card,.state-tile,.result-card,.contest-card) :where(.race-left,.race-name,.race-sub,.state-name,.state-meta,.candidate-name,.cand-name,.name,.n,.left,.right){
    text-align:center !important;
  }
  body.cmep-page-election-night :where(.race-card,.state-tile,.result-card,.contest-card) :where(.chips,.badges,.meta,.actions){
    justify-content:center !important;
    text-align:center !important;
  }
  /* Do not let older pass rules force called/result right columns back to the left. */
  body.cmep-page-election-night :where(.race-bot .right,.race-bot .left){
    text-align:center !important;
  }
}

/*
  PASS 4.7 — screenshot QA: desktop spacing, full-width headers, home path labels,
  and election-night card/header alignment. This is intentionally narrow and loaded last.
*/

/* Use the same visual shell for the homepage hero and forecast cards. */
body.cmep-page-home .container{
  max-width:min(1440px, calc(100vw - 32px)) !important;
  row-gap:clamp(1rem,1.7vw,1.45rem) !important;
}
body.cmep-page-home .cmep-page-hero{
  width:100% !important;
  max-width:100% !important;
  margin-left:0 !important;
  margin-right:0 !important;
}
@media (min-width:1180px){
  body.cmep-page-home .forecast-grid{
    grid-template-columns:minmax(0,1fr) minmax(0,1fr) !important;
    gap:clamp(.9rem,1.2vw,1.15rem) !important;
  }
  body.cmep-page-home .forecast-grid > .cm-card{
    min-width:0 !important;
  }
}

/* Homepage majority-path buttons: never hide labels behind ellipses. */
body.cmep-page-home :where(#cmep-senate-arc-native,#cmep-house-arc-native) .path-button{
  min-width:0 !important;
  overflow:visible !important;
  text-overflow:clip !important;
  padding:.35rem !important;
}
body.cmep-page-home :where(#cmep-senate-arc-native,#cmep-house-arc-native) .path-button span.label{
  display:block !important;
  max-width:82% !important;
  white-space:normal !important;
  overflow:visible !important;
  text-overflow:clip !important;
  overflow-wrap:break-word !important;
  word-break:normal !important;
  text-align:center !important;
  line-height:1.05 !important;
  letter-spacing:.015em !important;
}
@media (min-width:1180px){
  body.cmep-page-home :where(#cmep-senate-arc-native,#cmep-house-arc-native) .path-button{
    width:clamp(112px,8.6vw,132px) !important;
    height:clamp(112px,8.6vw,132px) !important;
  }
}

/* Election night: remove residual empty space from empty alert/projection wrappers. */
body.cmep-page-election-night #alerts:empty{
  display:none !important;
  margin:0 !important;
  padding:0 !important;
  min-height:0 !important;
}
body.cmep-page-election-night :where(#globalWinnerBanner,.winner-banner){
  margin-top:clamp(.75rem,1.2vw,1rem) !important;
  margin-bottom:clamp(.75rem,1.2vw,1rem) !important;
}
body.cmep-page-election-night #officeViews{
  margin-top:0 !important;
  padding-top:0 !important;
  display:block;
}
body.cmep-page-election-night .office-view.active{
  margin-top:0 !important;
  padding-top:0 !important;
  gap:clamp(.85rem,1.2vw,1.05rem) !important;
}

/* Election night: card headers should read as centered presentation headers,
   while candidate rows/tables keep their data alignment. */
body.cmep-page-election-night :where(.card-header,.card-title-row,.map-title-row,.results-title-row){
  justify-content:center !important;
  align-items:center !important;
  text-align:center !important;
  gap:.55rem .75rem !important;
}
body.cmep-page-election-night :where(.card-header,.card-title-row,.map-title-row,.results-title-row) > *{
  min-width:0 !important;
}
body.cmep-page-election-night :where(.card-title,.card-h2,.card-help,.map-title,.map-subtitle,.results-title){
  text-align:center !important;
  margin-left:auto !important;
  margin-right:auto !important;
}
body.cmep-page-election-night :where(.primary-refresh-btn,.refresh-btn,.jump-link-btn){
  flex:0 0 auto !important;
}
@media (max-width:760px){
  body.cmep-page-election-night :where(.card-header,.card-title-row,.map-title-row,.results-title-row){
    flex-direction:column !important;
  }
  body.cmep-page-election-night :where(.primary-refresh-btn,.refresh-btn,.jump-link-btn){
    margin-left:auto !important;
    margin-right:auto !important;
  }
}

/* Election-night desktop/tablet: the result/map grid should use the full shared shell
   and keep even gutters between the cards. */
@media (min-width:1100px){
  body.cmep-page-election-night :where(.wrap,.container){
    max-width:min(1500px, calc(100vw - 40px)) !important;
  }
  body.cmep-page-election-night :where(#electionNightGovernor .grid-2,#electionNightSenate .grid-2,.office-view.active > .grid-2,.grid-2){
    grid-template-columns:minmax(420px,.95fr) minmax(560px,1.05fr) !important;
    gap:clamp(.9rem,1.15vw,1.15rem) !important;
  }
}
@media (min-width:760px) and (max-width:1099px){
  body.cmep-page-election-night :where(.wrap,.container){
    max-width:min(1060px, calc(100vw - 24px)) !important;
  }
}
@media (max-width:759px){
  body.cmep-page-election-night :where(.wrap,.container){
    padding-left:.28rem !important;
    padding-right:.28rem !important;
  }
  body.cmep-page-election-night :where(.card,.cm-card,.panel,.result-card,.contest-card,.state-card,.projection-card,.state-hero,#globalWinnerBanner){
    border-radius:16px !important;
  }
}

/* Names, calls, and check rows: wrap at natural boundaries instead of clipping. */
body.cmep-page-election-night :where(
  .race-name,.state-name,.district-name,.candidate-name,.cand-name,.primary-name,.primary-cand .n,
  .winner-banner-name,.winner-row,.called-line,.call-line,.projection-text,.projection-label,.projection-name,
  .card-title,.map-title,.results-title
){
  max-width:100% !important;
  white-space:normal !important;
  overflow:visible !important;
  text-overflow:clip !important;
  overflow-wrap:break-word !important;
  word-break:normal !important;
}
body.cmep-page-election-night :where(.projection-pill,.winner-pill,.call-pill,.chip,.badge){
  white-space:normal !important;
  text-align:center !important;
  line-height:1.15 !important;
}

/*
  PASS 4.9 — election-night newsroom polish and not-up/projection restoration
  Scope: restore colored not-up/projected office/district treatments that were flattened by
  the shared card surface layer; tighten the election-night state header; center selector
  controls; and give election-night pages a more deliberate professional news-desk finish.
*/

/* Election-night state hero: cohesive with the site, but more like a polished live-news header. */
body.cmep-page-election-night :where(.page-head,.wrap > .head,.head.hero,.state-hero-card){
  position:relative !important;
  overflow:hidden !important;
  padding:clamp(1.15rem,2.05vw,2.15rem) clamp(.95rem,2.1vw,1.55rem) !important;
  background:
    radial-gradient(circle at 18% 12%, rgba(0,118,186,.22), transparent 34rem),
    radial-gradient(circle at 82% 6%, rgba(255,255,255,.045), transparent 24rem),
    linear-gradient(135deg, rgba(10,22,48,.98), rgba(2,6,23,.985) 62%, rgba(3,10,28,.98)) !important;
  border-color:rgba(148,163,184,.30) !important;
  box-shadow:0 20px 55px rgba(0,0,0,.24), inset 0 1px 0 rgba(255,255,255,.04) !important;
}
body.cmep-page-election-night :where(.page-head,.wrap > .head,.head.hero)::before{
  content:"";
  position:absolute;
  inset:0;
  pointer-events:none;
  background:
    linear-gradient(90deg, rgba(255,255,255,.06), transparent 18%, transparent 82%, rgba(255,255,255,.035)),
    repeating-linear-gradient(0deg, rgba(255,255,255,.018) 0 1px, transparent 1px 4px);
  opacity:.45;
  mix-blend-mode:screen;
}
body.cmep-page-election-night :where(.page-head,.wrap > .head,.head.hero) > *{
  position:relative;
  z-index:1;
}
body.cmep-page-election-night .state-outline-wrap{
  width:min(380px,70vw) !important;
  height:clamp(105px,12.5vw,165px) !important;
  margin-top:0 !important;
  margin-bottom:.2rem !important;
  opacity:.92;
}
body.cmep-page-election-night .state-prefix{
  font-size:.74rem !important;
  letter-spacing:.17em !important;
  color:rgba(226,232,240,.76) !important;
}
body.cmep-page-election-night .state-name{
  font-size:clamp(2rem,4.1vw,3.2rem) !important;
  color:#f8fafc !important;
  text-shadow:0 1px 0 rgba(0,0,0,.18), 0 10px 28px rgba(0,0,0,.24);
}
body.cmep-page-election-night .state-subtitle,
body.cmep-page-election-night .page-head .sub{
  color:#dbe5f4 !important;
  font-weight:760 !important;
}

/* Center and balance the election-night selector rows. */
body.cmep-page-election-night #topActions,
body.cmep-page-election-night #officeActions{
  width:min(100%, 680px) !important;
  margin-left:auto !important;
  margin-right:auto !important;
  justify-content:center !important;
  align-items:center !important;
}
body.cmep-page-election-night #topActions.page-actions{
  display:grid !important;
  grid-template-columns:minmax(8.5rem,1fr) auto minmax(8.5rem,1fr) !important;
  gap:.55rem !important;
}
body.cmep-page-election-night #topActions #backBtn{
  justify-self:end !important;
}
body.cmep-page-election-night #topActions #votingBtn{
  justify-self:start !important;
}
body.cmep-page-election-night .page-actions-center{
  justify-self:center !important;
  justify-content:center !important;
  min-width:0 !important;
}
body.cmep-page-election-night #officeActions{
  display:flex !important;
}
body.cmep-page-election-night #officeActions .page-actions-center{
  width:100% !important;
}
body.cmep-page-election-night .segmented{
  margin-left:auto !important;
  margin-right:auto !important;
  justify-content:center !important;
  background:rgba(15,23,42,.62) !important;
  border-color:rgba(148,163,184,.34) !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.05), 0 10px 22px rgba(0,0,0,.18) !important;
}
body.cmep-page-election-night .segmented .seg-btn{
  color:#cbd5e1 !important;
  font-weight:900 !important;
}
body.cmep-page-election-night .segmented .seg-btn.active,
body.cmep-page-election-night .segmented .seg-btn[aria-selected="true"]{
  background:linear-gradient(180deg, rgba(255,255,255,.20), rgba(255,255,255,.11)) !important;
  color:#fff !important;
  box-shadow:0 8px 18px rgba(0,0,0,.18), inset 0 1px 0 rgba(255,255,255,.10) !important;
}
body.cmep-page-election-night .back-btn,
body.cmep-page-election-night #votingBtn{
  background:rgba(15,23,42,.50) !important;
  color:#f8fafc !important;
  border-color:rgba(148,163,184,.32) !important;
  opacity:1 !important;
  cursor:pointer !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.05) !important;
}

/* Election-night content cards: crisp news-agency surfaces, not generic webpage cards. */
body.cmep-page-election-night :where(.card,.panel,.section,.cm-card,.result-card,.contest-card,.map-panel,.results-panel){
  background:linear-gradient(180deg, rgba(3,7,18,.92), rgba(2,6,23,.88)) !important;
  border-color:rgba(148,163,184,.24) !important;
  box-shadow:0 14px 34px rgba(0,0,0,.20), inset 0 1px 0 rgba(255,255,255,.035) !important;
}
body.cmep-page-election-night :where(.card-header,.card-title-row,.map-title-row,.results-title-row){
  border-bottom-color:rgba(148,163,184,.22) !important;
}
body.cmep-page-election-night :where(.card-title,.card-h2,.map-title,.results-title,.section-title){
  color:#f8fafc !important;
  letter-spacing:-.035em !important;
}
body.cmep-page-election-night :where(.card-help,.map-subtitle,.results-subtitle,.note,.last-updated,.attrib){
  color:#aab7c9 !important;
}
body.cmep-page-election-night .live-pill,
body.cmep-page-election-night .primary-refresh-btn,
body.cmep-page-election-night .refresh-btn{
  border-color:rgba(148,163,184,.28) !important;
}
body.cmep-page-election-night .primary-refresh-btn,
body.cmep-page-election-night .refresh-btn{
  background:rgba(15,23,42,.74) !important;
  color:#f8fafc !important;
}
body.cmep-page-election-night #globalWinnerBanner,
body.cmep-page-election-night .winner-banner{
  background:
    linear-gradient(90deg, rgba(0,118,186,.92), rgba(0,72,128,.90)),
    radial-gradient(circle at 8% 50%, rgba(255,255,255,.16), transparent 18rem) !important;
  border-color:rgba(125,211,252,.26) !important;
  box-shadow:0 16px 38px rgba(0,40,90,.28), inset 0 1px 0 rgba(255,255,255,.08) !important;
}

/* Restore not-up / projected / called color highlighting that the shared surface layer flattened. */
body.cmep-page-election-night :where(.notup-D,.notup-R),
body.cmep-page-state :where(.notup-D,.notup-R),
body.cmep-page-home :where(.notup-D,.notup-R),
body.cmep-page-forecast :where(.notup-D,.notup-R){
  color:#fff !important;
  border-color:rgba(255,255,255,.28) !important;
  box-shadow:inset 0 0 0 2px var(--toss-up,#929292), 0 1px 2px rgba(15,23,42,.10) !important;
}
body.cmep-page-election-night :where(.notup-D),
body.cmep-page-state :where(.notup-D),
body.cmep-page-home :where(.notup-D),
body.cmep-page-forecast :where(.notup-D){
  background:var(--solid-d,#0076BA) !important;
}
body.cmep-page-election-night :where(.notup-R),
body.cmep-page-state :where(.notup-R),
body.cmep-page-home :where(.notup-R),
body.cmep-page-forecast :where(.notup-R){
  background:var(--solid-r,#EE220C) !important;
}
body.cmep-page-election-night :where(.leg-seat-seg.seg-notup-d,.seat-seg.seg-notup-d){
  background:var(--solid-d,#0076BA) !important;
  box-shadow:inset 0 0 0 2px var(--toss-up,#929292) !important;
}
body.cmep-page-election-night :where(.leg-seat-seg.seg-notup-r,.seat-seg.seg-notup-r){
  background:var(--solid-r,#EE220C) !important;
  box-shadow:inset 0 0 0 2px var(--toss-up,#929292) !important;
}
body.cmep-page-election-night :where(.leg-legend .pill.notup-D,.leg-legend .pill.notup-R){
  color:#fff !important;
  border-color:rgba(255,255,255,.28) !important;
}

body.cmep-page-election-night :where(.district-card.called-d,.district-tile.called-d,.house-district-tile.called-d){
  background:linear-gradient(135deg, var(--solid-d,#0076BA), #005f97) !important;
  border-color:rgba(125,211,252,.32) !important;
  color:#fff !important;
  box-shadow:0 12px 28px rgba(0,118,186,.20), inset 0 1px 0 rgba(255,255,255,.08) !important;
}
body.cmep-page-election-night :where(.district-card.called-r,.district-tile.called-r,.house-district-tile.called-r){
  background:linear-gradient(135deg, var(--solid-r,#EE220C), #a91509) !important;
  border-color:rgba(252,165,165,.32) !important;
  color:#fff !important;
  box-shadow:0 12px 28px rgba(238,34,12,.18), inset 0 1px 0 rgba(255,255,255,.08) !important;
}
body.cmep-page-election-night :where(.district-card.called-o,.district-tile.called-o,.house-district-tile.called-o){
  background:linear-gradient(135deg, var(--toss-up,#929292), #374151) !important;
  border-color:rgba(226,232,240,.24) !important;
  color:#fff !important;
  box-shadow:0 12px 28px rgba(15,23,42,.18), inset 0 1px 0 rgba(255,255,255,.08) !important;
}
body.cmep-page-election-night :where(.district-card.called-d,.district-card.called-r,.district-card.called-o,.district-tile.called-d,.district-tile.called-r,.district-tile.called-o,.house-district-tile.called-d,.house-district-tile.called-r,.house-district-tile.called-o) :where(.district-name,.district-meta,.district-submeta,.district-status,.district-tile-pill-label,.winner-text,.name,.meta,.sub){
  color:#fff !important;
}
body.cmep-page-election-night :where(.district-card.called-d,.district-card.called-r,.district-card.called-o,.district-tile.called-d,.district-tile.called-r,.district-tile.called-o,.house-district-tile.called-d,.house-district-tile.called-r,.house-district-tile.called-o) :where(.district-outline-wrap,.tileOutlineSvg){
  color:rgba(255,255,255,.88) !important;
}
body.cmep-page-election-night :where(.notup-badge,.district-status.is-projected){
  background:rgba(255,255,255,.18) !important;
  color:#fff !important;
  border:1px solid rgba(255,255,255,.34) !important;
}

/* Keep centered presentation, but let actual candidate/result rows remain readable data rows. */
body.cmep-page-election-night :where(.primary-race,.candidate-row,.primary-cand,.choice,.result-row,.contest-row){
  text-align:left !important;
}
body.cmep-page-election-night :where(.candidate-row,.primary-cand,.choice,.result-row,.contest-row){
  justify-content:space-between !important;
  align-items:center !important;
}
body.cmep-page-election-night :where(.candidate-row .name,.primary-cand .n,.choice .title,.result-row .name,.contest-row .name){
  text-align:left !important;
}
body.cmep-page-election-night :where(.candidate-row .num,.primary-cand .pct,.primary-cand .votes,.result-row .num,.contest-row .num){
  text-align:right !important;
}

@media (max-width:760px){
  body.cmep-page-election-night :where(.page-head,.wrap > .head,.head.hero){
    padding:.95rem .72rem !important;
  }
  body.cmep-page-election-night .state-outline-wrap{
    width:min(310px,78vw) !important;
    height:clamp(88px,24vw,128px) !important;
  }
  body.cmep-page-election-night #topActions.page-actions{
    width:min(100%, 520px) !important;
    display:grid !important;
    grid-template-columns:1fr 1fr !important;
    gap:.45rem !important;
  }
  body.cmep-page-election-night #topActions .page-actions-center{
    grid-column:1 / -1 !important;
    grid-row:1 !important;
    width:100% !important;
  }
  body.cmep-page-election-night #topActions #backBtn{
    grid-column:1 !important;
    grid-row:2 !important;
    justify-self:end !important;
  }
  body.cmep-page-election-night #topActions #votingBtn{
    grid-column:2 !important;
    grid-row:2 !important;
    justify-self:start !important;
  }
  body.cmep-page-election-night #topActions #backBtn,
  body.cmep-page-election-night #topActions #votingBtn{
    min-width:min(9.25rem, 44vw) !important;
    justify-content:center !important;
  }
  body.cmep-page-election-night #officeActions{
    width:min(100%, 430px) !important;
  }
  body.cmep-page-election-night #officeToggle,
  body.cmep-page-election-night #primaryPartyToggle{
    width:100% !important;
  }
  body.cmep-page-election-night :where(.card,.panel,.section,.cm-card,.result-card,.contest-card,.map-panel,.results-panel){
    box-shadow:0 8px 22px rgba(0,0,0,.18), inset 0 1px 0 rgba(255,255,255,.035) !important;
  }
}

@media (max-width:420px){
  body.cmep-page-election-night #topActions #backBtn,
  body.cmep-page-election-night #topActions #votingBtn{
    min-width:0 !important;
    width:100% !important;
  }
  body.cmep-page-election-night .state-name{
    font-size:2rem !important;
  }
}

/* ======================================================================
   DESIGN COHESION PASS 4.10 — election-night responsive newsroom layout
   ----------------------------------------------------------------------
   Screenshot-driven cleanup. Uses more desktop/tablet width, keeps mobile
   nearly full-width without horizontal scroll, rebalances selector rows,
   restores no-election/called card color treatments, and gives live pages a
   more deliberate broadcast/news-desk rhythm.
====================================================================== */

body.cmep-page-election-night{
  background:
    radial-gradient(circle at 12% 18%, rgba(0,118,186,.16), transparent 34rem),
    radial-gradient(circle at 88% 10%, rgba(37,99,235,.10), transparent 28rem),
    linear-gradient(180deg, #020617 0%, #030712 58%, #020617 100%) !important;
}

/* Use the viewport more intelligently. The election-night shell should not
   sit in a narrow column on desktop, but must still keep a safe gutter. */
body.cmep-page-election-night :where(.wrap,.container){
  width:min(100%, calc(100vw - 32px)) !important;
  max-width:clamp(1180px, 92vw, 1580px) !important;
  margin-left:auto !important;
  margin-right:auto !important;
  padding-left:0 !important;
  padding-right:0 !important;
}
@media (min-width:1500px){
  body.cmep-page-election-night :where(.wrap,.container){
    max-width:clamp(1320px, 90vw, 1660px) !important;
  }
}
@media (min-width:1900px){
  body.cmep-page-election-night :where(.wrap,.container){
    max-width:1720px !important;
  }
}
@media (max-width:900px){
  body.cmep-page-election-night :where(.wrap,.container){
    width:min(100%, calc(100vw - 16px)) !important;
    max-width:100% !important;
  }
}
@media (max-width:520px){
  body.cmep-page-election-night :where(.wrap,.container){
    width:min(100%, calc(100vw - 8px)) !important;
  }
}

/* Hero/header should share the same shell width as the result cards. */
body.cmep-page-election-night :where(.state-hero,.page-head,.wrap > .head,.head.hero,.state-hero-card){
  width:100% !important;
  max-width:100% !important;
  margin-left:0 !important;
  margin-right:0 !important;
  margin-bottom:clamp(1rem, 1.8vw, 1.35rem) !important;
  min-height:unset !important;
}
body.cmep-page-election-night .state-hero{
  padding:clamp(1.15rem, 2vw, 2.15rem) clamp(1rem, 2vw, 1.75rem) !important;
  border-radius:clamp(18px, 1.35vw, 24px) !important;
}
@media (min-width:1100px){
  body.cmep-page-election-night .state-hero{
    padding-top:clamp(1.25rem, 2.1vw, 2.35rem) !important;
    padding-bottom:clamp(1.25rem, 2.1vw, 2.35rem) !important;
  }
  body.cmep-page-election-night .state-outline-wrap{
    width:min(410px, 30vw) !important;
    height:clamp(118px, 11vw, 172px) !important;
  }
}

/* More polished live-news header texture without making it look like a
   different brand from the rest of the site. */
body.cmep-page-election-night :where(.state-hero,.page-head,.wrap > .head,.head.hero,.state-hero-card){
  background:
    radial-gradient(circle at 18% 16%, rgba(0,118,186,.25), transparent 36rem),
    linear-gradient(90deg, rgba(255,255,255,.045), transparent 18%, transparent 82%, rgba(255,255,255,.032)),
    linear-gradient(135deg, rgba(10,25,56,.98), rgba(2,6,23,.985) 64%, rgba(3,10,28,.98)) !important;
  border:1px solid rgba(148,163,184,.30) !important;
  box-shadow:0 20px 54px rgba(0,0,0,.25), inset 0 1px 0 rgba(255,255,255,.055) !important;
}
body.cmep-page-election-night :where(.state-prefix,.cm-label){
  color:#aab7c9 !important;
  letter-spacing:.18em !important;
}
body.cmep-page-election-night .state-name{
  color:#fff !important;
  text-shadow:0 12px 36px rgba(0,0,0,.38) !important;
}
body.cmep-page-election-night :where(.state-subtitle,.sub){
  color:#dbe4ef !important;
}

/* Selector rows: content-sized, visually centered, and balanced. Avoid huge
   empty segmented tracks while keeping back/voting controls symmetrical. */
body.cmep-page-election-night #topActions.page-actions{
  width:min(100%, 620px) !important;
  margin:.55rem auto 0 !important;
  display:grid !important;
  grid-template-columns:minmax(7.5rem,1fr) auto minmax(7.5rem,1fr) !important;
  justify-items:center !important;
  align-items:center !important;
  gap:.55rem !important;
}
body.cmep-page-election-night #topActions #backBtn{
  justify-self:end !important;
}
body.cmep-page-election-night #topActions #votingBtn{
  justify-self:start !important;
}
body.cmep-page-election-night #topActions .page-actions-center{
  width:auto !important;
  justify-self:center !important;
}
body.cmep-page-election-night #officeActions{
  width:100% !important;
  margin:.62rem auto 0 !important;
  display:flex !important;
  justify-content:center !important;
}
body.cmep-page-election-night #officeActions .page-actions-center{
  width:auto !important;
  max-width:100% !important;
  justify-content:center !important;
}
body.cmep-page-election-night #officeToggle,
body.cmep-page-election-night #primaryPartyToggle,
body.cmep-page-election-night .segmented{
  width:auto !important;
  max-width:100% !important;
  overflow:visible !important;
}
body.cmep-page-election-night #officeToggle{
  min-width:min(360px, 100%) !important;
}
body.cmep-page-election-night #primaryPartyToggle{
  min-width:min(270px, 100%) !important;
}

/* Result/projection/winner sections should align with the hero and use a
   consistent newsroom rhythm. */
body.cmep-page-election-night :where(#alerts,#officeViews,.office-view.active,.state-grid.office-view.active){
  width:100% !important;
  max-width:100% !important;
}
body.cmep-page-election-night #officeViews{
  margin-top:0 !important;
}
body.cmep-page-election-night :where(#globalWinnerBanner,.winner-banner){
  width:100% !important;
  max-width:100% !important;
  margin:.15rem 0 clamp(1rem, 1.5vw, 1.25rem) !important;
  border-radius:clamp(16px, 1.25vw, 22px) !important;
}

/* Desktop/tablet content grid: favor a professional control-room layout.
   Results remain readable; maps get enough space to breathe. */
@media (min-width:1180px){
  body.cmep-page-election-night :where(.state-grid,.state-grid.office-view.active){
    display:grid !important;
    grid-template-columns:repeat(12, minmax(0, 1fr)) !important;
    gap:clamp(1rem, 1.35vw, 1.35rem) !important;
    align-items:start !important;
  }
  body.cmep-page-election-night :where(.state-grid .span6){
    grid-column:span 6 !important;
  }
  body.cmep-page-election-night :where(.state-grid .span12){
    grid-column:1 / -1 !important;
  }
  body.cmep-page-election-night :where(.state-grid > .card:first-of-type,.state-grid > .cm-card:first-of-type){
    grid-column:span 5 !important;
  }
  body.cmep-page-election-night :where(.state-grid > .card:nth-of-type(2),.state-grid > .cm-card:nth-of-type(2)){
    grid-column:span 7 !important;
  }
  body.cmep-page-election-night :where(.map,.map-shell,.map-wrap){
    min-height:clamp(420px, 36vw, 620px) !important;
  }
}
@media (min-width:900px) and (max-width:1179px){
  body.cmep-page-election-night :where(.state-grid,.state-grid.office-view.active,.grid-2){
    display:grid !important;
    grid-template-columns:1fr 1fr !important;
    gap:1rem !important;
    align-items:start !important;
  }
  body.cmep-page-election-night :where(.state-grid .span12){
    grid-column:1 / -1 !important;
  }
}
@media (max-width:899px){
  body.cmep-page-election-night :where(.state-grid,.state-grid.office-view.active,.grid-2){
    display:grid !important;
    grid-template-columns:1fr !important;
    gap:.85rem !important;
  }
}

/* Crisp result panels. Keep the content dense, but less cramped. */
body.cmep-page-election-night :where(.card,.cm-card,.panel,.results-panel,.map-panel){
  border-radius:clamp(16px, 1.15vw, 22px) !important;
  padding:clamp(.9rem, 1.15vw, 1.18rem) !important;
  background:
    linear-gradient(180deg, rgba(3,7,18,.94), rgba(2,6,23,.90)) !important;
  border-color:rgba(148,163,184,.24) !important;
}
body.cmep-page-election-night :where(.primary-race,.race,.contest-card,.result-card,.state-card,.district-card){
  border-radius:16px !important;
}
body.cmep-page-election-night :where(.card-title-row,.card-header,.map-title-row,.results-title-row){
  padding-bottom:.72rem !important;
  margin-bottom:.72rem !important;
  border-bottom:1px solid rgba(148,163,184,.20) !important;
}
body.cmep-page-election-night :where(.card-title,.card-h2,.map-title,.results-title){
  font-size:clamp(1.05rem, 1.25vw, 1.35rem) !important;
  line-height:1.1 !important;
}

/* Restore/strengthen no-election and called/projected card highlighting across
   state/detail/election-night views. These are meaningful data states, not
   generic cards. */
body.cmep-page-election-night :where(.district-card.called-d,.result-card.called-d,.contest-card.called-d,.state-card.called-d),
body.cmep-page-state :where(.district-card.called-d,.result-card.called-d,.contest-card.called-d,.state-card.called-d),
body.cmep-page-detail :where(.district-card.called-d,.result-card.called-d,.contest-card.called-d,.state-card.called-d){
  background:linear-gradient(135deg, #0076BA 0%, #005f97 100%) !important;
  border-color:rgba(125,211,252,.42) !important;
  color:#fff !important;
}
body.cmep-page-election-night :where(.district-card.called-r,.result-card.called-r,.contest-card.called-r,.state-card.called-r),
body.cmep-page-state :where(.district-card.called-r,.result-card.called-r,.contest-card.called-r,.state-card.called-r),
body.cmep-page-detail :where(.district-card.called-r,.result-card.called-r,.contest-card.called-r,.state-card.called-r){
  background:linear-gradient(135deg, #EE220C 0%, #a91509 100%) !important;
  border-color:rgba(252,165,165,.42) !important;
  color:#fff !important;
}
body.cmep-page-election-night :where(.district-card.called-o,.result-card.called-o,.contest-card.called-o,.state-card.called-o),
body.cmep-page-state :where(.district-card.called-o,.result-card.called-o,.contest-card.called-o,.state-card.called-o),
body.cmep-page-detail :where(.district-card.called-o,.result-card.called-o,.contest-card.called-o,.state-card.called-o){
  background:linear-gradient(135deg, #64748b 0%, #334155 100%) !important;
  border-color:rgba(226,232,240,.34) !important;
  color:#fff !important;
}
body.cmep-page-election-night :where(.district-card.called-d,.district-card.called-r,.district-card.called-o,.result-card.called-d,.result-card.called-r,.result-card.called-o,.contest-card.called-d,.contest-card.called-r,.contest-card.called-o,.state-card.called-d,.state-card.called-r,.state-card.called-o) :where(.district-name,.district-meta,.district-submeta,.winner-text,.name,.meta,.sub,.card-help),
body.cmep-page-state :where(.district-card.called-d,.district-card.called-r,.district-card.called-o,.result-card.called-d,.result-card.called-r,.result-card.called-o,.contest-card.called-d,.contest-card.called-r,.contest-card.called-o,.state-card.called-d,.state-card.called-r,.state-card.called-o) :where(.district-name,.district-meta,.district-submeta,.winner-text,.name,.meta,.sub,.card-help),
body.cmep-page-detail :where(.district-card.called-d,.district-card.called-r,.district-card.called-o,.result-card.called-d,.result-card.called-r,.result-card.called-o,.contest-card.called-d,.contest-card.called-r,.contest-card.called-o,.state-card.called-d,.state-card.called-r,.state-card.called-o) :where(.district-name,.district-meta,.district-submeta,.winner-text,.name,.meta,.sub,.card-help){
  color:#fff !important;
}
body.cmep-page-election-night :where(.winner-pill,.winner-pill-d,.winner-pill-r,.winner-pill-tossup),
body.cmep-page-state :where(.winner-pill,.winner-pill-d,.winner-pill-r,.winner-pill-tossup),
body.cmep-page-detail :where(.winner-pill,.winner-pill-d,.winner-pill-r,.winner-pill-tossup){
  background:#fff !important;
  border:1px solid rgba(255,255,255,.75) !important;
}
body.cmep-page-election-night :where(.winner-pill-d .winner-text),
body.cmep-page-state :where(.winner-pill-d .winner-text),
body.cmep-page-detail :where(.winner-pill-d .winner-text){ color:#0076BA !important; }
body.cmep-page-election-night :where(.winner-pill-r .winner-text),
body.cmep-page-state :where(.winner-pill-r .winner-text),
body.cmep-page-detail :where(.winner-pill-r .winner-text){ color:#EE220C !important; }
body.cmep-page-election-night :where(.winner-pill-tossup .winner-text),
body.cmep-page-state :where(.winner-pill-tossup .winner-text),
body.cmep-page-detail :where(.winner-pill-tossup .winner-text){ color:#64748b !important; }

/* Mobile: keep the improved full-width feel and center presentation controls;
   leave data rows left/right aligned. */
@media (max-width:760px){
  body.cmep-page-election-night .state-hero{
    padding:.95rem .72rem !important;
    border-radius:16px !important;
  }
  body.cmep-page-election-night #topActions.page-actions{
    width:min(100%, 520px) !important;
    grid-template-columns:1fr 1fr !important;
  }
  body.cmep-page-election-night #topActions .page-actions-center{
    grid-column:1 / -1 !important;
    grid-row:1 !important;
    width:100% !important;
  }
  body.cmep-page-election-night #primaryPartyToggle,
  body.cmep-page-election-night #officeToggle{
    width:100% !important;
    min-width:0 !important;
    display:flex !important;
  }
  body.cmep-page-election-night #primaryPartyToggle .seg-btn,
  body.cmep-page-election-night #officeToggle .seg-btn{
    flex:1 1 0 !important;
    min-width:0 !important;
  }
  body.cmep-page-election-night :where(.card-title-row,.card-header,.map-title-row,.results-title-row){
    justify-content:center !important;
    text-align:center !important;
  }
  body.cmep-page-election-night :where(.primary-race,.candidate-row,.primary-cand,.choice,.result-row,.contest-row){
    text-align:left !important;
  }
}

/* ======================================================================
   DESIGN COHESION PASS 4.11 — election-night cleanup + no-election fix
   ----------------------------------------------------------------------
   Fixes screenshot issues from the primary hub and state/detail pages:
   - state tiles were inheriting large hero .state-name typography
   - hub grids could collapse into narrow columns with huge wrapped names
   - no-election cards with full party names need strong state coloring
   - detail hero/control spacing should remain newsroom-like but less bulky
   ====================================================================== */

/* Hero-only state typography. Do not let this styling leak into tiles/cards. */
body.cmep-page-election-night :where(.state-hero,.page-head,.masthead,.hero-card) > :where(.state-name),
body.cmep-page-election-night :where(.state-hero,.page-head,.masthead,.hero-card) :where(.state-title,.hero-state-name){
  color:#fff !important;
  text-shadow:0 12px 36px rgba(0,0,0,.38) !important;
}

/* Election-night hub/state-picker cards: compact, legible, professional. */
body.cmep-page-election-night-hub :where(.wrap,.container){
  max-width:min(1360px, calc(100vw - 56px)) !important;
}
body.cmep-page-election-night-hub :where(.section,.panel){
  background:linear-gradient(180deg, rgba(3,7,18,.86), rgba(2,6,23,.80)) !important;
  border-color:rgba(148,163,184,.20) !important;
}
body.cmep-page-election-night-hub :where(.state-grid,#stateGrid,#recentStateGrid,#moreStateGrid){
  display:grid !important;
  grid-template-columns:repeat(auto-fit, minmax(min(255px, 100%), 1fr)) !important;
  gap:clamp(.8rem, 1vw, 1rem) !important;
  align-items:stretch !important;
}
body.cmep-page-election-night-hub .state-tile{
  min-height:clamp(132px, 12vw, 172px) !important;
  padding:clamp(.85rem, 1vw, 1rem) !important;
  justify-content:center !important;
  border-radius:18px !important;
  background:linear-gradient(180deg, rgba(15,23,42,.72), rgba(2,6,23,.82)) !important;
  border-color:rgba(148,163,184,.24) !important;
  box-shadow:0 12px 30px rgba(0,0,0,.22) !important;
  overflow:hidden !important;
}
body.cmep-page-election-night-hub .state-tile:hover{
  border-color:rgba(56,189,248,.42) !important;
  background:linear-gradient(180deg, rgba(14,116,144,.26), rgba(2,6,23,.84)) !important;
}
body.cmep-page-election-night-hub .state-tile .state-outline-wrap{
  height:clamp(62px, 6.5vw, 86px) !important;
  margin:0 auto .15rem !important;
}
body.cmep-page-election-night-hub .state-tile .state-name,
body.cmep-page-election-night .state-tile .state-name{
  font-size:clamp(.9rem, 1.05vw, 1.08rem) !important;
  line-height:1.08 !important;
  font-weight:950 !important;
  letter-spacing:-.018em !important;
  color:#f8fafc !important;
  white-space:normal !important;
  overflow:visible !important;
  text-overflow:clip !important;
  overflow-wrap:normal !important;
  word-break:normal !important;
  hyphens:none !important;
  text-shadow:none !important;
  max-width:100% !important;
}
body.cmep-page-election-night-hub .state-tile .state-meta,
body.cmep-page-election-night .state-tile .state-meta{
  font-size:.72rem !important;
  line-height:1.22 !important;
  color:rgba(226,232,240,.72) !important;
  white-space:normal !important;
  overflow:visible !important;
  text-overflow:clip !important;
  overflow-wrap:normal !important;
  word-break:normal !important;
  hyphens:none !important;
}

/* Hub key-race cards should look like lower-thirds, not generic cards. */
body.cmep-page-election-night-hub .race-list{
  grid-template-columns:repeat(auto-fit, minmax(min(360px, 100%), 1fr)) !important;
  gap:.85rem !important;
}
body.cmep-page-election-night-hub .race-card{
  min-height:86px !important;
  padding:.78rem .9rem !important;
  border-radius:16px !important;
  background:linear-gradient(180deg, rgba(15,23,42,.86), rgba(2,6,23,.88)) !important;
  border-color:rgba(148,163,184,.22) !important;
  box-shadow:0 10px 28px rgba(0,0,0,.22) !important;
}
body.cmep-page-election-night-hub .race-card.called-d{
  background:linear-gradient(135deg, #0094d8, #0068a0) !important;
}
body.cmep-page-election-night-hub .race-card.called-r,
body.cmep-page-election-night-hub .race-card.projected-runoff.called-r{
  background:linear-gradient(135deg, #f04432, #b91c0b) !important;
}
body.cmep-page-election-night-hub .race-card :where(.race-name,.race-sub,.race-bot .left,.race-bot .right){
  overflow-wrap:normal !important;
  word-break:normal !important;
  hyphens:none !important;
}

/* Detail pages: keep professional live-news header, but reduce bulky nested shells. */
body.cmep-page-election-night-detail :where(.wrap,.container){
  max-width:min(1500px, calc(100vw - 56px)) !important;
}
body.cmep-page-election-night-detail .state-hero{
  padding:clamp(1.35rem, 2.2vw, 2.15rem) clamp(1rem, 2vw, 1.8rem) !important;
  min-height:0 !important;
  background:
    radial-gradient(circle at 18% 18%, rgba(0,118,186,.26), transparent 36%),
    linear-gradient(180deg, rgba(15,23,42,.82), rgba(2,6,23,.90)) !important;
}
body.cmep-page-election-night-detail .state-outline-wrap{
  height:clamp(92px, 10vw, 150px) !important;
}
body.cmep-page-election-night-detail :where(#topActions,#officeActions){
  justify-content:center !important;
  text-align:center !important;
}
body.cmep-page-election-night-detail #officeToggle,
body.cmep-page-election-night-detail #primaryPartyToggle{
  max-width:max-content !important;
  margin-inline:auto !important;
}
body.cmep-page-election-night-detail :where(#globalWinnerBanner,.winner-banner){
  box-shadow:0 18px 48px rgba(0,118,186,.20) !important;
}
body.cmep-page-election-night-detail :where(.results-title-row,.map-title-row,.card-title-row,.section-head){
  justify-content:center !important;
  text-align:center !important;
}

/* No-election / not-up cards: robustly color by both class and visible label. */
body.cmep-page-state :where(.district-card.called-d,.district-card.called-r,.district-card.called-o),
body.cmep-page-detail :where(.district-card.called-d,.district-card.called-r,.district-card.called-o),
body.cmep-page-election-night :where(.district-card.called-d,.district-card.called-r,.district-card.called-o){
  box-shadow:0 12px 30px rgba(0,0,0,.18) !important;
}
body.cmep-page-state .cm-card .district-card.called-d,
body.cmep-page-detail .cm-card .district-card.called-d,
body.cmep-page-election-night .cm-card .district-card.called-d{
  background:linear-gradient(135deg, #0076BA 0%, #005f97 100%) !important;
  border-color:rgba(125,211,252,.50) !important;
  color:#fff !important;
}
body.cmep-page-state .cm-card .district-card.called-r,
body.cmep-page-detail .cm-card .district-card.called-r,
body.cmep-page-election-night .cm-card .district-card.called-r{
  background:linear-gradient(135deg, #EE220C 0%, #a91509 100%) !important;
  border-color:rgba(252,165,165,.50) !important;
  color:#fff !important;
}
body.cmep-page-state .cm-card .district-card.called-o,
body.cmep-page-detail .cm-card .district-card.called-o,
body.cmep-page-election-night .cm-card .district-card.called-o{
  background:linear-gradient(135deg, #64748b 0%, #334155 100%) !important;
  border-color:rgba(226,232,240,.38) !important;
  color:#fff !important;
}
body.cmep-page-state .cm-card .district-card[class*="called-"] :where(.district-name,.district-meta,.district-submeta,.district-body,.person-name,.person-sub,.note),
body.cmep-page-detail .cm-card .district-card[class*="called-"] :where(.district-name,.district-meta,.district-submeta,.district-body,.person-name,.person-sub,.note),
body.cmep-page-election-night .cm-card .district-card[class*="called-"] :where(.district-name,.district-meta,.district-submeta,.district-body,.person-name,.person-sub,.note){
  color:#fff !important;
}

@media (max-width:760px){
  body.cmep-page-election-night-hub :where(.wrap,.container),
  body.cmep-page-election-night-detail :where(.wrap,.container){
    max-width:100% !important;
    padding-left:.42rem !important;
    padding-right:.42rem !important;
  }
  body.cmep-page-election-night-hub :where(.state-grid,#stateGrid,#recentStateGrid,#moreStateGrid){
    grid-template-columns:repeat(2, minmax(0, 1fr)) !important;
    gap:.6rem !important;
  }
  body.cmep-page-election-night-hub .state-tile{
    min-height:118px !important;
    padding:.68rem .55rem !important;
  }
  body.cmep-page-election-night-hub .state-tile .state-outline-wrap{
    height:50px !important;
  }
  body.cmep-page-election-night-hub .state-tile .state-name{
    font-size:.86rem !important;
  }
  body.cmep-page-election-night-detail .state-hero{
    padding:.9rem .65rem !important;
  }
  body.cmep-page-election-night-detail .state-outline-wrap{
    height:72px !important;
  }
}

/* ======================================================================
   DESIGN COHESION PASS 4.12 — election-night state switching + live-card polish
   ----------------------------------------------------------------------
   Focus: stabilize Senate/Governor switching, standardize projections/result/county
   cards, restore no-election party highlighting, and add restrained newsroom motion.
   ====================================================================== */

body.cmep-page-election-night{
  --en-surface: rgba(3, 7, 18, .88);
  --en-surface-2: rgba(8, 15, 32, .92);
  --en-border: rgba(148, 163, 184, .22);
  --en-border-strong: rgba(125, 211, 252, .34);
  --en-glow-d: rgba(0, 118, 186, .30);
  --en-glow-r: rgba(238, 34, 12, .26);
}

/* Wider, more flexible desktop shell without stretching text controls awkwardly. */
@media (min-width:1200px){
  body.cmep-page-election-night-detail :where(.wrap,.container){
    max-width:min(1680px, calc(100vw - 64px)) !important;
  }
  body.cmep-page-election-night-detail :where(#electionNightGovernor .grid-2,#electionNightSenate .grid-2,.office-view.active > .grid-2){
    grid-template-columns:minmax(470px, .9fr) minmax(650px, 1.1fr) !important;
    gap:clamp(1rem, 1.35vw, 1.45rem) !important;
  }
}
@media (min-width:1550px){
  body.cmep-page-election-night-detail :where(#electionNightGovernor .grid-2,#electionNightSenate .grid-2,.office-view.active > .grid-2){
    grid-template-columns:minmax(520px, .85fr) minmax(780px, 1.15fr) !important;
  }
}

/* State hero: keep the premium news package look, but make it less bulky. */
body.cmep-page-election-night-detail .state-hero{
  min-height:0 !important;
  padding-block:clamp(1rem, 1.8vw, 1.65rem) !important;
}
body.cmep-page-election-night-detail .state-hero::after,
body.cmep-page-election-night-hub .page-hero::after{
  content:"";
  position:absolute;
  inset:0;
  pointer-events:none;
  opacity:.22;
  background:repeating-linear-gradient(0deg, rgba(255,255,255,.032) 0 1px, transparent 1px 4px);
  mix-blend-mode:screen;
}
body.cmep-page-election-night-detail .state-hero > *,
body.cmep-page-election-night-hub .page-hero > *{
  position:relative;
  z-index:1;
}

/* Projection/winner banner: lower-third style, readable and consistent. */
body.cmep-page-election-night-detail #globalWinnerBanner,
body.cmep-page-election-night-detail .winner-banner{
  min-height:72px !important;
  display:flex !important;
  align-items:center !important;
  gap:.85rem !important;
  padding:clamp(.85rem, 1.1vw, 1.1rem) clamp(1rem, 1.35vw, 1.35rem) !important;
  border-radius:18px !important;
  background:
    linear-gradient(90deg, rgba(0,118,186,.96), rgba(0,77,128,.94) 55%, rgba(4,30,62,.92)),
    radial-gradient(circle at 7% 50%, rgba(255,255,255,.18), transparent 18rem) !important;
  border:1px solid rgba(125,211,252,.38) !important;
  box-shadow:0 18px 44px rgba(0,55,110,.28), inset 0 1px 0 rgba(255,255,255,.12) !important;
  animation:cmep-en-rise .42s cubic-bezier(.2,.8,.2,1) both;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-name,
body.cmep-page-election-night-detail .winner-banner .winner-banner-name,
body.cmep-page-election-night-detail #globalWinnerBanner :where(.name,.winner-name){
  font-size:clamp(1.05rem, 1.45vw, 1.55rem) !important;
  line-height:1.05 !important;
  letter-spacing:-.03em !important;
}

/* Results and county cards: one standardized result object. */
body.cmep-page-election-night-detail :where(.race-result-card,.county-result-card,.no-election-result-card,.primary-race){
  position:relative !important;
  overflow:hidden !important;
  padding:clamp(.82rem, 1vw, 1.02rem) !important;
  border-radius:16px !important;
  background:
    linear-gradient(180deg, rgba(8,15,32,.96), rgba(3,7,18,.92)) !important;
  border:1px solid var(--en-border) !important;
  box-shadow:0 12px 30px rgba(0,0,0,.20), inset 0 1px 0 rgba(255,255,255,.035) !important;
  animation:cmep-en-rise .36s cubic-bezier(.2,.8,.2,1) both;
}
body.cmep-page-election-night-detail :where(.race-result-card,.county-result-card,.no-election-result-card,.primary-race)::before{
  content:"";
  position:absolute;
  inset:0 0 auto 0;
  height:3px;
  background:linear-gradient(90deg, rgba(0,118,186,.9), rgba(125,211,252,.28), transparent) !important;
  pointer-events:none;
}
body.cmep-page-election-night-detail .county-result-card::before{
  background:linear-gradient(90deg, rgba(125,211,252,.72), rgba(148,163,184,.20), transparent) !important;
}
body.cmep-page-election-night-detail :where(.primary-head,.primary-row){
  min-width:0 !important;
}
body.cmep-page-election-night-detail .primary-head{
  display:flex !important;
  align-items:flex-start !important;
  justify-content:space-between !important;
  gap:.85rem !important;
  padding-bottom:.72rem !important;
  margin-bottom:.72rem !important;
  border-bottom:1px solid rgba(148,163,184,.18) !important;
}
body.cmep-page-election-night-detail .primary-head > :first-child{
  min-width:0 !important;
}
body.cmep-page-election-night-detail :where(.kicker){
  font-size:.66rem !important;
  letter-spacing:.16em !important;
  text-transform:uppercase !important;
  color:rgba(226,232,240,.62) !important;
}
body.cmep-page-election-night-detail :where(.primary-head .name,.primary-race > .name){
  font-size:clamp(.98rem, 1.05vw, 1.12rem) !important;
  line-height:1.16 !important;
  letter-spacing:-.02em !important;
  color:#f8fafc !important;
}
body.cmep-page-election-night-detail :where(.primary-meta,.p,.small){
  color:rgba(203,213,225,.72) !important;
}
body.cmep-page-election-night-detail .primary-row{
  display:grid !important;
  grid-template-columns:minmax(0, 1fr) auto !important;
  gap:.7rem !important;
  align-items:center !important;
  padding:.42rem .52rem !important;
  border-radius:12px !important;
  background:rgba(15,23,42,.42) !important;
  border:1px solid rgba(148,163,184,.10) !important;
}
body.cmep-page-election-night-detail .primary-row + .primary-bar{
  margin:.28rem .12rem .46rem !important;
}
body.cmep-page-election-night-detail .primary-row.is-winner,
body.cmep-page-election-night-detail .primary-row.is-advance{
  background:rgba(0,118,186,.16) !important;
  border-color:rgba(125,211,252,.24) !important;
}
body.cmep-page-election-night-detail .primary-row.winR,
body.cmep-page-election-night-detail .primary-row.advR{
  background:rgba(238,34,12,.14) !important;
  border-color:rgba(252,165,165,.22) !important;
}
body.cmep-page-election-night-detail .primary-dot{
  width:.64rem !important;
  height:.64rem !important;
  flex:0 0 .64rem !important;
  box-shadow:0 0 0 3px rgba(255,255,255,.06) !important;
}
body.cmep-page-election-night-detail .primary-right{
  min-width:clamp(86px, 7.5vw, 118px) !important;
  text-align:right !important;
}
body.cmep-page-election-night-detail .primary-right .pct{
  font-size:clamp(.95rem, 1.1vw, 1.16rem) !important;
  font-weight:900 !important;
  color:#f8fafc !important;
}
body.cmep-page-election-night-detail .primary-right .votes{
  font-size:.74rem !important;
  color:rgba(203,213,225,.74) !important;
}
body.cmep-page-election-night-detail .primary-bar{
  height:7px !important;
  border-radius:999px !important;
  background:rgba(30,41,59,.72) !important;
  overflow:hidden !important;
}
body.cmep-page-election-night-detail .primary-bar > div{
  border-radius:999px !important;
  transition:width .58s cubic-bezier(.2,.8,.2,1) !important;
}

/* County list grid should match results-card behavior, not feel like random modules. */
body.cmep-page-election-night-detail :where(#countyListMount,#countyListMountSenate) .primary-grid{
  display:grid !important;
  grid-template-columns:repeat(auto-fit, minmax(min(330px, 100%), 1fr)) !important;
  gap:.85rem !important;
}
@media (min-width:1400px){
  body.cmep-page-election-night-detail :where(#countyListMount,#countyListMountSenate) .primary-grid{
    grid-template-columns:repeat(auto-fit, minmax(360px, 1fr)) !important;
  }
}

/* No-election / not-up: catch cards even when old markup only has a winner pill or party text. */
body.cmep-page-state :where(.district-card.called-d,.district-card.notup-D,.district-card.notup-d,.district-card.no-election-d),
body.cmep-page-detail :where(.district-card.called-d,.district-card.notup-D,.district-card.notup-d,.district-card.no-election-d),
body.cmep-page-election-night :where(.district-card.called-d,.district-card.notup-D,.district-card.notup-d,.district-card.no-election-d){
  background:linear-gradient(135deg, #0076BA 0%, #005f97 100%) !important;
  border-color:rgba(125,211,252,.52) !important;
  color:#fff !important;
}
body.cmep-page-state :where(.district-card.called-r,.district-card.notup-R,.district-card.notup-r,.district-card.no-election-r),
body.cmep-page-detail :where(.district-card.called-r,.district-card.notup-R,.district-card.notup-r,.district-card.no-election-r),
body.cmep-page-election-night :where(.district-card.called-r,.district-card.notup-R,.district-card.notup-r,.district-card.no-election-r){
  background:linear-gradient(135deg, #EE220C 0%, #a91509 100%) !important;
  border-color:rgba(252,165,165,.52) !important;
  color:#fff !important;
}
body.cmep-page-state :where(.district-card.called-d,.district-card.called-r,.district-card.notup-D,.district-card.notup-R,.district-card.no-election-d,.district-card.no-election-r) :where(.district-name,.district-meta,.district-submeta,.district-body,.person-name,.person-sub,.pill,.winner-text),
body.cmep-page-detail :where(.district-card.called-d,.district-card.called-r,.district-card.notup-D,.district-card.notup-R,.district-card.no-election-d,.district-card.no-election-r) :where(.district-name,.district-meta,.district-submeta,.district-body,.person-name,.person-sub,.pill,.winner-text),
body.cmep-page-election-night :where(.district-card.called-d,.district-card.called-r,.district-card.notup-D,.district-card.notup-R,.district-card.no-election-d,.district-card.no-election-r) :where(.district-name,.district-meta,.district-submeta,.district-body,.person-name,.person-sub,.pill,.winner-text){
  color:#fff !important;
}

/* Hub projection/key-race cards: professional lower-thirds with consistent data lanes. */
body.cmep-page-election-night-hub .race-card{
  display:grid !important;
  grid-template-rows:auto 1fr auto !important;
  gap:.38rem !important;
  min-width:0 !important;
  transition:transform .18s ease, border-color .18s ease, box-shadow .18s ease !important;
}
body.cmep-page-election-night-hub .race-card:hover{
  transform:translateY(-2px) !important;
  border-color:rgba(125,211,252,.38) !important;
  box-shadow:0 16px 34px rgba(0,0,0,.28) !important;
}
body.cmep-page-election-night-hub .race-card :where(.race-top,.race-bot){
  display:flex !important;
  justify-content:space-between !important;
  align-items:center !important;
  gap:.65rem !important;
}
body.cmep-page-election-night-hub .race-card :where(.race-name){
  font-size:.96rem !important;
  line-height:1.16 !important;
  letter-spacing:-.015em !important;
}
body.cmep-page-election-night-hub .race-card :where(.race-sub,.race-bot){
  font-size:.74rem !important;
  color:rgba(226,232,240,.78) !important;
}

@keyframes cmep-en-rise{
  from{ opacity:.001; transform:translateY(8px); }
  to{ opacity:1; transform:translateY(0); }
}
@media (prefers-reduced-motion: reduce){
  body.cmep-page-election-night-detail :where(#globalWinnerBanner,.winner-banner,.primary-race,.primary-bar > div),
  body.cmep-page-election-night-hub .race-card{
    animation:none !important;
    transition:none !important;
  }
}

@media (max-width:760px){
  body.cmep-page-election-night-detail .primary-head{
    flex-direction:column !important;
    align-items:stretch !important;
    text-align:left !important;
  }
  body.cmep-page-election-night-detail .primary-row{
    grid-template-columns:minmax(0, 1fr) minmax(74px, auto) !important;
    padding:.42rem .46rem !important;
  }
  body.cmep-page-election-night-detail .primary-right{
    min-width:74px !important;
  }
  body.cmep-page-election-night-detail :where(#countyListMount,#countyListMountSenate) .primary-grid{
    grid-template-columns:1fr !important;
  }
}

/* ============================================================
   Election Night stabilization pass — source safety, headers,
   projection strap, result rows, and tooltip polish.
   ============================================================ */
body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate,#liveMapCard,#liveMapCardSenate,#countyListCard,#countyListCardSenate){
  background:
    linear-gradient(180deg, rgba(6,12,28,.94), rgba(2,6,23,.91)) !important;
  border:1px solid rgba(100,116,139,.30) !important;
  box-shadow:0 18px 50px rgba(0,0,0,.22), inset 0 1px 0 rgba(255,255,255,.04) !important;
}

/* Live result headers: one organized newsroom card header. */
body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate) > .card-header{
  display:grid !important;
  grid-template-columns:minmax(0,1fr) auto !important;
  grid-template-areas:"title refresh" "meta refresh" "help refresh" !important;
  align-items:center !important;
  justify-content:stretch !important;
  gap:.18rem 1rem !important;
  text-align:left !important;
  padding-bottom:.72rem !important;
  margin-bottom:.72rem !important;
  border-bottom:1px solid rgba(148,163,184,.18) !important;
}
body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate) > .card-header > div:first-child{
  grid-area:title / title / help / help !important;
  display:grid !important;
  grid-template-columns:auto 1fr !important;
  grid-template-areas:"title title" "live help" !important;
  align-items:center !important;
  gap:.2rem .55rem !important;
  min-width:0 !important;
}
body.cmep-page-election-night-detail :where(#resultsTitle,#resultsTitleSenate){
  grid-area:title !important;
  text-align:left !important;
  font-size:clamp(1.02rem,1.25vw,1.28rem) !important;
  line-height:1.12 !important;
  letter-spacing:-.035em !important;
  margin:0 !important;
}
body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate) .live-row{
  grid-area:live !important;
  display:inline-flex !important;
  align-items:center !important;
  justify-content:flex-start !important;
  gap:.45rem !important;
  margin:0 !important;
  min-width:0 !important;
  white-space:normal !important;
}
body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate) .card-help{
  grid-area:help !important;
  margin:0 !important;
  text-align:left !important;
  font-size:.83rem !important;
  color:rgba(203,213,225,.72) !important;
}
body.cmep-page-election-night-detail :where(#resultsRefreshBtn,#resultsRefreshBtnSenate){
  grid-area:refresh !important;
  align-self:center !important;
  justify-self:end !important;
}
@media (max-width:620px){
  body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate) > .card-header{
    grid-template-columns:1fr !important;
    grid-template-areas:"title" "refresh" !important;
    text-align:center !important;
  }
  body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate) > .card-header > div:first-child{
    grid-template-columns:1fr !important;
    grid-template-areas:"title" "live" "help" !important;
    justify-items:center !important;
  }
  body.cmep-page-election-night-detail :where(#resultsTitle,#resultsTitleSenate),
  body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate) .card-help{
    text-align:center !important;
  }
  body.cmep-page-election-night-detail :where(#resultsRefreshBtn,#resultsRefreshBtnSenate){
    justify-self:center !important;
  }
}

/* Projection strap: quieter, professional lower-third rather than a giant bright bar. */
body.cmep-page-election-night-detail #globalWinnerBanner{
  margin-top:clamp(.85rem,1.1vw,1rem) !important;
  margin-bottom:clamp(1rem,1.35vw,1.35rem) !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner,
body.cmep-page-election-night-detail .winner-banner{
  min-height:64px !important;
  display:grid !important;
  grid-template-columns:auto minmax(0,1fr) !important;
  align-items:center !important;
  gap:.82rem !important;
  padding:.82rem clamp(1rem,1.35vw,1.35rem) !important;
  border-radius:18px !important;
  background:
    linear-gradient(180deg, rgba(8,15,32,.96), rgba(3,7,18,.94)) !important;
  border:1px solid rgba(56,189,248,.38) !important;
  box-shadow:0 18px 44px rgba(0,0,0,.24), inset 4px 0 0 rgba(14,165,233,.88), inset 0 1px 0 rgba(255,255,255,.05) !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner.no-enter,
body.cmep-page-election-night-detail .winner-banner.no-enter{
  animation:none !important;
}
body.cmep-page-election-night-detail .winner-banner-icon{
  width:2.3rem !important;
  height:2.3rem !important;
  border-radius:999px !important;
  display:inline-grid !important;
  place-items:center !important;
  color:#f8fafc !important;
  background:rgba(14,165,233,.22) !important;
  border:1px solid rgba(125,211,252,.42) !important;
  box-shadow:none !important;
  font-weight:900 !important;
  line-height:1 !important;
}
body.cmep-page-election-night-detail .winner-banner-copy{
  min-width:0 !important;
}
body.cmep-page-election-night-detail .winner-banner-label{
  color:rgba(203,213,225,.66) !important;
  font-size:.68rem !important;
  letter-spacing:.16em !important;
  text-transform:uppercase !important;
  font-weight:900 !important;
}
body.cmep-page-election-night-detail .winner-banner-name{
  font-size:clamp(1.15rem,1.55vw,1.58rem) !important;
  line-height:1.08 !important;
  color:#f8fafc !important;
  letter-spacing:-.035em !important;
}
body.cmep-page-election-night-detail .winner-banner-sub{
  color:rgba(226,232,240,.72) !important;
  font-size:.82rem !important;
  font-weight:750 !important;
  margin-top:.12rem !important;
}
body.cmep-page-election-night-detail .winner-banner.win-r{
  border-color:rgba(248,113,113,.42) !important;
  box-shadow:0 18px 44px rgba(0,0,0,.24), inset 4px 0 0 rgba(239,68,68,.9), inset 0 1px 0 rgba(255,255,255,.05) !important;
}
body.cmep-page-election-night-detail .winner-banner.win-r .winner-banner-icon{
  background:rgba(239,68,68,.20) !important;
  border-color:rgba(252,165,165,.40) !important;
}
body.cmep-page-election-night-detail .winner-banner.win-mixed,
body.cmep-page-election-night-detail .winner-banner.win-n{
  border-color:rgba(148,163,184,.40) !important;
  box-shadow:0 18px 44px rgba(0,0,0,.24), inset 4px 0 0 rgba(148,163,184,.75), inset 0 1px 0 rgba(255,255,255,.05) !important;
}

/* Candidate projection badge: keep it out of the name line so the party label and
   numeric columns do not jump around. */
body.cmep-page-election-night-detail .winner-pill{
  width:max-content !important;
  max-width:100% !important;
  margin-top:.18rem !important;
  display:inline-flex !important;
  align-items:center !important;
  gap:.28rem !important;
  padding:.16rem .42rem !important;
  border-radius:999px !important;
  font-size:.68rem !important;
  line-height:1 !important;
  font-weight:900 !important;
  letter-spacing:.015em !important;
  color:#e0f2fe !important;
  background:rgba(14,165,233,.16) !important;
  border:1px solid rgba(125,211,252,.30) !important;
}
body.cmep-page-election-night-detail .winner-pill .winner-icon{
  width:.9rem !important;
  height:.9rem !important;
  min-width:.9rem !important;
  border-radius:999px !important;
  display:inline-grid !important;
  place-items:center !important;
  background:rgba(14,165,233,.28) !important;
  color:#f8fafc !important;
  font-size:.58rem !important;
  line-height:1 !important;
}
body.cmep-page-election-night-detail .winner-pill .winner-text{
  min-width:0 !important;
  overflow:visible !important;
  text-overflow:clip !important;
  white-space:normal !important;
}

/* Standardize result and county rows. */
body.cmep-page-election-night-detail .primary-row{
  grid-template-columns:minmax(0,1fr) minmax(5.8rem,max-content) !important;
  align-items:center !important;
}
body.cmep-page-election-night-detail .primary-row .left{
  min-width:0 !important;
  display:flex !important;
  align-items:center !important;
  gap:.55rem !important;
}
body.cmep-page-election-night-detail .primary-cand{
  min-width:0 !important;
  display:flex !important;
  flex-direction:column !important;
  align-items:flex-start !important;
  gap:.04rem !important;
}
body.cmep-page-election-night-detail .primary-cand .n{
  display:block !important;
  min-width:0 !important;
}
body.cmep-page-election-night-detail .primary-right{
  text-align:right !important;
  justify-self:end !important;
  min-width:5.8rem !important;
}

/* Tooltips should use the same newsroom surface as the cards, not a separate white popover. */
body.cmep-page-election-night-detail .county-tooltip,
body.cmep-page-election-night-detail .chart-tooltip,
body.cmep-page-election-night-detail :where(.cmep-site-tooltip,.tooltip,.map-tooltip){
  color:#f8fafc !important;
  background:linear-gradient(180deg, rgba(8,15,32,.97), rgba(2,6,23,.95)) !important;
  border:1px solid rgba(100,116,139,.38) !important;
  border-radius:14px !important;
  box-shadow:0 18px 44px rgba(0,0,0,.34), inset 0 1px 0 rgba(255,255,255,.045) !important;
}
body.cmep-page-election-night-detail .county-tooltip .ct-row{
  grid-template-columns:minmax(0,1fr) max-content !important;
  align-items:center !important;
  padding:.38rem .1rem !important;
  border-bottom:1px solid rgba(148,163,184,.12) !important;
}
body.cmep-page-election-night-detail .county-tooltip .ct-row:last-child{
  border-bottom:0 !important;
}
body.cmep-page-election-night-detail .county-tooltip :where(.ct-name,.ct-pct){
  color:#f8fafc !important;
}
body.cmep-page-election-night-detail .county-tooltip :where(.ct-votes,.ct-party,.ct-note,.ct-chip){
  color:rgba(203,213,225,.78) !important;
}

@media (prefers-reduced-motion:reduce){
  body.cmep-page-election-night-detail :where(.winner-banner,.primary-race,.primary-bar > div,.pct-wrap){
    animation:none !important;
    transition:none !important;
  }
}

/* ==========================================================================
   Pass 4.14 — Election Night deep-link stability + projection finish
   --------------------------------------------------------------------------
   Keep this as the current single notes block in PATCH_NOTES.md. This CSS
   replaces the previous boxed winner banner with a cleaner newsroom projection
   strap and prevents routine refreshes from replaying the entrance animation.
   ========================================================================== */

body.cmep-page-election-night-detail #globalWinnerBanner{
  display:block !important;
  width:100% !important;
  margin-block:clamp(1rem,1.35vw,1.35rem) !important;
  border:0 !important;
  box-shadow:none !important;
  background:transparent !important;
  padding:0 !important;
  min-height:0 !important;
}

body.cmep-page-election-night-detail #globalWinnerBanner:empty{
  display:none !important;
}

body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner,
body.cmep-page-election-night-detail .winner-banner{
  --projection-accent: var(--solid-d, #0076BA);
  position:relative !important;
  display:grid !important;
  grid-template-columns:auto minmax(0,1fr) !important;
  align-items:center !important;
  gap:clamp(.72rem,1.1vw,1.05rem) !important;
  width:100% !important;
  min-height:clamp(68px,5.4vw,88px) !important;
  padding:clamp(.78rem,1.05vw,1rem) clamp(.95rem,1.6vw,1.45rem) !important;
  border:0 !important;
  border-radius:18px !important;
  overflow:hidden !important;
  background:
    linear-gradient(90deg, color-mix(in srgb, var(--projection-accent) 88%, #020617), color-mix(in srgb, var(--projection-accent) 46%, #020617) 48%, rgba(3,7,18,.94)),
    radial-gradient(circle at 2% 50%, rgba(255,255,255,.20), transparent 18rem) !important;
  box-shadow:
    0 20px 46px rgba(0,0,0,.22),
    inset 0 1px 0 rgba(255,255,255,.18),
    inset 0 -1px 0 rgba(255,255,255,.08) !important;
  isolation:isolate !important;
  transform-origin:center !important;
  animation:cmep-projection-enter .58s cubic-bezier(.18,.86,.22,1) both !important;
}

body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner.no-enter,
body.cmep-page-election-night-detail .winner-banner.no-enter{
  animation:none !important;
}

body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner::before,
body.cmep-page-election-night-detail .winner-banner::before{
  content:"";
  position:absolute;
  inset:0;
  z-index:-1;
  background:
    linear-gradient(90deg, rgba(255,255,255,.22), transparent 16%, transparent 84%, rgba(255,255,255,.08)),
    repeating-linear-gradient(0deg, rgba(255,255,255,.045) 0 1px, transparent 1px 5px);
  opacity:.42;
  pointer-events:none;
}

body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner:not(.no-enter)::after,
body.cmep-page-election-night-detail .winner-banner:not(.no-enter)::after{
  content:"";
  position:absolute;
  inset:0;
  z-index:0;
  transform:translateX(-115%);
  background:linear-gradient(90deg, transparent, rgba(255,255,255,.26), transparent);
  animation:cmep-projection-sheen 1.05s cubic-bezier(.2,.75,.2,1) .10s both;
  pointer-events:none;
}

body.cmep-page-election-night-detail .winner-banner.bannerD{ --projection-accent: var(--solid-d, #0076BA); }
body.cmep-page-election-night-detail .winner-banner.bannerR{ --projection-accent: var(--solid-r, #EE220C); }
body.cmep-page-election-night-detail .winner-banner.bannerN{ --projection-accent: var(--toss-up, #929292); }

body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-icon,
body.cmep-page-election-night-detail .winner-banner .winner-banner-icon{
  position:relative !important;
  z-index:1 !important;
  width:clamp(38px,3.2vw,48px) !important;
  height:clamp(38px,3.2vw,48px) !important;
  display:grid !important;
  place-items:center !important;
  border-radius:999px !important;
  background:rgba(255,255,255,.16) !important;
  border:1px solid rgba(255,255,255,.26) !important;
  color:#fff !important;
  font-size:clamp(1.05rem,1.45vw,1.35rem) !important;
  font-weight:950 !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.20), 0 10px 22px rgba(0,0,0,.16) !important;
}

body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-copy,
body.cmep-page-election-night-detail .winner-banner .winner-banner-copy{
  position:relative !important;
  z-index:1 !important;
  min-width:0 !important;
  text-align:left !important;
}

body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-label,
body.cmep-page-election-night-detail .winner-banner .winner-banner-label{
  color:rgba(255,255,255,.72) !important;
  font-size:clamp(.62rem,.72vw,.76rem) !important;
  font-weight:900 !important;
  letter-spacing:.16em !important;
  text-transform:uppercase !important;
  line-height:1.1 !important;
  margin:0 0 .18rem !important;
}

body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-name,
body.cmep-page-election-night-detail .winner-banner .winner-banner-name{
  color:#fff !important;
  font-size:clamp(1.25rem,2.0vw,1.95rem) !important;
  font-weight:950 !important;
  line-height:1.02 !important;
  letter-spacing:-.045em !important;
  margin:0 !important;
  text-wrap:balance !important;
}

body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-sub,
body.cmep-page-election-night-detail .winner-banner .winner-banner-sub{
  color:rgba(255,255,255,.76) !important;
  font-size:clamp(.78rem,.88vw,.94rem) !important;
  font-weight:750 !important;
  line-height:1.2 !important;
  margin:.25rem 0 0 !important;
}

@keyframes cmep-projection-enter{
  0%{ opacity:0; transform:translateY(10px) scale(.992); filter:blur(3px); }
  55%{ opacity:1; transform:translateY(-1px) scale(1.002); filter:blur(0); }
  100%{ opacity:1; transform:translateY(0) scale(1); filter:blur(0); }
}
@keyframes cmep-projection-sheen{
  0%{ transform:translateX(-115%); opacity:0; }
  18%{ opacity:.95; }
  100%{ transform:translateX(115%); opacity:0; }
}

body.cmep-page-election-night-detail :where(.live-card-header,.card-header:has(#resultsTitle),.card-header:has(#resultsTitleSenate)){
  display:grid !important;
  grid-template-columns:minmax(0,1fr) auto !important;
  align-items:center !important;
  gap:.8rem !important;
}
body.cmep-page-election-night-detail :where(#resultsTitle,#resultsTitleSenate){
  text-align:left !important;
  margin:0 !important;
}
body.cmep-page-election-night-detail :where(.live-subhead,.live-meta,.results-meta,.auto-refresh-line){
  text-align:left !important;
}

@media (max-width:700px){
  body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner,
  body.cmep-page-election-night-detail .winner-banner{
    grid-template-columns:1fr !important;
    justify-items:center !important;
    text-align:center !important;
    gap:.55rem !important;
    padding:1rem .9rem !important;
  }
  body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-copy,
  body.cmep-page-election-night-detail .winner-banner .winner-banner-copy{
    text-align:center !important;
  }
  body.cmep-page-election-night-detail :where(.live-card-header,.card-header:has(#resultsTitle),.card-header:has(#resultsTitleSenate)){
    grid-template-columns:1fr !important;
    justify-items:center !important;
    text-align:center !important;
  }
  body.cmep-page-election-night-detail :where(#resultsTitle,#resultsTitleSenate,.live-subhead,.live-meta,.results-meta,.auto-refresh-line){
    text-align:center !important;
  }
}

@media (prefers-reduced-motion:reduce){
  body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner,
  body.cmep-page-election-night-detail .winner-banner,
  body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner::after,
  body.cmep-page-election-night-detail .winner-banner::after{
    animation:none !important;
  }
}

/* ======================================================================
   PASS 4.15 — election-night office-view containment fix
   ----------------------------------------------------------------------
   The broad responsive grid rules from earlier passes targeted `.state-grid`
   too aggressively, which could force inactive Senate/Governor sections to
   display during startup. Keep only the selected office visible.
====================================================================== */
body.cmep-page-election-night-detail .office-view[data-office]:not(.active),
body.cmep-page-election-night-primary-detail .office-view[data-office]:not(.active),
body.cmep-page-election-night-primary-runoff-detail .office-view[data-office]:not(.active){
  display:none !important;
  visibility:hidden !important;
}
body.cmep-page-election-night-detail .office-view[data-office].active,
body.cmep-page-election-night-primary-detail .office-view[data-office].active,
body.cmep-page-election-night-primary-runoff-detail .office-view[data-office].active{
  display:grid !important;
  visibility:visible !important;
}

/* Detail pages: apply wide grid behavior only to the active office view, not
   every `.state-grid` on the page. This prevents hidden office panels from
   reserving space or showing stale loading states. */
@media (min-width:1180px){
  body.cmep-page-election-night-detail .state-grid.office-view:not(.active),
  body.cmep-page-election-night-primary-detail .state-grid.office-view:not(.active),
  body.cmep-page-election-night-primary-runoff-detail .state-grid.office-view:not(.active){
    display:none !important;
  }
  body.cmep-page-election-night-detail .state-grid.office-view.active,
  body.cmep-page-election-night-primary-detail .state-grid.office-view.active,
  body.cmep-page-election-night-primary-runoff-detail .state-grid.office-view.active{
    display:grid !important;
    grid-template-columns:repeat(12, minmax(0, 1fr)) !important;
  }
}
@media (min-width:900px) and (max-width:1179px){
  body.cmep-page-election-night-detail .state-grid.office-view:not(.active),
  body.cmep-page-election-night-primary-detail .state-grid.office-view:not(.active),
  body.cmep-page-election-night-primary-runoff-detail .state-grid.office-view:not(.active){
    display:none !important;
  }
  body.cmep-page-election-night-detail .state-grid.office-view.active,
  body.cmep-page-election-night-primary-detail .state-grid.office-view.active,
  body.cmep-page-election-night-primary-runoff-detail .state-grid.office-view.active{
    display:grid !important;
    grid-template-columns:1fr 1fr !important;
  }
}
@media (max-width:899px){
  body.cmep-page-election-night-detail .state-grid.office-view:not(.active),
  body.cmep-page-election-night-primary-detail .state-grid.office-view:not(.active),
  body.cmep-page-election-night-primary-runoff-detail .state-grid.office-view:not(.active){
    display:none !important;
  }
  body.cmep-page-election-night-detail .state-grid.office-view.active,
  body.cmep-page-election-night-primary-detail .state-grid.office-view.active,
  body.cmep-page-election-night-primary-runoff-detail .state-grid.office-view.active{
    display:grid !important;
    grid-template-columns:1fr !important;
  }
}

/* ======================================================================
   PASS 4.16 — Election Night mobile shell + live card + tooltip polish
   ----------------------------------------------------------------------
   Tightens the active Election Night detail view after screenshot QA:
   - mobile result/map cards use the same near-full-width shell as projection
   - live card header stops colliding with the refresh button
   - projection strap becomes a cleaner in-flow newsroom band
   - candidate winner badges stay inline with names instead of pushing party labels
   - county/map tooltips use the same dark newsroom component language
====================================================================== */

body.cmep-page-election-night-detail{
  --en-mobile-gutter: max(10px, env(safe-area-inset-left));
  --en-mobile-gutter-r: max(10px, env(safe-area-inset-right));
}

/* Keep the full detail experience on one width system. */
body.cmep-page-election-night-detail :where(#globalWinnerBanner,#officeViews,.office-view.active,#electionNightGovernor,#electionNightSenate,#liveRow,#liveRowSenate,.grid-2){
  max-width:100% !important;
  min-width:0 !important;
}

/* Projection: a professional strap, not a boxed card. */
body.cmep-page-election-night-detail #globalWinnerBanner{
  margin-top:clamp(.65rem,1vw,.95rem) !important;
  margin-bottom:clamp(.9rem,1.2vw,1.2rem) !important;
  padding:0 !important;
  background:transparent !important;
  border:0 !important;
  box-shadow:none !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner,
body.cmep-page-election-night-detail .winner-banner{
  min-height:clamp(58px,4.4vw,76px) !important;
  border-radius:18px !important;
  border:1px solid rgba(125,211,252,.24) !important;
  background:
    linear-gradient(90deg,
      color-mix(in srgb, var(--projection-accent, #0076BA) 76%, #020617) 0%,
      color-mix(in srgb, var(--projection-accent, #0076BA) 42%, #020617) 42%,
      rgba(3,7,18,.94) 100%) !important;
  box-shadow:
    0 16px 38px rgba(0,0,0,.22),
    inset 0 1px 0 rgba(255,255,255,.14),
    inset 0 -1px 0 rgba(255,255,255,.06) !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-icon,
body.cmep-page-election-night-detail .winner-banner .winner-banner-icon{
  width:clamp(34px,2.8vw,42px) !important;
  height:clamp(34px,2.8vw,42px) !important;
  background:rgba(255,255,255,.13) !important;
  border-color:rgba(255,255,255,.24) !important;
  box-shadow:none !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-label,
body.cmep-page-election-night-detail .winner-banner .winner-banner-label{
  font-size:clamp(.58rem,.65vw,.7rem) !important;
  letter-spacing:.18em !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-name,
body.cmep-page-election-night-detail .winner-banner .winner-banner-name{
  font-size:clamp(1.22rem,1.75vw,1.8rem) !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-sub,
body.cmep-page-election-night-detail .winner-banner .winner-banner-sub{
  font-size:clamp(.78rem,.88vw,.94rem) !important;
}

/* Live card header: explicit three-row system. Avoid the mobile Refresh overlap. */
body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate) > .card-header{
  display:grid !important;
  grid-template-columns:minmax(0,1fr) auto !important;
  grid-template-areas:
    "title refresh"
    "status refresh"
    "help refresh" !important;
  align-items:center !important;
  justify-content:stretch !important;
  column-gap:1rem !important;
  row-gap:.28rem !important;
  text-align:left !important;
}
body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate) > .card-header > div:first-child{
  display:contents !important;
}
body.cmep-page-election-night-detail :where(#resultsTitle,#resultsTitleSenate){
  grid-area:title !important;
  justify-self:start !important;
  text-align:left !important;
  margin:0 !important;
}
body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate) .live-row{
  grid-area:status !important;
  justify-self:start !important;
  display:flex !important;
  align-items:center !important;
  justify-content:flex-start !important;
  flex-wrap:wrap !important;
  gap:.42rem .5rem !important;
  margin:0 !important;
  min-width:0 !important;
}
body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate) .card-help{
  grid-area:help !important;
  justify-self:start !important;
  text-align:left !important;
  margin:0 !important;
}
body.cmep-page-election-night-detail :where(#resultsRefreshBtn,#resultsRefreshBtnSenate){
  grid-area:refresh !important;
  justify-self:end !important;
  align-self:center !important;
  position:static !important;
  transform:none !important;
}
body.cmep-page-election-night-detail :where(.live-pill){
  flex:0 0 auto !important;
}
body.cmep-page-election-night-detail :where(.last-updated){
  white-space:normal !important;
  min-width:0 !important;
}

/* Results cards: make the component feel more like a single professional card. */
body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate,#liveMapCard,#liveMapCardSenate,#countyListCard,#countyListCardSenate,.state-analytics-card){
  border-radius:20px !important;
  background:
    linear-gradient(180deg, rgba(7,13,30,.97), rgba(2,6,23,.93)) !important;
  border:1px solid rgba(100,116,139,.34) !important;
  box-shadow:0 18px 46px rgba(0,0,0,.24), inset 0 1px 0 rgba(255,255,255,.045) !important;
}
body.cmep-page-election-night-detail :where(.race-result-card,.county-result-card,.no-election-result-card,.primary-race){
  border-radius:18px !important;
  background:linear-gradient(180deg, rgba(8,15,32,.96), rgba(3,7,18,.92)) !important;
  border-color:rgba(100,116,139,.34) !important;
}
body.cmep-page-election-night-detail .primary-head{
  gap:.65rem !important;
}
body.cmep-page-election-night-detail .primary-head :where(.name){
  text-wrap:balance !important;
}
body.cmep-page-election-night-detail .primary-row{
  border-radius:14px !important;
  padding:.5rem .58rem !important;
  gap:.58rem !important;
}
body.cmep-page-election-night-detail .primary-row .left{
  gap:.58rem !important;
}
body.cmep-page-election-night-detail .primary-cand .n{
  display:flex !important;
  align-items:center !important;
  gap:.42rem !important;
  flex-wrap:wrap !important;
  overflow:visible !important;
  text-overflow:clip !important;
  white-space:normal !important;
}
body.cmep-page-election-night-detail .primary-cand .p{
  display:block !important;
  margin-top:.02rem !important;
}
body.cmep-page-election-night-detail .winner-pill{
  margin:0 !important;
  display:inline-flex !important;
  vertical-align:middle !important;
  transform:translateY(-1px) !important;
  padding:.12rem .34rem !important;
}
body.cmep-page-election-night-detail .winner-pill .winner-text{
  display:none !important;
}

/* Map tooltip redesign: match the newsroom cards and fit phone screens. */
body.cmep-page-election-night-detail :where(.maplibregl-popup){
  z-index:50 !important;
  max-width:min(360px, calc(100vw - 24px)) !important;
}
body.cmep-page-election-night-detail :where(.maplibregl-popup-content){
  padding:0 !important;
  border-radius:16px !important;
  background:transparent !important;
  box-shadow:none !important;
  overflow:visible !important;
}
body.cmep-page-election-night-detail :where(.maplibregl-popup-tip){
  border-top-color:rgba(8,15,32,.98) !important;
  border-bottom-color:rgba(8,15,32,.98) !important;
}
body.cmep-page-election-night-detail :where(.county-tooltip,.chart-tooltip,.cmep-site-tooltip,.tooltip,.map-tooltip){
  width:min(360px, calc(100vw - 24px)) !important;
  max-width:min(360px, calc(100vw - 24px)) !important;
  padding:.78rem .82rem !important;
  color:#f8fafc !important;
  background:
    linear-gradient(180deg, rgba(8,15,32,.985), rgba(2,6,23,.965)) !important;
  border:1px solid rgba(125,211,252,.24) !important;
  border-radius:16px !important;
  box-shadow:0 20px 48px rgba(0,0,0,.42), inset 0 1px 0 rgba(255,255,255,.05) !important;
  backdrop-filter:blur(12px) !important;
}
body.cmep-page-election-night-detail .county-tooltip :where(.ct-head,.ct-top){
  display:flex !important;
  align-items:flex-start !important;
  justify-content:space-between !important;
  gap:.65rem !important;
  padding-bottom:.55rem !important;
  margin-bottom:.55rem !important;
  border-bottom:1px solid rgba(148,163,184,.16) !important;
}
body.cmep-page-election-night-detail .county-tooltip .ct-row{
  display:grid !important;
  grid-template-columns:minmax(0,1fr) max-content !important;
  gap:.65rem !important;
  align-items:center !important;
  padding:.42rem 0 !important;
  border-bottom:1px solid rgba(148,163,184,.11) !important;
}
body.cmep-page-election-night-detail .county-tooltip .ct-row:last-child{
  border-bottom:0 !important;
}
body.cmep-page-election-night-detail .county-tooltip .ct-left{
  min-width:0 !important;
  display:flex !important;
  align-items:center !important;
  gap:.42rem !important;
}
body.cmep-page-election-night-detail .county-tooltip .ct-name{
  color:#f8fafc !important;
  font-weight:850 !important;
  line-height:1.13 !important;
  white-space:normal !important;
  overflow-wrap:anywhere !important;
}
body.cmep-page-election-night-detail .county-tooltip .ct-right{
  text-align:right !important;
  justify-self:end !important;
  white-space:nowrap !important;
}
body.cmep-page-election-night-detail .county-tooltip .ct-pct{
  color:#f8fafc !important;
  font-weight:900 !important;
  font-variant-numeric:tabular-nums !important;
}
body.cmep-page-election-night-detail .county-tooltip .ct-votes{
  color:rgba(203,213,225,.76) !important;
  font-size:.72rem !important;
  font-variant-numeric:tabular-nums !important;
  white-space:nowrap !important;
}
body.cmep-page-election-night-detail .county-tooltip :where(.ct-party,.ct-note,.ct-chip,.ct-badge){
  color:rgba(203,213,225,.76) !important;
}

@media (max-width:760px){
  body.cmep-page-election-night-detail .container{
    width:100% !important;
    max-width:none !important;
    padding-left:var(--en-mobile-gutter) !important;
    padding-right:var(--en-mobile-gutter-r) !important;
  }
  body.cmep-page-election-night-detail :where(#globalWinnerBanner,#officeViews,.office-view.active,#electionNightGovernor,#electionNightSenate,#liveRow,#liveRowSenate,.grid-2){
    width:100% !important;
    margin-left:0 !important;
    margin-right:0 !important;
  }
  body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate,#liveMapCard,#liveMapCardSenate,#countyListCard,#countyListCardSenate,.state-analytics-card){
    width:100% !important;
    max-width:100% !important;
    margin-left:0 !important;
    margin-right:0 !important;
    padding:clamp(1rem,3.8vw,1.15rem) !important;
    border-radius:18px !important;
  }
  body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner,
  body.cmep-page-election-night-detail .winner-banner{
    grid-template-columns:1fr !important;
    justify-items:center !important;
    text-align:center !important;
    gap:.32rem !important;
    min-height:0 !important;
    padding:.78rem .75rem !important;
    border-radius:0 0 20px 20px !important;
  }
  body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-icon,
  body.cmep-page-election-night-detail .winner-banner .winner-banner-icon{
    display:none !important;
  }
  body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-copy,
  body.cmep-page-election-night-detail .winner-banner .winner-banner-copy{
    text-align:center !important;
  }
  body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-label,
  body.cmep-page-election-night-detail .winner-banner .winner-banner-label{
    font-size:.62rem !important;
    margin-bottom:.16rem !important;
  }
  body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-name,
  body.cmep-page-election-night-detail .winner-banner .winner-banner-name{
    font-size:1.32rem !important;
    line-height:1.03 !important;
  }
  body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-sub,
  body.cmep-page-election-night-detail .winner-banner .winner-banner-sub{
    font-size:.86rem !important;
    margin-top:.16rem !important;
  }

  body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate) > .card-header{
    grid-template-columns:1fr !important;
    grid-template-areas:
      "title"
      "status"
      "help"
      "refresh" !important;
    justify-items:center !important;
    text-align:center !important;
    row-gap:.42rem !important;
  }
  body.cmep-page-election-night-detail :where(#resultsTitle,#resultsTitleSenate),
  body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate) .live-row,
  body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate) .card-help,
  body.cmep-page-election-night-detail :where(#resultsRefreshBtn,#resultsRefreshBtnSenate){
    justify-self:center !important;
    text-align:center !important;
  }
  body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate) .live-row{
    justify-content:center !important;
  }
  body.cmep-page-election-night-detail :where(#resultsRefreshBtn,#resultsRefreshBtnSenate){
    margin-top:.1rem !important;
  }

  body.cmep-page-election-night-detail .primary-race{
    padding:1rem .78rem !important;
  }
  body.cmep-page-election-night-detail .primary-row{
    grid-template-columns:minmax(0,1fr) minmax(4.9rem,max-content) !important;
    padding:.62rem .62rem !important;
  }
  body.cmep-page-election-night-detail .primary-right{
    min-width:4.9rem !important;
  }
  body.cmep-page-election-night-detail .primary-right .pct{
    font-size:1.05rem !important;
  }
  body.cmep-page-election-night-detail .primary-cand .n{
    gap:.34rem !important;
  }
  body.cmep-page-election-night-detail .map{
    min-height:min(62vh, 430px) !important;
  }
  body.cmep-page-election-night-detail :where(.county-tooltip,.chart-tooltip,.cmep-site-tooltip,.tooltip,.map-tooltip){
    width:min(340px, calc(100vw - 24px)) !important;
    max-width:min(340px, calc(100vw - 24px)) !important;
  }
}

@media (max-width:380px){
  body.cmep-page-election-night-detail .container{
    padding-left:8px !important;
    padding-right:8px !important;
  }
  body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate,#liveMapCard,#liveMapCardSenate,#countyListCard,#countyListCardSenate,.state-analytics-card){
    padding:.9rem .72rem !important;
  }
  body.cmep-page-election-night-detail .primary-row{
    grid-template-columns:minmax(0,1fr) minmax(4.4rem,max-content) !important;
    gap:.42rem !important;
  }
  body.cmep-page-election-night-detail .primary-right{
    min-width:4.4rem !important;
  }
}

/* ======================================================================
   PASS 4.17 — Election Night party theming, tooltip/card standardization,
   projection badge cleanup, county expansion, reset-view visibility
   ====================================================================== */

/* Reset View should not appear on first load. JS now only reveals this after
   a user-originated pan/zoom; keep the default fully hidden. */
body.cmep-page-election-night-detail .reset-view-btn{
  opacity:0 !important;
  pointer-events:none !important;
  transform:translateY(-2px) scale(.98) !important;
  transition:opacity .16s ease, transform .16s ease !important;
}
body.cmep-page-election-night-detail .reset-view-btn.show{
  opacity:1 !important;
  pointer-events:auto !important;
  transform:translateY(0) scale(1) !important;
}

/* Projection strap: party-aware, in-flow, and closer to a professional lower-third
   than a boxed alert. */
body.cmep-page-election-night-detail #globalWinnerBanner{
  --projection-accent:var(--solid-d, #0076BA);
  width:100% !important;
  margin:clamp(.75rem,1.5vw,1rem) auto clamp(1rem,1.7vw,1.25rem) !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner,
body.cmep-page-election-night-detail .winner-banner{
  --projection-accent:var(--solid-d, #0076BA);
  position:relative !important;
  display:grid !important;
  grid-template-columns:auto minmax(0,1fr) !important;
  align-items:center !important;
  gap:.78rem !important;
  width:100% !important;
  min-height:74px !important;
  padding:.86rem 1.05rem !important;
  overflow:hidden !important;
  color:#f8fafc !important;
  background:
    linear-gradient(90deg, color-mix(in srgb, var(--projection-accent) 55%, transparent), rgba(2,6,23,.82) 58%, rgba(2,6,23,.96)),
    repeating-linear-gradient(0deg, rgba(255,255,255,.045) 0 1px, transparent 1px 5px) !important;
  border:1px solid color-mix(in srgb, var(--projection-accent) 48%, rgba(148,163,184,.30)) !important;
  border-radius:18px !important;
  box-shadow:0 18px 46px rgba(0,0,0,.30), inset 0 1px 0 rgba(255,255,255,.09) !important;
}
body.cmep-page-election-night-detail .winner-banner.bannerD{ --projection-accent:var(--solid-d, #0076BA) !important; }
body.cmep-page-election-night-detail .winner-banner.bannerR{ --projection-accent:var(--solid-r, #EE220C) !important; }
body.cmep-page-election-night-detail .winner-banner.bannerN{ --projection-accent:var(--toss-up, #929292) !important; }
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-icon,
body.cmep-page-election-night-detail .winner-banner .winner-banner-icon{
  width:2.35rem !important;
  height:2.35rem !important;
  border-radius:999px !important;
  display:grid !important;
  place-items:center !important;
  background:color-mix(in srgb, var(--projection-accent) 85%, white 15%) !important;
  color:white !important;
  font-weight:950 !important;
  box-shadow:0 0 0 1px rgba(255,255,255,.18), 0 8px 22px rgba(0,0,0,.20) !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-label,
body.cmep-page-election-night-detail .winner-banner .winner-banner-label{
  color:rgba(226,232,240,.76) !important;
  font-size:.67rem !important;
  font-weight:950 !important;
  letter-spacing:.18em !important;
  text-transform:uppercase !important;
  line-height:1 !important;
  margin-bottom:.12rem !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-name,
body.cmep-page-election-night-detail .winner-banner .winner-banner-name{
  color:#fff !important;
  font-size:clamp(1.28rem,2.2vw,1.85rem) !important;
  line-height:1.03 !important;
  font-weight:950 !important;
  letter-spacing:-.035em !important;
  text-wrap:balance !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-sub,
body.cmep-page-election-night-detail .winner-banner .winner-banner-sub{
  color:rgba(226,232,240,.82) !important;
  font-size:.92rem !important;
  font-weight:750 !important;
  line-height:1.15 !important;
}

/* Results card projection badge: keep it in the candidate name line, small and deliberate. */
body.cmep-page-election-night-detail .primary-cand .n{
  display:flex !important;
  align-items:center !important;
  gap:.42rem !important;
  flex-wrap:wrap !important;
}
body.cmep-page-election-night-detail .winner-pill{
  flex:0 0 auto !important;
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  gap:.24rem !important;
  height:1.15rem !important;
  min-width:1.15rem !important;
  padding:0 .34rem !important;
  margin:0 !important;
  border-radius:999px !important;
  background:rgba(148,163,184,.16) !important;
  border:1px solid rgba(255,255,255,.22) !important;
  color:#fff !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.12) !important;
  transform:none !important;
}
body.cmep-page-election-night-detail .winner-icon{
  width:auto !important;
  height:auto !important;
  min-width:0 !important;
  background:transparent !important;
  border:0 !important;
  box-shadow:none !important;
  color:inherit !important;
  font-size:.72rem !important;
  line-height:1 !important;
}
body.cmep-page-election-night-detail .winner-text{
  display:none !important;
}
body.cmep-page-election-night-detail .primary-row.winD .winner-pill,
body.cmep-page-election-night-detail .primary-row.advD .winner-pill{
  background:color-mix(in srgb, var(--solid-d, #0076BA) 72%, #020617) !important;
  border-color:color-mix(in srgb, var(--solid-d, #0076BA) 60%, white 15%) !important;
}
body.cmep-page-election-night-detail .primary-row.winR .winner-pill,
body.cmep-page-election-night-detail .primary-row.advR .winner-pill{
  background:color-mix(in srgb, var(--solid-r, #EE220C) 72%, #020617) !important;
  border-color:color-mix(in srgb, var(--solid-r, #EE220C) 60%, white 15%) !important;
}
body.cmep-page-election-night-detail .primary-row.winR,
body.cmep-page-election-night-detail .primary-row.advR{
  border-color:color-mix(in srgb, var(--solid-r, #EE220C) 42%, rgba(148,163,184,.22)) !important;
  background:linear-gradient(180deg, rgba(238,34,12,.18), rgba(2,6,23,.56)) !important;
}
body.cmep-page-election-night-detail .primary-row.winD,
body.cmep-page-election-night-detail .primary-row.advD{
  border-color:color-mix(in srgb, var(--solid-d, #0076BA) 42%, rgba(148,163,184,.22)) !important;
  background:linear-gradient(180deg, rgba(0,118,186,.22), rgba(2,6,23,.56)) !important;
}

/* County/map tooltip: same vocabulary as cards; party-aware winner/advance rows. */
body.cmep-page-election-night-detail .county-tooltip,
body.cmep-page-election-night-detail .maplibregl-popup .county-tooltip,
body.cmep-page-election-night-detail .map-tooltip,
body.cmep-page-election-night-detail .chart-tooltip{
  padding:0 !important;
  border-radius:18px !important;
  overflow:hidden !important;
  background:linear-gradient(180deg, rgba(8,15,32,.99), rgba(2,6,23,.97)) !important;
  border:1px solid rgba(100,116,139,.38) !important;
  box-shadow:0 22px 54px rgba(0,0,0,.46), inset 0 1px 0 rgba(255,255,255,.055) !important;
  backdrop-filter:blur(16px) !important;
}
body.cmep-page-election-night-detail .county-tooltip .ct-top{
  margin:0 !important;
  padding:.78rem .86rem .64rem !important;
  background:
    linear-gradient(90deg, rgba(14,165,233,.16), rgba(15,23,42,.42)),
    repeating-linear-gradient(0deg, rgba(255,255,255,.035) 0 1px, transparent 1px 5px) !important;
  border-bottom:1px solid rgba(148,163,184,.18) !important;
}
body.cmep-page-election-night-detail .county-tooltip .ct-head{
  color:#fff !important;
  font-size:1rem !important;
  font-weight:950 !important;
  letter-spacing:-.02em !important;
}
body.cmep-page-election-night-detail .county-tooltip .ct-summary{
  display:flex !important;
  flex-wrap:wrap !important;
  gap:.36rem !important;
  padding:.58rem .86rem .22rem !important;
}
body.cmep-page-election-night-detail .county-tooltip .ct-chip{
  padding:.18rem .42rem !important;
  border-radius:999px !important;
  background:rgba(148,163,184,.12) !important;
  border:1px solid rgba(148,163,184,.18) !important;
  color:rgba(226,232,240,.78) !important;
  font-size:.68rem !important;
  font-weight:800 !important;
}
body.cmep-page-election-night-detail .county-tooltip .ct-rows{
  padding:.5rem .58rem .58rem !important;
}
body.cmep-page-election-night-detail .county-tooltip .ct-row{
  padding:.5rem .5rem !important;
  border:1px solid transparent !important;
  border-radius:12px !important;
  background:rgba(15,23,42,.42) !important;
  margin-bottom:.36rem !important;
}
body.cmep-page-election-night-detail .county-tooltip .ct-row:last-child{ margin-bottom:0 !important; }
body.cmep-page-election-night-detail .county-tooltip .ct-row.winD,
body.cmep-page-election-night-detail .county-tooltip .ct-row.advD{
  background:linear-gradient(180deg, rgba(0,118,186,.20), rgba(15,23,42,.54)) !important;
  border-color:rgba(0,118,186,.32) !important;
}
body.cmep-page-election-night-detail .county-tooltip .ct-row.winR,
body.cmep-page-election-night-detail .county-tooltip .ct-row.advR{
  background:linear-gradient(180deg, rgba(238,34,12,.18), rgba(15,23,42,.54)) !important;
  border-color:rgba(238,34,12,.32) !important;
}
body.cmep-page-election-night-detail .county-tooltip .ct-winner-pill{
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  width:1.05rem !important;
  height:1.05rem !important;
  margin-left:.34rem !important;
  border-radius:999px !important;
  color:#fff !important;
  font-size:.66rem !important;
  font-weight:950 !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.20), 0 0 0 1px rgba(255,255,255,.18) !important;
}
body.cmep-page-election-night-detail .county-tooltip .tip-link{
  display:block !important;
  width:calc(100% - 1.16rem) !important;
  margin:.1rem .58rem .66rem !important;
  padding:.48rem .7rem !important;
  border-radius:999px !important;
  background:rgba(15,23,42,.75) !important;
  border:1px solid rgba(148,163,184,.24) !important;
  color:#f8fafc !important;
  font-weight:900 !important;
}

/* County list: collapsed by default when there are many counties; expandable on demand. */
body.cmep-page-election-night-detail .primary-grid.county-list-collapsed:not(.is-expanded) .county-extra{
  display:none !important;
}
body.cmep-page-election-night-detail .county-expand-btn{
  display:flex !important;
  align-items:center !important;
  justify-content:center !important;
  width:min(100%, 360px) !important;
  margin:.85rem auto 0 !important;
  padding:.65rem .95rem !important;
  border-radius:999px !important;
  border:1px solid rgba(148,163,184,.28) !important;
  background:rgba(15,23,42,.72) !important;
  color:#f8fafc !important;
  font-weight:900 !important;
  cursor:pointer !important;
}
body.cmep-page-election-night-detail .county-expand-btn:hover{
  background:rgba(30,41,59,.84) !important;
}

@media (max-width:760px){
  body.cmep-page-election-night-detail #globalWinnerBanner{
    margin-top:.5rem !important;
    margin-bottom:.86rem !important;
  }
  body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner,
  body.cmep-page-election-night-detail .winner-banner{
    width:100% !important;
    grid-template-columns:1fr !important;
    justify-items:center !important;
    text-align:center !important;
    min-height:0 !important;
    padding:.78rem .72rem !important;
    border-radius:0 0 20px 20px !important;
  }
  body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-icon,
  body.cmep-page-election-night-detail .winner-banner .winner-banner-icon{
    display:none !important;
  }
  body.cmep-page-election-night-detail .county-tooltip.mobile-popout{
    width:calc(100vw - 20px) !important;
    max-width:calc(100vw - 20px) !important;
    left:10px !important;
    right:10px !important;
  }
  body.cmep-page-election-night-detail .county-tooltip .ct-rows{
    max-height:min(45vh, 330px) !important;
    overflow:auto !important;
  }
}


/* ======================================================================
   PASS 4.18 — Election Night layout, neutral chrome, party projection colors,
   controls, checkmarks, sort wrapping, analytics CTA, light/dark readability
   ====================================================================== */

/* Neutral site chrome: do not let the product UI read as D-blue. Party colors
   are reserved for actual candidates/projections/results. */
body.cmep-page-election-night,
body.cmep-page-election-night-detail{
  --en-neutral-accent:#94a3b8;
  --en-neutral-accent-strong:#cbd5e1;
  --en-surface-dark:rgba(7,12,25,.92);
  --en-surface-dark-2:rgba(10,16,31,.88);
  --en-border-dark:rgba(148,163,184,.24);
  --en-text-dark:#f8fafc;
  --en-muted-dark:#b5c0d0;
  color-scheme:dark light;
}
body.cmep-page-election-night-detail :where(.state-hero,.page-hero){
  background:
    radial-gradient(circle at 18% 10%, rgba(148,163,184,.16), transparent 38%),
    linear-gradient(135deg, rgba(15,23,42,.96), rgba(2,6,23,.98) 62%, rgba(15,23,42,.94)) !important;
  border-color:rgba(148,163,184,.26) !important;
  box-shadow:0 18px 52px rgba(0,0,0,.24), inset 0 1px 0 rgba(255,255,255,.055) !important;
}
body.cmep-page-election-night-detail :where(.state-hero,.page-hero)::before{
  background:linear-gradient(90deg, transparent, rgba(203,213,225,.12), transparent) !important;
}
body.cmep-page-election-night-detail :where(.card,#resultsCard,#resultsCardSenate,#liveMapCard,#liveMapCardSenate,#countyListCard,#countyListCardSenate,.state-analytics-card){
  background:linear-gradient(180deg, rgba(8,13,28,.95), rgba(3,7,18,.96)) !important;
  border-color:rgba(148,163,184,.24) !important;
}

/* Header controls: Back and Voting belong above the primary/office selectors,
   pinned to the left/right edges of the hero control well. */
body.cmep-page-election-night-detail #topActions{
  width:min(100%, 680px) !important;
  margin:.78rem auto 0 !important;
  display:grid !important;
  grid-template-columns:minmax(0,1fr) auto minmax(0,1fr) !important;
  grid-template-areas:
    "back spacer vote"
    "party party party" !important;
  align-items:center !important;
  gap:.62rem .75rem !important;
}
body.cmep-page-election-night-detail #topActions #backBtn{
  grid-area:back !important;
  justify-self:start !important;
}
body.cmep-page-election-night-detail #topActions #votingBtn{
  grid-area:vote !important;
  justify-self:end !important;
}
body.cmep-page-election-night-detail #topActions .page-actions-center{
  grid-area:party !important;
  justify-self:center !important;
  width:auto !important;
  max-width:100% !important;
}
body.cmep-page-election-night-detail #officeActions{
  width:min(100%, 680px) !important;
  margin:.58rem auto 0 !important;
  display:flex !important;
  justify-content:center !important;
}
body.cmep-page-election-night-detail #officeActions .page-actions-center{
  width:auto !important;
  max-width:100% !important;
}
body.cmep-page-election-night-detail :where(.segmented,#primaryPartyToggle,#officeToggle){
  max-width:100% !important;
}

/* Projection strap: party colors match the site's Solid D/R palette exactly.
   Neutral chrome remains neutral. */
body.cmep-page-election-night-detail #globalWinnerBanner{
  width:100% !important;
  max-width:none !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner,
body.cmep-page-election-night-detail .winner-banner{
  --projection-accent:var(--toss-up, #929292);
  --projection-accent-rgb:146,146,146;
  border-radius:20px !important;
  border:1px solid rgba(var(--projection-accent-rgb), .42) !important;
  background:
    linear-gradient(90deg, rgba(var(--projection-accent-rgb), .88) 0%, rgba(var(--projection-accent-rgb), .46) 38%, rgba(3,7,18,.88) 74%, rgba(3,7,18,.96) 100%),
    repeating-linear-gradient(0deg, rgba(255,255,255,.05) 0 1px, transparent 1px 6px) !important;
  box-shadow:0 16px 44px rgba(0,0,0,.26), inset 0 1px 0 rgba(255,255,255,.08) !important;
}
body.cmep-page-election-night-detail .winner-banner.bannerD{
  --projection-accent:var(--solid-d, #0076BA) !important;
  --projection-accent-rgb:0,118,186 !important;
}
body.cmep-page-election-night-detail .winner-banner.bannerR{
  --projection-accent:var(--solid-r, #EE220C) !important;
  --projection-accent-rgb:238,34,12 !important;
}
body.cmep-page-election-night-detail .winner-banner.bannerN{
  --projection-accent:var(--toss-up, #929292) !important;
  --projection-accent-rgb:146,146,146 !important;
}
body.cmep-page-election-night-detail .winner-banner .winner-banner-icon,
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-icon{
  background:rgba(255,255,255,.14) !important;
  border:1px solid rgba(255,255,255,.22) !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.16) !important;
}

/* Checkmark cleanup: no oval/pill outline. Use a compact, solid status dot that
   does not shove party text into a separate awkward line. */
body.cmep-page-election-night-detail .primary-cand .n{
  display:flex !important;
  align-items:baseline !important;
  gap:.38rem !important;
  flex-wrap:wrap !important;
}
body.cmep-page-election-night-detail .winner-pill{
  flex:0 0 auto !important;
  width:1.08rem !important;
  min-width:1.08rem !important;
  height:1.08rem !important;
  min-height:1.08rem !important;
  padding:0 !important;
  margin-left:.08rem !important;
  border:0 !important;
  border-radius:999px !important;
  background:var(--projection-accent, var(--toss-up, #929292)) !important;
  box-shadow:none !important;
  outline:0 !important;
  vertical-align:.02em !important;
}
body.cmep-page-election-night-detail .winner-pill::before,
body.cmep-page-election-night-detail .winner-pill::after{ content:none !important; }
body.cmep-page-election-night-detail .winner-icon{
  display:grid !important;
  place-items:center !important;
  width:100% !important;
  height:100% !important;
  background:transparent !important;
  border:0 !important;
  box-shadow:none !important;
  color:#fff !important;
  font-size:.72rem !important;
  line-height:1 !important;
  transform:none !important;
}
body.cmep-page-election-night-detail .primary-row.winD,
body.cmep-page-election-night-detail .primary-row.advD{ --projection-accent:var(--solid-d, #0076BA); }
body.cmep-page-election-night-detail .primary-row.winR,
body.cmep-page-election-night-detail .primary-row.advR{ --projection-accent:var(--solid-r, #EE220C); }
body.cmep-page-election-night-detail .primary-row.winO,
body.cmep-page-election-night-detail .primary-row.advO{ --projection-accent:var(--toss-up, #929292); }
body.cmep-page-election-night-detail .winner-text{ display:none !important; }

/* Live card header: clear information architecture. */
body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate) > .card-header{
  display:grid !important;
  grid-template-columns:minmax(0,1fr) auto !important;
  grid-template-areas:
    "title refresh"
    "status refresh"
    "help help" !important;
  align-items:center !important;
  gap:.28rem .85rem !important;
  padding-bottom:.72rem !important;
}
body.cmep-page-election-night-detail :where(#resultsTitle,#resultsTitleSenate){ grid-area:title !important; }
body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate) .live-row{ grid-area:status !important; }
body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate) .card-help{ grid-area:help !important; }
body.cmep-page-election-night-detail :where(#resultsRefreshBtn,#resultsRefreshBtnSenate){ grid-area:refresh !important; }

/* County sorting: never becomes a horizontal scrollbar. It wraps into a clean
   segmented grid, with the search box below/alongside depending on width. */
body.cmep-page-election-night-detail .county-toolbar{
  display:grid !important;
  grid-template-columns:minmax(0,1fr) minmax(180px, 260px) !important;
  gap:.75rem !important;
  align-items:start !important;
  overflow:visible !important;
}
body.cmep-page-election-night-detail .county-sort-group,
body.cmep-page-election-night-detail .map-tab-row .county-sort-group{
  display:flex !important;
  flex-wrap:wrap !important;
  align-items:center !important;
  gap:.38rem !important;
  overflow:visible !important;
  max-width:100% !important;
  white-space:normal !important;
  padding:0 !important;
}
body.cmep-page-election-night-detail .county-sort-btn{
  flex:0 1 auto !important;
  min-width:max-content !important;
  max-width:100% !important;
  white-space:normal !important;
  line-height:1.05 !important;
  text-align:center !important;
}
body.cmep-page-election-night-detail .county-search-wrap{ min-width:0 !important; }
body.cmep-page-election-night-detail .county-search-input{ width:100% !important; }

/* Make Jump to Analytics read as an actual primary/secondary CTA. */
body.cmep-page-election-night-detail .jump-link-wrap{
  display:flex !important;
  justify-content:center !important;
  margin-top:1.15rem !important;
}
body.cmep-page-election-night-detail .jump-link-btn{
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  gap:.45rem !important;
  min-height:46px !important;
  padding:.78rem 1.15rem !important;
  border-radius:999px !important;
  border:1px solid rgba(203,213,225,.28) !important;
  background:linear-gradient(180deg, rgba(30,41,59,.94), rgba(15,23,42,.96)) !important;
  color:#f8fafc !important;
  box-shadow:0 12px 30px rgba(0,0,0,.20), inset 0 1px 0 rgba(255,255,255,.08) !important;
  text-decoration:none !important;
  font-weight:950 !important;
  letter-spacing:-.015em !important;
}
body.cmep-page-election-night-detail .jump-link-btn:hover,
body.cmep-page-election-night-detail .jump-link-btn:focus-visible{
  transform:translateY(-1px) !important;
  border-color:rgba(248,250,252,.42) !important;
  background:linear-gradient(180deg, rgba(51,65,85,.98), rgba(15,23,42,.98)) !important;
}

/* Tooltips: align with the same neutral-card + party-accent vocabulary. */
body.cmep-page-election-night-detail .county-tooltip,
body.cmep-page-election-night-detail .maplibregl-popup .county-tooltip,
body.cmep-page-election-night-detail .map-tooltip,
body.cmep-page-election-night-detail .chart-tooltip{
  background:linear-gradient(180deg, rgba(8,13,28,.985), rgba(3,7,18,.97)) !important;
  border:1px solid rgba(148,163,184,.28) !important;
}
body.cmep-page-election-night-detail .county-tooltip .ct-top{
  background:
    linear-gradient(90deg, rgba(148,163,184,.13), rgba(15,23,42,.22)),
    repeating-linear-gradient(0deg, rgba(255,255,255,.035) 0 1px, transparent 1px 6px) !important;
}
body.cmep-page-election-night-detail .county-tooltip .ct-row.winD,
body.cmep-page-election-night-detail .county-tooltip .ct-row.advD{
  border-color:color-mix(in srgb, var(--solid-d, #0076BA) 42%, rgba(148,163,184,.18)) !important;
  background:linear-gradient(180deg, color-mix(in srgb, var(--solid-d, #0076BA) 20%, transparent), rgba(15,23,42,.54)) !important;
}
body.cmep-page-election-night-detail .county-tooltip .ct-row.winR,
body.cmep-page-election-night-detail .county-tooltip .ct-row.advR{
  border-color:color-mix(in srgb, var(--solid-r, #EE220C) 42%, rgba(148,163,184,.18)) !important;
  background:linear-gradient(180deg, color-mix(in srgb, var(--solid-r, #EE220C) 20%, transparent), rgba(15,23,42,.54)) !important;
}

/* Light mode readability. Election-night can retain a newsroom identity while
   still becoming legible on users' light-mode systems. */
@media (prefers-color-scheme: light){
  body.cmep-page-election-night,
  body.cmep-page-election-night-detail{
    --bg-page:#f6f8fb;
    --bg-card:#ffffff;
    --text-main:#111827;
    --text-muted:#526071;
    background:#f6f8fb !important;
    color:#111827 !important;
  }
  body.cmep-page-election-night-detail :where(.state-hero,.page-hero){
    color:#111827 !important;
    background:
      radial-gradient(circle at 18% 10%, rgba(148,163,184,.18), transparent 36%),
      linear-gradient(135deg, rgba(255,255,255,.98), rgba(241,245,249,.96)) !important;
    border-color:rgba(100,116,139,.26) !important;
    box-shadow:0 18px 44px rgba(15,23,42,.10), inset 0 1px 0 rgba(255,255,255,.80) !important;
  }
  body.cmep-page-election-night-detail :where(.card,#resultsCard,#resultsCardSenate,#liveMapCard,#liveMapCardSenate,#countyListCard,#countyListCardSenate,.state-analytics-card,.primary-race){
    color:#111827 !important;
    background:linear-gradient(180deg, rgba(255,255,255,.98), rgba(248,250,252,.96)) !important;
    border-color:rgba(100,116,139,.24) !important;
    box-shadow:0 14px 38px rgba(15,23,42,.08), inset 0 1px 0 rgba(255,255,255,.80) !important;
  }
  body.cmep-page-election-night-detail :where(.card-title,.primary-race .name,.primary-race .primary-cand .n,.primary-row .pct){ color:#111827 !important; }
  body.cmep-page-election-night-detail :where(.card-help,.primary-meta,.last-updated,.primary-race .kicker,.primary-cand .p,.primary-right .votes,.attrib,.sources){ color:#526071 !important; }
  body.cmep-page-election-night-detail .primary-row{
    background:rgba(248,250,252,.92) !important;
    border-color:rgba(100,116,139,.20) !important;
  }
  body.cmep-page-election-night-detail .primary-row.winD,
  body.cmep-page-election-night-detail .primary-row.advD{
    background:linear-gradient(180deg, color-mix(in srgb, var(--solid-d, #0076BA) 13%, white), rgba(255,255,255,.94)) !important;
    border-color:color-mix(in srgb, var(--solid-d, #0076BA) 38%, rgba(100,116,139,.20)) !important;
  }
  body.cmep-page-election-night-detail .primary-row.winR,
  body.cmep-page-election-night-detail .primary-row.advR{
    background:linear-gradient(180deg, color-mix(in srgb, var(--solid-r, #EE220C) 12%, white), rgba(255,255,255,.94)) !important;
    border-color:color-mix(in srgb, var(--solid-r, #EE220C) 38%, rgba(100,116,139,.20)) !important;
  }
  body.cmep-page-election-night-detail :where(.segmented,.back-btn,.primary-refresh-btn,.county-sort-btn,.county-search-input){
    color:#111827 !important;
    background:rgba(255,255,255,.86) !important;
    border-color:rgba(100,116,139,.28) !important;
  }
  body.cmep-page-election-night-detail :where(.seg-btn.active,.county-sort-btn[aria-pressed="true"]){
    color:#111827 !important;
    background:rgba(226,232,240,.96) !important;
  }
  body.cmep-page-election-night-detail .jump-link-btn{
    color:#111827 !important;
    background:linear-gradient(180deg, #fff, #f1f5f9) !important;
    border-color:rgba(100,116,139,.30) !important;
    box-shadow:0 12px 26px rgba(15,23,42,.10), inset 0 1px 0 rgba(255,255,255,.88) !important;
  }
  body.cmep-page-election-night-detail .county-tooltip,
  body.cmep-page-election-night-detail .map-tooltip,
  body.cmep-page-election-night-detail .chart-tooltip{
    color:#111827 !important;
    background:linear-gradient(180deg, rgba(255,255,255,.98), rgba(248,250,252,.98)) !important;
    border-color:rgba(100,116,139,.28) !important;
    box-shadow:0 22px 46px rgba(15,23,42,.18), inset 0 1px 0 rgba(255,255,255,.85) !important;
  }
  body.cmep-page-election-night-detail .county-tooltip :where(.ct-head,.ct-name,.ct-pct){ color:#111827 !important; }
  body.cmep-page-election-night-detail .county-tooltip :where(.ct-chip,.ct-note,.ct-party,.ct-votes){ color:#526071 !important; }
}

/* Explicit theme hooks should win over OS preference when present. */
html[data-theme="dark"] body.cmep-page-election-night-detail,
html.dark body.cmep-page-election-night-detail,
body.dark.cmep-page-election-night-detail,
body.dark-mode.cmep-page-election-night-detail{
  background:#030712 !important;
  color:#f8fafc !important;
}
html[data-theme="light"] body.cmep-page-election-night-detail,
html.light body.cmep-page-election-night-detail,
body.light.cmep-page-election-night-detail,
body.light-mode.cmep-page-election-night-detail{
  background:#f6f8fb !important;
  color:#111827 !important;
}

@media (max-width:760px){
  body.cmep-page-election-night-detail #topActions{
    width:100% !important;
    grid-template-columns:1fr 1fr !important;
    grid-template-areas:
      "back vote"
      "party party" !important;
    column-gap:.55rem !important;
    row-gap:.55rem !important;
  }
  body.cmep-page-election-night-detail #topActions :where(#backBtn,#votingBtn){
    width:auto !important;
    max-width:100% !important;
    min-width:0 !important;
    justify-content:center !important;
    white-space:normal !important;
  }
  body.cmep-page-election-night-detail #topActions #backBtn{ justify-self:start !important; }
  body.cmep-page-election-night-detail #topActions #votingBtn{ justify-self:end !important; }
  body.cmep-page-election-night-detail #topActions .segmented,
  body.cmep-page-election-night-detail #officeActions .segmented{
    width:100% !important;
    justify-content:center !important;
  }
  body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate) > .card-header{
    grid-template-columns:1fr !important;
    grid-template-areas:
      "title"
      "status"
      "help"
      "refresh" !important;
    justify-items:center !important;
    text-align:center !important;
  }
  body.cmep-page-election-night-detail :where(#resultsCard,#resultsCardSenate) .live-row{
    display:flex !important;
    justify-content:center !important;
    flex-wrap:wrap !important;
    gap:.42rem !important;
  }
  body.cmep-page-election-night-detail .county-toolbar{
    grid-template-columns:1fr !important;
  }
  body.cmep-page-election-night-detail .county-sort-group,
  body.cmep-page-election-night-detail .map-tab-row .county-sort-group{
    display:grid !important;
    grid-template-columns:repeat(2, minmax(0,1fr)) !important;
    gap:.42rem !important;
    width:100% !important;
  }
  body.cmep-page-election-night-detail .county-sort-btn{
    width:100% !important;
    min-width:0 !important;
    padding:.58rem .48rem !important;
  }
  body.cmep-page-election-night-detail .winner-pill{
    width:1rem !important;
    min-width:1rem !important;
    height:1rem !important;
    min-height:1rem !important;
  }
}

@media (max-width:420px){
  body.cmep-page-election-night-detail #topActions{
    grid-template-columns:1fr 1fr !important;
  }
  body.cmep-page-election-night-detail .county-sort-group,
  body.cmep-page-election-night-detail .map-tab-row .county-sort-group{
    grid-template-columns:1fr !important;
  }
}

/*
  PASS 4.19 — day/night readability normalization
  Purpose: make the shared cohesion layer behave predictably in light mode,
  dark mode, and explicit theme toggles without making neutral UI chrome look partisan.
*/
:root{
  color-scheme: light dark;
  --cmep-neutral-accent:#64748b;
  --cmep-neutral-accent-strong:#475569;
  --cmep-day-bg:#f6f8fb;
  --cmep-day-bg-soft:#eef3f8;
  --cmep-day-card:rgba(255,255,255,.94);
  --cmep-day-card-solid:#ffffff;
  --cmep-day-card-subtle:rgba(241,245,249,.92);
  --cmep-day-border:rgba(100,116,139,.22);
  --cmep-day-border-strong:rgba(100,116,139,.34);
  --cmep-day-text:#111827;
  --cmep-day-text-strong:#020617;
  --cmep-day-text-muted:#526071;
  --cmep-night-bg:#030712;
  --cmep-night-bg-soft:#07111f;
  --cmep-night-card:rgba(8,13,27,.84);
  --cmep-night-card-solid:#080d1b;
  --cmep-night-card-subtle:rgba(15,23,42,.72);
  --cmep-night-border:rgba(148,163,184,.22);
  --cmep-night-border-strong:rgba(203,213,225,.34);
  --cmep-night-text:#dbe4f0;
  --cmep-night-text-strong:#f8fafc;
  --cmep-night-text-muted:#a8b3c4;
}

/* Default/light palette. */
html:not([data-theme="dark"]):not(.dark) body:not(.dark):not(.dark-mode),
html[data-theme="light"] body,
html.light body,
body.light,
body.light-mode{
  --bg-page:var(--cmep-day-bg);
  --bg-card:var(--cmep-day-card);
  --bg-card-subtle:var(--cmep-day-card-subtle);
  --border-subtle:var(--cmep-day-border);
  --border-strong:var(--cmep-day-border-strong);
  --text-main:var(--cmep-day-text);
  --text-strong:var(--cmep-day-text-strong);
  --text-muted:var(--cmep-day-text-muted);
  background:var(--bg-page) !important;
  color:var(--text-main) !important;
}

/* OS dark palette. */
@media (prefers-color-scheme:dark){
  html:not([data-theme="light"]):not(.light) body:not(.light):not(.light-mode){
    --bg-page:var(--cmep-night-bg);
    --bg-card:var(--cmep-night-card);
    --bg-card-subtle:var(--cmep-night-card-subtle);
    --border-subtle:var(--cmep-night-border);
    --border-strong:var(--cmep-night-border-strong);
    --text-main:var(--cmep-night-text);
    --text-strong:var(--cmep-night-text-strong);
    --text-muted:var(--cmep-night-text-muted);
    background:var(--bg-page) !important;
    color:var(--text-main) !important;
  }
}

/* Explicit dark palette wins over OS light. */
html[data-theme="dark"] body,
html.dark body,
body.dark,
body.dark-mode{
  --bg-page:var(--cmep-night-bg);
  --bg-card:var(--cmep-night-card);
  --bg-card-subtle:var(--cmep-night-card-subtle);
  --border-subtle:var(--cmep-night-border);
  --border-strong:var(--cmep-night-border-strong);
  --text-main:var(--cmep-night-text);
  --text-strong:var(--cmep-night-text-strong);
  --text-muted:var(--cmep-night-text-muted);
  background:var(--bg-page) !important;
  color:var(--text-main) !important;
}

/* Shared readable surfaces in both modes. */
body.cmep-enhanced :where(.cmep-page-hero,.page-head,.title-card,.wrap > .head,.head.hero,.us-hero,.cm-card,.card,.panel,.race-card,.state-card,.district-card,.result-card,.contest-card,.method-card,.featured-card,.forecast-card){
  background:var(--bg-card) !important;
  color:var(--text-main) !important;
  border-color:var(--border-subtle) !important;
}
body.cmep-enhanced :where(.cmep-page-hero h1,.page-head h1,.title-card h1,.wrap > .head h1,.head.hero h1,.us-hero h1,.cm-card h2,.card h2,.panel h2,.card-title,.section-title,.race-title,.state-name,.district-name){
  color:var(--text-strong) !important;
}
body.cmep-enhanced :where(.lede,.sub,.subtitle,.card-subtitle,.meta,.eyebrow,.small-note,.updated,.source-note,.help-text,.caption,small){
  color:var(--text-muted) !important;
}
body.cmep-enhanced :where(.segmented,.seg-control,.tabs,.tab-row,.filter-row,.cmep-share-row,.county-sort-group){
  color:var(--text-main) !important;
}
body.cmep-enhanced :where(.seg-btn,.tab-btn,.changelog-seg,.county-sort-btn,.back-btn,.primary-refresh-btn,.jump-link-btn,.btn,.button,button:not(.maplibregl-ctrl button):not(.mapboxgl-ctrl button)){
  color:var(--text-strong) !important;
  background:color-mix(in srgb, var(--bg-card-solid, var(--bg-card)) 88%, var(--text-strong) 4%) !important;
  border-color:var(--border-subtle) !important;
}
body.cmep-enhanced :where(.seg-btn.active,.tab-btn.active,.changelog-seg.active,.county-sort-btn[aria-pressed="true"],.active > .seg-btn){
  background:color-mix(in srgb, var(--bg-card-solid, var(--bg-card)) 76%, var(--text-strong) 10%) !important;
  color:var(--text-strong) !important;
  border-color:var(--border-strong) !important;
}

/* Election Night: newsroom mode, but truly day/night capable and neutral by default. */
body.cmep-page-election-night{
  --cmep-en-surface:var(--bg-card);
  --cmep-en-surface-solid:var(--bg-card);
  --cmep-en-surface-soft:var(--bg-card-subtle);
  --cmep-en-border:var(--border-subtle);
  --cmep-en-border-strong:var(--border-strong);
  --cmep-en-text:var(--text-main);
  --cmep-en-text-strong:var(--text-strong);
  --cmep-en-text-muted:var(--text-muted);
}
body.cmep-page-election-night :where(.state-hero,.election-hero,.election-night-hero,.en-hero,.projection-card,.projection-strip,.projection-strap,.projection-banner,.results-card,.results-panel,.map-card,.map-panel,.county-card,.county-results-card,.analytics-card,.source-card,.state-card,.race-card,.contest-card){
  background:var(--cmep-en-surface) !important;
  color:var(--cmep-en-text) !important;
  border-color:var(--cmep-en-border) !important;
}
body.cmep-page-election-night :where(.state-hero h1,.election-hero h1,.election-night-hero h1,.en-hero h1,.projection-name,.projected-name,.results-card h2,.map-card h2,.county-card h3,.primary-title,.primary-row .n,.candidate-name,.county-name){
  color:var(--cmep-en-text-strong) !important;
}
body.cmep-page-election-night :where(.state-hero .sub,.state-hero .eyebrow,.projection-label,.projected-label,.results-card .updated,.results-card .meta,.map-card .meta,.county-card .meta,.primary-row .p,.candidate-party,.county-meta,.votes,.source-card,.source-card a){
  color:var(--cmep-en-text-muted) !important;
}

/* Light-mode Election Night should not inherit a black newsroom card stack. */
html[data-theme="light"] body.cmep-page-election-night,
html.light body.cmep-page-election-night,
body.light.cmep-page-election-night,
body.light-mode.cmep-page-election-night{
  --cmep-en-surface:rgba(255,255,255,.94);
  --cmep-en-surface-solid:#ffffff;
  --cmep-en-surface-soft:rgba(241,245,249,.94);
  --cmep-en-border:rgba(100,116,139,.24);
  --cmep-en-border-strong:rgba(100,116,139,.38);
  --cmep-en-text:#111827;
  --cmep-en-text-strong:#020617;
  --cmep-en-text-muted:#526071;
  background:linear-gradient(180deg,#f7fafc,#eef3f8 54%,#f8fafc) !important;
  color:var(--cmep-en-text) !important;
}
@media (prefers-color-scheme:light){
  body.cmep-page-election-night:not(.dark):not(.dark-mode){
    --cmep-en-surface:rgba(255,255,255,.94);
    --cmep-en-surface-solid:#ffffff;
    --cmep-en-surface-soft:rgba(241,245,249,.94);
    --cmep-en-border:rgba(100,116,139,.24);
    --cmep-en-border-strong:rgba(100,116,139,.38);
    --cmep-en-text:#111827;
    --cmep-en-text-strong:#020617;
    --cmep-en-text-muted:#526071;
    background:linear-gradient(180deg,#f7fafc,#eef3f8 54%,#f8fafc) !important;
    color:var(--cmep-en-text) !important;
  }
}

/* Dark Election Night: preserve the professional live-news look with enough contrast. */
html[data-theme="dark"] body.cmep-page-election-night,
html.dark body.cmep-page-election-night,
body.dark.cmep-page-election-night,
body.dark-mode.cmep-page-election-night{
  --cmep-en-surface:rgba(8,13,27,.88);
  --cmep-en-surface-solid:#080d1b;
  --cmep-en-surface-soft:rgba(15,23,42,.78);
  --cmep-en-border:rgba(148,163,184,.22);
  --cmep-en-border-strong:rgba(203,213,225,.34);
  --cmep-en-text:#dbe4f0;
  --cmep-en-text-strong:#f8fafc;
  --cmep-en-text-muted:#a8b3c4;
  background:radial-gradient(circle at 14% 16%, rgba(51,65,85,.22), transparent 32%), #030712 !important;
  color:var(--cmep-en-text) !important;
}
@media (prefers-color-scheme:dark){
  html:not([data-theme="light"]):not(.light) body.cmep-page-election-night:not(.light):not(.light-mode){
    --cmep-en-surface:rgba(8,13,27,.88);
    --cmep-en-surface-solid:#080d1b;
    --cmep-en-surface-soft:rgba(15,23,42,.78);
    --cmep-en-border:rgba(148,163,184,.22);
    --cmep-en-border-strong:rgba(203,213,225,.34);
    --cmep-en-text:#dbe4f0;
    --cmep-en-text-strong:#f8fafc;
    --cmep-en-text-muted:#a8b3c4;
    background:radial-gradient(circle at 14% 16%, rgba(51,65,85,.22), transparent 32%), #030712 !important;
    color:var(--cmep-en-text) !important;
  }
}

/* Election Night controls: readable neutral controls in both modes. */
body.cmep-page-election-night :where(.segmented,.seg-control,.office-tabs,#topActions .segmented,#officeActions .segmented){
  background:var(--cmep-en-surface-soft) !important;
  border-color:var(--cmep-en-border) !important;
  color:var(--cmep-en-text) !important;
}
body.cmep-page-election-night :where(.seg-btn,.tab-btn,.back-btn,.primary-refresh-btn,.county-sort-btn,.jump-link-btn,#votingBtn,#backBtn){
  color:var(--cmep-en-text-strong) !important;
  background:var(--cmep-en-surface-soft) !important;
  border-color:var(--cmep-en-border) !important;
  box-shadow:none !important;
}
body.cmep-page-election-night :where(.seg-btn.active,.tab-btn.active,.county-sort-btn[aria-pressed="true"]){
  background:color-mix(in srgb, var(--cmep-en-surface-solid) 70%, var(--cmep-neutral-accent) 18%) !important;
  color:var(--cmep-en-text-strong) !important;
  border-color:var(--cmep-en-border-strong) !important;
}
body.cmep-page-election-night .jump-link-btn{
  border-width:1px !important;
  text-decoration:none !important;
}
body.cmep-page-election-night .jump-link-btn:hover{
  transform:translateY(-1px);
  border-color:var(--cmep-en-border-strong) !important;
}

/* Tooltips/popups: match the card system in both day and night modes. */
body.cmep-page-election-night :where(.county-tooltip,.map-tooltip,.chart-tooltip,.cmep-site-tooltip,.maplibregl-popup-content,.mapboxgl-popup-content){
  background:var(--cmep-en-surface-solid) !important;
  color:var(--cmep-en-text) !important;
  border:1px solid var(--cmep-en-border-strong) !important;
  border-radius:18px !important;
  box-shadow:0 22px 52px rgba(2,6,23,.22) !important;
}
body.cmep-page-election-night :where(.maplibregl-popup-tip,.mapboxgl-popup-tip){
  border-top-color:var(--cmep-en-surface-solid) !important;
  border-bottom-color:var(--cmep-en-surface-solid) !important;
}
body.cmep-page-election-night :where(.county-tooltip .ct-head,.county-tooltip .ct-name,.county-tooltip .ct-pct,.cmep-site-tooltip .ct-head,.cmep-site-tooltip .ct-name,.cmep-site-tooltip .ct-pct){
  color:var(--cmep-en-text-strong) !important;
}
body.cmep-page-election-night :where(.county-tooltip .ct-party,.county-tooltip .ct-votes,.county-tooltip .ct-note,.cmep-site-tooltip .ct-party,.cmep-site-tooltip .ct-votes,.cmep-site-tooltip .ct-note,.maplibregl-popup-content small){
  color:var(--cmep-en-text-muted) !important;
}

/* Result rows and cards: avoid low-contrast blue-on-blue or pale-on-white states. */
body.cmep-page-election-night :where(.primary-row,.candidate-row,.county-row,.result-row){
  background:var(--cmep-en-surface-soft) !important;
  color:var(--cmep-en-text) !important;
  border-color:var(--cmep-en-border) !important;
}
body.cmep-page-election-night :where(.primary-row.is-winner,.candidate-row.is-winner,.result-row.is-winner){
  border-color:color-mix(in srgb, currentColor 8%, var(--cmep-en-border-strong)) !important;
}
body.cmep-page-election-night :where(.winner-pill,.winner-check,.projection-check,.called-check){
  color:var(--cmep-en-text-strong) !important;
}

/* Map controls need contrast without visually becoming partisan. */
body.cmep-page-election-night :where(.maplibregl-ctrl-group,.mapboxgl-ctrl-group){
  background:var(--cmep-en-surface-solid) !important;
  border-color:var(--cmep-en-border) !important;
}
body.cmep-page-election-night :where(.maplibregl-ctrl button,.mapboxgl-ctrl button){
  background:var(--cmep-en-surface-solid) !important;
}
html[data-theme="dark"] body.cmep-page-election-night :where(.maplibregl-ctrl button,.mapboxgl-ctrl button),
html.dark body.cmep-page-election-night :where(.maplibregl-ctrl button,.mapboxgl-ctrl button),
body.dark.cmep-page-election-night :where(.maplibregl-ctrl button,.mapboxgl-ctrl button),
body.dark-mode.cmep-page-election-night :where(.maplibregl-ctrl button,.mapboxgl-ctrl button){
  filter:invert(1) hue-rotate(180deg) !important;
}
@media (prefers-color-scheme:dark){
  html:not([data-theme="light"]):not(.light) body.cmep-page-election-night:not(.light):not(.light-mode) :where(.maplibregl-ctrl button,.mapboxgl-ctrl button){
    filter:invert(1) hue-rotate(180deg) !important;
  }
}

/* Party colors should stay party colors; only neutral chrome changes by theme. */
body.cmep-page-election-night :where(.projection-strap.is-dem,.projection-strap.party-dem,.projection-banner.is-dem,.projection-banner.party-dem,.projected-card.is-dem,.primary-row.winD,.primary-row.advD){
  --cmep-party-surface:var(--solid-d,#0076BA);
}
body.cmep-page-election-night :where(.projection-strap.is-rep,.projection-strap.party-rep,.projection-banner.is-rep,.projection-banner.party-rep,.projected-card.is-rep,.primary-row.winR,.primary-row.advR){
  --cmep-party-surface:var(--solid-r,#EE220C);
}
body.cmep-page-election-night :where(.projection-strap.is-dem,.projection-strap.party-dem,.projection-banner.is-dem,.projection-banner.party-dem){
  background:linear-gradient(90deg, color-mix(in srgb, var(--solid-d,#0076BA) 88%, #000 12%), color-mix(in srgb, var(--solid-d,#0076BA) 52%, var(--cmep-en-surface-solid))) !important;
  color:#fff !important;
  border-color:color-mix(in srgb, var(--solid-d,#0076BA) 52%, #fff 10%) !important;
}
body.cmep-page-election-night :where(.projection-strap.is-rep,.projection-strap.party-rep,.projection-banner.is-rep,.projection-banner.party-rep){
  background:linear-gradient(90deg, color-mix(in srgb, var(--solid-r,#EE220C) 88%, #000 12%), color-mix(in srgb, var(--solid-r,#EE220C) 52%, var(--cmep-en-surface-solid))) !important;
  color:#fff !important;
  border-color:color-mix(in srgb, var(--solid-r,#EE220C) 52%, #fff 10%) !important;
}
body.cmep-page-election-night :where(.projection-strap.is-neutral,.projection-strap.party-neutral,.projection-banner.is-neutral,.projection-banner.party-neutral){
  background:linear-gradient(90deg, color-mix(in srgb, var(--cmep-neutral-accent) 72%, #000 12%), color-mix(in srgb, var(--cmep-neutral-accent) 36%, var(--cmep-en-surface-solid))) !important;
  color:#fff !important;
  border-color:color-mix(in srgb, var(--cmep-neutral-accent) 44%, #fff 10%) !important;
}
body.cmep-page-election-night :where(.projection-strap,.projection-banner) :where(.projection-label,.projection-name,.projected-label,.projected-name,.projection-subtitle){
  color:#fff !important;
}

/* Light-mode tables and list dividers. */
html[data-theme="light"] body.cmep-enhanced :where(table,thead,tbody,tr,td,th),
html.light body.cmep-enhanced :where(table,thead,tbody,tr,td,th),
body.light.cmep-enhanced :where(table,thead,tbody,tr,td,th),
body.light-mode.cmep-enhanced :where(table,thead,tbody,tr,td,th){
  color:#111827 !important;
  border-color:rgba(100,116,139,.22) !important;
}
html[data-theme="dark"] body.cmep-enhanced :where(table,thead,tbody,tr,td,th),
html.dark body.cmep-enhanced :where(table,thead,tbody,tr,td,th),
body.dark.cmep-enhanced :where(table,thead,tbody,tr,td,th),
body.dark-mode.cmep-enhanced :where(table,thead,tbody,tr,td,th){
  color:#dbe4f0 !important;
  border-color:rgba(148,163,184,.20) !important;
}

@media (prefers-color-scheme:dark){
  html:not([data-theme="light"]):not(.light) body.cmep-enhanced:not(.light):not(.light-mode) :where(table,thead,tbody,tr,td,th){
    color:#dbe4f0 !important;
    border-color:rgba(148,163,184,.20) !important;
  }
}

/* -------------------------------------------------------------------------
   PASS 4.20 — Primary hub + Election Night state/district consistency
   Goals: neutral product chrome, party-only result colors, full day/night
   readability, and matching projection language/visuals across state and
   district Election Night pages.
   ------------------------------------------------------------------------- */
body.cmep-page-election-night{
  --cmep-news-accent:#475569;
  --cmep-news-accent-soft:rgba(71,85,105,.14);
  --cmep-news-accent-border:rgba(71,85,105,.30);
  --cmep-result-surface:color-mix(in srgb, var(--cmep-en-surface-solid, #fff) 90%, var(--cmep-en-text-strong, #020617) 4%);
  --cmep-result-surface-hover:color-mix(in srgb, var(--cmep-en-surface-solid, #fff) 84%, var(--cmep-en-text-strong, #020617) 7%);
}

/* Neutralize non-party blue accents on the primary hub and detail pages. */
body.cmep-page-election-night :where(.btn.primary,.primary-refresh-btn,.jump-link-btn,.back-btn,#backBtn,#votingBtn,.seg-btn,.tab-btn,.county-sort-btn,.state-filter-btn,.office-btn){
  background:var(--cmep-en-surface-soft) !important;
  border-color:var(--cmep-en-border) !important;
  color:var(--cmep-en-text-strong) !important;
  box-shadow:none !important;
}
body.cmep-page-election-night :where(.btn.primary:hover,.primary-refresh-btn:hover,.jump-link-btn:hover,.back-btn:hover,#backBtn:hover,#votingBtn:hover,.seg-btn:hover,.tab-btn:hover,.county-sort-btn:hover,.state-filter-btn:hover,.office-btn:hover){
  background:color-mix(in srgb, var(--cmep-en-surface-solid) 76%, var(--cmep-news-accent) 12%) !important;
  border-color:var(--cmep-en-border-strong) !important;
}
body.cmep-page-election-night :where(.seg-btn.active,.tab-btn.active,.county-sort-btn[aria-pressed="true"],.state-filter-btn.active,.office-btn.active,.is-active){
  background:color-mix(in srgb, var(--cmep-en-surface-solid) 72%, var(--cmep-news-accent) 14%) !important;
  border-color:var(--cmep-en-border-strong) !important;
  color:var(--cmep-en-text-strong) !important;
}

/* /election-night/primary/ hub: a cleaner news index, not a blue product page. */
body.cmep-page-election-night-primary-hub .wrap{
  width:min(100% - 2rem, 1480px) !important;
  max-width:1480px !important;
}
body.cmep-page-election-night-primary-hub .head,
body.cmep-page-election-night-primary-hub .section{
  background:var(--cmep-en-surface) !important;
  border:1px solid var(--cmep-en-border) !important;
  border-radius:22px !important;
  box-shadow:0 18px 44px rgba(2,6,23,.08) !important;
}
body.cmep-page-election-night-primary-hub .head{
  padding:clamp(1rem,2vw,1.45rem) !important;
  margin-bottom:1rem !important;
  text-align:center !important;
}
body.cmep-page-election-night-primary-hub .head h1{
  color:var(--cmep-en-text-strong) !important;
  letter-spacing:-.035em !important;
}
body.cmep-page-election-night-primary-hub .section-head{
  text-align:center !important;
  margin-bottom:.85rem !important;
}
body.cmep-page-election-night-primary-hub .state-grid{
  display:grid !important;
  grid-template-columns:repeat(auto-fit, minmax(min(100%, 230px), 1fr)) !important;
  gap:.9rem !important;
  align-items:stretch !important;
}
body.cmep-page-election-night-primary-hub .state-tile,
body.cmep-page-election-night-primary-hub .race-card{
  background:var(--cmep-result-surface) !important;
  border:1px solid var(--cmep-en-border) !important;
  color:var(--cmep-en-text) !important;
  border-radius:18px !important;
  box-shadow:none !important;
  transition:transform .18s ease, border-color .18s ease, background .18s ease !important;
}
body.cmep-page-election-night-primary-hub .state-tile:hover,
body.cmep-page-election-night-primary-hub .race-card:hover{
  transform:translateY(-2px) !important;
  background:var(--cmep-result-surface-hover) !important;
  border-color:var(--cmep-en-border-strong) !important;
}
body.cmep-page-election-night-primary-hub .state-name,
body.cmep-page-election-night-primary-hub .race-name{
  color:var(--cmep-en-text-strong) !important;
  overflow-wrap:anywhere !important;
  word-break:normal !important;
}
body.cmep-page-election-night-primary-hub .state-meta,
body.cmep-page-election-night-primary-hub .race-sub,
body.cmep-page-election-night-primary-hub .race-bot{
  color:var(--cmep-en-text-muted) !important;
}
body.cmep-page-election-night-primary-hub .race-card::before{
  background:var(--cmep-news-accent) !important;
  opacity:.58 !important;
}
body.cmep-page-election-night-primary-hub .race-card.party-d::before,
body.cmep-page-election-night-primary-hub .race-card.called-d::before{ background:var(--solid-d,#0076BA) !important; opacity:1 !important; }
body.cmep-page-election-night-primary-hub .race-card.party-r::before,
body.cmep-page-election-night-primary-hub .race-card.called-r::before{ background:var(--solid-r,#EE220C) !important; opacity:1 !important; }
body.cmep-page-election-night-primary-hub .race-card.party-o::before,
body.cmep-page-election-night-primary-hub .race-card.called-o::before{ background:var(--toss-up,#929292) !important; opacity:1 !important; }
/* Do not flood the entire key-race card with party color; use party only as data accent. */
body.cmep-page-election-night-primary-hub :where(.race-card.called-d,.race-card.called-r,.race-card.called-o,.race-card.projected-runoff.called-d,.race-card.projected-runoff.called-r,.race-card.projected-runoff.called-o){
  background:var(--cmep-result-surface) !important;
  border-color:var(--cmep-en-border-strong) !important;
  color:var(--cmep-en-text) !important;
}
body.cmep-page-election-night-primary-hub :where(.race-card.called-d,.race-card.called-r,.race-card.called-o) :where(.race-name,.race-sub,.race-bot .left,.race-bot .right){
  color:inherit !important;
  opacity:1 !important;
}
body.cmep-page-election-night-primary-hub .chip{
  background:color-mix(in srgb, var(--cmep-en-surface-solid) 76%, var(--cmep-news-accent) 11%) !important;
  border:1px solid var(--cmep-en-border) !important;
  color:var(--cmep-en-text-strong) !important;
}
body.cmep-page-election-night-primary-hub .chip.live{ color:var(--cmep-en-text-strong) !important; }
body.cmep-page-election-night-primary-hub .bar{
  background:color-mix(in srgb, var(--cmep-en-surface-solid) 72%, var(--cmep-news-accent) 14%) !important;
  border:1px solid var(--cmep-en-border) !important;
}
body.cmep-page-election-night-primary-hub .fill-d{ background:var(--solid-d,#0076BA) !important; }
body.cmep-page-election-night-primary-hub .fill-r{ background:var(--solid-r,#EE220C) !important; }
body.cmep-page-election-night-primary-hub .fill-g{ background:var(--toss-up,#929292) !important; }

/* Election Night state + district detail pages: one consistent shell. */
body.cmep-page-election-night-detail :where(.state-hero,.election-hero,.head,.card,.panel,.results-panel,.map-panel,.results-card,.map-card,.primary-race,.county-result-card,.county-card,.analytics-card){
  background:var(--cmep-en-surface) !important;
  border-color:var(--cmep-en-border) !important;
  color:var(--cmep-en-text) !important;
  box-shadow:0 18px 44px rgba(2,6,23,.10) !important;
}
body.cmep-page-election-night-detail :where(.card,.panel,.results-panel,.map-panel,.results-card,.map-card){
  background:linear-gradient(180deg,
    color-mix(in srgb, var(--cmep-en-surface-solid) 92%, var(--cmep-news-accent) 5%),
    var(--cmep-en-surface-solid)) !important;
}
body.cmep-page-election-night-detail :where(.primary-race,.county-result-card,.county-card,.candidate-row,.primary-row,.county-row,.result-row){
  background:var(--cmep-result-surface) !important;
  border-color:var(--cmep-en-border) !important;
}
body.cmep-page-election-night-detail :where(.primary-row,.candidate-row,.county-row,.result-row){
  position:relative !important;
  box-shadow:none !important;
}
body.cmep-page-election-night-detail :where(.primary-row.is-winner,.candidate-row.is-winner,.result-row.is-winner,.county-row.is-winner,
.primary-row.is-advance,.candidate-row.is-advance,.result-row.is-advance,.county-row.is-advance){
  background:color-mix(in srgb, var(--cmep-result-surface) 86%, var(--projection-accent, var(--cmep-news-accent)) 10%) !important;
  border-color:color-mix(in srgb, var(--projection-accent, var(--cmep-news-accent)) 36%, var(--cmep-en-border)) !important;
}
body.cmep-page-election-night-detail :where(.primary-row.is-winner,.candidate-row.is-winner,.result-row.is-winner,.county-row.is-winner,
.primary-row.is-advance,.candidate-row.is-advance,.result-row.is-advance,.county-row.is-advance)::before{
  content:"";
  position:absolute;
  inset:8px auto 8px 0;
  width:4px;
  border-radius:999px;
  background:var(--projection-accent, var(--cmep-news-accent));
}
body.cmep-page-election-night-detail :where(.winD,.advD,.winner-pill-d,.outlineD){ --projection-accent:var(--solid-d,#0076BA); }
body.cmep-page-election-night-detail :where(.winR,.advR,.winner-pill-r,.outlineR){ --projection-accent:var(--solid-r,#EE220C); }
body.cmep-page-election-night-detail :where(.winner-pill-tossup,.outlineO,.outlineN){ --projection-accent:var(--toss-up,#929292); }

/* Projection strap: same state/district language and visual treatment; no generic blue default. */
body.cmep-page-election-night-detail #globalWinnerBanner{
  margin:.75rem 0 1rem !important;
  background:transparent !important;
  border:0 !important;
  box-shadow:none !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner,
body.cmep-page-election-night-detail .winner-banner{
  --projection-accent:var(--toss-up,#929292);
  display:grid !important;
  grid-template-columns:auto minmax(0,1fr) !important;
  align-items:center !important;
  gap:.8rem !important;
  background:linear-gradient(90deg,
    color-mix(in srgb, var(--projection-accent) 88%, #000 12%) 0%,
    color-mix(in srgb, var(--projection-accent) 40%, var(--cmep-en-surface-solid)) 48%,
    var(--cmep-en-surface-solid) 100%) !important;
  border:1px solid color-mix(in srgb, var(--projection-accent) 42%, var(--cmep-en-border)) !important;
  border-radius:18px !important;
  color:#fff !important;
  box-shadow:0 18px 44px rgba(2,6,23,.18), inset 0 1px 0 rgba(255,255,255,.12) !important;
  overflow:hidden !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner.bannerD,
body.cmep-page-election-night-detail .winner-banner.bannerD{ --projection-accent:var(--solid-d,#0076BA); }
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner.bannerR,
body.cmep-page-election-night-detail .winner-banner.bannerR{ --projection-accent:var(--solid-r,#EE220C); }
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner.bannerN,
body.cmep-page-election-night-detail .winner-banner.bannerN{ --projection-accent:var(--toss-up,#929292); }
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-icon,
body.cmep-page-election-night-detail .winner-banner .winner-banner-icon{
  width:38px !important;
  height:38px !important;
  border-radius:10px !important;
  display:grid !important;
  place-items:center !important;
  background:rgba(255,255,255,.15) !important;
  border:1px solid rgba(255,255,255,.22) !important;
  color:#fff !important;
  box-shadow:none !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-label,
body.cmep-page-election-night-detail .winner-banner .winner-banner-label{
  color:rgba(255,255,255,.82) !important;
  letter-spacing:.16em !important;
  text-transform:uppercase !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-name,
body.cmep-page-election-night-detail .winner-banner .winner-banner-name{
  color:#fff !important;
  text-wrap:balance;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-sub,
body.cmep-page-election-night-detail .winner-banner .winner-banner-sub{
  color:rgba(255,255,255,.80) !important;
}

/* Clean checkmarks: no oval/bubble; align naturally with names. */
body.cmep-page-election-night-detail :where(.winner-pill,.winner-pill-d,.winner-pill-r,.winner-pill-tossup,.ct-winner-pill){
  display:inline-flex !important;
  align-items:center !important;
  gap:.28rem !important;
  padding:0 !important;
  margin-left:.35rem !important;
  background:transparent !important;
  border:0 !important;
  box-shadow:none !important;
  color:var(--projection-accent, var(--cmep-en-text-strong)) !important;
  line-height:1 !important;
  vertical-align:baseline !important;
}
body.cmep-page-election-night-detail :where(.winner-icon,.winner-icon-check,.winner-icon-arrow,.winner-check,.projection-check,.called-check){
  display:inline !important;
  width:auto !important;
  height:auto !important;
  min-width:0 !important;
  border:0 !important;
  border-radius:0 !important;
  background:transparent !important;
  box-shadow:none !important;
  color:currentColor !important;
  font-weight:950 !important;
}
body.cmep-page-election-night-detail :where(.winner-text){
  color:currentColor !important;
  font-weight:850 !important;
  font-size:.78em !important;
}

/* County results controls should wrap, not scroll. */
body.cmep-page-election-night :where(.county-sort-group,.county-sort-controls,.sort-controls,.county-controls){
  display:flex !important;
  flex-wrap:wrap !important;
  justify-content:center !important;
  gap:.45rem !important;
  overflow:visible !important;
  max-width:100% !important;
}
body.cmep-page-election-night :where(.county-sort-group,.county-sort-controls,.sort-controls,.county-controls) > *{
  flex:0 1 auto !important;
  min-width:min(100%, 8.5rem) !important;
  white-space:normal !important;
  text-align:center !important;
}

/* Tooltips: match result-card surfaces and remain readable in day/night. */
body.cmep-page-election-night :where(.county-tooltip,.map-tooltip,.chart-tooltip,.cmep-site-tooltip,.maplibregl-popup-content,.mapboxgl-popup-content){
  background:linear-gradient(180deg,
    color-mix(in srgb, var(--cmep-en-surface-solid) 94%, var(--cmep-news-accent) 4%),
    var(--cmep-en-surface-solid)) !important;
  border:1px solid var(--cmep-en-border-strong) !important;
  border-radius:16px !important;
  color:var(--cmep-en-text) !important;
  box-shadow:0 20px 50px rgba(2,6,23,.24) !important;
}
body.cmep-page-election-night :where(.county-tooltip,.map-tooltip,.chart-tooltip,.cmep-site-tooltip) :where(.ct-row,.tooltip-row){
  background:var(--cmep-result-surface) !important;
  border:1px solid var(--cmep-en-border) !important;
  border-radius:12px !important;
}
body.cmep-page-election-night :where(.ct-winner-pill,.tooltip-winner-pill){
  background:transparent !important;
  border:0 !important;
  box-shadow:none !important;
}

/* Light/dark refinements for the new neutral treatment. */
html[data-theme="dark"] body.cmep-page-election-night,
html.dark body.cmep-page-election-night,
body.dark.cmep-page-election-night,
body.dark-mode.cmep-page-election-night{
  --cmep-news-accent:#94a3b8;
  --cmep-news-accent-soft:rgba(148,163,184,.12);
  --cmep-news-accent-border:rgba(148,163,184,.26);
  --cmep-result-surface:rgba(15,23,42,.72);
  --cmep-result-surface-hover:rgba(30,41,59,.76);
}
@media (prefers-color-scheme:dark){
  html:not([data-theme="light"]):not(.light) body.cmep-page-election-night:not(.light):not(.light-mode){
    --cmep-news-accent:#94a3b8;
    --cmep-news-accent-soft:rgba(148,163,184,.12);
    --cmep-news-accent-border:rgba(148,163,184,.26);
    --cmep-result-surface:rgba(15,23,42,.72);
    --cmep-result-surface-hover:rgba(30,41,59,.76);
  }
}

@media (max-width:760px){
  body.cmep-page-election-night-primary-hub .wrap,
  body.cmep-page-election-night-detail .wrap,
  body.cmep-page-election-night-detail main{
    width:calc(100% - .7rem) !important;
    max-width:calc(100% - .7rem) !important;
  }
  body.cmep-page-election-night-primary-hub .head,
  body.cmep-page-election-night-primary-hub .section{
    border-radius:16px !important;
    padding:.85rem .7rem !important;
  }
  body.cmep-page-election-night-primary-hub .state-grid{
    grid-template-columns:1fr !important;
    gap:.65rem !important;
  }
  body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner,
  body.cmep-page-election-night-detail .winner-banner{
    grid-template-columns:1fr !important;
    text-align:center !important;
    justify-items:center !important;
    padding:.85rem .75rem !important;
    gap:.45rem !important;
  }
  body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-copy,
  body.cmep-page-election-night-detail .winner-banner .winner-banner-copy{
    text-align:center !important;
  }
  body.cmep-page-election-night :where(.county-sort-group,.county-sort-controls,.sort-controls,.county-controls) > *{
    flex:1 1 calc(50% - .45rem) !important;
    min-width:0 !important;
  }
}


/* -------------------------------------------------------------------------
   PASS 4.21 — Primary/Election Night light-mode repair + neutral results
   Scope: /election-night/primary/, state detail, district detail.
   Fixes: dark headers in light mode, unreadable light text, residual blue
   result-card fills, square/boxed projection checkmarks, and district
   projection language parity.
   ------------------------------------------------------------------------- */
body.cmep-page-election-night{
  --cmep-en-page:#f6f7f9;
  --cmep-en-surface:#ffffff;
  --cmep-en-surface-solid:#ffffff;
  --cmep-en-surface-soft:#f8fafc;
  --cmep-en-text:#334155;
  --cmep-en-text-strong:#0f172a;
  --cmep-en-text-muted:#64748b;
  --cmep-en-border:rgba(100,116,139,.22);
  --cmep-en-border-strong:rgba(71,85,105,.36);
  --cmep-news-accent:#64748b;
  --cmep-news-accent-soft:rgba(100,116,139,.10);
  --cmep-result-surface:#ffffff;
  --cmep-result-surface-hover:#f8fafc;
  background:var(--cmep-en-page) !important;
  color:var(--cmep-en-text) !important;
  color-scheme:light;
}

html[data-theme="light"] body.cmep-page-election-night,
html.light body.cmep-page-election-night,
body.light.cmep-page-election-night,
body.light-mode.cmep-page-election-night{
  --cmep-en-page:#f6f7f9;
  --cmep-en-surface:#ffffff;
  --cmep-en-surface-solid:#ffffff;
  --cmep-en-surface-soft:#f8fafc;
  --cmep-en-text:#334155;
  --cmep-en-text-strong:#0f172a;
  --cmep-en-text-muted:#64748b;
  --cmep-en-border:rgba(100,116,139,.22);
  --cmep-en-border-strong:rgba(71,85,105,.36);
  --cmep-result-surface:#ffffff;
  --cmep-result-surface-hover:#f8fafc;
  color-scheme:light;
}

html[data-theme="dark"] body.cmep-page-election-night,
html.dark body.cmep-page-election-night,
body.dark.cmep-page-election-night,
body.dark-mode.cmep-page-election-night{
  --cmep-en-page:#020617;
  --cmep-en-surface:rgba(15,23,42,.88);
  --cmep-en-surface-solid:#0f172a;
  --cmep-en-surface-soft:rgba(30,41,59,.72);
  --cmep-en-text:#cbd5e1;
  --cmep-en-text-strong:#f8fafc;
  --cmep-en-text-muted:#94a3b8;
  --cmep-en-border:rgba(148,163,184,.20);
  --cmep-en-border-strong:rgba(203,213,225,.34);
  --cmep-news-accent:#94a3b8;
  --cmep-news-accent-soft:rgba(148,163,184,.10);
  --cmep-result-surface:rgba(15,23,42,.74);
  --cmep-result-surface-hover:rgba(30,41,59,.82);
  color-scheme:dark;
}
@media (prefers-color-scheme:dark){
  html:not([data-theme="light"]):not(.light) body.cmep-page-election-night:not(.light):not(.light-mode){
    --cmep-en-page:#020617;
    --cmep-en-surface:rgba(15,23,42,.88);
    --cmep-en-surface-solid:#0f172a;
    --cmep-en-surface-soft:rgba(30,41,59,.72);
    --cmep-en-text:#cbd5e1;
    --cmep-en-text-strong:#f8fafc;
    --cmep-en-text-muted:#94a3b8;
    --cmep-en-border:rgba(148,163,184,.20);
    --cmep-en-border-strong:rgba(203,213,225,.34);
    --cmep-news-accent:#94a3b8;
    --cmep-result-surface:rgba(15,23,42,.74);
    --cmep-result-surface-hover:rgba(30,41,59,.82);
    color-scheme:dark;
  }
}

/* Headers and cards must not stay dark in light mode. */
body.cmep-page-election-night :where(.head,.page-head,.state-hero,.hero,.masthead,.section,.panel,.card,.cm-card,.results-panel,.map-panel,.results-card,.map-card,.analytics-card,.primary-race,.county-result-card,.county-card,.state-tile,.race-card){
  background:var(--cmep-en-surface) !important;
  border-color:var(--cmep-en-border) !important;
  color:var(--cmep-en-text) !important;
}
body.cmep-page-election-night :where(.head,.page-head,.state-hero,.hero,.masthead) :where(h1,h2,h3,.title,.state-title,.brand-title,.state-name){
  color:var(--cmep-en-text-strong) !important;
}
body.cmep-page-election-night :where(.head,.page-head,.state-hero,.hero,.masthead,.section,.panel,.card,.cm-card,.results-panel,.map-panel,.results-card,.map-card,.analytics-card,.primary-race,.county-result-card,.county-card,.state-tile,.race-card) :where(p,small,.sub,.meta,.lede,.subtitle,.section-subtitle,.muted,.eyebrow,.state-meta,.race-sub,.note){
  color:var(--cmep-en-text-muted) !important;
}
body.cmep-page-election-night :where(.section h2,.section h3,.card h2,.card h3,.panel h2,.panel h3,.results-title,.map-title,.county-title,.analytics-title,.race-name,.candidate-name,.cand-name,.primary-cand .n,.county-name){
  color:var(--cmep-en-text-strong) !important;
}

/* Light mode gets a clean white newsroom surface; dark mode gets dark newsroom surface. */
html[data-theme="light"] body.cmep-page-election-night-detail :where(.card,.panel,.results-panel,.map-panel,.results-card,.map-card),
html.light body.cmep-page-election-night-detail :where(.card,.panel,.results-panel,.map-panel,.results-card,.map-card),
body.light.cmep-page-election-night-detail :where(.card,.panel,.results-panel,.map-panel,.results-card,.map-card),
body.light-mode.cmep-page-election-night-detail :where(.card,.panel,.results-panel,.map-panel,.results-card,.map-card),
body.cmep-page-election-night-detail :where(.card,.panel,.results-panel,.map-panel,.results-card,.map-card){
  background:linear-gradient(180deg,#ffffff 0%,#f8fafc 100%) !important;
}
html[data-theme="dark"] body.cmep-page-election-night-detail :where(.card,.panel,.results-panel,.map-panel,.results-card,.map-card),
html.dark body.cmep-page-election-night-detail :where(.card,.panel,.results-panel,.map-panel,.results-card,.map-card),
body.dark.cmep-page-election-night-detail :where(.card,.panel,.results-panel,.map-panel,.results-card,.map-card),
body.dark-mode.cmep-page-election-night-detail :where(.card,.panel,.results-panel,.map-panel,.results-card,.map-card){
  background:linear-gradient(180deg,rgba(15,23,42,.92),rgba(2,6,23,.92)) !important;
}
@media (prefers-color-scheme:dark){
  html:not([data-theme="light"]):not(.light) body.cmep-page-election-night-detail:not(.light):not(.light-mode) :where(.card,.panel,.results-panel,.map-panel,.results-card,.map-card){
    background:linear-gradient(180deg,rgba(15,23,42,.92),rgba(2,6,23,.92)) !important;
  }
}

/* Remove residual blue card fills. Result rows remain neutral; party only appears as an accent stripe/text marker. */
body.cmep-page-election-night-detail :where(.primary-row,.candidate-row,.county-row,.result-row,.primary-cand,.candidate,.county-candidate){
  background:var(--cmep-result-surface) !important;
  border-color:var(--cmep-en-border) !important;
  color:var(--cmep-en-text) !important;
}
body.cmep-page-election-night-detail :where(.primary-row.is-winner,.candidate-row.is-winner,.result-row.is-winner,.county-row.is-winner,
.primary-row.is-advance,.candidate-row.is-advance,.result-row.is-advance,.county-row.is-advance,
.primary-row.winD,.candidate-row.winD,.result-row.winD,.county-row.winD,.primary-row.advD,.candidate-row.advD,.result-row.advD,.county-row.advD,
.primary-row.winR,.candidate-row.winR,.result-row.winR,.county-row.winR,.primary-row.advR,.candidate-row.advR,.result-row.advR,.county-row.advR){
  background:var(--cmep-result-surface) !important;
  border-color:var(--cmep-en-border-strong) !important;
}
body.cmep-page-election-night-detail :where(.primary-row.is-winner,.candidate-row.is-winner,.result-row.is-winner,.county-row.is-winner,
.primary-row.is-advance,.candidate-row.is-advance,.result-row.is-advance,.county-row.is-advance)::before{
  background:var(--projection-accent,var(--cmep-news-accent)) !important;
}
body.cmep-page-election-night-detail :where(.primary-row.winD,.candidate-row.winD,.result-row.winD,.county-row.winD,.advD,.winD,.winner-pill-d,.outlineD){ --projection-accent:var(--solid-d,#0076BA); }
body.cmep-page-election-night-detail :where(.primary-row.winR,.candidate-row.winR,.result-row.winR,.county-row.winR,.advR,.winR,.winner-pill-r,.outlineR){ --projection-accent:var(--solid-r,#EE220C); }
body.cmep-page-election-night-detail :where(.primary-row.winO,.candidate-row.winO,.result-row.winO,.county-row.winO,.advO,.winO,.winner-pill-tossup,.outlineO,.outlineN){ --projection-accent:var(--toss-up,#929292); }

/* Projection strap: keep party Solid D/R color, but make the final object less boxy and more like a lower-third. */
body.cmep-page-election-night-detail #globalWinnerBanner{
  background:transparent !important;
  border:0 !important;
  box-shadow:none !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner,
body.cmep-page-election-night-detail .winner-banner{
  border-radius:16px !important;
  grid-template-columns:minmax(0,1fr) !important;
  padding:.9rem 1.05rem !important;
  border:1px solid color-mix(in srgb,var(--projection-accent,#64748b) 38%,transparent) !important;
  box-shadow:0 16px 40px rgba(2,6,23,.16) !important;
  background:linear-gradient(90deg,
    color-mix(in srgb,var(--projection-accent,#64748b) 92%,#000 8%) 0%,
    color-mix(in srgb,var(--projection-accent,#64748b) 72%,#111827 8%) 44%,
    color-mix(in srgb,var(--projection-accent,#64748b) 36%,#0f172a 18%) 100%) !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-icon,
body.cmep-page-election-night-detail .winner-banner .winner-banner-icon{
  display:none !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-copy,
body.cmep-page-election-night-detail .winner-banner .winner-banner-copy{
  min-width:0 !important;
  text-align:left !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-label,
body.cmep-page-election-night-detail .winner-banner .winner-banner-label{
  color:rgba(255,255,255,.82) !important;
  font-size:.74rem !important;
  letter-spacing:.18em !important;
  text-transform:uppercase !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-name,
body.cmep-page-election-night-detail .winner-banner .winner-banner-name{
  color:#fff !important;
  font-size:clamp(1.28rem,3vw,2rem) !important;
  line-height:1.04 !important;
  letter-spacing:-.035em !important;
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-name::before,
body.cmep-page-election-night-detail .winner-banner .winner-banner-name::before{
  content:"✓";
  display:inline-block;
  margin-right:.45rem;
  font-size:.76em;
  line-height:1;
  color:#fff;
  transform:translateY(-.04em);
}
body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-sub,
body.cmep-page-election-night-detail .winner-banner .winner-banner-sub{
  color:rgba(255,255,255,.84) !important;
  font-size:.92rem !important;
  margin-top:.18rem !important;
}

/* Checkmarks in result rows: no square, oval, pill, or outlined container. */
body.cmep-page-election-night-detail :where(.winner-pill,.winner-pill-d,.winner-pill-r,.winner-pill-tossup,.ct-winner-pill,.projection-pill,.advance-pill){
  background:transparent !important;
  border:0 !important;
  box-shadow:none !important;
  border-radius:0 !important;
  padding:0 !important;
  min-width:0 !important;
  color:var(--projection-accent,var(--cmep-en-text-strong)) !important;
}
body.cmep-page-election-night-detail :where(.winner-icon,.winner-icon-check,.winner-icon-arrow,.winner-check,.projection-check,.called-check,.checkmark,.check-icon){
  display:inline !important;
  width:auto !important;
  height:auto !important;
  min-width:0 !important;
  padding:0 !important;
  margin:0 .18rem 0 0 !important;
  border:0 !important;
  outline:0 !important;
  border-radius:0 !important;
  background:transparent !important;
  box-shadow:none !important;
  color:currentColor !important;
  font-weight:900 !important;
  line-height:1 !important;
}

/* Primary hub readability and neutral focus treatment. */
body.cmep-page-election-night-primary-hub :where(.head,.section,.state-tile,.race-card){
  background:var(--cmep-en-surface) !important;
  color:var(--cmep-en-text) !important;
  border-color:var(--cmep-en-border) !important;
}
body.cmep-page-election-night :where(a,button,.btn,.seg-btn,.tab-btn,.office-btn,.state-filter-btn,.county-sort-btn):focus-visible{
  outline:3px solid color-mix(in srgb,var(--cmep-news-accent) 55%,transparent) !important;
  outline-offset:2px !important;
  box-shadow:none !important;
}

/* Tooltips: readable in both modes, and visually tied to the redesigned result cards. */
body.cmep-page-election-night :where(.county-tooltip,.map-tooltip,.chart-tooltip,.cmep-site-tooltip,.maplibregl-popup-content,.mapboxgl-popup-content){
  background:var(--cmep-en-surface-solid) !important;
  color:var(--cmep-en-text) !important;
  border:1px solid var(--cmep-en-border-strong) !important;
  box-shadow:0 20px 50px rgba(2,6,23,.22) !important;
}
body.cmep-page-election-night :where(.county-tooltip,.map-tooltip,.chart-tooltip,.cmep-site-tooltip,.maplibregl-popup-content,.mapboxgl-popup-content) :where(.ct-name,.tooltip-title,strong,b){
  color:var(--cmep-en-text-strong) !important;
}
body.cmep-page-election-night :where(.county-tooltip,.map-tooltip,.chart-tooltip,.cmep-site-tooltip,.maplibregl-popup-content,.mapboxgl-popup-content) :where(.ct-party,.ct-note,.ct-votes,.tooltip-meta,.muted){
  color:var(--cmep-en-text-muted) !important;
}
body.cmep-page-election-night :where(.county-tooltip,.map-tooltip,.chart-tooltip,.cmep-site-tooltip) :where(.ct-row,.tooltip-row){
  background:var(--cmep-result-surface) !important;
  color:var(--cmep-en-text) !important;
  border-color:var(--cmep-en-border) !important;
}

@media (max-width:760px){
  body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner,
  body.cmep-page-election-night-detail .winner-banner{
    text-align:left !important;
    justify-items:stretch !important;
    padding:.85rem .85rem !important;
  }
  body.cmep-page-election-night-detail #globalWinnerBanner .winner-banner-copy,
  body.cmep-page-election-night-detail .winner-banner .winner-banner-copy{
    text-align:left !important;
  }
}

/* -------------------------------------------------------------------------
   Pass 4.22 — clean primary Election Night hub pass
   Scope: /election-night/primary/ only. This intentionally resets the hub to a
   calmer, neutral newsroom layout while leaving state/detail pages alone.
   ------------------------------------------------------------------------- */
body.en-primary-clean{
  --enp-page:#f4f5f7;
  --enp-surface:#ffffff;
  --enp-surface-2:#f8fafc;
  --enp-text:#334155;
  --enp-strong:#0f172a;
  --enp-muted:#64748b;
  --enp-border:rgba(100,116,139,.22);
  --enp-border-strong:rgba(71,85,105,.34);
  --enp-neutral:#475569;
  --enp-neutral-soft:rgba(71,85,105,.08);
  --enp-shadow:0 18px 44px rgba(15,23,42,.08);
  --enp-shadow-soft:0 1px 3px rgba(15,23,42,.10);
  background:var(--enp-page) !important;
  color:var(--enp-text) !important;
  color-scheme:light;
}
html[data-theme="dark"] body.en-primary-clean,
html.dark body.en-primary-clean,
body.dark.en-primary-clean,
body.dark-mode.en-primary-clean{
  --enp-page:#020617;
  --enp-surface:#0f172a;
  --enp-surface-2:#111827;
  --enp-text:#cbd5e1;
  --enp-strong:#f8fafc;
  --enp-muted:#94a3b8;
  --enp-border:rgba(148,163,184,.20);
  --enp-border-strong:rgba(203,213,225,.32);
  --enp-neutral:#94a3b8;
  --enp-neutral-soft:rgba(148,163,184,.10);
  --enp-shadow:0 20px 54px rgba(0,0,0,.48);
  --enp-shadow-soft:0 1px 3px rgba(0,0,0,.35);
  color-scheme:dark;
}
@media (prefers-color-scheme:dark){
  html:not([data-theme="light"]):not(.light) body.en-primary-clean:not(.light):not(.light-mode){
    --enp-page:#020617;
    --enp-surface:#0f172a;
    --enp-surface-2:#111827;
    --enp-text:#cbd5e1;
    --enp-strong:#f8fafc;
    --enp-muted:#94a3b8;
    --enp-border:rgba(148,163,184,.20);
    --enp-border-strong:rgba(203,213,225,.32);
    --enp-neutral:#94a3b8;
    --enp-neutral-soft:rgba(148,163,184,.10);
    --enp-shadow:0 20px 54px rgba(0,0,0,.48);
    --enp-shadow-soft:0 1px 3px rgba(0,0,0,.35);
    color-scheme:dark;
  }
}

body.en-primary-clean .wrap{
  width:min(100%, 1380px) !important;
  max-width:1380px !important;
  margin-inline:auto !important;
  padding:clamp(12px,2.2vw,28px) !important;
}
body.en-primary-clean .head{
  display:block !important;
  margin:0 0 18px !important;
  padding:clamp(18px,3vw,30px) !important;
  border:1px solid var(--enp-border) !important;
  border-radius:26px !important;
  background:
    radial-gradient(circle at 16% 0%, var(--enp-neutral-soft), transparent 34%),
    linear-gradient(180deg,var(--enp-surface),var(--enp-surface-2)) !important;
  box-shadow:var(--enp-shadow) !important;
  color:var(--enp-text) !important;
  text-align:center !important;
}
body.en-primary-clean .brand{
  max-width:820px !important;
  margin-inline:auto !important;
  text-align:center !important;
}
body.en-primary-clean .brand .eyebrow{
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  gap:.45rem !important;
  margin-bottom:.55rem !important;
  padding:.28rem .7rem !important;
  border:1px solid var(--enp-border) !important;
  border-radius:999px !important;
  background:var(--enp-neutral-soft) !important;
  color:var(--enp-muted) !important;
  font-size:.72rem !important;
  font-weight:900 !important;
  letter-spacing:.14em !important;
  text-transform:uppercase !important;
}
body.en-primary-clean .brand h1{
  margin:0 !important;
  color:var(--enp-strong) !important;
  font-size:clamp(2rem,5vw,4.15rem) !important;
  line-height:.98 !important;
  letter-spacing:-.055em !important;
  font-weight:950 !important;
  text-wrap:balance !important;
}
body.en-primary-clean .brand .brand-lede{
  display:block !important;
  max-width:680px !important;
  margin:.78rem auto 0 !important;
  color:var(--enp-muted) !important;
  font-size:clamp(.95rem,1.7vw,1.12rem) !important;
  line-height:1.42 !important;
  text-wrap:balance !important;
}

body.en-primary-clean .section,
body.en-primary-clean .grid.section{
  margin-top:16px !important;
  padding:clamp(14px,2vw,20px) !important;
  border:1px solid var(--enp-border) !important;
  border-radius:24px !important;
  background:var(--enp-surface) !important;
  box-shadow:var(--enp-shadow-soft) !important;
  color:var(--enp-text) !important;
}
body.en-primary-clean .section.no-wired{
  display:block !important;
}
body.en-primary-clean .section-head{
  display:flex !important;
  align-items:flex-end !important;
  justify-content:space-between !important;
  gap:1rem !important;
  margin:0 0 14px !important;
  padding-bottom:12px !important;
  border-bottom:1px solid var(--enp-border) !important;
  text-align:left !important;
}
body.en-primary-clean .section-head h2{
  margin:0 !important;
  color:var(--enp-strong) !important;
  font-size:clamp(1.02rem,1.5vw,1.28rem) !important;
  line-height:1.1 !important;
  font-weight:950 !important;
  letter-spacing:-.025em !important;
}
body.en-primary-clean .section-head .m,
body.en-primary-clean .m,
body.en-primary-clean .foot{
  color:var(--enp-muted) !important;
}
body.en-primary-clean .section-head .m{
  max-width:520px !important;
  text-align:right !important;
  font-size:.82rem !important;
}

body.en-primary-clean .state-grid,
body.en-primary-clean #stateGrid,
body.en-primary-clean #recentStateGrid,
body.en-primary-clean #moreStateGrid{
  display:grid !important;
  grid-template-columns:repeat(auto-fit,minmax(min(100%, 220px),1fr)) !important;
  gap:14px !important;
  align-items:stretch !important;
}
body.en-primary-clean .state-tile{
  min-height:154px !important;
  padding:15px 13px !important;
  border:1px solid var(--enp-border) !important;
  border-radius:20px !important;
  background:linear-gradient(180deg,var(--enp-surface),var(--enp-surface-2)) !important;
  box-shadow:none !important;
  color:var(--enp-text) !important;
  text-align:center !important;
  gap:8px !important;
  overflow:hidden !important;
  transition:transform .14s ease,border-color .14s ease,box-shadow .14s ease,background .14s ease !important;
}
body.en-primary-clean .state-tile:hover{
  transform:translateY(-2px) !important;
  border-color:var(--enp-border-strong) !important;
  background:linear-gradient(180deg,var(--enp-surface),var(--enp-surface-2)) !important;
  box-shadow:0 16px 34px rgba(15,23,42,.10) !important;
}
body.en-primary-clean .state-tile:focus-visible{
  outline:3px solid color-mix(in srgb,var(--enp-neutral) 42%,transparent) !important;
  outline-offset:3px !important;
  box-shadow:none !important;
}
body.en-primary-clean .state-outline-wrap{
  height:74px !important;
  opacity:.88 !important;
  color:var(--enp-strong) !important;
}
body.en-primary-clean .state-name,
body.en-primary-clean .state-meta,
body.en-primary-clean .state-close-sub{
  max-width:100% !important;
  white-space:normal !important;
  overflow:visible !important;
  text-overflow:clip !important;
  word-break:normal !important;
  overflow-wrap:anywhere !important;
  color:var(--enp-muted) !important;
}
body.en-primary-clean .state-name{
  color:var(--enp-strong) !important;
  font-size:.96rem !important;
  line-height:1.1 !important;
  font-weight:950 !important;
}
body.en-primary-clean .state-meta,
body.en-primary-clean .state-close-sub{
  font-size:.76rem !important;
  line-height:1.28 !important;
}

body.en-primary-clean .race-list{
  display:grid !important;
  grid-template-columns:repeat(auto-fit,minmax(min(100%, 420px),1fr)) !important;
  gap:14px !important;
}
body.en-primary-clean .race-card{
  position:relative !important;
  display:grid !important;
  gap:12px !important;
  min-height:142px !important;
  padding:16px 16px 14px 18px !important;
  border:1px solid var(--enp-border) !important;
  border-radius:22px !important;
  background:linear-gradient(180deg,var(--enp-surface),var(--enp-surface-2)) !important;
  box-shadow:none !important;
  color:var(--enp-text) !important;
  overflow:hidden !important;
}
body.en-primary-clean .race-card::before{
  content:"" !important;
  position:absolute !important;
  inset:0 auto 0 0 !important;
  width:5px !important;
  background:var(--enp-neutral) !important;
  opacity:.95 !important;
}
body.en-primary-clean .race-card.party-d::before,
body.en-primary-clean .race-card.called-d::before{background:var(--solid-d,#0076BA) !important;}
body.en-primary-clean .race-card.party-r::before,
body.en-primary-clean .race-card.called-r::before{background:var(--solid-r,#EE220C) !important;}
body.en-primary-clean .race-card.party-o::before,
body.en-primary-clean .race-card.called-o::before{background:var(--toss-up,#929292) !important;}
body.en-primary-clean .race-card.called-d,
body.en-primary-clean .race-card.called-r,
body.en-primary-clean .race-card.called-o,
body.en-primary-clean .race-card.projected-runoff.called-d,
body.en-primary-clean .race-card.projected-runoff.called-r,
body.en-primary-clean .race-card.projected-runoff.called-o{
  background:linear-gradient(180deg,var(--enp-surface),var(--enp-surface-2)) !important;
  border-color:var(--enp-border-strong) !important;
}
body.en-primary-clean .race-card.called-d .race-name,
body.en-primary-clean .race-card.called-r .race-name,
body.en-primary-clean .race-card.called-o .race-name,
body.en-primary-clean .race-card.called-d .race-sub,
body.en-primary-clean .race-card.called-r .race-sub,
body.en-primary-clean .race-card.called-o .race-sub,
body.en-primary-clean .race-card.called-d .race-bot .left,
body.en-primary-clean .race-card.called-r .race-bot .left,
body.en-primary-clean .race-card.called-o .race-bot .left,
body.en-primary-clean .race-card.called-d .race-bot .right,
body.en-primary-clean .race-card.called-r .race-bot .right,
body.en-primary-clean .race-card.called-o .race-bot .right{
  color:inherit !important;
  opacity:1 !important;
}
body.en-primary-clean .race-link:hover{
  transform:translateY(-2px) !important;
  border-color:var(--enp-border-strong) !important;
  background:linear-gradient(180deg,var(--enp-surface),var(--enp-surface-2)) !important;
  box-shadow:0 16px 34px rgba(15,23,42,.10) !important;
}
body.en-primary-clean .race-link:focus-visible{
  outline:3px solid color-mix(in srgb,var(--enp-neutral) 42%,transparent) !important;
  outline-offset:3px !important;
  box-shadow:none !important;
}
body.en-primary-clean .race-top{
  display:flex !important;
  align-items:flex-start !important;
  justify-content:space-between !important;
  gap:14px !important;
}
body.en-primary-clean .race-left{
  min-width:0 !important;
  padding-left:0 !important;
}
body.en-primary-clean .race-name,
body.en-primary-clean .race-sub{
  max-width:100% !important;
  white-space:normal !important;
  overflow:visible !important;
  text-overflow:clip !important;
  word-break:normal !important;
  overflow-wrap:anywhere !important;
}
body.en-primary-clean .race-name{
  color:var(--enp-strong) !important;
  font-size:1rem !important;
  line-height:1.12 !important;
  letter-spacing:-.018em !important;
  font-weight:950 !important;
}
body.en-primary-clean .race-sub{
  color:var(--enp-muted) !important;
  font-size:.82rem !important;
  line-height:1.25 !important;
  margin-top:4px !important;
}
body.en-primary-clean .chips{
  max-width:48% !important;
  display:flex !important;
  justify-content:flex-end !important;
  gap:6px !important;
  flex-wrap:wrap !important;
}
body.en-primary-clean .chip,
body.en-primary-clean .projection-pill,
body.en-primary-clean .winner-pill{
  border-radius:999px !important;
  border:1px solid var(--enp-border) !important;
  background:var(--enp-surface) !important;
  box-shadow:none !important;
  color:var(--enp-strong) !important;
  padding:.24rem .58rem !important;
  min-height:0 !important;
  font-size:.7rem !important;
  font-weight:950 !important;
  line-height:1.1 !important;
}
body.en-primary-clean .chip.live{background:rgba(246,206,70,.18) !important;border-color:rgba(202,138,4,.30) !important;color:color-mix(in srgb,#ca8a04 80%,var(--enp-strong)) !important;}
body.en-primary-clean .chip.called{background:rgba(100,196,102,.14) !important;border-color:rgba(22,163,74,.30) !important;color:color-mix(in srgb,#15803d 78%,var(--enp-strong)) !important;}
body.en-primary-clean .chip.note{background:var(--enp-neutral-soft) !important;color:var(--enp-muted) !important;}
body.en-primary-clean .chip.lead{background:var(--enp-neutral-soft) !important;color:var(--enp-strong) !important;}
body.en-primary-clean .projection-pill.proj-d{border-color:color-mix(in srgb,var(--solid-d,#0076BA) 34%,transparent) !important;color:var(--solid-d,#0076BA) !important;}
body.en-primary-clean .projection-pill.proj-r{border-color:color-mix(in srgb,var(--solid-r,#EE220C) 34%,transparent) !important;color:var(--solid-r,#EE220C) !important;}
body.en-primary-clean .bar{
  height:8px !important;
  border-radius:999px !important;
  border:0 !important;
  background:rgba(148,163,184,.20) !important;
  overflow:hidden !important;
}
body.en-primary-clean .bar > span{border-radius:999px !important;}
body.en-primary-clean .fill-white{background:var(--enp-neutral) !important;}
body.en-primary-clean .race-bot{
  display:flex !important;
  align-items:center !important;
  justify-content:space-between !important;
  gap:12px !important;
  color:var(--enp-muted) !important;
  font-size:.82rem !important;
  line-height:1.25 !important;
}
body.en-primary-clean .race-bot .left{
  color:var(--enp-strong) !important;
  font-weight:900 !important;
}
body.en-primary-clean .race-bot .right{
  color:var(--enp-muted) !important;
  text-align:right !important;
  white-space:normal !important;
  overflow:visible !important;
  text-overflow:clip !important;
}
body.en-primary-clean .panel{
  border:1px solid var(--enp-border) !important;
  border-radius:18px !important;
  background:var(--enp-surface-2) !important;
  box-shadow:none !important;
  color:var(--enp-muted) !important;
}
body.en-primary-clean .sk-line{
  background:linear-gradient(90deg,
    color-mix(in srgb,var(--enp-border) 70%,transparent) 20%,
    var(--enp-neutral-soft) 50%,
    color-mix(in srgb,var(--enp-border) 70%,transparent) 80%) !important;
  background-size:520px 100% !important;
}
body.en-primary-clean .foot{
  margin:14px auto 0 !important;
  max-width:760px !important;
  line-height:1.35 !important;
}

@media (min-width:1180px){
  body.en-primary-clean #stateGrid{
    grid-template-columns:repeat(4,minmax(0,1fr)) !important;
  }
  body.en-primary-clean #recentStateGrid,
  body.en-primary-clean #moreStateGrid{
    grid-template-columns:repeat(5,minmax(0,1fr)) !important;
  }
  body.en-primary-clean .race-list{
    grid-template-columns:repeat(2,minmax(0,1fr)) !important;
  }
}
@media (min-width:1500px){
  body.en-primary-clean .wrap{
    max-width:1480px !important;
  }
  body.en-primary-clean #stateGrid{
    grid-template-columns:repeat(5,minmax(0,1fr)) !important;
  }
}
@media (max-width:760px){
  body.en-primary-clean .wrap{
    width:100% !important;
    padding:10px 8px 18px !important;
  }
  body.en-primary-clean .head{
    border-radius:20px !important;
    padding:18px 13px !important;
    margin-bottom:10px !important;
  }
  body.en-primary-clean .brand h1{
    font-size:clamp(2rem,12vw,3rem) !important;
  }
  body.en-primary-clean .brand .brand-lede{
    font-size:.92rem !important;
  }
  body.en-primary-clean .section,
  body.en-primary-clean .grid.section{
    padding:12px 10px !important;
    border-radius:18px !important;
    margin-top:10px !important;
  }
  body.en-primary-clean .section-head{
    display:block !important;
    text-align:center !important;
    margin-bottom:11px !important;
    padding-bottom:10px !important;
  }
  body.en-primary-clean .section-head .m{
    max-width:none !important;
    text-align:center !important;
    margin-top:4px !important;
    font-size:.78rem !important;
  }
  body.en-primary-clean .state-grid,
  body.en-primary-clean #stateGrid,
  body.en-primary-clean #recentStateGrid,
  body.en-primary-clean #moreStateGrid{
    grid-template-columns:repeat(2,minmax(0,1fr)) !important;
    gap:9px !important;
  }
  body.en-primary-clean .state-tile{
    min-height:142px !important;
    padding:12px 9px !important;
    border-radius:16px !important;
  }
  body.en-primary-clean .state-outline-wrap{
    height:58px !important;
  }
  body.en-primary-clean .state-name{
    font-size:.86rem !important;
  }
  body.en-primary-clean .state-meta,
  body.en-primary-clean .state-close-sub{
    font-size:.69rem !important;
  }
  body.en-primary-clean .race-list{
    grid-template-columns:1fr !important;
    gap:10px !important;
  }
  body.en-primary-clean .race-card{
    min-height:0 !important;
    padding:13px 12px 12px 15px !important;
    border-radius:17px !important;
    gap:10px !important;
  }
  body.en-primary-clean .race-top{
    display:block !important;
  }
  body.en-primary-clean .chips{
    max-width:100% !important;
    justify-content:center !important;
    margin-top:9px !important;
  }
  body.en-primary-clean .race-name,
  body.en-primary-clean .race-sub,
  body.en-primary-clean .race-bot{
    text-align:center !important;
  }
  body.en-primary-clean .race-bot{
    flex-direction:column !important;
    gap:3px !important;
  }
  body.en-primary-clean .race-bot .right{
    text-align:center !important;
  }
}
@media (max-width:420px){
  body.en-primary-clean .state-grid,
  body.en-primary-clean #stateGrid,
  body.en-primary-clean #recentStateGrid,
  body.en-primary-clean #moreStateGrid{
    grid-template-columns:1fr !important;
  }
}


/* 2026-06-28: Election Night landing dark-mode hover/readability + neutral Go pills.
   The generic row hover above uses a bright surface; keep election-night choice cards dark in dark mode. */
body.cmep-page-election-night-main-hub .choice .pill,
body.cmep-page-election-night-main-hub .choice .pill.primary,
body.cmep-page-election-night-main-hub .choice .pill.general{
  background:rgba(100,116,139,.14) !important;
  border-color:rgba(100,116,139,.30) !important;
  color:var(--cmep-text, var(--text-main, #111827)) !important;
}
@media (prefers-color-scheme: dark){
  body.cmep-page-election-night-main-hub .choice:hover,
  body.cmep-page-election-night-main-hub .choice:focus-visible{
    background:rgba(15,23,42,.92) !important;
    border-color:rgba(148,163,184,.38) !important;
    color:#f8fafc !important;
    box-shadow:0 14px 30px rgba(0,0,0,.44) !important;
  }
  body.cmep-page-election-night-main-hub .choice:hover .title,
  body.cmep-page-election-night-main-hub .choice:focus-visible .title{
    color:#f8fafc !important;
  }
  body.cmep-page-election-night-main-hub .choice:hover .meta,
  body.cmep-page-election-night-main-hub .choice:focus-visible .meta{
    color:#cbd5e1 !important;
  }
  body.cmep-page-election-night-main-hub .choice:hover .pill,
  body.cmep-page-election-night-main-hub .choice:focus-visible .pill{
    background:rgba(148,163,184,.20) !important;
    border-color:rgba(203,213,225,.34) !important;
    color:#f8fafc !important;
  }
}

/* PHASE 6 V105 — preserve accessible dynamic candidate-summary target without altering established pill colors. */
body.en-primary-detail details.more-cands > summary,
body.en-primary-clean details.more-cands > summary {
  box-sizing:border-box !important;
  min-height:44px !important;
  padding-block:10px !important;
  display:flex !important;
  align-items:center !important;
}
