/* Acabado editorial del panel interno: la tipografía, el mapa, las gráficas y las formas, con el
   oficio de un sitio de elecciones de un periódico y no el de una plantilla genérica.

   - Letra: Libre Franklin (la Franklin Gothic de los diarios estadounidenses) para la interfaz y los
     datos, con cifras tabulares; Newsreader (serif hecha para noticias, que acompaña al logotipo)
     para los títulos y las cifras grandes. Etiquetas pequeñas en versalitas espaciadas.
   - Formas: esquinas casi rectas, filetes finos en lugar de sombras, sin píldoras.
   - Mapa: fondo claro, bordes blancos finos, escala de siete pasos (Seguro, Probable e Inclinado por
     partido, y Empate), siglas sin halo que cambian de tono según el fondo, y los estados pequeños
     del noreste en una columna de recuadros al margen.
   Se carga al final: sólo cambia la apariencia. */

@font-face { font-family: "Libre Franklin"; font-style: normal; font-weight: 300 800; font-display: swap; src: url("/assets/fonts/librefranklin-latin.woff2") format("woff2"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: "Libre Franklin"; font-style: normal; font-weight: 300 800; font-display: swap; src: url("/assets/fonts/librefranklin-latin-ext.woff2") format("woff2"); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: "Newsreader"; font-style: normal; font-weight: 300 700; font-display: swap; src: url("/assets/fonts/newsreader-latin.woff2") format("woff2"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: "Newsreader"; font-style: normal; font-weight: 300 700; font-display: swap; src: url("/assets/fonts/newsreader-latin-ext.woff2") format("woff2"); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }

/* ---------- Tokens ---------- */
.admin-app {
  --nv-font: "Libre Franklin", "Franklin Gothic Medium", "Helvetica Neue", Arial, sans-serif;
  --nv-serif: "Newsreader", "Iowan Old Style", Georgia, serif;
  --nv-radius: 4px;
  --tp-radius: 4px;
  --tp-radius-sm: 3px;
  --serif: var(--nv-serif);
  /* Mapa: escala de siete pasos sobre fondo claro. */
  --map-dem-safe: #1d4c8a; --map-dem-likely: #4a7dbe; --map-dem-lean: #a5c1e3;
  --map-toss: #d9d2c3;
  --map-rep-lean: #eeaca2; --map-rep-likely: #d1594d; --map-rep-safe: #a2282a;
  --map-oth: #8b70b6; --map-primary: #d8c690; --map-none: #edebe5;
  --map-line: #ffffff; --map-ink: #1d1c19; --map-quiet: #a29e95;
  font-family: var(--nv-font);
  font-size: 14px;
  font-feature-settings: "lnum" 1;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
/* Oscuro: sobre carbón, más intenso mientras más seguro; las siglas van claras. */
html[data-theme="dark"] .admin-app {
  --map-dem-safe: #5b93d9; --map-dem-likely: #3e6ea8; --map-dem-lean: #2e4c73;
  --map-toss: #615c53;
  --map-rep-lean: #6f3631; --map-rep-likely: #a9483e; --map-rep-safe: #da614f;
  --map-oth: #7d64a6; --map-primary: #8a7a4d;
  --map-none: #2e2c29; --map-line: var(--dk-card); --map-ink: #f4efe2; --map-quiet: #8a867d;
}
.admin-app, .admin-app button, .admin-app input, .admin-app select, .admin-app textarea { font-family: var(--nv-font); }
/* Cifras de tabla en todo lo que es dato. */
.admin-app table, .admin-app .hs-row, .admin-app .hs-people, .admin-app .home-ledger, .admin-app .home-office, .admin-app .battle-bars,
.admin-app .battle-stats, .admin-app .cons-score, .admin-app .sim-board, .admin-app .view-kpi, .admin-app .hist-kpi, .admin-app .media-office,
.admin-app .cand-mover-values, .admin-app .side-count, .admin-app .topbar-sources b { font-variant-numeric: tabular-nums lining-nums; }

/* ---------- Títulos ---------- */
/* Título de la página: serif, como el titular de una sección del periódico. */
.admin-app .page-title { gap: 0 .4em; font-family: var(--nv-serif); font-size: 30px; font-weight: 500; line-height: 1.15; letter-spacing: -.012em; font-optical-sizing: auto; }
.admin-app .page-parent { font-family: var(--nv-font); font-size: 13px; font-weight: 500; letter-spacing: .06em; text-transform: uppercase; }
.admin-app .page-sep::before { font-family: var(--nv-font); font-size: 15px; }
.admin-app .page-head { padding-top: 24px; padding-bottom: 16px; }
/* Titulares de bloque y de vista. */
.admin-app .home-block-head h2, .admin-app .home-battles-head h2, .admin-app .home-consensus .cons-head h2, .admin-app .cons-head h2,
.admin-app .view .view-header h2, .admin-app .view .workspace-head h2, .admin-app .sim-overview-head h3, .admin-app .sim-explorer-head h3,
.admin-app .sim-directory-head h3, .admin-app .sen-step h3, .admin-app .media-h3, .admin-app .cand-ranking-head h3, .admin-app .cons-key-head h3,
.admin-app .hist-table-head h3, .admin-app .panel-heading h3, .admin-app .panel-heading h2 {
  font-family: var(--nv-serif); font-size: 21px; font-weight: 500; line-height: 1.2; letter-spacing: -.01em; font-optical-sizing: auto;
}
.admin-app .media-h3 small { font-family: var(--nv-font); }
/* Títulos de tarjeta: serif más chica. */
.admin-app .home-nat-title, .admin-app .hs-head h2, .admin-app .cand-mover-head h3, .admin-app .sim-state-heading h3, .admin-app .users-card h3,
.admin-app .media-office h3, .admin-app .cons-office-head h3, .admin-app .home-section-head h3 {
  font-family: var(--nv-serif); font-size: 18px; font-weight: 500; letter-spacing: -.005em;
}
.admin-app .hs-head .hs-state-title h2 { font-size: 24px; }
/* Etiquetas: versalitas pequeñas y espaciadas (encabezados de tabla, claves, notas). */
.admin-app .sim-table thead th, .admin-app .cand-table thead th, .admin-app .cons-table thead th, .admin-app .home-changes-table thead th,
.admin-app .sen-table thead th, .admin-app .hist-row-head, .admin-app .battle-stats dt, .admin-app .home-office-name, .admin-app .home-col small,
.admin-app .cand-detail-stats dt, .admin-app .view-kpi span:first-child, .admin-app .hist-kpi span {
  font-family: var(--nv-font); font-size: 10.5px; font-weight: 600; letter-spacing: .07em; text-transform: uppercase;
}
.admin-app .sim-table thead th, .admin-app .cand-table thead th, .admin-app .cons-table thead th, .admin-app .home-changes-table thead th, .admin-app .sen-table thead th {
  border-bottom: 1px solid var(--nv-ink); background: transparent; color: var(--nv-muted);
}
.admin-app .side-section-toggle { font-size: 10px; letter-spacing: .12em; }
.admin-app .side-link { font-size: 13.5px; }
.admin-app .appbar-greeting { font-family: var(--nv-serif); font-size: 17px; font-weight: 500; letter-spacing: 0; }

/* ---------- Cifras grandes: serif con números de tabla ---------- */
.admin-app .home-verdict-title, .admin-app .sen-verdict h3, .admin-app .sen-verdict-title, .admin-app .cons-office-verdict {
  font-family: var(--nv-serif); font-weight: 500; letter-spacing: -.012em; font-optical-sizing: auto;
}
.admin-app .home-verdict-title { font-size: 30px; line-height: 1.08; }
.admin-app .home-ledger b, .admin-app .sim-board-cell strong, .admin-app .sim-board-cell.toss strong, .admin-app .cons-score strong,
.admin-app .view-kpi strong, .admin-app .hist-kpi strong, .admin-app .battle-odds strong, .admin-app .cons-race-odds strong, .admin-app .home-col b,
.admin-app .cand-detail-stats dd, .admin-app .pc-odds b {
  font-family: var(--nv-serif); font-weight: 500; letter-spacing: -.01em; font-variant-numeric: tabular-nums lining-nums;
}
.admin-app .home-ledger b { font-size: 26px; }
.admin-app .sim-board-cell strong, .admin-app .sim-board-cell.toss strong { font-size: 46px; font-weight: 400; }
.admin-app .cons-score strong { font-size: 34px; }
.admin-app .battle-odds strong { font-size: 34px; }
.admin-app .home-col b { font-size: 17px; }

/* ---------- Formas: esquinas casi rectas, sin píldoras ---------- */
.admin-app .hs-tag, .admin-app .sim-cat, .admin-app .sim-chance, .admin-app .media-status-badge, .admin-app .cand-delta, .admin-app .pc-change,
.admin-app .od-pill, .admin-app .watch-trust, .admin-app .count-pill, .admin-app .status, .admin-app .office-tag, .admin-app .race-scope,
.admin-app .users-role, .admin-app .cand-split, .admin-app .home-delta, .admin-app .watch-count, .admin-app .hist-tag, .admin-app .home-section-tab b,
.admin-app .topbar-sources b, .admin-app .cons-signal, .admin-app .home-signal, .admin-app .notif-chip, .admin-app .sim-blend-cell {
  border-radius: 2px;
}
/* Etiqueta de calificación: versalitas con un cuadro de color, como en las tablas de Cook o Sabato. */
.admin-app .hs-tag { display: inline-flex; align-items: center; gap: 6px; padding: 0; background: none; color: var(--nv-muted); font-size: 10.5px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; }
.admin-app .hs-tag::before { content: ""; width: 9px; height: 9px; background: var(--map-toss); }
.admin-app .hs-tag.dem::before { background: var(--map-dem-likely); } .admin-app .hs-tag.rep::before { background: var(--map-rep-likely); }
html[data-theme="dark"] .admin-app .hs-tag, html[data-theme="dark"] .admin-app .hs-tag.dem, html[data-theme="dark"] .admin-app .hs-tag.rep { background: none; color: var(--dk-muted); }
/* Distancia en puntos: texto, no chip. */
.admin-app .hs-diff { padding: 0; background: none; color: var(--nv-muted); font-size: 12.5px; font-weight: 500; }
.admin-app .hs-diff.lead, html[data-theme="dark"] .admin-app .hs-diff.lead { background: none; color: var(--nv-ink); font-weight: 700; }
.admin-app .hs-person.dem .hs-diff.lead { color: #1d4c8a; } .admin-app .hs-person.rep .hs-diff.lead { color: #a2282a; }
html[data-theme="dark"] .admin-app .hs-person.dem .hs-diff.lead { color: #8db8ec; } html[data-theme="dark"] .admin-app .hs-person.rep .hs-diff.lead { color: #f29a90; }
.admin-app .hs-pct { font-family: var(--nv-serif); font-size: 20px; font-weight: 500; }
.admin-app .hs-code { border-radius: 2px; font-size: 11.5px; letter-spacing: .04em; }
.admin-app .hs-gap b { font-family: var(--nv-serif); font-size: 19px; font-weight: 500; }
/* Botones y controles: rectos, con filete. */
.admin-app .button, .admin-app .topbar-button, .admin-app .hs-open, .admin-app .hs-back, .admin-app .home-state-close { border-radius: 3px; }
.admin-app .contextbar .topbar-sources, .admin-app .hs-seg, .admin-app .cand-tabs, .admin-app .cand-seg, .admin-app .view-seg, .admin-app .sim-tabs,
.admin-app .home-sections, .admin-app .media-tabs, .admin-app .view-toc { border-radius: 4px; box-shadow: none; }
.admin-app .contextbar .topbar-sources button, .admin-app .hs-seg button, .admin-app .cand-tabs button, .admin-app .cand-seg button, .admin-app .view-seg button,
.admin-app .sim-tabs button, .admin-app .home-section-tab, .admin-app .media-tabs button, .admin-app .view-toc a { border-radius: 2px; }
/* Tarjetas: filete fino, sin sombra. */
.admin-app .home-nat-card, .admin-app .home-states, .admin-app .hs-race, .admin-app .home-summary, .admin-app .home-section, .admin-app .battle-button,
.admin-app .sim-answer, .admin-app .sim-state-detail, .admin-app .sim-card, .admin-app .sen-card, .admin-app .sen-office, .admin-app .sen-detail, .admin-app .sen-issues,
.admin-app .media-office, .admin-app .hist-download, .admin-app .users-card, .admin-app .list-panel, .admin-app .form-panel, .admin-app .hist-kpi, .admin-app .watch-item,
.admin-app .race-row, .admin-app .poll-row, .admin-app .media-alert, .admin-app .live-cross, .admin-app .media-viral-card, .admin-app .view-kpi, .admin-app .cand-party-card,
.admin-app .cand-mover-col, .admin-app .cand-ranking, .admin-app .cons-race-button, .admin-app .cons-all, .admin-app .cons-empty, .admin-app .sim-method, .admin-app .sim-excluded,
.admin-app .view-help, .admin-app .new-race-form, .admin-app .login-card, .admin-app .live-summary, .admin-app .hist-chart, .admin-app .sim-table-wrap, .admin-app .cand-table-wrap,
.admin-app .cons-table-wrap, .admin-app .sim-map-card, .admin-app .cons-office, .admin-app .home-verdict, .admin-app .sen-verdict {
  border-radius: 4px; box-shadow: none;
}
.admin-app .hs-race { border: 0; border-top: 2px solid var(--nv-ink); border-radius: 0; padding: 12px 0 2px; }
.admin-app .hs-race + .hs-race, .admin-app .hs-house .hs-race { margin-top: 6px; }
.admin-app .hs-race.dem { border-top-color: var(--map-dem-safe); } .admin-app .hs-race.rep { border-top-color: var(--map-rep-safe); } .admin-app .hs-race.toss { border-top-color: var(--map-toss); }

/* ---------- Gráficas: barras planas, finas y de puntas rectas ---------- */
.admin-app .hs-track, .admin-app .battle-track, .admin-app .home-ledger-bar, .admin-app .cons-bar, .admin-app .pc-bar, .admin-app .sim-probability-bar,
.admin-app .home-col-track, .admin-app .media-office-bar, .admin-app .sen-bar { border-radius: 0; }
.admin-app .hs-track i, .admin-app .battle-track i, .admin-app .home-ledger-bar i, .admin-app .cons-bar i, .admin-app .pc-bar i, .admin-app .home-col-track i,
.admin-app .home-col i { border-radius: 0; }
.admin-app .hs-track { height: 4px; background: var(--nv-active); }
.admin-app .home-ledger-bar, .admin-app .cons-bar { height: 6px; gap: 1px; }
.admin-app .hs-person.dem .hs-track i, .admin-app .battle-bar.dem .battle-track i { background: var(--map-dem-safe); }
.admin-app .hs-person.rep .hs-track i, .admin-app .battle-bar.rep .battle-track i { background: var(--map-rep-safe); }
.admin-app .home-col.dem i { background: var(--map-dem-likely); } .admin-app .home-col.rep i { background: var(--map-rep-likely); } .admin-app .home-col.toss i { background: var(--map-toss); }
.admin-app .home-office { border-radius: 0; border-width: 0 0 1px; background: transparent; }
.admin-app .home-office:hover { background: var(--nv-subtle); box-shadow: none; }

/* ---------- Mapa ---------- */
.admin-app .sim-map-card { padding: 20px 22px 18px; border: 1px solid var(--nv-line); }
html:not([data-theme="dark"]) .admin-app .sim-map-card { background: var(--nv-card); color: var(--nv-ink); }
html[data-theme="dark"] .admin-app .sim-map-card { background: var(--dk-card); color: var(--dk-text); }
.admin-app .sim-map-card figcaption { align-items: baseline; padding-bottom: 12px; border-bottom: 1px solid var(--nv-line); }
.admin-app .sim-map-card figcaption strong, .admin-app .sim-map-card .caption-title strong { color: var(--nv-ink); font-family: var(--nv-serif); font-size: 20px; font-weight: 500; letter-spacing: -.01em; }
.admin-app .sim-map-card figcaption > span, .admin-app .sim-map-card figcaption span:not(.tip):not(.tip-body) { color: var(--nv-muted); font-size: 12px; }
.admin-app .sim-map-card .tip-button { border-color: var(--nv-line-strong); color: var(--nv-muted); }
.admin-app .sim-map-card .tip-button:hover, .admin-app .sim-map-card .tip-button[aria-expanded="true"] { background: var(--nv-hover); color: var(--nv-ink); }
.admin-app .sim-map-card .sim-map { margin: 14px 0 0; }
/* Estados: bordes blancos finos, sin halo en las siglas. */
.admin-app .sim-map .sim-state { fill: var(--c, var(--map-none)); stroke: var(--map-line); stroke-width: 1; stroke-linejoin: round; transition: fill .25s ease, stroke-width .15s ease; }
.admin-app .sim-map .sim-state.dem.safe { --c: var(--map-dem-safe); } .admin-app .sim-map .sim-state.dem.likely { --c: var(--map-dem-likely); } .admin-app .sim-map .sim-state.dem.lean { --c: var(--map-dem-lean); }
.admin-app .sim-map .sim-state.rep.safe { --c: var(--map-rep-safe); } .admin-app .sim-map .sim-state.rep.likely { --c: var(--map-rep-likely); } .admin-app .sim-map .sim-state.rep.lean { --c: var(--map-rep-lean); }
.admin-app .sim-map .sim-state.tossup { --c: var(--map-toss); }
.admin-app .sim-map .sim-state.oth { --c: var(--map-oth); fill: var(--map-oth); }
.admin-app .sim-map .sim-state.primary { --c: var(--map-primary); }
.admin-app .sim-map .sim-state.none, .admin-app .sim-map .sim-state.none:not(.sim-district) { fill: var(--map-none); }
/* En oscuro, el tema generado trae sus propios tonos de mapa: aquí manda la escala de arriba. */
html[data-theme="dark"] .admin-app .sim-map .sim-state.dem.safe { --c: var(--map-dem-safe); } html[data-theme="dark"] .admin-app .sim-map .sim-state.dem.likely { --c: var(--map-dem-likely); }
html[data-theme="dark"] .admin-app .sim-map .sim-state.dem.lean { --c: var(--map-dem-lean); } html[data-theme="dark"] .admin-app .sim-map .sim-state.tossup { --c: var(--map-toss); }
html[data-theme="dark"] .admin-app .sim-map .sim-state.rep.lean { --c: var(--map-rep-lean); } html[data-theme="dark"] .admin-app .sim-map .sim-state.rep.likely { --c: var(--map-rep-likely); }
html[data-theme="dark"] .admin-app .sim-map .sim-state.rep.safe { --c: var(--map-rep-safe); } html[data-theme="dark"] .admin-app .sim-map .sim-state.primary { --c: var(--map-primary); }
html[data-theme="dark"] .admin-app .sim-map .sim-state:not(.none) { fill: var(--c); }
html[data-theme="dark"] .admin-app .sim-map .sim-state.oth { fill: var(--map-oth); }
html[data-theme="dark"] .admin-app .sim-map .sim-state.none { fill: var(--map-none); }
@media (hover: hover) and (pointer: fine) {
  .admin-app .sim-map .sim-state:hover { opacity: 1; stroke: var(--nv-ink); stroke-width: 1.6; }
}
.admin-app .sim-map .sim-state.is-selected, .admin-app .sim-map .sim-state:focus-visible { stroke: var(--nv-ink); stroke-width: 2.4; }
html[data-theme="dark"] .admin-app .sim-map .sim-state.is-selected, html[data-theme="dark"] .admin-app .sim-map .sim-state:focus-visible,
html[data-theme="dark"] .admin-app .sim-map .sim-state:hover { stroke: var(--nv-ivory); }
.admin-app .sim-map .sim-state-label { fill: var(--map-ink); stroke: none; paint-order: normal; font-family: var(--nv-font); font-size: 11.5px; font-weight: 600; letter-spacing: .04em; }
.admin-app .sim-map .sim-state-label.on-dark { fill: #fff; }
html[data-theme="dark"] .admin-app .sim-callout-label { fill: var(--dk-muted); }
.admin-app .sim-map .sim-state-label.no-data { fill: var(--map-quiet); font-size: 10.5px; font-weight: 500; }
html[data-theme="dark"] .admin-app .sim-map .sim-state-label.no-data { fill: var(--map-quiet); }
/* Los estados pequeños llevan su sigla en el recuadro de la columna, no encima del estado. */
.admin-app .sim-map .sim-state-label.is-tiny { display: none; }
.admin-app .sim-map .sim-callout { stroke: none; }
.admin-app .sim-map .sim-callout.none { fill: var(--map-none); stroke: var(--nv-line-strong); stroke-width: .8; }
.admin-app .sim-map .sim-callout.is-selected { stroke: var(--nv-ink); stroke-width: 2; }
.admin-app .sim-callout-line { fill: none; stroke: var(--map-quiet); stroke-width: .7; opacity: .7; pointer-events: none; }
.admin-app .sim-callout-label { fill: var(--nv-text); font-family: var(--nv-font); font-size: 10.5px; font-weight: 600; letter-spacing: .05em; pointer-events: none; }
/* Washington D. C.: un punto con su sigla, como los recuadros. */
.admin-app .sim-map .sim-state.sim-district { stroke: var(--map-line); stroke-width: 1.5; }
.admin-app .sim-map .sim-state.sim-district.none { fill: var(--map-none); stroke: var(--nv-line-strong); }
.admin-app .sim-map .sim-district-leader { stroke: var(--map-quiet); stroke-width: .7; stroke-dasharray: none; opacity: .7; }
.admin-app .sim-map .sim-district + .sim-state-label, .admin-app .sim-map circle.sim-state ~ .sim-state-label:last-of-type { fill: var(--nv-text); font-size: 10.5px; }
/* Marcas O / G / E de Predicción sobre fondo claro. */
.admin-app .sim-map .sim-badge circle { stroke: var(--map-line); stroke-width: 1.2; }

/* Clave: una escala de siete pasos con los extremos de cada partido. */
.map-scale { display: grid; gap: 6px; margin: 14px 0 0; padding-top: 12px; border-top: 1px solid var(--nv-line); max-width: 560px; }
.map-scale-ends { display: flex; justify-content: space-between; font-size: 10.5px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; }
.map-scale-ends .dem { color: var(--map-dem-safe); } .map-scale-ends .rep { color: var(--map-rep-safe); }
html[data-theme="dark"] .map-scale-ends .dem { color: #8db8ec; } html[data-theme="dark"] .map-scale-ends .rep { color: #f29a90; }
.map-scale-bar { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 2px; margin: 0; padding: 0; list-style: none; }
.map-scale-bar li { display: grid; gap: 5px; color: var(--nv-muted); font-size: 10.5px; text-align: center; }
.map-scale-bar li::before { content: ""; height: 10px; background: var(--map-toss); }
.map-scale-bar .dem.safe::before { background: var(--map-dem-safe); } .map-scale-bar .dem.likely::before { background: var(--map-dem-likely); } .map-scale-bar .dem.lean::before { background: var(--map-dem-lean); }
.map-scale-bar .rep.safe::before { background: var(--map-rep-safe); } .map-scale-bar .rep.likely::before { background: var(--map-rep-likely); } .map-scale-bar .rep.lean::before { background: var(--map-rep-lean); }
.map-scale-extra { display: flex; flex-wrap: wrap; gap: 4px 16px; margin: 4px 0 0; color: var(--nv-muted); font-size: 11.5px; }
.map-scale-extra span { display: inline-flex; align-items: center; gap: 6px; }
.map-scale-extra span::before { content: ""; width: 10px; height: 10px; background: var(--map-none); box-shadow: inset 0 0 0 1px var(--nv-line-strong); }
.map-scale-extra .oth::before { background: var(--map-oth); box-shadow: none; } .map-scale-extra .primary::before { background: var(--map-primary); box-shadow: none; }

/* Resaltar estados por fuente (Predicción): botones sobrios bajo la clave. */
.admin-app .sim-map-card .sim-coverage-label { color: var(--nv-muted); }

/* Aviso al pasar el cursor por un estado: tarjeta blanca de filete fino. */
.map-tip { gap: 4px; max-width: 300px; padding: 10px 12px; border: 1px solid var(--nv-line, #e9e7e2); border-top: 2px solid #121110; border-radius: 2px; background: #fff; box-shadow: 0 10px 28px -14px rgba(18, 17, 16, .35); color: #4a4741; font-family: "Libre Franklin", Arial, sans-serif; font-size: 12px; line-height: 1.45; }
.map-tip strong { color: #121110; font-family: "Newsreader", Georgia, serif; font-size: 15px; font-weight: 500; }
html[data-theme="dark"] .map-tip { border-color: var(--dk-line-strong); border-top-color: #f4efe2; background: var(--dk-card); color: var(--dk-muted); }
html[data-theme="dark"] .map-tip strong { color: var(--dk-text); }

/* Mapa de Medios (quién ganó terreno en 24 h): la misma tarjeta clara; más intenso, más puntos ganados. */
.admin-app .live-map-card { --lm-none: var(--map-none); --lm-nomarket: #dedad2; --lm-flat: #bdb8ad; --lm-line: var(--map-line);
  --lm-dem1: #b4cbe8; --lm-dem2: #5f8fcb; --lm-dem3: #1d4c8a; --lm-rep1: #f2bcb3; --lm-rep2: #d66a5e; --lm-rep3: #a2282a; }
html[data-theme="dark"] .admin-app .live-map-card { --lm-nomarket: #423f3a; --lm-flat: #625e57; }
.admin-app .live-map-svg .live-state { stroke-width: 1; }
.admin-app .live-map-svg .live-state:hover { stroke: var(--nv-ink); stroke-width: 1.6; }
.admin-app .live-map-svg .live-state.is-selected, .admin-app .live-map-svg .live-state:focus-visible { stroke: var(--nv-ink); stroke-width: 2.4; }
.admin-app .live-map-label { fill: var(--map-ink); font-family: var(--nv-font); font-size: 11.5px; font-weight: 600; letter-spacing: .04em; paint-order: stroke; stroke: rgba(255, 255, 255, .75); stroke-width: 2.5px; }
.admin-app .live-map-label.is-quiet { fill: var(--map-quiet); stroke: none; font-weight: 500; }
.admin-app .live-map-label.is-selected { fill: var(--map-ink); stroke: #fff; }
html[data-theme="dark"] .admin-app .live-map-label { fill: #fff; stroke: rgba(0, 0, 0, .55); }
.admin-app .live-map-leader { stroke: var(--map-quiet); stroke-dasharray: none; }
.admin-app .live-key i { border-radius: 0; box-shadow: inset 0 0 0 1px rgba(18, 17, 16, .08); }
.admin-app .live-legend { color: var(--nv-muted); }
.admin-app .live-key-note { color: var(--nv-muted); }

/* ---------- Detalles finos ---------- */
/* Filete negro bajo el encabezado de cada bloque, como en las secciones de un diario. */
.admin-app .home-block-head, .admin-app .home-battles-head, .admin-app .home-consensus .cons-head { padding-bottom: 10px; border-bottom: 1px solid var(--nv-ink); }
.admin-app .home-consensus { border-top: 0; padding-top: 0; margin-top: 30px; }
.admin-app .home-block-head p, .admin-app .home-battles-head p, .admin-app .cons-head p { font-size: 13px; }
/* El veredicto: titular grande en serif. */
.admin-app .home-verdict { gap: 12px; padding: 20px 20px 18px; }
.admin-app .home-ledger { font-size: 11.5px; }
/* Lista de estados: filas con filete. */
.admin-app .hs-row { padding: 11px 6px; }
.admin-app .hs-row-text strong { font-weight: 600; font-size: 14px; }
@media (max-width: 640px) {
  .admin-app .page-title { font-size: 25px; }
  .admin-app .home-verdict-title { font-size: 25px; }
  .map-scale-bar li { font-size: 9px; }
}

/* Pronóstico ODYSSEUS por cargo: tarjetas claras con filete superior; el negro queda para el veredicto. */
html:not([data-theme="dark"]) .admin-app .cons-office { border: 1px solid var(--nv-line); border-top: 2px solid var(--nv-ink); background: var(--nv-card); color: var(--nv-text); }
html:not([data-theme="dark"]) .admin-app .cons-office-head h3 { color: var(--nv-ink); }
html:not([data-theme="dark"]) .admin-app .cons-office-head span, html:not([data-theme="dark"]) .admin-app .cons-score span, html:not([data-theme="dark"]) .admin-app .cons-expected { color: var(--nv-muted); }
html:not([data-theme="dark"]) .admin-app .cons-office-verdict.dem, html:not([data-theme="dark"]) .admin-app .cons-score .dem strong { color: var(--map-dem-safe); }
html:not([data-theme="dark"]) .admin-app .cons-office-verdict.rep, html:not([data-theme="dark"]) .admin-app .cons-score .rep strong { color: var(--map-rep-safe); }
html:not([data-theme="dark"]) .admin-app .cons-office-verdict.toss, html:not([data-theme="dark"]) .admin-app .cons-score .toss strong { color: var(--nv-ink); }
html:not([data-theme="dark"]) .admin-app .cons-bar { background: var(--nv-active); }
html:not([data-theme="dark"]) .admin-app .cons-expected { border-top-color: var(--nv-line); }
.admin-app .cons-office-verdict { font-size: 19px; line-height: 1.25; }
.admin-app .cons-bar .dem { background: var(--map-dem-likely); } .admin-app .cons-bar .rep { background: var(--map-rep-likely); } .admin-app .cons-bar .toss { background: var(--map-toss); }
.admin-app .home-ledger-bar .dem { background: var(--map-dem-likely); } .admin-app .home-ledger-bar .rep { background: var(--map-rep-likely); } .admin-app .home-ledger-bar .toss { background: var(--map-toss); }

/* Por cargo: cifras y claves que caben en columnas angostas. */
.admin-app .home-nat-card .home-col b { font-size: 15px; }
.admin-app .home-nat-card .home-col small { font-size: 10px; letter-spacing: .02em; text-transform: none; }
.admin-app .home-nat-card .home-office-name { font-size: 10px; letter-spacing: .06em; }

/* Predicción: «Resaltar en el mapa» sobre la tarjeta clara. */
.admin-app .sim-coverage-button { border-color: var(--nv-line-strong); border-radius: 2px; color: var(--nv-text); }
.admin-app .sim-coverage-button:hover { background: var(--nv-hover); }
.admin-app .sim-coverage-button[aria-pressed="true"] { border-color: var(--nv-ink); background: var(--nv-ink); color: var(--nv-card); }
.admin-app .sim-coverage-button:focus-visible { outline-color: var(--nv-focus); }
/* Más títulos de tarjeta en serif. */
.admin-app .live-side-title, .admin-app .sim-race-heading h4, .admin-app .sen-detail h3, .admin-app .sim-state-heading h3, .admin-app .battle-match {
  font-family: var(--nv-serif); font-weight: 500; letter-spacing: -.005em;
}
.admin-app .live-side-title, .admin-app .sim-race-heading h4 { font-size: 18px; }
.admin-app .battle-match { font-size: 20px; }
/* El tema oscuro generado pinta las siglas a su manera: aquí, claras y sin halo. */
html[data-theme="dark"] .admin-app .sim-map .sim-state-label { fill: var(--map-ink); stroke: none; }
html[data-theme="dark"] .admin-app .sim-map .sim-state-label.no-data { fill: var(--map-quiet); }

/* ---------- Gráficas circulares: anillo de intención de voto con la foto al centro ---------- */
.hs-ring { --ring-c: var(--map-toss); position: relative; display: grid; place-items: center; flex: none; width: min(var(--ring, 112px), 100%); aspect-ratio: 1; }
.hs-ring.dem { --ring-c: var(--map-dem-likely); } .hs-ring.rep { --ring-c: var(--map-rep-likely); } .hs-ring.oth { --ring-c: var(--map-oth); }
.hs-ring-svg { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
.hs-ring-track { fill: none; stroke: var(--nv-active); stroke-width: 5.5; }
.hs-ring-arc { fill: none; stroke: var(--ring-c); stroke-width: 5.5; stroke-linecap: round; filter: drop-shadow(0 0 2.5px color-mix(in srgb, var(--ring-c) 55%, transparent)); transition: stroke-dasharray .7s cubic-bezier(.23, 1, .32, 1); }
.hs-ring-ticks line { stroke: var(--nv-line-strong); stroke-width: .6; stroke-linecap: round; }
.admin-app .hs-ring .sen-avatar { position: relative; width: 60%; height: 60%; box-shadow: 0 0 0 3px var(--nv-card); font-family: var(--nv-serif); font-size: 18px; font-weight: 500; }
html[data-theme="dark"] .hs-ring-track { stroke: var(--dk-raised); }
html[data-theme="dark"] .hs-ring-ticks line { stroke: var(--dk-line-strong); }
@media (prefers-reduced-motion: reduce) { .hs-ring-arc { transition: none; } }

/* Podio del estado elegido: 2.º, 1.º y 3.º lugar, el primero al centro y resaltado. */
.hs-podium { display: grid; grid-template-columns: repeat(var(--n, 2), minmax(0, 1fr)); align-items: end; gap: 10px; margin: 14px 0 2px; padding: 0; list-style: none; }
.hs-podium.n1 { --n: 1; max-width: 220px; } .hs-podium.n2 { --n: 2; } .hs-podium.n3 { grid-template-columns: minmax(0, 1fr) minmax(0, 1.14fr) minmax(0, 1fr); }
.hs-pod { --pod-c: var(--map-toss); position: relative; display: grid; justify-items: center; align-content: start; gap: 8px; min-width: 0; padding: 22px 10px 10px; border: 1px solid var(--nv-line); border-radius: 6px; background: var(--nv-card); text-align: center; }
.hs-pod.dem { --pod-c: var(--map-dem-likely); } .hs-pod.rep { --pod-c: var(--map-rep-likely); } .hs-pod.oth { --pod-c: var(--map-oth); }
.hs-pod.is-leader { padding-top: 26px; border-color: color-mix(in srgb, var(--pod-c) 55%, var(--nv-line)); background: linear-gradient(180deg, color-mix(in srgb, var(--pod-c) 8%, var(--nv-card)), var(--nv-card) 60%); box-shadow: 0 14px 30px -22px color-mix(in srgb, var(--pod-c) 80%, transparent); }
.hs-rank { position: absolute; top: -10px; left: 50%; padding: 1px 9px; border: 1px solid var(--nv-line-strong); border-radius: 999px; background: var(--nv-card); color: var(--nv-text); font-size: 11px; font-weight: 700; line-height: 17px; transform: translateX(-50%); }
.hs-pod.is-leader .hs-rank { border-color: var(--nv-ink); background: var(--nv-ink); color: var(--nv-card); }
.hs-pod-who { display: grid; gap: 1px; min-width: 0; }
.hs-pod-who strong { color: var(--nv-ink); font-size: 13px; font-weight: 600; line-height: 1.25; overflow-wrap: anywhere; }
.hs-pod-who small { color: var(--nv-muted); font-size: 11px; }
.hs-pod-pct { color: var(--nv-ink); font-family: var(--nv-serif); font-size: 28px; font-weight: 500; line-height: 1; letter-spacing: -.01em; font-variant-numeric: tabular-nums lining-nums; }
.hs-pod.is-leader .hs-pod-pct { font-size: 34px; }
.hs-pod-pct span { color: var(--nv-muted); font-size: .55em; }
.hs-pod-stats { display: grid; width: 100%; margin: 2px 0 0; }
.hs-pod-stats div { display: flex; align-items: baseline; justify-content: space-between; gap: 6px; padding: 5px 0; border-top: 1px solid var(--nv-line); }
.hs-pod-stats dt { color: var(--nv-muted); font-size: 11px; text-align: left; }
.hs-pod-stats dd { margin: 0; color: var(--nv-ink); font-size: 12px; font-weight: 700; white-space: nowrap; font-variant-numeric: tabular-nums; }
.hs-pod.is-leader .hs-pod-stats .ahead dd { color: color-mix(in srgb, var(--pod-c) 75%, var(--nv-ink)); }
.hs-pod-note { padding: 2px 8px; border: 1px solid #e2c36b; border-radius: 2px; background: #fdf6e1; color: #7a5a00; font-size: 10.5px; font-weight: 700; }
html[data-theme="dark"] .hs-pod-note { border-color: rgba(246, 196, 83, .45); background: rgba(246, 196, 83, .1); color: #f6c453; }
.hs-podium + .hs-people { margin-top: 6px; padding-top: 12px; border-top: 1px solid var(--nv-line); }
@media (max-width: 640px) {
  .hs-podium { gap: 6px; }
  .hs-pod { padding-inline: 6px; }
  .hs-pod-pct { font-size: 22px; } .hs-pod.is-leader .hs-pod-pct { font-size: 26px; }
  .hs-pod-stats dt { font-size: 10px; }
}

/* «Las más disputadas»: los dos anillos frente a frente. */
.battle-duo { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; gap: 6px; margin: 6px 0 2px; }
.battle-side { display: grid; justify-items: center; gap: 4px; min-width: 0; text-align: center; }
.admin-app .battle-side .battle-name { overflow: hidden; max-width: 100%; color: var(--nv-text); font-size: 13px; font-weight: 500; text-overflow: ellipsis; white-space: nowrap; }
.admin-app .battle-side.is-winner .battle-name { color: var(--nv-ink); font-weight: 700; }
.battle-pct { color: var(--nv-ink); font-family: var(--nv-serif); font-size: 24px; font-weight: 500; line-height: 1; font-variant-numeric: tabular-nums lining-nums; }
.battle-pct span { color: var(--nv-muted); font-size: .55em; }
.battle-vs { color: var(--nv-muted); font-family: var(--nv-serif); font-size: 15px; font-style: italic; }
.admin-app .battle-odds { margin: 0; padding-top: 10px; border-top: 1px solid var(--nv-line); color: var(--nv-muted); font-size: 12.5px; text-align: center; }
.admin-app .battle-odds strong { color: var(--nv-ink); font-family: var(--nv-serif); font-size: 18px; font-weight: 500; }

/* Por cargo: un anillo por cargo con el diseño de las gráficas circulares (marcas cada 5%, arcos con
   brillo suave) y, debajo, la cuenta exacta de cada lado con su porcentaje. */
.admin-app .home-nat-card .home-office-grid { gap: 10px; }
.admin-app .home-nat-card .home-office { display: grid; justify-items: center; align-content: start; gap: 10px; padding: 4px 4px 10px; border: 0; text-align: center; }
.home-donut { width: 100%; max-width: 124px; aspect-ratio: 1; overflow: visible; }
.home-donut-track { fill: none; stroke: var(--nv-active); stroke-width: 7; }
.home-donut-seg { --seg: var(--map-toss); fill: none; stroke: var(--seg); stroke-width: 7; filter: drop-shadow(0 0 2px color-mix(in srgb, var(--seg) 50%, transparent)); transition: stroke-dasharray .7s cubic-bezier(.23, 1, .32, 1); }
.home-donut-seg.dem { --seg: var(--map-dem-likely); } .home-donut-seg.rep { --seg: var(--map-rep-likely); } .home-donut-seg.toss { --seg: var(--map-toss); filter: none; } .home-donut-seg.oth { --seg: var(--map-oth); }
.home-donut-total { fill: var(--nv-ink); font-family: var(--nv-serif); font-size: 25px; font-weight: 500; font-variant-numeric: tabular-nums lining-nums; }
.home-donut-label { fill: var(--nv-muted); font-family: var(--nv-font); font-size: 8.5px; letter-spacing: .04em; }
.home-donut-key { display: grid; gap: 3px; width: 100%; max-width: 132px; margin: 0; padding: 8px 0 0; border-top: 1px solid var(--nv-line); list-style: none; color: var(--nv-muted); font-size: 11.5px; font-variant-numeric: tabular-nums; text-align: left; }
.home-donut-key i { width: 8px; height: 8px; border-radius: 2px; background: var(--map-toss); }
.home-donut-key .dem i { background: var(--map-dem-likely); } .home-donut-key .rep i { background: var(--map-rep-likely); } .home-donut-key .oth i { background: var(--map-oth); }
.home-donut-key b { color: var(--nv-ink); font-weight: 700; text-align: right; }
.home-donut-key .dem b { color: var(--map-dem-safe); } .home-donut-key .rep b { color: var(--map-rep-safe); }
.home-donut-key small { font-size: 11px; text-align: right; }
.home-donut-key .is-zero { opacity: .55; }
html[data-theme="dark"] .home-donut-key .dem b { color: #8db8ec; } html[data-theme="dark"] .home-donut-key .rep b { color: #f29a90; }
html[data-theme="dark"] .home-donut-track { stroke: var(--dk-raised); }
@media (prefers-reduced-motion: reduce) { .home-donut-seg { transition: none; } }

/* Quién va adelante: tarjeta clara como las otras dos. Las cuentas en una fila (con su porcentaje), la
   diferencia y las victorias esperadas; cada cuenta y cada tramo de la barra abren sus contiendas. */
html .admin-app .home-national-grid .home-verdict { gap: 12px; padding: 16px 18px; border: 1px solid var(--nv-line); background: var(--nv-card); box-shadow: var(--nv-shadow); color: var(--nv-text); }
.admin-app .home-national-grid .home-verdict .home-nat-title { margin-bottom: 2px; }
html .admin-app .home-national-grid .home-verdict .home-verdict-title { color: var(--nv-ink); font-size: 27px; }
html .admin-app .home-national-grid .home-verdict .home-verdict-title .dem { color: var(--map-dem-safe); }
html .admin-app .home-national-grid .home-verdict .home-verdict-title .rep { color: var(--map-rep-safe); }
html .admin-app .home-national-grid .home-ledger-bar { display: flex; height: 10px; gap: 2px; background: none; overflow: visible; }
.home-ledger-bar button { flex: 1 1 0; min-width: 4px; padding: 0; border: 0; background: var(--map-toss); cursor: pointer; transform-origin: center; transition: opacity .25s ease, transform .25s ease; }
.admin-app .home-ledger-bar button.dem { background: var(--map-dem-likely); } .admin-app .home-ledger-bar button.rep { background: var(--map-rep-likely); } .admin-app .home-ledger-bar button.oth { background: var(--map-oth); }
.home-ledger-bar button:hover, .home-ledger-bar button.is-active { transform: scaleY(1.6); }
.home-ledger-bar button.is-faded { opacity: .3; }
html .admin-app .home-national-grid .home-ledger { display: grid; grid-template-columns: repeat(auto-fit, minmax(70px, 1fr)); gap: 6px; color: var(--nv-muted); }
/* Con «otros», cuatro cuentas: en dos filas para que cada etiqueta quepa completa. */
html .admin-app .home-national-grid .home-ledger.n4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.home-ledger-item { display: grid; align-content: start; gap: 1px; min-width: 0; padding: 7px 8px 8px; border: 1px solid transparent; border-radius: 6px; background: none; color: inherit; font: inherit; font-size: 11.5px; line-height: 1.3; text-align: left; cursor: pointer; transition: background .18s ease, border-color .18s ease, transform .18s ease; }
.home-ledger-item:hover:not(:disabled) { background: var(--nv-subtle); }
.home-ledger-item[aria-pressed="true"] { border-color: var(--nv-ink); background: var(--nv-subtle); }
.home-ledger-item:disabled { cursor: default; opacity: .55; }
.home-ledger-item:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: 1px; }
.home-ledger-item span { display: block; }
html .admin-app .home-national-grid .home-ledger b { color: var(--nv-ink); font-family: var(--nv-serif); font-size: 26px; font-weight: 500; line-height: 1.05; }
html .admin-app .home-national-grid .home-ledger .dem b { color: var(--map-dem-safe); }
html .admin-app .home-national-grid .home-ledger .rep b { color: var(--map-rep-safe); }
html .admin-app .home-national-grid .home-ledger .oth b { color: var(--map-oth); }
.admin-app .home-ledger em { color: var(--nv-muted); font-size: 11px; font-style: normal; font-variant-numeric: tabular-nums; }
.admin-app .home-verdict-gap { margin: 0; color: var(--nv-text); font-size: 12.5px; }
.admin-app .home-verdict-expected { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 14px; margin: 0; padding: 10px 0 0; border-top: 1px solid var(--nv-line); font-size: 12px; font-variant-numeric: tabular-nums; cursor: help; }
.admin-app .home-verdict-expected span, .home-detail-expected span { flex-basis: 100%; color: var(--nv-muted); font-size: 10.5px; letter-spacing: .06em; text-transform: uppercase; }
.admin-app .home-verdict-expected b, .home-detail-expected b { font-family: var(--nv-serif); font-size: 20px; font-weight: 500; }
.admin-app .home-verdict-expected .dem, .home-detail-expected .dem { color: var(--map-dem-safe); } .admin-app .home-verdict-expected .rep, .home-detail-expected .rep { color: var(--map-rep-safe); } .admin-app .home-verdict-expected .oth, .home-detail-expected .oth { color: var(--map-oth); }
html .admin-app .home-national-grid .home-verdict-meta { margin: 0; padding-top: 10px; border-top: 1px solid var(--nv-line); color: var(--nv-muted); font-size: 11.5px; }
.home-verdict-all { justify-self: start; padding: 5px 12px; border: 1px solid var(--nv-line-strong); border-radius: 999px; background: none; color: var(--nv-ink); font: inherit; font-size: 12px; font-weight: 600; cursor: pointer; transition: background .18s ease, color .18s ease; }
.home-verdict-all:hover, .home-verdict-all[aria-pressed="true"] { border-color: var(--nv-ink); background: var(--nv-ink); color: var(--nv-card); }
html[data-theme="dark"] .admin-app .home-national-grid .home-verdict .home-verdict-title .dem, html[data-theme="dark"] .admin-app .home-national-grid .home-ledger .dem b,
html[data-theme="dark"] .admin-app .home-verdict-expected .dem, html[data-theme="dark"] .home-detail-expected .dem { color: #8db8ec; }
html[data-theme="dark"] .admin-app .home-national-grid .home-verdict .home-verdict-title .rep, html[data-theme="dark"] .admin-app .home-national-grid .home-ledger .rep b,
html[data-theme="dark"] .admin-app .home-verdict-expected .rep, html[data-theme="dark"] .home-detail-expected .rep { color: #f29a90; }
html[data-theme="dark"] .admin-app .home-national-grid .home-ledger .oth b, html[data-theme="dark"] .admin-app .home-verdict-expected .oth, html[data-theme="dark"] .home-detail-expected .oth { color: #c7b5e6; }

/* Cambios: cuántas contiendas se movieron (cada cifra abre cuáles), la cuenta de antes y ahora por cargo
   (cada celda abre sus contiendas) y las que cambiaron de lado. */
.home-change-stats { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin: 0 0 12px; }
.home-change-stats button { display: grid; align-content: start; gap: 1px; padding: 8px 10px; border: 1px solid transparent; border-radius: 6px; background: var(--nv-subtle); color: inherit; font: inherit; text-align: left; cursor: pointer; transition: border-color .18s ease, transform .18s ease, box-shadow .18s ease; }
.home-change-stats button:hover:not(:disabled) { border-color: var(--nv-line-strong); transform: translateY(-1px); box-shadow: 0 6px 14px -10px rgba(22, 21, 20, .35); }
.home-change-stats button[aria-pressed="true"] { border-color: var(--nv-ink); }
.home-change-stats button:disabled { cursor: default; }
.home-change-stats b { color: var(--nv-ink); font-family: var(--nv-serif); font-size: 22px; font-weight: 500; line-height: 1.05; font-variant-numeric: tabular-nums lining-nums; }
.home-change-stats span { color: var(--nv-muted); font-size: 11px; line-height: 1.25; }
.home-change-stats .flip:not(.is-zero) b { color: #b7791f; }
.home-change-stats .is-zero b { color: var(--nv-muted); }
.admin-app .home-changes-table tfoot th, .admin-app .home-changes-table tfoot td { padding-top: 9px; border-top: 1px solid var(--nv-line-strong); border-bottom: 0; }
.admin-app .home-changes-table tfoot th { color: var(--nv-ink); font-weight: 700; }
.admin-app .home-changes-table td.toss b { color: var(--nv-ink); }
.admin-app .home-changes-table td.oth b { color: var(--map-oth); }
.admin-app .home-delta { min-width: 24px; margin-left: 5px; padding: 1px 4px; border-radius: 4px; font-size: 10.5px; font-weight: 700; }
.admin-app .home-delta.same { background: transparent; color: var(--nv-muted); font-weight: 500; opacity: .55; }
.admin-app .home-delta.new { background: var(--nv-subtle); color: var(--nv-muted); font-weight: 600; }
.admin-app .home-delta.dem { background: color-mix(in srgb, var(--map-dem-likely) 14%, transparent); color: var(--map-dem-safe); }
.admin-app .home-delta.rep { background: color-mix(in srgb, var(--map-rep-likely) 14%, transparent); color: var(--map-rep-safe); }
.admin-app .home-delta.toss, .admin-app .home-delta.oth { background: var(--nv-active); color: var(--nv-ink); }
.home-moves { display: grid; gap: 0; margin: 12px 0 0; padding: 0; border-top: 1px solid var(--nv-line); list-style: none; }
.home-move { display: grid; grid-template-columns: 30px minmax(0, 1fr) auto; grid-template-areas: "code place tags" "code detail detail"; align-items: center; gap: 2px 10px; width: 100%; padding: 8px 2px; border: 0; border-bottom: 1px solid var(--nv-line); background: none; color: inherit; font: inherit; text-align: left; cursor: pointer; }
.home-move:hover { background: var(--nv-subtle); }
.home-move:focus-visible { outline: 2px solid var(--nv-focus, #fbbf24); outline-offset: -2px; }
.home-move-code { grid-area: code; align-self: start; display: grid; place-items: center; height: 24px; border-radius: 3px; background: var(--map-toss); color: var(--nv-ink); font-size: 10.5px; font-weight: 700; letter-spacing: .03em; }
.home-move-code.dem { background: var(--map-dem-likely); color: #fff; } .home-move-code.rep { background: var(--map-rep-likely); color: #fff; } .home-move-code.oth { background: var(--map-oth); color: #fff; }
.home-move-place { grid-area: place; overflow: hidden; min-width: 0; color: var(--nv-ink); font-size: 12.5px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.home-move-detail { grid-area: detail; color: var(--nv-muted); font-size: 11.5px; line-height: 1.35; font-variant-numeric: tabular-nums; }
.home-move-tags { grid-area: tags; display: inline-flex; align-items: center; gap: 4px; }
.home-move-arrow { color: var(--nv-muted); font-size: 11px; }
.home-tag { padding: 1px 5px; border-radius: 3px; background: var(--nv-active); color: var(--nv-ink); font-size: 10.5px; font-weight: 600; white-space: nowrap; }
.home-tag.dem { background: color-mix(in srgb, var(--map-dem-likely) 16%, transparent); color: var(--map-dem-safe); }
.home-tag.rep { background: color-mix(in srgb, var(--map-rep-likely) 16%, transparent); color: var(--map-rep-safe); }
.home-tag.oth { background: color-mix(in srgb, var(--map-oth) 18%, transparent); color: var(--map-oth); }
html[data-theme="dark"] .admin-app .home-delta.dem { background: color-mix(in srgb, var(--map-dem-likely) 24%, transparent); color: #8db8ec; }
html[data-theme="dark"] .admin-app .home-delta.rep { background: color-mix(in srgb, var(--map-rep-likely) 24%, transparent); color: #f29a90; }
html[data-theme="dark"] .admin-app .home-delta.toss, html[data-theme="dark"] .admin-app .home-delta.oth { background: var(--dk-raised); color: var(--dk-text); }
html[data-theme="dark"] .home-tag.dem { color: #8db8ec; } html[data-theme="dark"] .home-tag.rep { color: #f29a90; }
html[data-theme="dark"] .admin-app .home-nat-card .home-office { background: transparent; }
html[data-theme="dark"] .admin-app .home-nat-card .home-office:hover { background: var(--nv-subtle); box-shadow: none; }
html[data-theme="dark"] .home-change-stats .flip:not(.is-zero) b { color: #f0c46c; }
.home-moves-none, .home-compare-list { margin: 10px 0 0; color: var(--nv-text); font-size: 12px; line-height: 1.45; }
@media (max-width: 640px) { .home-move { grid-template-columns: 30px minmax(0, 1fr); grid-template-areas: "code place" "code tags" "code detail"; } .home-move-tags { justify-self: start; } }
.admin-app .battle-odds { display: block; }

/* ---------- Carrusel de contiendas del estado elegido ---------- */
/* Las contiendas se apilan en la misma celda: el panel mide lo que la más alta y no salta al cambiar. */
.admin-app .hs-state-body { overflow-x: hidden; }
.hs-carousel { position: relative; display: grid; gap: 12px; }
.hs-carousel:focus { outline: none; }
.hs-slides { display: grid; overflow: hidden; padding: 0 2px 4px; }
.hs-slide { grid-area: 1 / 1; min-width: 0; }
.hs-slide[hidden] { display: none; }
.hs-slide.leave-next, .hs-slide.leave-prev { pointer-events: none; }
.hs-slide.enter-next { animation: hs-in-next .5s cubic-bezier(.22, 1, .36, 1) both; }
.hs-slide.enter-prev { animation: hs-in-prev .5s cubic-bezier(.22, 1, .36, 1) both; }
.hs-slide.leave-next { animation: hs-out-next .38s cubic-bezier(.4, 0, 1, 1) both; }
.hs-slide.leave-prev { animation: hs-out-prev .38s cubic-bezier(.4, 0, 1, 1) both; }
@keyframes hs-in-next { from { opacity: 0; transform: translateX(42px); } }
@keyframes hs-in-prev { from { opacity: 0; transform: translateX(-42px); } }
@keyframes hs-out-next { to { opacity: 0; transform: translateX(-42px); } }
@keyframes hs-out-prev { to { opacity: 0; transform: translateX(42px); } }
/* Los anillos de la contienda que entra aparecen escalonados: primero el 1.º, luego los demás. */
.hs-slide.enter-next .hs-pod, .hs-slide.enter-prev .hs-pod { animation: hs-pod-in .55s cubic-bezier(.22, 1, .36, 1) both; }
.hs-slide .hs-pod:nth-child(1) { animation-delay: .08s; } .hs-slide .hs-pod:nth-child(3) { animation-delay: .16s; }
@keyframes hs-pod-in { from { opacity: 0; transform: translateY(10px) scale(.97); } }
.admin-app .hs-ring-arc { transition: stroke-dasharray .9s cubic-bezier(.22, 1, .36, 1); }

/* Flechas: círculos blancos a los lados del podio. */
.hs-arrow { position: absolute; top: 200px; z-index: 2; display: grid; place-items: center; width: 34px; height: 34px; padding: 0; border: 1px solid var(--nv-line-strong); border-radius: 50%; background: var(--nv-card); color: var(--nv-ink); box-shadow: 0 6px 16px -8px rgba(18, 17, 16, .35); cursor: pointer; transition: transform .18s cubic-bezier(.23, 1, .32, 1), background-color .15s ease, border-color .15s ease; }
.hs-arrow.prev { left: -6px; } .hs-arrow.next { right: -6px; }
.hs-arrow svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.hs-arrow:hover { border-color: var(--nv-ink); background: var(--nv-ink); color: var(--nv-card); }
.hs-arrow:active { transform: scale(.92); }
.hs-arrow:focus-visible, .hs-dot:focus-visible, .hs-pause:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: 2px; }

/* Barra inferior: «2 de 5», un punto por contienda (el activo se alarga) y la pausa. */
.hs-carousel-bar { display: flex; align-items: center; gap: 12px; padding-bottom: 10px; border-bottom: 1px solid var(--nv-line); }
/* Encabezado del estado en dos líneas: sigla, nombre y «Todos los estados» arriba; el resumen debajo. */
.admin-app .hs-head-state { grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 6px 12px; padding-bottom: 12px; }
.admin-app .hs-head-state .hs-state-title { grid-row: 1; grid-column: 1; }
.admin-app .hs-head-state .hs-back { grid-row: 1; grid-column: 2; }
.admin-app .hs-head-state .hs-state-meta { grid-column: 1 / -1; }
.admin-app .hs-head .hs-state-title h2 { font-size: 22px; }
.admin-app .hs-code.big { width: 36px; height: 36px; }
.admin-app .hs-state-body { padding-top: 12px; }
.admin-app .hs-carousel .hs-race { padding-top: 10px; }
.admin-app .hs-carousel .hs-podium { margin-top: 12px; }
.hs-carousel-count { flex: none; min-width: 44px; color: var(--nv-muted); font-size: 12px; font-weight: 600; font-variant-numeric: tabular-nums; }
.hs-dots { display: flex; flex: 1; flex-wrap: wrap; align-items: center; justify-content: center; gap: 6px; }
.hs-dot { position: relative; width: 8px; height: 8px; padding: 0; overflow: hidden; border: 0; border-radius: 999px; background: var(--nv-line-strong); cursor: pointer; transition: width .3s cubic-bezier(.23, 1, .32, 1), background-color .2s ease; }
.hs-dot:hover { background: var(--nv-muted); }
.hs-dot[aria-current="true"] { width: 28px; background: var(--nv-active); }
/* El punto activo se va llenando durante los 3 segundos: así se ve cuándo pasa a la siguiente. */
.hs-dot[aria-current="true"]::after { content: ""; position: absolute; inset: 0; border-radius: inherit; background: var(--nv-ink); transform-origin: left; transform: scaleX(1); }
.hs-carousel.is-running .hs-dot[aria-current="true"]::after { animation: hs-fill 3s linear both; }
@keyframes hs-fill { from { transform: scaleX(0); } }
.hs-pause { display: grid; flex: none; place-items: center; width: 28px; height: 28px; padding: 0; border: 1px solid var(--nv-line); border-radius: 50%; background: var(--nv-card); color: var(--nv-text); cursor: pointer; }
.hs-pause:hover { border-color: var(--nv-ink); color: var(--nv-ink); }
.hs-pause svg { width: 12px; height: 12px; fill: currentColor; }
html[data-theme="dark"] .hs-arrow { border-color: var(--dk-line-strong); background: var(--dk-raised); color: var(--dk-text); box-shadow: 0 6px 16px -8px rgba(0, 0, 0, .7); }
html[data-theme="dark"] .hs-arrow:hover { background: var(--nv-ivory); color: var(--nv-black); }
html[data-theme="dark"] .hs-dot[aria-current="true"]::after { background: var(--nv-ivory); }
html[data-theme="dark"] .hs-pause { border-color: var(--dk-line-strong); background: var(--dk-raised); color: var(--dk-text); }
@media (max-width: 640px) { .hs-arrow { top: 120px; width: 30px; height: 30px; } }
@media (prefers-reduced-motion: reduce) {
  .hs-slide.enter-next, .hs-slide.enter-prev, .hs-slide.leave-next, .hs-slide.leave-prev, .hs-slide .hs-pod { animation: none; }
  .hs-carousel.is-running .hs-dot[aria-current="true"]::after { animation: none; }
  .hs-dot, .hs-arrow { transition: none; }
}
.admin-app .hs-carousel .hs-race-meta { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.admin-app .hs-carousel .hs-race-lead { padding-top: 8px; }

/* ---------- Pronóstico, sentimiento y predicción bajo el podio ---------- */
/* Con un estado elegido, el panel crece lo que necesite (el mapa se estira a su lado) y no se desplaza por dentro. */
.home-states.is-detail { height: auto; min-height: 100%; }
.home-states.is-detail .hs-state-body { overflow: visible; max-height: none; }
.home-states { container-type: inline-size; }
.hs-insights { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin-top: 12px; }
/* Tarjeta: blanca, filete fino, esquinas suaves y una sombra apenas visible. */
.hs-ins { --ins-c: var(--nv-ink); --ins-soft: var(--nv-active); display: flex; flex-direction: column; gap: 8px; min-width: 0; padding: 12px 14px 13px; border: 1px solid var(--nv-line); border-radius: 8px; background: var(--nv-card); box-shadow: 0 1px 2px rgba(18, 17, 16, .04), 0 8px 20px -16px rgba(18, 17, 16, .22); }
.hs-ins.forecast { --ins-c: #121110; --ins-soft: #efece4; }
.hs-ins.mood { --ins-c: #8a6d2c; --ins-soft: #f5eedc; }
.hs-ins.model { --ins-c: #3e5878; --ins-soft: #e7edf4; }
.hs-ins-head { display: flex; align-items: center; gap: 8px; padding-bottom: 8px; border-bottom: 1px solid var(--nv-line); }
.hs-ins-icon { display: grid; flex: none; place-items: center; width: 22px; height: 22px; border-radius: 6px; background: var(--ins-soft); color: var(--ins-c); }
.hs-ins-icon svg { width: 13px; height: 13px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.hs-ins-title { margin: 0; color: var(--nv-ink); font-family: var(--nv-serif); font-size: 15px; font-weight: 500; letter-spacing: 0; text-transform: none; }
.hs-ins-caption { margin: 0; color: var(--nv-muted); font-size: 11px; line-height: 1.4; font-variant-numeric: tabular-nums; }
.hs-ins-empty { margin: 4px 0 0; color: var(--nv-muted); font-size: 12px; line-height: 1.5; }

/* Pronóstico: medio anillo con la probabilidad al centro. */
.hs-gauge { --g: var(--map-toss); position: relative; display: grid; justify-items: center; margin: 2px auto 0; width: min(100%, 150px); }
.hs-gauge.dem { --g: var(--map-dem-likely); } .hs-gauge.rep { --g: var(--map-rep-likely); } .hs-gauge.oth { --g: var(--map-oth); }
.hs-gauge svg { display: block; width: 100%; height: auto; overflow: visible; }
.hs-gauge-track, .hs-gauge-fill { fill: none; stroke-width: 9; stroke-linecap: round; }
.hs-gauge-track { stroke: var(--nv-active); }
.hs-gauge-fill { stroke: var(--g); filter: drop-shadow(0 0 2px color-mix(in srgb, var(--g) 45%, transparent)); transition: stroke-dasharray .9s cubic-bezier(.22, 1, .36, 1); }
.hs-gauge-value { position: absolute; bottom: 14px; color: var(--nv-ink); font-family: var(--nv-serif); font-size: 26px; font-weight: 500; line-height: 1; font-variant-numeric: tabular-nums lining-nums; }
.hs-gauge-name { margin-top: -2px; color: var(--nv-text); font-size: 12px; font-weight: 600; }
.hs-ins-foot-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: auto; padding-top: 8px; border-top: 1px solid var(--nv-line); }
.hs-ins-grade { display: inline-flex; align-items: center; gap: 6px; color: var(--nv-ink); font-size: 10.5px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
.hs-ins-grade::before { content: ""; width: 8px; height: 8px; border-radius: 2px; background: var(--map-toss); }
.hs-ins-grade.dem::before { background: var(--map-dem-likely); } .hs-ins-grade.rep::before { background: var(--map-rep-likely); }
.hs-signal-dots { display: inline-flex; gap: 3px; }
.hs-signal-dots i { width: 7px; height: 7px; border: 1.5px solid var(--nv-line-strong); border-radius: 50%; }
.hs-signal-dots i.on { border-color: #17714a; background: #17714a; }
.hs-ins.forecast .hs-ins-caption { margin-top: -4px; }

/* Sentimiento: resumen y lecturas en filas finas. */
.hs-ins-summary { margin: 0; color: var(--nv-ink); font-family: var(--nv-serif); font-size: 15px; line-height: 1.3; }
.hs-ins-rows { display: grid; margin: 0; padding: 0; list-style: none; }
.hs-ins-rows li { display: grid; grid-template-columns: minmax(0, auto) minmax(0, 1fr) 14px; align-items: center; gap: 8px; padding: 6px 0; border-top: 1px dotted var(--nv-line-strong); font-size: 11.5px; }
.hs-ins-rows li:first-child { border-top: 0; }
.hs-ins-key { color: var(--nv-muted); font-size: 11px; white-space: nowrap; }
.hs-ins-val { overflow: hidden; color: var(--nv-ink); font-weight: 600; text-align: right; text-overflow: ellipsis; white-space: nowrap; font-variant-numeric: tabular-nums; }
/* En Sentimiento el valor puede bajar de línea antes que cortarse. */
.hs-ins-rows .hs-ins-val { white-space: normal; overflow-wrap: anywhere; line-height: 1.3; }
.hs-ins-mark { justify-self: end; color: var(--nv-muted); font-size: 11px; font-style: normal; font-weight: 800; }
.hs-ins-rows .agree .hs-ins-mark { color: #17714a; } .hs-ins-rows .disagree .hs-ins-mark { color: #b4372f; }
html[data-theme="dark"] .hs-ins-rows .agree .hs-ins-mark, html[data-theme="dark"] .hs-signal-dots i.on { color: #4ccf8a; }
html[data-theme="dark"] .hs-signal-dots i.on { border-color: #4ccf8a; background: #4ccf8a; }
html[data-theme="dark"] .hs-ins-rows .disagree .hs-ins-mark { color: #f39a8a; }

/* Predicción: cifra, regla del margen con el cero al centro y fuentes. */
.hs-ins-lead { display: flex; align-items: baseline; gap: 7px; min-width: 0; margin: 0; }
.hs-ins-lead b { color: var(--nv-ink); font-family: var(--nv-serif); font-size: 26px; font-weight: 500; line-height: 1; font-variant-numeric: tabular-nums lining-nums; }
.hs-ins-lead span { overflow: hidden; color: var(--nv-text); font-size: 12px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.hs-ins-lead.dem b { color: var(--map-dem-safe); } .hs-ins-lead.rep b { color: var(--map-rep-safe); }
html[data-theme="dark"] .hs-ins-lead.dem b { color: #8db8ec; } html[data-theme="dark"] .hs-ins-lead.rep b { color: #f29a90; }
.hs-rule { --r: var(--map-toss); position: relative; height: 8px; margin: 2px 0 0; border-radius: 4px; background: repeating-linear-gradient(90deg, var(--nv-active) 0 1px, transparent 1px 10%), var(--nv-subtle); box-shadow: inset 0 0 0 1px var(--nv-line); }
.hs-rule.dem { --r: var(--map-dem-likely); } .hs-rule.rep { --r: var(--map-rep-likely); }
.hs-rule-span { position: absolute; top: 1px; bottom: 1px; border-radius: 3px; background: color-mix(in srgb, var(--r) 75%, transparent); }
.hs-rule-zero { position: absolute; top: -3px; bottom: -3px; left: 50%; width: 1.5px; background: var(--nv-ink); transform: translateX(-50%); }
.hs-ins-sources { display: grid; margin: 2px 0 0; padding: 0; list-style: none; }
.hs-src { display: grid; gap: 3px; padding: 6px 0; border-top: 1px dotted var(--nv-line-strong); }
.hs-src:first-child { border-top: 1px solid var(--nv-line); }
.hs-src-top { display: grid; grid-template-columns: 7px auto minmax(0, 1fr); align-items: center; gap: 7px; font-size: 11.5px; }
.hs-src.is-empty .hs-ins-val { color: var(--nv-muted); font-weight: 400; }
.hs-ins-val.dem { color: var(--map-dem-safe); } .hs-ins-val.rep { color: var(--map-rep-safe); }
html[data-theme="dark"] .hs-ins-val.dem { color: #8db8ec; } html[data-theme="dark"] .hs-ins-val.rep { color: #f29a90; }
.src-dot { width: 7px; height: 7px; border-radius: 50%; background: #2a4f8f; }
.src-dot.s-odiseo { background: #0f8f80; } .src-dot.s-gratings { background: #c27806; } .src-dot.s-internal { background: #2a4f8f; }
/* Las encuestas de cada fuente: botones en píldora que abren el visor sobre la tarjeta. */
.hs-polls { display: flex; flex-wrap: wrap; align-items: center; gap: 5px; padding-left: 14px; }
.hs-poll { display: inline-flex; align-items: center; gap: 3px; min-height: 22px; padding: 2px 7px 2px 9px; border: 1px solid var(--nv-line-strong); border-radius: 999px; background: var(--nv-card); color: var(--nv-ink); font: 600 11px/1.3 var(--nv-font); font-variant-numeric: tabular-nums; white-space: nowrap; cursor: pointer; box-shadow: 0 1px 2px rgba(18, 17, 16, .07); transition: background-color .15s ease, border-color .15s ease, transform .12s ease; }
.hs-poll::after { content: "›"; color: var(--ins-c); font-size: 14px; font-weight: 700; line-height: 1; transition: transform .15s ease; }
.hs-poll:hover { border-color: var(--ins-c); background: var(--ins-soft); color: var(--nv-ink); }
.hs-poll:hover::after { transform: translateX(2px); }
.hs-poll:active { transform: translateY(1px); }
.hs-poll:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: 2px; }
.hs-poll.more { border-style: dashed; color: var(--nv-muted); box-shadow: none; }
.hs-poll.more::after { content: none; }
.hs-poll.more { padding-right: 9px; }
html[data-theme="dark"] .hs-poll { border-color: var(--dk-line-strong, var(--dk-line)); background: var(--dk-card); color: var(--dk-text); box-shadow: none; }
html[data-theme="dark"] .hs-poll:hover { border-color: var(--ins-c); background: var(--ins-soft); color: #fff; }
html[data-theme="dark"] .hs-poll.more { color: var(--dk-muted); }

/* Visor de una encuesta: cubre la tarjeta de Predicción; flechas para pasar a las demás. */
.hs-ins.model { position: relative; }
.hs-pop { position: absolute; inset: -1px; z-index: 5; display: flex; flex-direction: column; min-height: 0; border: 1px solid var(--ins-c); border-radius: 8px; background: var(--nv-card); box-shadow: 0 18px 40px -18px rgba(18, 17, 16, .45); animation: hs-pop-in .2s cubic-bezier(.22, 1, .36, 1) both; }
@keyframes hs-pop-in { from { opacity: 0; transform: translateY(6px) scale(.98); } }
.hs-pop-head { display: grid; grid-template-columns: 7px minmax(0, 1fr) auto 26px; align-items: center; gap: 7px; padding: 8px 8px 8px 12px; border-bottom: 1px solid var(--nv-line); background: var(--ins-soft); border-radius: 7px 7px 0 0; font-size: 11.5px; }
.hs-pop-src { overflow: hidden; color: var(--nv-ink); font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.hs-pop-count { color: var(--nv-muted); font-size: 11px; font-variant-numeric: tabular-nums; }
.hs-pop-close { display: grid; place-items: center; width: 26px; height: 26px; min-height: 0; padding: 0; border: 0; border-radius: 50%; background: none; color: var(--nv-muted); font-size: 13px; cursor: pointer; }
.hs-pop-close:hover { background: var(--nv-card); color: var(--nv-ink); }
.hs-pop-body { flex: 1 1 auto; display: grid; align-content: start; gap: 7px; min-height: 0; overflow: auto; padding: 10px 12px; }
.hs-pop-body.from-next { animation: hs-pop-next .22s cubic-bezier(.22, 1, .36, 1) both; }
.hs-pop-body.from-prev { animation: hs-pop-prev .22s cubic-bezier(.22, 1, .36, 1) both; }
@keyframes hs-pop-next { from { opacity: 0; transform: translateX(14px); } }
@keyframes hs-pop-prev { from { opacity: 0; transform: translateX(-14px); } }
.hs-pop-title { margin: 0; color: var(--nv-ink); font-family: var(--nv-serif); font-size: 17px; font-weight: 500; line-height: 1.2; overflow-wrap: anywhere; }
.hs-pop-sub { margin: -3px 0 0; color: var(--nv-muted); font-size: 11px; line-height: 1.35; overflow-wrap: anywhere; }
.hs-pop-meta { display: grid; grid-template-columns: repeat(auto-fit, minmax(92px, 1fr)); gap: 4px 10px; margin: 0; }
.hs-pop-meta div { min-width: 0; }
.hs-pop-meta dt { color: var(--nv-muted); font-size: 10px; letter-spacing: .05em; text-transform: uppercase; }
.hs-pop-meta dd { margin: 0; color: var(--nv-ink); font-size: 11.5px; font-weight: 600; font-variant-numeric: tabular-nums; }
.hs-pop-results { display: grid; gap: 6px; margin: 2px 0 0; padding: 7px 0 0; border-top: 1px dotted var(--nv-line-strong); list-style: none; }
.hs-pop-results li { --c: var(--map-toss); display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 3px 8px; align-items: baseline; font-size: 11.5px; }
.hs-pop-results li.dem { --c: var(--map-dem-likely); } .hs-pop-results li.rep { --c: var(--map-rep-likely); }
.hs-pop-who { overflow: hidden; color: var(--nv-ink); font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.hs-pop-who small { color: var(--nv-muted); font-size: 10.5px; font-weight: 400; }
.hs-pop-results b { color: var(--nv-ink); font-variant-numeric: tabular-nums; }
.hs-pop-bar { grid-column: 1 / -1; height: 5px; overflow: hidden; border-radius: 3px; background: var(--nv-subtle); }
.hs-pop-bar i { display: block; height: 100%; border-radius: 3px; background: var(--c); }
.hs-pop-lead { margin: 0; color: var(--nv-muted); font-size: 11px; }
.hs-pop-foot { display: grid; grid-template-columns: 32px minmax(0, 1fr) 32px; align-items: center; gap: 8px; padding: 8px 10px; border-top: 1px solid var(--nv-line); }
.hs-pop-arrow { display: grid; place-items: center; width: 32px; height: 32px; min-height: 0; padding: 0; border: 1px solid var(--nv-line-strong); border-radius: 50%; background: var(--nv-card); color: var(--nv-ink); cursor: pointer; transition: background-color .15s ease, border-color .15s ease, transform .12s ease; }
.hs-pop-arrow svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.hs-pop-arrow:hover:not(:disabled) { border-color: var(--nv-ink); background: var(--nv-ink); color: var(--nv-card); }
.hs-pop-arrow:active:not(:disabled) { transform: scale(.92); }
.hs-pop-arrow:disabled { opacity: .35; cursor: default; }
.hs-pop-open { min-height: 30px; padding: 4px 10px; overflow: hidden; border: 1px solid var(--ins-c); border-radius: 999px; background: var(--ins-soft); color: var(--nv-ink); font: 600 11.5px/1.2 var(--nv-font); text-overflow: ellipsis; white-space: nowrap; cursor: pointer; }
.hs-pop-open:hover:not(:disabled) { background: var(--ins-c); color: var(--nv-card); }
.hs-pop-open:disabled { border-color: var(--nv-line); background: none; color: var(--nv-muted); cursor: default; }
.hs-pop :focus-visible { outline: 2px solid var(--nv-focus); outline-offset: 2px; }
html[data-theme="dark"] .hs-pop { background: var(--dk-raised); box-shadow: 0 18px 40px -18px rgba(0, 0, 0, .7); }
html[data-theme="dark"] .hs-pop-bar { background: var(--dk-card); }
html[data-theme="dark"] .hs-pop-results li.dem { --c: #8db8ec; } html[data-theme="dark"] .hs-pop-results li.rep { --c: #f29a90; }
html[data-theme="dark"] .hs-pop-open:hover:not(:disabled) { color: var(--dk-raised); }
@media (prefers-reduced-motion: reduce) { .hs-pop, .hs-pop-body.from-next, .hs-pop-body.from-prev { animation: none; } }

/* Oscuro: tarjetas sobre carbón. */
html[data-theme="dark"] .hs-ins { border-color: var(--dk-line); background: var(--dk-raised); box-shadow: none; }
html[data-theme="dark"] .hs-ins.forecast { --ins-c: #f4efe2; --ins-soft: rgba(244, 239, 226, .1); }
html[data-theme="dark"] .hs-ins.mood { --ins-c: #e2c36b; --ins-soft: rgba(226, 195, 107, .12); }
html[data-theme="dark"] .hs-ins.model { --ins-c: #9cb4d3; --ins-soft: rgba(156, 180, 211, .12); }
html[data-theme="dark"] .hs-gauge-track { stroke: var(--dk-card); }
html[data-theme="dark"] .hs-rule { background: var(--dk-card); box-shadow: inset 0 0 0 1px var(--dk-line); }
html[data-theme="dark"] .hs-rule-zero { background: var(--dk-text); }

/* Entran con la contienda: un poco después del podio. */
.hs-slide.enter-next .hs-ins, .hs-slide.enter-prev .hs-ins { animation: hs-pod-in .55s cubic-bezier(.22, 1, .36, 1) both; }
.hs-slide .hs-ins:nth-child(1) { animation-delay: .18s; } .hs-slide .hs-ins:nth-child(2) { animation-delay: .24s; } .hs-slide .hs-ins:nth-child(3) { animation-delay: .3s; }
/* Según el ancho del panel (no de la pantalla): tres columnas, dos o una. */
@container (max-width: 560px) { .hs-insights { grid-template-columns: 1fr 1fr; } .hs-ins.model { grid-column: 1 / -1; } }
@container (max-width: 360px) { .hs-insights { grid-template-columns: 1fr; } }
/* La tarjeta de destino se resalta un momento al llegar (Odiseo, G-Ratings). */
.watch-item.is-flash { animation: tp-flash 2.6s cubic-bezier(.16, 1, .3, 1); }
.watch-item:focus { outline: none; }
@media (prefers-reduced-motion: reduce) {
  .hs-slide .hs-ins { animation: none; } .hs-gauge-fill { transition: none; }
  .watch-item.is-flash { animation: none; box-shadow: 0 0 0 3px var(--tp-focus); }
}

/* ---------- Carrusel de altura fija, sin huecos ---------- */
/* Las contiendas se apilan en la misma celda y las que no están a la vista sólo se ocultan: el
   carrusel toma la altura de la más alta, así el cuadro no sube ni baja al pasar de una a otra. */
.hs-slide.is-off { visibility: hidden; pointer-events: none; }
/* El espacio sobrante no queda vacío abajo: lo llenan las tarjetas, que se estiran a la misma altura. */
.admin-app .hs-state-body { display: flex; flex-direction: column; }
.hs-carousel { display: flex; flex: 1; flex-direction: column; }
.hs-slides { display: grid; flex: 1; grid-template-rows: minmax(0, 1fr); }
.hs-slide { display: flex; flex-direction: column; }
.admin-app .hs-slide > .hs-race { display: flex; flex: 1; flex-direction: column; }
/* Las tarjetas van siempre al pie, con su altura natural (las de una fila, iguales): el podio queda
   arriba y los datos abajo, en el mismo lugar en todas las contiendas; lo que sobra queda entre ambos. */
.admin-app .hs-slide .hs-insights { flex: 0 0 auto; margin-top: auto; padding-top: 14px; align-items: stretch; }
/* Las tarjetas van justo debajo del podio y, si la contienda es más baja que la más alta del
   carrusel, se estiran hasta el pie: el espacio sobrante lo ocupan ellas, no un hueco. */
.admin-app .hs-slide .hs-insights { flex: 1 0 auto; margin-top: 0; align-content: stretch; }
/* Del 4.º lugar en adelante: filas bajas, para que las primarias no sean mucho más altas que las demás. */
.admin-app .hs-slide .hs-people { gap: 6px; margin-top: 8px; padding-top: 8px; }
.admin-app .hs-slide .hs-person { grid-template-columns: 28px minmax(0, 1fr) auto 64px; gap: 2px 10px; }
.admin-app .hs-slide .hs-person .sen-avatar { width: 28px; height: 28px; font-size: 11px; }
.admin-app .hs-slide .hs-person .hs-who strong { font-size: 12.5px; }
.admin-app .hs-slide .hs-person .hs-who small { display: none; }
.admin-app .hs-slide .hs-person .hs-pct { font-size: 15px; }
.admin-app .hs-slide .hs-person .hs-diff { font-size: 11.5px; }
.admin-app .hs-slide .hs-person .hs-track { height: 3px; }

/* ---------- Carga del panel ---------- */
/* Barra fina bajo la barra superior mientras el modelo se calcula en segundo plano. */
.admin-app .appbar::after { content: ""; position: absolute; right: 0; bottom: -1px; left: 0; height: 2px; background: linear-gradient(90deg, transparent, var(--nv-ink), transparent) no-repeat; background-size: 35% 100%; opacity: 0; transition: opacity .3s ease; pointer-events: none; }
body.is-calculating .appbar::after { opacity: .65; animation: nv-progress 1.1s cubic-bezier(.4, 0, .2, 1) infinite; }
@keyframes nv-progress { from { background-position: -60% 0; } to { background-position: 160% 0; } }
/* Siluetas con brillo mientras llega el primer modelo. */
.home-skeleton { display: grid; gap: 10px; grid-column: 1 / -1; }
.home-skeleton.cards { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); margin-top: 12px; }
.home-skeleton.cards .sk { height: 150px; }
.home-skeleton.summary { grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); }
.home-skeleton.summary .sk { height: 130px; }
.home-skeleton.rows { padding: 16px; }
.home-skeleton.rows .sk { height: 54px; }
.sk, #inicio.is-loading .sim-map:empty { position: relative; overflow: hidden; border-radius: 8px; background: var(--nv-subtle); }
#inicio.is-loading .sim-map:empty { min-height: 420px; }
.sk::after, #inicio.is-loading .sim-map:empty::after { content: ""; position: absolute; inset: 0; background: linear-gradient(100deg, transparent 20%, rgba(255, 255, 255, .6) 50%, transparent 80%); transform: translateX(-100%); animation: nv-shimmer 1.4s ease-in-out infinite; }
.sk:nth-child(2)::after { animation-delay: .1s; } .sk:nth-child(3)::after { animation-delay: .2s; } .sk:nth-child(4)::after { animation-delay: .3s; }
.sk:nth-child(5)::after { animation-delay: .4s; } .sk:nth-child(6)::after { animation-delay: .5s; } .sk:nth-child(7)::after { animation-delay: .6s; }
html[data-theme="dark"] .sk, html[data-theme="dark"] #inicio.is-loading .sim-map:empty { background: var(--dk-card); }
html[data-theme="dark"] .sk::after, html[data-theme="dark"] #inicio.is-loading .sim-map:empty::after { background: linear-gradient(100deg, transparent 20%, rgba(255, 255, 255, .07) 50%, transparent 80%); }
@keyframes nv-shimmer { to { transform: translateX(100%); } }
/* Indicador giratorio junto a los avisos de «Calculando…». */
.home-wait, .cons-empty { display: flex; align-items: center; gap: 9px; }
.home-wait::before, .cons-empty::before { content: ""; flex: none; width: 14px; height: 14px; border: 2px solid var(--nv-line-strong); border-top-color: var(--nv-ink); border-radius: 50%; animation: nv-spin .8s linear infinite; }
@keyframes nv-spin { to { transform: rotate(360deg); } }
/* Con el primer modelo, los bloques de Inicio entran escalonados (una sola vez). */
#inicio.is-revealing .home-top > *, #inicio.is-revealing > .home-national, #inicio.is-revealing > .home-battles, #inicio.is-revealing > .home-consensus,
#inicio.is-revealing > .home-winners-head, #inicio.is-revealing > .home-sections, #inicio.is-revealing > #home-cards { animation: nv-rise .6s cubic-bezier(.22, 1, .36, 1) backwards; }
#inicio.is-revealing .home-top > :nth-child(2) { animation-delay: .08s; }
#inicio.is-revealing > .home-national { animation-delay: .16s; }
#inicio.is-revealing > .home-battles { animation-delay: .22s; }
#inicio.is-revealing > .home-consensus { animation-delay: .28s; }
#inicio.is-revealing > .home-winners-head, #inicio.is-revealing > .home-sections { animation-delay: .32s; }
#inicio.is-revealing > #home-cards { animation-delay: .38s; }
@keyframes nv-rise { from { opacity: 0; transform: translateY(14px); } }
@media (prefers-reduced-motion: reduce) {
  body.is-calculating .appbar::after, .sk::after, #inicio.is-loading .sim-map:empty::after,
  .home-wait::before, .cons-empty::before, #inicio.is-revealing * { animation: none; }
}

/* ---------- Detalle de Pronóstico y Sentimiento ---------- */
.hs-ins-steps { margin-top: 2px; border-top: 1px solid var(--nv-line); }
.hs-ins-steps li { grid-template-columns: minmax(0, auto) minmax(0, 1fr); }
.hs-ins-steps li:first-child { border-top: 0; }
.hs-ins-steps li.is-total .hs-ins-key { color: var(--nv-ink); font-weight: 700; }
.hs-ins-steps li.is-total .hs-ins-val { font-size: 13px; }
.hs-ins-rows .hs-ins-detail { grid-column: 1 / -1; margin: -3px 0 0; padding: 0; color: var(--nv-muted); font-size: 10.5px; line-height: 1.4; list-style: none; }
.hs-ins-rows .hs-ins-detail li { display: block; padding: 0; border: 0; font-size: 10.5px; }
.hs-ins-rows .hs-ins-detail li + li { margin-top: 1px; }
.hs-ins-legend { margin: 0; color: var(--nv-muted); font-size: 10.5px; }

/* ---------- Visor de encuesta: ocupa las tres tarjetas ---------- */
.hs-insights { position: relative; }
/* Alto según su contenido (hasta el de las tarjetas); si no cabe, se desplaza por dentro. */
.hs-insights > .hs-pop { --ins-c: #3e5878; --ins-soft: #e7edf4; bottom: auto; max-height: calc(100% + 2px); container-type: inline-size; }
html[data-theme="dark"] .hs-insights > .hs-pop { --ins-c: #9cb4d3; --ins-soft: rgba(156, 180, 211, .12); }
.hs-pop-info, .hs-pop-data { display: grid; align-content: start; gap: 8px; min-width: 0; }
@container (min-width: 560px) {
  .hs-pop-body { grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr); column-gap: 24px; }
  .hs-pop-data { padding-left: 24px; border-left: 1px solid var(--nv-line); }
}
.hs-pop-question { display: grid; gap: 4px; margin: 2px 0 0; padding: 9px 12px; border-left: 3px solid var(--ins-c); border-radius: 0 6px 6px 0; background: var(--ins-soft); }
.hs-pop-question figcaption, .hs-pop-label { margin: 0; color: var(--nv-muted); font-size: 10px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; }
.hs-pop-question blockquote { margin: 0; color: var(--nv-ink); font-family: var(--nv-serif); font-size: 15.5px; line-height: 1.35; overflow-wrap: anywhere; }
.hs-pop-question:not(.is-summary) blockquote::before { content: "«"; } .hs-pop-question:not(.is-summary) blockquote::after { content: "»"; }
.hs-pop-options { margin: 0; color: var(--nv-text); font-size: 11px; line-height: 1.4; }
.hs-pop-question small { color: var(--nv-muted); font-size: 10px; font-style: italic; }
.hs-pop-note, .hs-pop-rest { margin: 0; color: var(--nv-muted); font-size: 10.5px; line-height: 1.45; }
.hs-pop-method { font-size: 11px; }
.hs-pop-method summary { color: var(--nv-ink); font-weight: 600; cursor: pointer; }
.hs-pop-method p { margin: 4px 0 0; color: var(--nv-muted); font-size: 10.5px; line-height: 1.45; }
.hs-pop-data .hs-pop-results { margin: 0; padding: 0; border-top: 0; }

/* «Ver detalles»: botón al pie de Pronóstico y Sentimiento. */
.hs-ins-more { align-self: flex-start; display: inline-flex; align-items: center; min-height: 26px; margin-top: 2px; padding: 3px 11px; border: 1px solid var(--nv-line-strong); border-radius: 999px; background: var(--nv-card); color: var(--nv-ink); font: 600 11px/1.2 var(--nv-font); cursor: pointer; transition: background-color .15s ease, border-color .15s ease; }
.hs-ins-more:hover { border-color: var(--ins-c); background: var(--ins-soft); }
.hs-ins-more:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: 2px; }
.hs-ins.mood .hs-ins-more { margin-top: auto; }
html[data-theme="dark"] .hs-ins-more { border-color: var(--dk-line); background: var(--dk-card); color: var(--dk-text); }
/* Ventana de detalle: con el color de su tarjeta y columnas según el ancho. */
.hs-insights > .hs-pop.forecast { --ins-c: #121110; --ins-soft: #efece4; }
.hs-insights > .hs-pop.mood { --ins-c: #8a6d2c; --ins-soft: #f5eedc; }
html[data-theme="dark"] .hs-insights > .hs-pop.forecast { --ins-c: #f4efe2; --ins-soft: rgba(244, 239, 226, .1); }
html[data-theme="dark"] .hs-insights > .hs-pop.mood { --ins-c: #e2c36b; --ins-soft: rgba(226, 195, 107, .12); }
.hs-pop-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--ins-c); }
.hs-pop-body.hs-pop-detail { grid-template-columns: minmax(0, 1fr); gap: 10px; }
.hs-pop-intro { margin: 0; color: var(--nv-ink); font-family: var(--nv-serif); font-size: 15px; line-height: 1.35; }
.hs-pop-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 12px 22px; }
.hs-pop-col { display: grid; align-content: start; gap: 4px; min-width: 0; }
.hs-pop-col .hs-ins-rows li:first-child { border-top: 0; }
/* En Sentimiento la columna ya lleva el nombre de la lectura. */
.hs-pop-grid.is-signals .hs-ins-rows > li { grid-template-columns: minmax(0, 1fr) 14px; }
.hs-pop-grid.is-signals .hs-ins-rows > li > .hs-ins-key { display: none; }
.hs-pop-grid.is-signals .hs-ins-rows > li > .hs-ins-val { text-align: left; }

/* Del 4.º lugar en adelante: anillos chicos en fila, como los del podio. */
.hs-rest { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 16px 10px; margin: 8px 0 0; padding: 18px 0 0; border-top: 1px solid var(--nv-line); list-style: none; }
.hs-rest-item { --pod-c: var(--map-toss); position: relative; display: grid; justify-items: center; align-content: start; gap: 5px; min-width: 0; padding: 16px 8px 9px; border: 1px solid var(--nv-line); border-radius: 6px; background: var(--nv-card); text-align: center; }
.hs-rest-item .hs-rank { top: -9px; font-size: 10.5px; line-height: 15px; }
.hs-rest-item .hs-pod-who strong { font-size: 12px; }
.hs-rest-item .hs-pod-who small { font-size: 10.5px; }
.hs-rest-item .hs-pod-pct { font-size: 21px; }
.hs-rest-diff { color: var(--nv-muted); font-size: 10.5px; font-variant-numeric: tabular-nums; }
.hs-slide.enter-next .hs-rest-item, .hs-slide.enter-prev .hs-rest-item { animation: hs-pod-in .55s cubic-bezier(.22, 1, .36, 1) .14s both; }
html[data-theme="dark"] .hs-rest-item { border-color: var(--dk-line); background: var(--dk-raised); }
@media (prefers-reduced-motion: reduce) { .hs-slide .hs-rest-item { animation: none; } }

/* ---------- Contienda compacta: sin huecos ---------- */
/* El carrusel toma la altura de la contienda a la vista (las ocultas no ocupan lugar) y las tarjetas
   quedan con su altura natural, cada una con su contenido seguido, sin estirarse. */
.hs-slides { position: relative; flex: 0 0 auto; grid-template-rows: auto; }
.hs-carousel { flex: 0 0 auto; }
.hs-slide.is-off { position: absolute; top: 0; right: 0; left: 0; }
.admin-app .hs-slide > .hs-race { flex: 0 0 auto; }
/* Las tres tarjetas, de la misma altura: el contenido arriba y su botón «Ver…» siempre al pie. */
.admin-app .hs-slide .hs-insights { flex: 0 0 auto; align-items: stretch; align-content: start; }
.hs-ins-foot-row { margin-top: 0; }
.hs-ins .hs-ins-more { margin-top: auto; }
/* El cuadro del estado mide lo que su contenido, aunque el mapa de al lado sea más alto. */
.home-states.is-detail { align-self: start; min-height: 0; }
/* En la ventana de encuestas por fuente: la fila de la fuente sin sangría y las encuestas debajo. */
.hs-insights > .hs-pop.model .hs-polls { padding-left: 0; }
.hs-insights > .hs-pop.model .hs-src-top { margin-bottom: 4px; }

/* Al deslizar, la contienda que sale tampoco ocupa lugar: el alto cambia una sola vez, suave. */
.hs-slide.is-off, .hs-slide.leave-next, .hs-slide.leave-prev { position: absolute; top: 0; right: 2px; left: 2px; }
.hs-slides { align-content: start; align-items: start; }
.hs-slides.is-sizing { transition: height .45s cubic-bezier(.22, 1, .36, 1); }
@media (prefers-reduced-motion: reduce) { .hs-slides.is-sizing { transition: none; } }
/* Mismo tamaño en todos los estados: las tres tarjetas parten de un alto común (el del contenido más
   largo medido en todas las contiendas: Sentimiento con cuatro lecturas) y su botón queda al pie. */
.admin-app .hs-slide .hs-ins { min-height: 300px; }

/* Mini carrusel de candidaturas (más de tres): el podio y el 4.º lugar en adelante ocupan el mismo
   espacio, una página a la vez, con pestañas debajo. */
.hs-pager { display: grid; gap: 8px; }
.hs-pager-pages { display: grid; }
.hs-pager-page { grid-area: 1 / 1; min-width: 0; visibility: hidden; opacity: 0; transition: opacity .3s ease, visibility 0s linear .3s; }
/* «inherit», no «visible»: si la contienda entera se oculta, su página tampoco se queda a la vista. */
.hs-pager-page.is-on { visibility: inherit; opacity: 1; transition: opacity .3s ease; }
.hs-pager-page.is-entering { animation: hs-in-next .45s cubic-bezier(.22, 1, .36, 1) both; }
.hs-page-rest { display: grid; align-content: center; gap: 8px; }
.hs-page-rest .hs-rest { margin: 0; padding: 12px 0 0; border-top: 0; grid-template-columns: repeat(auto-fit, minmax(140px, 220px)); justify-content: center; }
.hs-page-rest .hs-rest-item { padding: 22px 10px 12px; gap: 6px; }
.hs-page-rest .hs-rest-item .hs-pod-pct { font-size: 28px; }
.hs-page-rest .hs-more-people { margin: 0; text-align: center; }
.hs-pager-tabs { display: flex; justify-content: center; gap: 6px; }
.hs-pager-tab { min-height: 24px; padding: 2px 11px; border: 1px solid var(--nv-line-strong); border-radius: 999px; background: var(--nv-card); color: var(--nv-muted); font: 600 11px/1.2 var(--nv-font); font-variant-numeric: tabular-nums; cursor: pointer; transition: background-color .15s ease, color .15s ease, border-color .15s ease; }
.hs-pager-tab:hover { border-color: var(--nv-ink); color: var(--nv-ink); }
.hs-pager-tab[aria-pressed="true"] { border-color: var(--nv-ink); background: var(--nv-ink); color: var(--nv-card); }
.hs-pager-tab:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: 2px; }
html[data-theme="dark"] .hs-pager-tab { border-color: var(--dk-line); background: var(--dk-card); color: var(--dk-muted); }
html[data-theme="dark"] .hs-pager-tab[aria-pressed="true"] { border-color: var(--dk-text); background: var(--dk-text); color: var(--dk-raised); }
@media (prefers-reduced-motion: reduce) { .hs-pager-page, .hs-pager-page.is-on { transition: none; } .hs-pager-page.is-entering { animation: none; } }
/* Pestañas del mini carrusel en la cabecera de la contienda, entre el título y la calificación. */
.hs-race-head .hs-pager-tabs { flex: none; gap: 4px; margin-left: auto; }
.hs-race-head .hs-pager-tab { min-height: 22px; padding: 1px 9px; font-size: 10.5px; }

/* ---------- Mismo alto en todas las contiendas: el carrusel no se mueve ---------- */
/* «Empate técnico con el 2.º» va sobre el borde inferior de la tarjeta del 1.º: no suma alto. */
.hs-pod .hs-pod-note { position: absolute; bottom: -11px; left: 50%; z-index: 1; white-space: nowrap; transform: translateX(-50%); }
/* El podio (o el mini carrusel de candidaturas) mide lo mismo con dos o tres lugares: el alto del de
   tres, con espacio para la etiqueta de empate. */
/* Cada página (el podio, solo o dentro del mini carrusel, y la del 4.º lugar en adelante) mide lo mismo. */
.admin-app .hs-slide .hs-podium, .admin-app .hs-slide .hs-page-rest { min-height: var(--hs-podium-h, 326px); padding-bottom: 12px; }
/* El mini carrusel lleva por fuera los mismos márgenes que el podio solo; el podio de adentro, ninguno. */
.admin-app .hs-slide .hs-pager { gap: 0; margin: 12px 0 2px; }
.admin-app .hs-slide .hs-pager .hs-podium { margin: 0; }
.admin-app .hs-slide .hs-race-head { min-height: 22px; }

/* ---------- Resumen nacional: selección y panel de detalle ---------- */
/* Por cargo: el anillo y cada línea de la clave son botones; el elegido crece y los demás se atenúan. */
.home-office-main { display: grid; justify-items: center; gap: 10px; width: 100%; padding: 6px 4px 4px; border: 0; border-radius: 8px; background: none; color: inherit; font: inherit; cursor: pointer; }
.home-office-main:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: 2px; }
.home-office-main .home-donut { transition: transform .35s cubic-bezier(.23, 1, .32, 1); }
.home-office-main:hover .home-donut { transform: scale(1.04); }
.admin-app .home-nat-card .home-office { position: relative; transition: opacity .3s ease; }
.admin-app .home-nat-card .home-office:hover { background: none; }
.admin-app .home-nat-card .home-office.is-dim { opacity: .42; }
.admin-app .home-nat-card .home-office.is-dim:hover { opacity: .8; }
.home-office.is-selected .home-donut { transform: scale(1.07); }
.home-office.is-selected .home-office-name { color: var(--nv-ink); }
.home-office.is-selected::after { content: ""; position: absolute; left: 50%; bottom: -2px; width: 34px; height: 3px; border-radius: 2px; background: var(--nv-ink); transform: translateX(-50%); animation: home-pop .3s cubic-bezier(.23, 1, .32, 1) both; }
.home-donut-seg { cursor: pointer; transition: stroke-dasharray .7s cubic-bezier(.23, 1, .32, 1), stroke-width .25s ease, opacity .25s ease; }
.home-donut-seg:hover, .home-donut-seg.is-active { stroke-width: 10; }
.home-donut-seg.is-faded { opacity: .28; }
.home-donut-key li { display: block; }
.home-donut-key button { display: grid; grid-template-columns: 8px auto minmax(18px, 1fr) 30px; align-items: center; gap: 4px; width: 100%; padding: 2px 4px; border: 0; border-radius: 4px; background: none; color: inherit; font: inherit; white-space: nowrap; cursor: pointer; transition: background .15s ease; }
.home-donut-key button:hover:not(:disabled) { background: var(--nv-subtle); }
.home-donut-key button[aria-pressed="true"] { background: var(--nv-active); color: var(--nv-ink); }
.home-donut-key button:disabled { cursor: default; }
.home-card-hint { margin: 12px 0 0; color: var(--nv-muted); font-size: 11.5px; text-align: center; }

/* Cambios: celdas y nombres de cargo que abren su detalle. */
.home-cell, .home-cell-name { display: inline-flex; align-items: center; justify-content: flex-end; gap: 0; padding: 3px 4px; border: 0; border-radius: 4px; background: none; color: inherit; font: inherit; cursor: pointer; transition: background .15s ease; }
.home-cell-name { justify-content: flex-start; margin-left: -4px; font-weight: 700; color: var(--nv-ink); }
.home-cell:hover, .home-cell-name:hover { background: var(--nv-subtle); }
.home-cell[aria-pressed="true"], .home-cell-name[aria-pressed="true"] { background: var(--nv-active); box-shadow: inset 0 0 0 1px var(--nv-line-strong); }
.home-cell:focus-visible, .home-cell-name:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: 1px; }
.admin-app .home-changes-table td, .admin-app .home-changes-table tbody th, .admin-app .home-changes-table tfoot th { padding-top: 4px; padding-bottom: 4px; }
.home-changes-table tr.is-selected > * { background: var(--nv-subtle); }
.home-change-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }

/* El panel: ocupa el ancho de las tres tarjetas, entra deslizándose y sus filas, escalonadas. */
.home-detail { grid-column: 1 / -1; min-width: 0; border: 1px solid var(--nv-line); border-radius: var(--nv-radius); background: var(--nv-card); box-shadow: var(--nv-shadow); overflow: hidden; }
.home-detail.is-entering { animation: home-detail-in .5s cubic-bezier(.22, 1, .36, 1) both; }
.home-detail.is-swapping .home-detail-sum, .home-detail.is-swapping .home-detail-title { animation: home-fade .3s ease both; }
.home-detail-inner { display: grid; grid-template-columns: minmax(0, 1fr); gap: 14px; padding: 16px 18px 14px; }
.home-detail-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; padding-bottom: 12px; border-bottom: 1px solid var(--nv-line); }
.home-detail-eyebrow { margin: 0 0 2px; color: var(--nv-muted); font-size: 10.5px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; }
.home-detail-title { margin: 0; color: var(--nv-ink); font-family: var(--nv-serif); font-size: 22px; font-weight: 500; line-height: 1.15; }
.home-detail-close { flex: none; display: grid; place-items: center; width: 32px; height: 32px; border: 1px solid var(--nv-line-strong); border-radius: 50%; background: none; color: var(--nv-ink); font: inherit; font-size: 13px; cursor: pointer; transition: background .15s ease, transform .2s ease; }
.home-detail-close:hover { background: var(--nv-subtle); transform: rotate(90deg); }
.home-detail-sum { display: grid; grid-template-columns: auto minmax(160px, 1fr) auto; grid-template-areas: "count bar expected" "legend legend expected" "moves moves expected"; align-items: center; gap: 6px 18px; }
.home-detail-count { grid-area: count; margin: 0; color: var(--nv-muted); font-size: 12.5px; white-space: nowrap; }
.home-detail-count b { color: var(--nv-ink); font-family: var(--nv-serif); font-size: 30px; font-weight: 500; line-height: 1; font-variant-numeric: tabular-nums lining-nums; }
.home-detail-bar { grid-area: bar; display: flex; gap: 2px; height: 10px; }
.home-detail-bar i { flex: 1 1 0; min-width: 4px; background: var(--map-toss); transform-origin: left; animation: home-grow .7s cubic-bezier(.22, 1, .36, 1) both; }
.home-detail-bar .dem { background: var(--map-dem-likely); } .home-detail-bar .rep { background: var(--map-rep-likely); } .home-detail-bar .oth { background: var(--map-oth); }
.home-detail-legend { grid-area: legend; display: flex; flex-wrap: wrap; gap: 4px 14px; margin: 0; color: var(--nv-muted); font-size: 12px; font-variant-numeric: tabular-nums; }
.home-detail-legend span::before { content: ""; display: inline-block; width: 8px; height: 8px; margin-right: 6px; border-radius: 2px; background: var(--map-toss); }
.home-detail-legend .dem::before { background: var(--map-dem-likely); } .home-detail-legend .rep::before { background: var(--map-rep-likely); } .home-detail-legend .oth::before { background: var(--map-oth); }
.home-detail-expected { grid-area: expected; display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 12px; max-width: 260px; margin: 0; padding-left: 18px; border-left: 1px solid var(--nv-line); font-variant-numeric: tabular-nums; cursor: help; }
.home-detail-moves { grid-area: moves; margin: 0; color: var(--nv-text); font-size: 12px; }
.home-detail-filters { display: grid; gap: 8px; }
.home-chips { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.home-chips-label { width: 58px; color: var(--nv-muted); font-size: 10.5px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; }
.home-chip { display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px; border: 1px solid var(--nv-line-strong); border-radius: 999px; background: none; color: var(--nv-text); font: inherit; font-size: 12px; cursor: pointer; transition: background .18s ease, border-color .18s ease, color .18s ease, transform .18s ease; }
.home-chip b { color: var(--nv-muted); font-weight: 700; font-variant-numeric: tabular-nums; }
.home-chip:hover:not(:disabled) { border-color: var(--nv-ink); }
.home-chip:active:not(:disabled) { transform: scale(.96); }
.home-chip[aria-pressed="true"] { border-color: var(--nv-ink); background: var(--nv-ink); color: var(--nv-card); }
.home-chip[aria-pressed="true"] b { color: inherit; opacity: .75; }
.home-chip:disabled { cursor: default; opacity: .4; }
.home-chip.dem::before, .home-chip.rep::before, .home-chip.toss::before, .home-chip.oth::before { content: ""; width: 8px; height: 8px; border-radius: 2px; background: var(--map-toss); }
.home-chip.dem::before { background: var(--map-dem-likely); } .home-chip.rep::before { background: var(--map-rep-likely); } .home-chip.oth::before { background: var(--map-oth); }
.home-detail-list { max-height: 460px; margin: 0; padding: 0; overflow: auto; border-top: 1px solid var(--nv-line); list-style: none; overscroll-behavior: contain; }
.home-drow { display: grid; grid-template-columns: minmax(0, 1fr) auto; border-bottom: 1px solid var(--nv-line); }
.home-detail.is-entering .home-drow, .home-detail.is-swapping .home-drow { animation: home-row-in .42s cubic-bezier(.22, 1, .36, 1) both; animation-delay: calc(var(--i, 0) * 26ms + 80ms); }
.home-drow-main { display: grid; grid-template-columns: 52px minmax(140px, .9fr) minmax(230px, 1.45fr) minmax(190px, 1.05fr) minmax(140px, .85fr); align-items: center; gap: 16px; width: 100%; padding: 10px 12px; border: 0; background: none; color: inherit; font: inherit; text-align: left; cursor: pointer; transition: background .15s ease; }
.home-drow-main:hover { background: var(--nv-subtle); }
.home-drow-main:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: -2px; }
/* Insignia, anillo con foto y cara a cara: el mismo diseño de «Puntos por estado». */
.home-drow-main:hover .hs-badge-shape { transform: scale(1.08); }
.home-drow-place { justify-items: start; gap: 5px; }
.home-drow-place .hs-cat { margin-top: 0; }
.home-drow-who { display: flex; align-items: center; gap: 12px; min-width: 0; }
.home-drow-who .hs-ring { flex: none; }
.admin-app .home-drow-who .hs-ring .sen-avatar { font-size: 12px; box-shadow: 0 0 0 2px var(--nv-card); }
.home-drow-who-text { display: grid; gap: 2px; min-width: 0; }
.home-drow-chance { color: var(--nv-muted); font-size: 11.5px; }
.home-drow-chance b { font-family: var(--nv-serif); font-size: 17px; font-weight: 500; font-variant-numeric: tabular-nums lining-nums; }
.home-drow-chance.dem b { color: var(--map-dem-safe); } .home-drow-chance.rep b { color: var(--map-rep-safe); } .home-drow-chance.oth b { color: var(--map-oth); }
.home-drow-rival { display: flex; align-items: center; gap: 5px; min-width: 0; color: var(--nv-muted); font-size: 11.5px; white-space: nowrap; }
.home-drow-rival > span:last-child { overflow: hidden; text-overflow: ellipsis; }
.admin-app .home-drow-rival .sen-avatar { flex: none; width: 20px; height: 20px; box-shadow: 0 0 0 1.5px var(--c, var(--nv-line-strong)); font-size: 7.5px; }
.home-drow-duel { margin-top: 0; }
.home-drow-odds .hs-duel-person b { font-family: inherit; font-size: 12.5px; font-weight: 700; line-height: inherit; }
.home-drow-odds small { color: var(--nv-muted); font-size: 11px; }
html[data-theme="dark"] .home-drow-chance.dem b { color: #8db8ec; } html[data-theme="dark"] .home-drow-chance.rep b { color: #f29a90; }
.home-drow-place, .home-drow-change { display: grid; gap: 2px; min-width: 0; }
.home-drow-change { grid-template-columns: minmax(0, 1fr); justify-items: start; }
.home-drow-change .home-move-tags { grid-area: auto; }
.home-drow-place strong, .home-drow-who strong { overflow: hidden; color: var(--nv-ink); font-size: 13px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.home-drow-who em { font-size: 11px; font-style: normal; font-weight: 700; }
.home-drow-who em.dem { color: var(--map-dem-safe); } .home-drow-who em.rep { color: var(--map-rep-safe); } .home-drow-who em.oth { color: var(--map-oth); }
.home-drow-place small, .home-drow-who small, .home-drow-change small { overflow: hidden; color: var(--nv-muted); font-size: 11.5px; text-overflow: ellipsis; white-space: nowrap; font-variant-numeric: tabular-nums; }
.home-drow-odds { display: grid; gap: 4px; }
.home-drow-odds b { color: var(--nv-ink); font-family: var(--nv-serif); font-size: 18px; font-weight: 500; line-height: 1; font-variant-numeric: tabular-nums lining-nums; }
.home-drow-odds b.is-muted { color: var(--nv-muted); }
.home-odds-bar { position: relative; display: block; width: 100%; height: 5px; background: var(--nv-active); }
.home-odds-bar::after { content: ""; position: absolute; top: -2px; bottom: -2px; left: 60%; width: 1px; background: var(--nv-line-strong); }
.home-odds-bar i { display: block; width: var(--p); height: 100%; background: var(--map-toss); transform-origin: left; animation: home-grow .8s cubic-bezier(.22, 1, .36, 1) both; animation-delay: calc(var(--i, 0) * 26ms + 120ms); }
.home-odds-bar i.dem { background: var(--map-dem-likely); } .home-odds-bar i.rep { background: var(--map-rep-likely); } .home-odds-bar i.oth { background: var(--map-oth); } .home-odds-bar i.toss { background: #b5ab97; }
.home-drow-change .home-move-tags { flex-wrap: wrap; }
.home-drow-delta { font-size: 12.5px; font-weight: 700; font-variant-numeric: tabular-nums; }
.home-drow-delta.up { color: #1a7a50; } .home-drow-delta.down { color: #a53a33; } .home-drow-delta.same { color: var(--nv-muted); font-weight: 500; }
.home-tag.new { background: #e3f3ea; color: #1a7a50; } .home-tag.gone { background: #fbe9e7; color: #a53a33; } .home-tag.flip { background: #fbf0dc; color: #8a5a12; }
.home-drow-hist { align-self: stretch; padding: 0 14px; border: 0; border-left: 1px solid var(--nv-line); background: none; color: var(--nv-muted); font: inherit; font-size: 11.5px; font-weight: 600; cursor: pointer; transition: background .15s ease, color .15s ease; }
.home-drow-hist:hover { background: var(--nv-subtle); color: var(--nv-ink); }
.home-drow-hist.is-empty { pointer-events: none; }
.home-detail-empty { padding: 22px 10px; color: var(--nv-muted); font-size: 13px; text-align: center; }
.home-detail-foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px; }
.home-detail-foot p { margin: 0; color: var(--nv-muted); font-size: 12px; }
.home-detail-actions { display: flex; flex-wrap: wrap; gap: 8px; }
.home-detail-action { padding: 6px 12px; border: 1px solid var(--nv-line-strong); border-radius: 999px; background: none; color: var(--nv-ink); font: inherit; font-size: 12px; font-weight: 600; cursor: pointer; transition: background .18s ease, color .18s ease, border-color .18s ease; }
.home-detail-action:hover { border-color: var(--nv-ink); background: var(--nv-subtle); }
.home-detail-action.is-primary { border-color: var(--nv-ink); background: var(--nv-ink); color: var(--nv-card); }
.home-detail-action.is-primary:hover { opacity: .88; background: var(--nv-ink); }
.home-detail-action[aria-pressed="true"] { box-shadow: 0 0 0 2px var(--nv-card), 0 0 0 4px var(--nv-ink); }
html[data-theme="dark"] .home-drow-who em.dem { color: #8db8ec; } html[data-theme="dark"] .home-drow-who em.rep { color: #f29a90; }
html[data-theme="dark"] .home-drow-delta.up { color: #4ccf8a; } html[data-theme="dark"] .home-drow-delta.down { color: #f39a8a; }
html[data-theme="dark"] .home-tag.new { background: rgba(76, 207, 138, .14); color: #4ccf8a; } html[data-theme="dark"] .home-tag.gone { background: rgba(240, 120, 100, .15); color: #f39a8a; }
html[data-theme="dark"] .home-tag.flip { background: rgba(240, 196, 108, .14); color: #f0c46c; }
html[data-theme="dark"] .home-odds-bar { background: var(--dk-raised); }
@keyframes home-detail-in { from { opacity: 0; transform: translateY(-10px); clip-path: inset(0 0 100% 0 round 8px); } to { opacity: 1; transform: none; clip-path: inset(0 0 0 0 round 8px); } }
@keyframes home-row-in { from { opacity: 0; transform: translateY(6px); } }
@keyframes home-grow { from { transform: scaleX(0); } }
@keyframes home-fade { from { opacity: 0; } }
@keyframes home-pop { from { opacity: 0; transform: translateX(-50%) scaleX(.2); } }
@media (max-width: 1100px) {
  .home-drow-main { grid-template-columns: 52px minmax(0, .8fr) minmax(0, 1.3fr); }
  .home-drow-odds { grid-column: 2; }
  .home-drow-change { grid-column: 3; }
}
@media (max-width: 640px) {
  .home-detail-sum { grid-template-columns: auto minmax(0, 1fr); grid-template-areas: "count bar" "legend legend" "expected expected" "moves moves"; }
  .home-detail-expected { max-width: none; padding: 8px 0 0; border-left: 0; border-top: 1px solid var(--nv-line); }
  .home-chips-label { width: 100%; }
  .home-drow { grid-template-columns: 1fr; }
  .home-drow-main { grid-template-columns: 52px minmax(0, 1fr); gap: 10px 12px; }
  .home-drow-who, .home-drow-odds, .home-drow-change { grid-column: 2; }
  .home-drow-hist { padding: 8px 10px; border-left: 0; border-top: 1px dashed var(--nv-line); text-align: left; }
  .home-drow-hist.is-empty { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .home-detail.is-entering, .home-detail.is-swapping .home-detail-sum, .home-detail.is-swapping .home-detail-title, .home-detail .home-drow,
  .home-detail-bar i, .home-odds-bar i, .home-office.is-selected::after { animation: none !important; }
  .home-office-main .home-donut, .home-donut-seg, .home-ledger-bar button, .home-change-stats button { transition: none; }
}

/* ---------- Puntos por estado: insignia con la silueta, cara a cara y calificación ---------- */
.admin-app .hs-row { grid-template-columns: 52px minmax(0, 1fr) auto; gap: 12px; padding: 11px 8px; }
.hs-badge { --b: var(--map-toss); --b-ink: #9a8f78; position: relative; display: grid; grid-template-rows: minmax(0, 1fr) auto; justify-items: center; width: 52px; height: 52px; padding: 5px 4px 3px; border: 1px solid color-mix(in srgb, var(--b) 38%, transparent); border-radius: 8px; background: linear-gradient(160deg, color-mix(in srgb, var(--b) 6%, var(--nv-card)), color-mix(in srgb, var(--b) 16%, var(--nv-card))); box-shadow: 0 1px 0 rgba(22, 21, 20, .04), 0 6px 14px -12px color-mix(in srgb, var(--b-ink) 80%, transparent); }
.hs-badge.dem { --b: var(--map-dem-likely); --b-ink: var(--map-dem-safe); }
.hs-badge.rep { --b: var(--map-rep-likely); --b-ink: var(--map-rep-safe); }
.hs-badge.oth { --b: var(--map-oth); --b-ink: var(--map-oth); }
.hs-badge.toss { --b: #c9bea6; --b-ink: #8d8169; }
.hs-badge.none { --b: var(--nv-line-strong); --b-ink: var(--nv-muted); }
.hs-badge-shape { width: 100%; height: 100%; min-height: 0; overflow: visible; transition: transform .25s cubic-bezier(.23, 1, .32, 1); }
.hs-badge-shape path { fill: var(--b-ink); stroke: color-mix(in srgb, var(--b-ink) 70%, #000); stroke-width: 1px; stroke-linejoin: round; vector-effect: non-scaling-stroke; }
.hs-badge.toss .hs-badge-shape path { fill: #b3a68a; }
.hs-badge-code { color: var(--b-ink); font-size: 9.5px; font-weight: 800; letter-spacing: .1em; line-height: 1.3; }
.hs-badge.no-shape { grid-template-rows: 1fr; align-items: center; }
.hs-badge.no-shape .hs-badge-code { font-size: 13px; }
.hs-row:hover .hs-badge-shape { transform: scale(1.08); }
.hs-badge.big { width: 46px; height: 46px; }
.hs-badge.ink { --b: var(--nv-ink); --b-ink: var(--nv-card); border-color: var(--nv-ink); background: var(--nv-ink); }
.hs-badge.ink .hs-badge-shape path { stroke: none; }
.hs-row-top { display: flex; align-items: center; gap: 8px; min-width: 0; }
.hs-row-top strong { overflow: hidden; min-width: 0; text-overflow: ellipsis; white-space: nowrap; }
.hs-office-tag { flex: none; padding: 1px 6px; border-radius: 3px; background: var(--nv-active); color: var(--nv-text); font-size: 10px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; }
.hs-extra { flex: none; color: var(--nv-muted); font-size: 11px; font-weight: 600; }
.hs-duel { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); grid-template-areas: "lead trail" "bar bar"; align-items: center; gap: 5px 12px; margin-top: 6px; }
.hs-duel-person.is-lead { grid-area: lead; } .hs-duel-person.is-trail { grid-area: trail; justify-self: end; }
.hs-duel { grid-template-rows: 22px 5px; } .hs-duel .hs-duel-person { align-self: center; height: 22px; } .hs-duel .hs-duel-bar { grid-area: bar; height: 5px; }
.hs-duel-person { display: inline-flex; align-items: center; gap: 5px; min-width: 0; color: var(--nv-text); font-size: 12px; }
.hs-duel-person.is-trail { flex-direction: row-reverse; color: var(--nv-muted); }
.admin-app .hs-duel-person .sen-avatar { flex: none; width: 22px; height: 22px; box-shadow: 0 0 0 1.5px var(--c, var(--nv-line-strong)); font-size: 8px; }
.hs-duel-name { overflow: hidden; min-width: 0; text-overflow: ellipsis; white-space: nowrap; }
.hs-duel-person b { flex: none; color: var(--nv-ink); font-weight: 700; font-variant-numeric: tabular-nums; }
.hs-duel-person.is-lead.dem b { color: var(--map-dem-safe); } .hs-duel-person.is-lead.rep b { color: var(--map-rep-safe); } .hs-duel-person.is-lead.oth b { color: var(--map-oth); }
.hs-duel-person.is-trail b { color: var(--nv-text); font-weight: 600; }
.hs-duel-bar { display: flex; gap: 2px; height: 6px; min-width: 0; }
.hs-duel-bar i { min-width: 3px; background: var(--map-toss); }
.hs-duel-bar i.dem { background: var(--map-dem-likely); } .hs-duel-bar i.rep { background: var(--map-rep-likely); } .hs-duel-bar i.oth { background: var(--map-oth); }
.hs-duel .hs-duel-bar i:last-child { opacity: .45; }
.hs-house { display: grid; gap: 5px; margin-top: 3px; color: var(--nv-muted); font-size: 12px; }
.hs-house .hs-duel-bar { max-width: 180px; }
.admin-app .hs-gap { align-content: center; min-width: 74px; }
.hs-cat { margin-top: 4px; padding: 1px 6px; border-radius: 3px; background: color-mix(in srgb, var(--map-toss) 45%, transparent); color: #6e6550; font-size: 9.5px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; white-space: nowrap; }
.hs-cat.dem { background: color-mix(in srgb, var(--map-dem-likely) 14%, transparent); color: var(--map-dem-safe); }
.hs-cat.rep { background: color-mix(in srgb, var(--map-rep-likely) 14%, transparent); color: var(--map-rep-safe); }
.hs-cat.oth { background: color-mix(in srgb, var(--map-oth) 16%, transparent); color: var(--map-oth); }
html[data-theme="dark"] .hs-badge.dem { --b-ink: #6ea3e0; } html[data-theme="dark"] .hs-badge.rep { --b-ink: #e57a6e; }
html[data-theme="dark"] .hs-badge.toss { --b: #6f6a5f; --b-ink: #c9bea6; } html[data-theme="dark"] .hs-badge.toss .hs-badge-shape path { fill: #a99d84; }
html[data-theme="dark"] .hs-badge .hs-badge-shape path { stroke: color-mix(in srgb, var(--b-ink) 60%, #000); }
html[data-theme="dark"] .hs-badge.ink { --b: var(--dk-text); --b-ink: var(--dk-card); }
html[data-theme="dark"] .hs-duel-person.is-lead.dem b, html[data-theme="dark"] .hs-cat.dem { color: #8db8ec; }
html[data-theme="dark"] .hs-duel-person.is-lead.rep b, html[data-theme="dark"] .hs-cat.rep { color: #f29a90; }
html[data-theme="dark"] .hs-cat { color: #d6ccb6; }
@media (max-width: 420px) {
  .admin-app .hs-duel-person .sen-avatar { display: none; }
  .admin-app .hs-row { gap: 10px; }
  .admin-app .hs-gap { min-width: 0; }
  .hs-cat { padding: 1px 4px; font-size: 8.5px; letter-spacing: .02em; }
}
@media (prefers-reduced-motion: reduce) { .hs-badge-shape { transition: none; } }

/* ---------- Carrusel del estado: cada tarjeta dice de dónde sale su número ---------- */
.hs-ins-heading { display: grid; gap: 1px; min-width: 0; }
.hs-ins-note { color: var(--nv-muted); font-size: 10.5px; line-height: 1.3; }

/* ---------- Pronóstico ODYSSEUS en su propia sección del menú ---------- */
.admin-app .view-forecast > .home-consensus { margin: 0 0 34px; padding-top: 0; border-top: 0; }
.admin-app .view-forecast .cons-head h2 { font-family: var(--nv-serif); font-size: 28px; font-weight: 500; letter-spacing: -.01em; }

/* Enlaces entre Inicio, Predicción y Pronóstico. */
.hs-forecast-link, .sim-forecast-link { display: block; margin-top: 6px; text-align: left; white-space: nowrap; padding: 0; border: 0; background: none; color: var(--nv-ink); font: inherit; font-size: 11.5px; font-weight: 600; text-decoration: underline; text-decoration-color: var(--nv-line-strong); text-underline-offset: 3px; cursor: pointer; }
.hs-forecast-link:hover, .sim-forecast-link:hover { text-decoration-color: currentColor; }
.hs-forecast-link:focus-visible, .sim-forecast-link:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: 2px; }
.hs-pop-detail > .hs-forecast-link { justify-self: start; margin-top: 4px; }
/* Predicción: «Qué dice cada fuente» con una cuarta columna, el Pronóstico ODYSSEUS. */
.admin-app .sim-source-comparison.has-forecast { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.admin-app .sim-comparison-row.is-forecast { padding: 8px 10px; border: 1px solid var(--nv-line-strong) !important; border-radius: 6px; background: var(--nv-subtle); }
.admin-app .sim-comparison-row.is-forecast .sim-comparison-source { color: var(--nv-ink); font-weight: 700; }
@media (max-width: 640px) { .admin-app .sim-source-comparison.has-forecast { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
/* Pronóstico: la contienda a la que se llega desde Inicio o Predicción se resalta un momento. */
/* La marca se queda (hasta elegir otra contienda); al llegar, destella. */
.cons-race.is-flash { border-radius: 8px; box-shadow: 0 0 0 2px var(--nv-ink); animation: cons-flash 1.6s ease-out 2; }
.cons-table tr.is-flash > * { background-color: color-mix(in srgb, #f0c46c 22%, var(--nv-card)); animation: cons-flash-row 1.6s ease-out 2; }
.cons-table tr.is-flash > :first-child { box-shadow: inset 3px 0 0 var(--nv-ink); }
@keyframes cons-flash { 0% { box-shadow: 0 0 0 2px var(--nv-ink), 0 0 0 10px color-mix(in srgb, #f0c46c 45%, transparent); } 100% { box-shadow: 0 0 0 2px var(--nv-ink), 0 0 0 0 transparent; } }
@keyframes cons-flash-row { 0% { background-color: color-mix(in srgb, #f0c46c 50%, var(--nv-card)); } }
.cons-row-open { padding: 0; border: 0; background: none; color: inherit; font: inherit; font-weight: inherit; text-align: left; cursor: pointer; }
.cons-row-open:hover { text-decoration: underline; text-underline-offset: 3px; }
@media (prefers-reduced-motion: reduce) { .cons-race.is-flash, .cons-table tr.is-flash > * { animation: none; } }

/* Carrusel del estado: qué son los porcentajes del podio y la última encuesta, tal cual se publicó. */
.hs-average { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px 14px; margin: 12px 0 0; padding: 8px 12px; border-top: 1px solid var(--nv-line); border-bottom: 1px solid var(--nv-line); font-size: 12px; }
.hs-average-what { margin: 0; color: var(--nv-muted); cursor: help; }
.hs-average-what b { color: var(--nv-text); font-weight: 600; }
.hs-average-last { display: inline-flex; flex-wrap: wrap; align-items: baseline; gap: 2px 8px; margin: 0; padding: 0; border: 0; background: none; color: var(--nv-muted); font: inherit; font-size: 12px; text-align: left; }
.hs-average-last b { color: var(--nv-ink); font-weight: 700; font-variant-numeric: tabular-nums; }
button.hs-average-last { cursor: pointer; }
button.hs-average-last:hover b { text-decoration: underline; text-underline-offset: 3px; }
button.hs-average-last:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: 2px; }

/* Estado elegido en Inicio: su voto anticipado (bajo el nombre) y, la noche de la elección, el resultado
   de cada contienda del carrusel. Datos de civicAPI; sólo contexto. */
.hs-early-slot { grid-column: 1 / -1; }
.hs-early-slot:empty, .hs-result-slot:empty { display: none; }
.hs-early { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 14px; padding: 8px 12px; border: 1px solid var(--nv-line); border-radius: 3px; background: var(--nv-card); font-size: 12px; }
.hs-early-label { display: flex; align-items: baseline; gap: 8px; margin: 0; color: var(--nv-muted); }
.hs-early-label b { color: var(--nv-ink); font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
.hs-early-facts { display: flex; flex: 1 1 auto; flex-wrap: wrap; gap: 2px 14px; margin: 0; color: var(--nv-muted); }
.hs-early-facts b { color: var(--nv-ink); font-weight: 700; font-variant-numeric: tabular-nums; }
.hs-early-cast { color: var(--nv-text); }
.hs-early-party { cursor: help; }
.hs-early-party.dem b { color: var(--map-dem-safe); } .hs-early-party.rep b { color: var(--map-rep-safe); }
.hs-early-party.none { cursor: default; }
.hs-early .hs-early-link { margin: 0 0 0 auto; }

.hs-result { display: grid; gap: 8px; margin: 12px 0 0; padding: 10px 12px; border: 1px solid var(--nv-line); border-left: 3px solid #d8a548; border-radius: 3px; background: var(--nv-card); font-size: 12.5px; animation: home-fade .25s ease both; }
.hs-result.called { border-left-color: #1a7a50; }
.hs-result-head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 2px 12px; }
.hs-result-state { color: #8a5a12; font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
.hs-result.called .hs-result-state { color: #1a7a50; }
.hs-result-state.is-live { color: #a53a33; }
.hs-result-state.is-live::before { content: ""; display: inline-block; width: 7px; height: 7px; margin-right: 6px; border-radius: 50%; background: #d5544b; vertical-align: 1px; animation: rs-pulse 1.6s ease-in-out infinite; }
.hs-result-meta { color: var(--nv-muted); font-size: 11.5px; font-variant-numeric: tabular-nums; }
.hs-result-people { display: grid; gap: 6px; margin: 0; padding: 0; list-style: none; }
.hs-result-person { display: grid; grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "name pct" "bar bar"; align-items: center; gap: 3px 10px; }
.hs-result-name { grid-area: name; overflow: hidden; color: var(--nv-text); text-overflow: ellipsis; white-space: nowrap; }
.hs-result-person b { grid-area: pct; color: var(--nv-ink); font-family: var(--nv-serif); font-size: 16px; font-weight: 500; font-variant-numeric: tabular-nums lining-nums; }
.hs-result-person.dem b { color: var(--map-dem-safe); } .hs-result-person.rep b { color: var(--map-rep-safe); }
.hs-result-person.is-winner .hs-result-name { color: var(--nv-ink); font-weight: 700; }
.hs-result-bar { grid-area: bar; height: 5px; background: var(--nv-active); }
.hs-result-bar i { display: block; height: 100%; background: var(--map-oth); }
.hs-result-person.dem .hs-result-bar i { background: var(--map-dem-likely); } .hs-result-person.rep .hs-result-bar i { background: var(--map-rep-likely); }
.hs-result-foot { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 4px 12px; padding-top: 6px; border-top: 1px solid var(--nv-line); color: var(--nv-muted); font-size: 12px; }
.hs-result-vs b { color: var(--nv-ink); font-weight: 600; }
.hs-result-vs.agree { color: #1a7a50; } .hs-result-vs.disagree { color: #a53a33; }
.hs-result-foot .hs-forecast-link { margin: 0; }
html[data-theme="dark"] .hs-early-party.dem b, html[data-theme="dark"] .hs-result-person.dem b { color: #8db8ec; }
html[data-theme="dark"] .hs-early-party.rep b, html[data-theme="dark"] .hs-result-person.rep b { color: #f29a90; }
html[data-theme="dark"] .hs-result-state { color: #f0c46c; }
html[data-theme="dark"] .hs-result.called .hs-result-state, html[data-theme="dark"] .hs-result-vs.agree { color: #4ccf8a; }
html[data-theme="dark"] .hs-result.called { border-left-color: #4ccf8a; }
html[data-theme="dark"] .hs-result-state.is-live, html[data-theme="dark"] .hs-result-vs.disagree { color: #f39a8a; }
@media (prefers-reduced-motion: reduce) { .hs-result, .hs-result-state.is-live::before { animation: none; } }

/* Listas de encuestas: filtro por estado al llegar desde una contienda («Sólo California ✕»). */
.view-scope { display: inline-flex; align-items: center; gap: 6px; padding: 4px 6px 4px 12px; border-radius: 999px; background: var(--nv-ink); color: var(--nv-card); font-size: 12.5px; font-weight: 600; white-space: nowrap; animation: home-fade .25s ease both; }
.view-scope[hidden] { display: none; }
.view-scope button { display: grid; place-items: center; width: 20px; height: 20px; padding: 0; border: 0; border-radius: 50%; background: color-mix(in srgb, var(--nv-card) 18%, transparent); color: inherit; font: inherit; font-size: 10px; cursor: pointer; }
.view-scope button:hover { background: color-mix(in srgb, var(--nv-card) 32%, transparent); }
.view-scope button:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: 2px; }

/* ---------- Inicio: índice de contiendas bajo el mapa (con un estado elegido) ---------- */
/* Se muestra completo, con todas sus tarjetas, sin desplazarse por dentro: si son muchas, la tarjeta
   del mapa crece hacia abajo. */
.admin-app .home-map-card.has-extra { display: flex; flex-direction: column; }
.admin-app .home-map-card.has-extra > :not(.home-map-extra) { flex: none; }
.home-map-extra { position: relative; flex: none; margin-top: 18px; padding: 14px 2px 2px; border-top: 1px solid var(--nv-line); }
.home-map-extra[hidden] { display: none; }
.hme-head { margin-bottom: 12px; }
.hme-head h3 { margin: 0; color: var(--nv-ink); font-family: var(--nv-serif); font-size: 18px; font-weight: 500; }
/* Conteo D / cerradas / R e indicación en una sola línea, bajo el título. */
.hme-note { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 14px; margin: 3px 0 0; color: var(--nv-muted); font-size: 12px; }
.hme-count { color: var(--nv-muted); white-space: nowrap; }
.hme-count b { font-family: var(--nv-serif); font-size: 15px; font-weight: 600; font-variant-numeric: tabular-nums lining-nums; }
.hme-count.dem b { color: var(--map-dem-safe); } .hme-count.rep b { color: var(--map-rep-safe); } .hme-count.oth b { color: var(--map-oth); } .hme-count.toss b { color: #64615a; }
.hme-count + .hme-hint { padding-left: 14px; border-left: 1px solid var(--nv-line); }
html[data-theme="dark"] .hme-count.dem b { color: #8db8ec; } html[data-theme="dark"] .hme-count.rep b { color: #f29a90; } html[data-theme="dark"] .hme-count.toss b { color: #c0bebb; }
.hme-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 12px; margin: 0; padding: 2px 2px 6px; list-style: none; }
/* Cada contienda, con el estilo de las tarjetas del carrusel: encabezado con ícono y título en serif,
   el favorito en su anillo con foto y el rival abajo. Fondo con un toque del color de quien va adelante. */
.hme-card { --c: var(--map-toss); --c-ink: #7d725c; display: grid; align-content: start; gap: 10px; width: 100%; height: 100%; padding: 12px 14px 14px; border: 1px solid var(--nv-line); border-radius: 10px; background: linear-gradient(180deg, color-mix(in srgb, var(--c) 7%, var(--nv-card)), var(--nv-card) 62%); box-shadow: 0 1px 0 rgba(22, 21, 20, .03), 0 10px 22px -20px rgba(22, 21, 20, .45); color: inherit; font: inherit; text-align: left; cursor: pointer; transition: border-color .2s ease, box-shadow .2s ease, transform .2s ease; }
.hme-card.dem { --c: var(--map-dem-likely); --c-ink: var(--map-dem-safe); }
.hme-card.rep { --c: var(--map-rep-likely); --c-ink: var(--map-rep-safe); }
.hme-card.oth { --c: var(--map-oth); --c-ink: var(--map-oth); }
.hme-card:hover { border-color: color-mix(in srgb, var(--c) 45%, var(--nv-line)); transform: translateY(-2px); box-shadow: 0 1px 0 rgba(22, 21, 20, .03), 0 16px 28px -20px color-mix(in srgb, var(--c-ink) 60%, transparent); }
.hme-card[aria-current="true"] { border-color: color-mix(in srgb, var(--c) 70%, var(--nv-line)); background: linear-gradient(180deg, color-mix(in srgb, var(--c) 14%, var(--nv-card)), var(--nv-card) 70%); box-shadow: 0 0 0 1px color-mix(in srgb, var(--c) 55%, transparent), 0 16px 30px -18px color-mix(in srgb, var(--c-ink) 70%, transparent); }
.hme-card:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: 2px; }
.hme-top { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 8px; padding-bottom: 9px; border-bottom: 1px solid var(--nv-line); }
.hme-icon { display: grid; place-items: center; width: 26px; height: 26px; border-radius: 7px; background: color-mix(in srgb, var(--c) 16%, var(--nv-card)); color: var(--c-ink); }
.hme-icon svg { width: 15px; height: 15px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
.hme-title { color: var(--nv-ink); font-family: var(--nv-serif); font-size: 15.5px; font-weight: 500; line-height: 1.2; overflow-wrap: anywhere; }
.hme-top .hs-cat { margin-top: 0; }
.hme-lead { display: grid; grid-template-columns: 56px minmax(0, 1fr) max-content; align-items: center; gap: 10px; }
.hme-lead .hs-ring { width: 56px; height: 56px; }
.admin-app .hme-lead .hs-ring .sen-avatar { font-size: 13px; }
.hme-who { display: grid; gap: 1px; min-width: 0; }
.hme-who strong { color: var(--nv-ink); font-size: 13.5px; font-weight: 600; line-height: 1.25; overflow-wrap: anywhere; }
.hme-who small { color: var(--nv-muted); font-size: 11.5px; }
.hme-pct { color: var(--nv-ink); font-family: var(--nv-serif); font-size: clamp(24px, 2.2vw, 30px); font-weight: 500; line-height: 1; font-variant-numeric: tabular-nums lining-nums; }
.hme-pct span { color: var(--nv-muted); font-size: .5em; }
.hme-pct.dem { color: var(--map-dem-safe); } .hme-pct.rep { color: var(--map-rep-safe); } .hme-pct.oth { color: var(--map-oth); }
.hme-foot { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding-top: 9px; border-top: 1px solid var(--nv-line); }
.hme-rival { display: inline-flex; align-items: center; gap: 6px; min-width: 0; color: var(--nv-muted); font-size: 12px; white-space: nowrap; }
.hme-rival > span:last-child { overflow: hidden; color: var(--nv-text); text-overflow: ellipsis; font-variant-numeric: tabular-nums; }
.admin-app .hme-rival .sen-avatar { flex: none; width: 20px; height: 20px; box-shadow: 0 0 0 1.5px var(--c, var(--nv-line-strong)); font-size: 7.5px; }
.hme-gap { flex: none; font-size: 12.5px; font-weight: 700; font-variant-numeric: tabular-nums; }
.hme-gap.dem { color: var(--map-dem-safe); } .hme-gap.rep { color: var(--map-rep-safe); } .hme-gap.oth { color: var(--map-oth); }
.hme-bar { height: 5px; }
html[data-theme="dark"] .hme-card.dem { --c-ink: #8db8ec; } html[data-theme="dark"] .hme-card.rep { --c-ink: #f29a90; } html[data-theme="dark"] .hme-card.toss { --c-ink: #c9bea6; }
html[data-theme="dark"] .hme-pct.dem, html[data-theme="dark"] .hme-gap.dem { color: #8db8ec; } html[data-theme="dark"] .hme-pct.rep, html[data-theme="dark"] .hme-gap.rep { color: #f29a90; }
@media (prefers-reduced-motion: reduce) { .hme-card { transition: none; } }
@media (max-width: 1100px) { .home-map-extra { display: none; } }

/* ---------- Voto anticipado (civicAPI) ---------- */
/* Cifras nacionales, mapa (por partido registrado o por boletas), el detalle del país o del estado
   elegido con sus condados y la tabla de todos los estados. Mismos colores que el mapa de Inicio. */
.ev-kpi small { display: block; margin-top: 4px; color: var(--nv-muted); font-size: 11.5px; line-height: 1.35; }
.ev-kpi.dem strong { color: var(--map-dem-safe); } .ev-kpi.rep strong { color: var(--map-rep-safe); }
.ev-grid { display: grid; grid-template-columns: minmax(0, 1.45fr) minmax(320px, 1fr); gap: 16px; align-items: start; margin-top: 16px; }
.ev-card { padding: 16px 18px; border: 1px solid var(--nv-line); border-radius: var(--nv-radius); background: var(--nv-card); box-shadow: var(--nv-shadow); }
.ev-card-head { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; gap: 10px 16px; margin-bottom: 12px; padding-bottom: 10px; border-bottom: 1px solid var(--nv-line); }
.ev-card-head h3 { margin: 0; color: var(--nv-ink); font-family: var(--nv-serif); font-size: 19px; font-weight: 500; }
.ev-card-head p { margin: 3px 0 0; color: var(--nv-muted); font-size: 12.5px; }
.ev-map svg { display: block; width: 100%; height: auto; }
.ev-state { --f: var(--map-none); fill: var(--f); stroke: var(--nv-card); stroke-width: 1; transition: fill .3s ease, opacity .2s ease; }
.ev-state[role="button"] { cursor: pointer; }
.ev-state[role="button"]:hover, .ev-state:focus-visible { opacity: .82; outline: none; }
.ev-state.is-selected { stroke: var(--nv-ink); stroke-width: 2.4; paint-order: stroke; }
.ev-state.dem.lean, .ev-swatch.dem.lean { --f: var(--map-dem-lean); } .ev-state.dem.likely, .ev-swatch.dem.likely { --f: var(--map-dem-likely); } .ev-state.dem.safe, .ev-swatch.dem.safe { --f: var(--map-dem-safe); }
.ev-state.rep.lean, .ev-swatch.rep.lean { --f: var(--map-rep-lean); } .ev-state.rep.likely, .ev-swatch.rep.likely { --f: var(--map-rep-likely); } .ev-state.rep.safe, .ev-swatch.rep.safe { --f: var(--map-rep-safe); }
.ev-state.toss, .ev-swatch.toss { --f: var(--map-toss); }
.ev-state.unk, .ev-swatch.unk { --f: color-mix(in srgb, var(--nv-muted) 30%, var(--nv-card)); }
.ev-state.none, .ev-swatch.none { --f: var(--map-none); }
.ev-state.vol.v0, .ev-swatch.vol.v0 { --f: color-mix(in srgb, var(--nv-ink) 10%, var(--nv-card)); }
.ev-state.vol.v1, .ev-swatch.vol.v1 { --f: color-mix(in srgb, var(--nv-ink) 26%, var(--nv-card)); }
.ev-state.vol.v2, .ev-swatch.vol.v2 { --f: color-mix(in srgb, var(--nv-ink) 44%, var(--nv-card)); }
.ev-state.vol.v3, .ev-swatch.vol.v3 { --f: color-mix(in srgb, var(--nv-ink) 64%, var(--nv-card)); }
.ev-state.vol.v4, .ev-swatch.vol.v4 { --f: color-mix(in srgb, var(--nv-ink) 84%, var(--nv-card)); }
.ev-label { fill: var(--nv-ink); font-family: var(--nv-font); font-size: 10.5px; font-weight: 700; letter-spacing: .03em; pointer-events: none; }
.ev-label.dem.likely, .ev-label.dem.safe, .ev-label.rep.likely, .ev-label.rep.safe, .ev-label.vol.v3, .ev-label.vol.v4 { fill: #fff; }
.ev-legend { display: flex; flex-wrap: wrap; gap: 6px 14px; margin-top: 12px; padding-top: 10px; border-top: 1px solid var(--nv-line); color: var(--nv-muted); font-size: 11.5px; }
.ev-legend-item { display: inline-flex; align-items: center; gap: 6px; }
.ev-swatch { --f: var(--map-none); display: inline-block; width: 14px; height: 10px; border-radius: 2px; background: var(--f); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--nv-ink) 10%, transparent); }
.ev-seg { flex: none; }
.ev-side { position: sticky; top: 84px; display: grid; gap: 8px; }
.ev-state-title { display: flex; align-items: center; gap: 10px; }
.ev-code { display: inline-grid; place-items: center; min-width: 30px; height: 22px; padding: 0 5px; border-radius: 4px; background: var(--map-none); color: var(--nv-ink); font-size: 10.5px; font-weight: 800; letter-spacing: .04em; vertical-align: middle; }
.ev-code.dem { background: var(--map-dem-likely); color: #fff; } .ev-code.rep { background: var(--map-rep-likely); color: #fff; } .ev-code.toss { background: var(--map-toss); }
.ev-label-sm { margin: 10px 0 0; color: var(--nv-muted); font-size: 10.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
.ev-muted { margin: 0; color: var(--nv-muted); font-size: 12.5px; line-height: 1.45; }
.ev-facts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin: 0; }
.ev-facts div { padding: 9px 11px; border-radius: 8px; background: var(--nv-subtle); }
.ev-facts dt { color: var(--nv-muted); font-size: 10.5px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; }
.ev-facts dd { margin: 2px 0 0; color: var(--nv-ink); font-family: var(--nv-serif); font-size: 22px; font-weight: 500; line-height: 1.1; font-variant-numeric: tabular-nums lining-nums; }
.ev-facts small { color: var(--nv-muted); font-size: 11.5px; font-variant-numeric: tabular-nums; }
.ev-party { display: grid; gap: 6px; }
.ev-party-bar { display: flex; gap: 2px; height: 12px; overflow: hidden; border-radius: 3px; background: var(--nv-active); }
.ev-party-bar i { min-width: 3px; background: color-mix(in srgb, var(--nv-muted) 30%, var(--nv-card)); transform-origin: left; animation: home-grow .7s cubic-bezier(.22, 1, .36, 1) both; }
.ev-party-bar .dem { background: var(--map-dem-likely); } .ev-party-bar .rep { background: var(--map-rep-likely); } .ev-party-bar .npa { background: var(--map-toss); } .ev-party-bar .oth { background: var(--map-oth); }
.ev-party-keys { display: flex; flex-wrap: wrap; gap: 4px 14px; margin: 0; color: var(--nv-muted); font-size: 12px; font-variant-numeric: tabular-nums; }
.ev-party-keys b { color: var(--nv-ink); }
.ev-party-keys .dem b { color: var(--map-dem-safe); } .ev-party-keys .rep b { color: var(--map-rep-safe); } .ev-party-keys .oth b { color: var(--map-oth); }
.ev-spark { display: block; width: 100%; height: 70px; }
.ev-spark-area { fill: color-mix(in srgb, var(--map-dem-likely) 14%, transparent); }
.ev-spark-line { fill: none; stroke: var(--nv-ink); stroke-width: 1.6; stroke-linejoin: round; }
.ev-trend { display: grid; gap: 4px; }
.ev-table-card { margin-top: 16px; }
.ev-search, .ev-county-search { min-width: 200px; padding: 7px 12px; border: 1px solid var(--nv-line-strong); border-radius: 6px; background: var(--nv-card); color: var(--nv-ink); font: inherit; font-size: 13px; }
.ev-county-search { width: 100%; margin-bottom: 8px; }
.ev-table-wrap { max-height: 560px; overflow: auto; }
.ev-table { width: 100%; border-collapse: collapse; font-size: 12.5px; font-variant-numeric: tabular-nums; }
.ev-table th, .ev-table td { padding: 7px 8px; border-bottom: 1px solid var(--nv-line); text-align: left; white-space: nowrap; }
.ev-table .num { text-align: right; }
.ev-table thead th { position: sticky; top: 0; z-index: 1; background: var(--nv-card); color: var(--nv-muted); font-size: 10.5px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; }
.ev-sort { padding: 0; border: 0; background: none; color: inherit; font: inherit; letter-spacing: inherit; text-transform: inherit; cursor: pointer; }
.ev-sort:hover { color: var(--nv-ink); }
.ev-table tbody tr { cursor: pointer; transition: background .15s ease; }
.ev-table tbody tr:hover, .ev-table tbody tr.is-selected { background: var(--nv-subtle); }
.ev-table tbody tr.is-selected > :first-child { box-shadow: inset 3px 0 0 var(--nv-ink); }
.ev-table tbody tr:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: -2px; }
.ev-table tbody th { color: var(--nv-ink); font-weight: 600; }
.ev-table td.dem { color: var(--map-dem-safe); } .ev-table td.rep { color: var(--map-rep-safe); }
.ev-lead { font-weight: 700; }
.ev-lead.dem { color: var(--map-dem-safe); } .ev-lead.rep { color: var(--map-rep-safe); } .ev-lead.toss, .ev-lead.none { color: var(--nv-muted); }
.ev-table-sm { font-size: 12px; }
.ev-more { justify-self: start; margin-top: 8px; padding: 4px 12px; border: 1px solid var(--nv-line-strong); border-radius: 999px; background: none; color: var(--nv-ink); font: inherit; font-size: 12px; font-weight: 600; cursor: pointer; }
.ev-more[hidden] { display: none; }
.ev-counties { display: grid; }
.ev-note { margin: 14px 0 0; color: var(--nv-muted); font-size: 12px; line-height: 1.5; }
html[data-theme="dark"] .ev-kpi.dem strong, html[data-theme="dark"] .ev-party-keys .dem b, html[data-theme="dark"] .ev-table td.dem, html[data-theme="dark"] .ev-lead.dem { color: #8db8ec; }
html[data-theme="dark"] .ev-kpi.rep strong, html[data-theme="dark"] .ev-party-keys .rep b, html[data-theme="dark"] .ev-table td.rep, html[data-theme="dark"] .ev-lead.rep { color: #f29a90; }
@media (max-width: 1100px) { .ev-grid { grid-template-columns: 1fr; } .ev-side { position: static; } }
@media (max-width: 640px) { .ev-search { min-width: 0; width: 100%; } .ev-facts dd { font-size: 19px; } }
@media (prefers-reduced-motion: reduce) { .ev-party-bar i { animation: none; } .ev-state { transition: none; } }

/* ---------- Pronóstico ODYSSEUS: lectura ordenada (consensus.js) ----------
   Tarjetas por cargo: 1) favorito en cada contienda, 2) escaños esperados, con una nota cuando ambos
   van en sentidos distintos. Contiendas clave: dónde y calificación, las dos candidaturas con su
   probabilidad, la barra entre ambas y las señales en lista (✓ coincide, ✗ favorece al rival, = empate). */
.admin-app .cons-step { margin: 0; color: var(--nv-muted); font-size: 11px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; }
.admin-app .cons-score { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 6px 16px; }
.admin-app .cons-score div { display: grid; gap: 2px; }
.admin-app .cons-step span { font-weight: 400; letter-spacing: 0; text-transform: none; }
.admin-app .cons-score span { white-space: nowrap; font-size: 11.5px; }
.admin-app .cons-office-head { flex-wrap: wrap; }
.admin-app .cons-seats { display: grid; gap: 4px; padding-top: 12px; border-top: 1px solid var(--nv-line); }
.admin-app .cons-seat-row { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 10px; margin: 0; color: var(--nv-muted); font-size: 13px; }
.admin-app .cons-seat-row b { font-family: var(--nv-serif); font-size: 20px; font-weight: 500; font-variant-numeric: tabular-nums lining-nums; }
.admin-app .cons-seat-row .dem { color: var(--map-dem-safe); } .admin-app .cons-seat-row .rep { color: var(--map-rep-safe); } .admin-app .cons-seat-row .oth { color: var(--map-oth); }
.admin-app .cons-seat-note { margin: 2px 0 0; color: var(--nv-muted); font-size: 12px; line-height: 1.45; }

.admin-app .cons-legend { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 16px; flex-basis: 100%; margin: 4px 0 0; color: var(--nv-muted); font-size: 12px; }
.admin-app .cons-legend-item { display: inline-flex; align-items: center; gap: 6px; color: var(--nv-ink); font-weight: 600; }
.admin-app .cons-legend-note { color: var(--nv-muted); }

.admin-app .cons-race-button { gap: 12px; align-content: start; }
.admin-app .cons-race-top { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.admin-app .cons-race-where { margin: 0; font-size: 12.5px; }
.admin-app .cons-rating { flex: none; padding: 3px 9px; border-radius: 999px; background: var(--nv-subtle); color: var(--nv-ink); font-size: 11px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; }
.admin-app .cons-rating.toss { background: color-mix(in srgb, var(--map-toss) 55%, var(--nv-card)); }
.admin-app .cons-duel { display: grid; gap: 8px; }
.admin-app .cons-side { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 10px; }
.admin-app .cons-side .sen-avatar { box-shadow: 0 0 0 2px var(--nv-card), 0 0 0 3.5px var(--c, var(--nv-line-strong)); }
.admin-app .cons-side.dem { --c: var(--map-dem-likely); } .admin-app .cons-side.rep { --c: var(--map-rep-likely); } .admin-app .cons-side.oth { --c: var(--map-oth); }
.admin-app .cons-side-name { display: grid; min-width: 0; }
.admin-app .cons-side-name strong { color: var(--nv-ink); font-size: 14px; font-weight: 600; line-height: 1.25; overflow-wrap: anywhere; }
.admin-app .cons-side-name small { color: var(--nv-muted); font-size: 11.5px; }
.admin-app .cons-side.is-lead .cons-side-name strong { font-size: 15.5px; }
.admin-app .cons-side-pct { font-family: var(--nv-serif); font-size: 22px; font-weight: 500; line-height: 1; font-variant-numeric: tabular-nums lining-nums; color: var(--nv-muted); }
.admin-app .cons-side.is-lead .cons-side-pct { font-size: 30px; }
.admin-app .cons-side.is-lead.dem .cons-side-pct { color: var(--map-dem-safe); } .admin-app .cons-side.is-lead.rep .cons-side-pct { color: var(--map-rep-safe); } .admin-app .cons-side.is-lead.oth .cons-side-pct { color: var(--map-oth); }
.admin-app .cons-duel-bar { display: flex; gap: 2px; height: 8px; overflow: hidden; border-radius: 4px; }
.admin-app .cons-duel-bar i { min-width: 4px; }
.admin-app .cons-duel-bar .dem { background: var(--map-dem-likely); } .admin-app .cons-duel-bar .rep { background: var(--map-rep-likely); } .admin-app .cons-duel-bar .oth { background: var(--map-oth); }
.admin-app .cons-duel-note { margin: -6px 0 0; color: var(--nv-muted); font-size: 11.5px; }
.admin-app .cons-sig-head { display: flex; align-items: center; gap: 10px; padding-top: 10px; border-top: 1px solid var(--nv-line); color: var(--nv-muted); font-size: 11px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; }
.admin-app .cons-sig-head b { margin-left: auto; color: var(--nv-ink); font-size: 12.5px; letter-spacing: 0; text-transform: none; }
.admin-app .cons-sig-dots { display: inline-flex; gap: 3px; }
.admin-app .cons-sig-dots i { width: 8px; height: 8px; border-radius: 50%; }
.admin-app .cons-sig-dots .agree { background: #1f8a57; } .admin-app .cons-sig-dots .disagree { background: #c2413a; }
.admin-app .cons-sig-list { display: grid; gap: 2px; margin: -4px 0 0; padding: 0; list-style: none; }
.admin-app .cons-sig-list li { display: grid; grid-template-columns: 96px minmax(0, 1fr) 18px; align-items: center; gap: 2px 10px; padding: 5px 0; border-bottom: 1px dashed var(--nv-line); font-size: 12.5px; }
.admin-app .cons-sig-list li:last-child { border-bottom: 0; }
.admin-app .cons-sig-src { color: var(--nv-muted); }
.admin-app .cons-sig-val { color: var(--nv-ink); font-weight: 600; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.admin-app .cons-sig-word { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
.admin-app .cons-sig-mark { display: inline-grid; place-items: center; width: 18px; height: 18px; border-radius: 50%; font-size: 11px; font-style: normal; font-weight: 800; line-height: 1; }
.admin-app .agree > .cons-sig-mark { background: #e2f3ea; color: #17714a; }
.admin-app .disagree > .cons-sig-mark { background: #fbe4e1; color: #b4372f; }
.admin-app .tie > .cons-sig-mark { background: var(--nv-subtle); color: var(--nv-muted); }
.admin-app .cons-sig-list li.tie .cons-sig-val { color: var(--nv-muted); font-weight: 500; }
html[data-theme="dark"] .admin-app .agree > .cons-sig-mark { background: rgba(76, 207, 138, .16); color: #4ccf8a; }
html[data-theme="dark"] .admin-app .disagree > .cons-sig-mark { background: rgba(240, 120, 100, .18); color: #f39a8a; }
html[data-theme="dark"] .admin-app .cons-sig-dots .agree { background: #4ccf8a; } html[data-theme="dark"] .admin-app .cons-sig-dots .disagree { background: #f39a8a; }
html[data-theme="dark"] .ev-state.unk, html[data-theme="dark"] .ev-swatch.unk { --f: #57534c; }
html[data-theme="dark"] .ev-state.none, html[data-theme="dark"] .ev-swatch.none { --f: #2c2a27; }

/* ---------- Pronóstico: tablero por cargo (consensus.js, officeCard) ----------
   Una fila por cargo. Izquierda: conteo de favoritos, barra por calificación y escaños esperados.
   Derecha: los estados (o distritos) detrás de cada número, con el apellido del favorito y su
   probabilidad; el tono del chip sigue la calificación (seguro más intenso, inclinado más suave). */
.admin-app .cons-boards { display: grid; gap: 14px; margin-bottom: 26px; }
.admin-app .cons-board { --lead: var(--nv-ink); display: grid; grid-template-columns: minmax(270px, 320px) minmax(0, 1fr); overflow: hidden; border: 1px solid var(--nv-line); border-radius: 12px; background: var(--nv-card); box-shadow: 0 1px 0 rgba(22, 21, 20, .03), 0 18px 36px -30px rgba(22, 21, 20, .5); }
.admin-app .cons-board.lead-dem { --lead: var(--map-dem-safe); } .admin-app .cons-board.lead-rep { --lead: var(--map-rep-safe); }
.admin-app .cb-summary { display: grid; align-content: start; gap: 14px; padding: 20px 22px 18px; border-right: 1px solid var(--nv-line); background: linear-gradient(180deg, color-mix(in srgb, var(--lead) 5%, var(--nv-card)), var(--nv-card) 70%); box-shadow: inset 0 3px 0 var(--lead); }
.admin-app .cb-head { display: flex; align-items: center; gap: 12px; }
.admin-app .cb-icon { display: grid; place-items: center; flex: none; width: 38px; height: 38px; border: 1px solid var(--nv-line); border-radius: 10px; background: var(--nv-card); color: var(--nv-ink); }
.admin-app .cb-icon svg { width: 19px; height: 19px; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; }
.admin-app .cb-head h3 { margin: 0; color: var(--nv-ink); font-family: var(--nv-serif); font-size: 21px; font-weight: 500; letter-spacing: -.01em; line-height: 1.15; }
.admin-app .cb-head p { margin: 2px 0 0; color: var(--nv-muted); font-size: 12px; }
.admin-app .cb-tally { display: flex; justify-content: space-between; gap: 10px; }
.admin-app .cb-count { display: grid; gap: 3px; }
.admin-app .cb-count:nth-child(2) { text-align: center; }
.admin-app .cb-count:last-child { text-align: right; }
.admin-app .cb-count strong { font-family: var(--nv-serif); font-size: 40px; font-weight: 500; line-height: .95; letter-spacing: -.02em; font-variant-numeric: tabular-nums lining-nums; }
.admin-app .cb-count span { color: var(--nv-muted); font-size: 11.5px; white-space: nowrap; }
.admin-app .cb-count.dem strong { color: var(--map-dem-safe); } .admin-app .cb-count.rep strong { color: var(--map-rep-safe); }
.admin-app .cb-count.toss strong { color: var(--nv-ink); } .admin-app .cb-count.oth strong { color: var(--map-oth); }
.admin-app .cb-bar { display: flex; gap: 2px; height: 12px; overflow: hidden; border-radius: 3px; }
.admin-app .cb-bar i { min-width: 3px; }
.admin-app .cb-bar .dem.safe { background: var(--map-dem-safe); } .admin-app .cb-bar .dem.likely { background: var(--map-dem-likely); } .admin-app .cb-bar .dem.lean { background: var(--map-dem-lean); }
.admin-app .cb-bar .rep.safe { background: var(--map-rep-safe); } .admin-app .cb-bar .rep.likely { background: var(--map-rep-likely); } .admin-app .cb-bar .rep.lean { background: var(--map-rep-lean); }
.admin-app .cb-bar .toss { background: var(--map-toss); } .admin-app .cb-bar .oth { background: var(--map-oth); }
.admin-app .cb-scale { display: flex; justify-content: space-between; margin: -8px 0 0; color: var(--nv-muted); font-size: 10px; letter-spacing: .02em; }
.admin-app .cb-scale .dem { color: var(--map-dem-safe); font-weight: 600; } .admin-app .cb-scale .rep { color: var(--map-rep-safe); font-weight: 600; }
.admin-app .cb-scale span { white-space: nowrap; }
.admin-app .cb-scale span:nth-child(2) { overflow: hidden; text-overflow: ellipsis; padding: 0 6px; }
.admin-app .cb-seats { display: grid; gap: 4px; padding-top: 12px; border-top: 1px solid var(--nv-line); }
.admin-app .cb-label { margin: 0; color: var(--nv-muted); font-size: 10.5px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; }
.admin-app .cb-seat-row { display: flex; flex-wrap: wrap; gap: 4px 16px; margin: 0; }
.admin-app .cb-seat-row b { font-family: var(--nv-serif); font-size: 22px; font-weight: 500; font-variant-numeric: tabular-nums lining-nums; }
.admin-app .cb-seat-row .dem { color: var(--map-dem-safe); } .admin-app .cb-seat-row .rep { color: var(--map-rep-safe); } .admin-app .cb-seat-row .oth { color: var(--map-oth); }
.admin-app .cb-note { margin: 0; color: var(--nv-muted); font-size: 12px; line-height: 1.45; }

.admin-app .cb-groups { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); align-content: start; }
.admin-app .cb-group { display: grid; align-content: start; gap: 14px; padding: 18px 20px 20px; border-left: 1px solid var(--nv-line); }
.admin-app .cb-group:first-child { border-left: 0; }
.admin-app .cb-group h4 { display: flex; align-items: center; gap: 8px; margin: 0; color: var(--nv-ink); font-size: 12px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; }
.admin-app .cb-group h4 span { margin-left: auto; color: var(--nv-muted); font-family: var(--nv-serif); font-size: 17px; font-weight: 500; letter-spacing: 0; }
.admin-app .cb-dot { width: 9px; height: 9px; border-radius: 2px; background: var(--map-toss); }
.admin-app .cb-group.dem .cb-dot { background: var(--map-dem-safe); } .admin-app .cb-group.rep .cb-dot { background: var(--map-rep-safe); } .admin-app .cb-group.oth .cb-dot { background: var(--map-oth); }
.admin-app .cb-none { margin: 0; color: var(--nv-muted); font-size: 12.5px; font-style: italic; }
@media (max-width: 980px) {
  .admin-app .cons-board { grid-template-columns: 1fr; }
  .admin-app .cb-summary { border-right: 0; border-bottom: 1px solid var(--nv-line); }
}
@media (max-width: 560px) { .admin-app .cb-group { border-left: 0; border-top: 1px solid var(--nv-line); } .admin-app .cb-group:first-child { border-top: 0; } }

/* ---------- Resultados (civicAPI) ---------- */
/* Pestañas por cargo, mapa (Senado y gubernaturas) y la lista de contiendas con sus votos, el
   porcentaje reportado, el estado (declarada, adelante, sin votos) y el Pronóstico ODYSSEUS. */
.watch-status.is-live { color: #a53a33; font-weight: 600; }
.watch-status.is-live::before { content: ""; display: inline-block; width: 8px; height: 8px; margin-right: 8px; border-radius: 50%; background: #d5544b; vertical-align: middle; animation: rs-pulse 1.6s ease-in-out infinite; }
@keyframes rs-pulse { 50% { opacity: .3; } }
.rs-tabs { margin-top: 16px; }
.rs-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.25fr); gap: 16px; align-items: start; margin-top: 14px; }
.rs-grid.is-list { grid-template-columns: 1fr; }
.rs-grid > * { min-width: 0; }
.rs-detail .ev-table { table-layout: auto; }
.rs-detail { overflow-x: auto; }
.ev-state.oth, .ev-swatch.oth { --f: var(--map-oth); } .ev-state.oth.likely, .ev-state.oth.lean { opacity: .7; }
.rs-map-card { position: sticky; top: 84px; }
.ev-state.off, .ev-swatch.off { --f: color-mix(in srgb, var(--map-none) 55%, var(--nv-card)); }
.ev-state.lean, .ev-swatch.lean { opacity: .85; }
.rs-filters { margin-bottom: 10px; }
.rs-list { display: grid; margin: 0; padding: 0; border-top: 1px solid var(--nv-line); list-style: none; }
.rs-race { border-bottom: 1px solid var(--nv-line); }
.rs-race-main { display: grid; grid-template-columns: minmax(0, .85fr) minmax(0, 1.6fr) 62px 96px minmax(0, .8fr); align-items: center; gap: 10px; width: 100%; padding: 10px 8px; border: 0; background: none; color: inherit; font: inherit; text-align: left; cursor: pointer; transition: background .15s ease; }
.rs-race-main:hover, .rs-race.is-open > .rs-race-main { background: var(--nv-subtle); }
.rs-race-main:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: -2px; }
.rs-where { display: flex; align-items: center; gap: 8px; min-width: 0; }
.rs-where strong { overflow: hidden; color: var(--nv-ink); font-size: 13px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.rs-people { display: grid; gap: 4px; min-width: 0; }
.rs-person { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; grid-template-areas: "name pct check" "bar bar bar"; align-items: center; gap: 2px 8px; font-size: 12.5px; }
.rs-name { grid-area: name; overflow: hidden; color: var(--nv-text); text-overflow: ellipsis; white-space: nowrap; }
.rs-person b { grid-area: pct; color: var(--nv-ink); font-variant-numeric: tabular-nums; }
.rs-person.dem b { color: var(--map-dem-safe); } .rs-person.rep b { color: var(--map-rep-safe); }
.rs-person.is-winner .rs-name { color: var(--nv-ink); font-weight: 700; }
.rs-check { grid-area: check; color: #1a7a50; font-weight: 800; }
.rs-bar { grid-area: bar; height: 4px; background: var(--nv-active); }
.rs-bar i { display: block; height: 100%; background: var(--map-toss); transform-origin: left; animation: home-grow .7s cubic-bezier(.22, 1, .36, 1) both; }
.rs-person.dem .rs-bar i { background: var(--map-dem-likely); } .rs-person.rep .rs-bar i { background: var(--map-rep-likely); } .rs-person.oth .rs-bar i { background: var(--map-oth); }
.rs-count { display: grid; justify-items: end; }
.rs-count b { color: var(--nv-ink); font-family: var(--nv-serif); font-size: 18px; font-weight: 500; line-height: 1.1; font-variant-numeric: tabular-nums lining-nums; }
.rs-count small, .rs-forecast small { color: var(--nv-muted); font-size: 11px; }
.rs-tag { justify-self: start; padding: 2px 8px; border-radius: 999px; background: var(--nv-active); color: var(--nv-muted); font-size: 11px; font-weight: 700; white-space: nowrap; }
.rs-tag.called { background: #e3f3ea; color: #1a7a50; }
.rs-tag.counting { background: #fbf0dc; color: #8a5a12; }
.rs-forecast { display: grid; gap: 1px; min-width: 0; }
.rs-forecast b { font-size: 12.5px; font-variant-numeric: tabular-nums; }
.rs-forecast b.dem { color: var(--map-dem-safe); } .rs-forecast b.rep { color: var(--map-rep-safe); }
.rs-forecast.agree small:last-child { color: #1a7a50; font-weight: 600; }
.rs-forecast.disagree small:last-child { color: #a53a33; font-weight: 600; }
.rs-detail { display: grid; gap: 10px; padding: 4px 8px 14px; animation: home-fade .25s ease both; }
.rs-detail td.dem { color: var(--map-dem-safe); } .rs-detail td.rep { color: var(--map-rep-safe); }
.rs-empty { padding: 18px 8px; }
html[data-theme="dark"] .rs-person.dem b, html[data-theme="dark"] .rs-forecast b.dem, html[data-theme="dark"] .rs-detail td.dem { color: #8db8ec; }
html[data-theme="dark"] .rs-person.rep b, html[data-theme="dark"] .rs-forecast b.rep, html[data-theme="dark"] .rs-detail td.rep { color: #f29a90; }
html[data-theme="dark"] .rs-tag.called { background: rgba(76, 207, 138, .14); color: #4ccf8a; }
html[data-theme="dark"] .rs-tag.counting { background: rgba(240, 196, 108, .14); color: #f0c46c; }
html[data-theme="dark"] .watch-status.is-live { color: #f39a8a; }
/* Aviso de arriba: cuenta regresiva antes de los votos o marca del ejemplo con datos simulados. */
.rs-banner { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 14px 28px; margin: 0 0 18px; padding: 18px 20px; border: 1px solid var(--nv-line); border-left: 4px solid var(--nv-ink); border-radius: 3px; background: var(--nv-card); }
.rs-banner-text { display: grid; flex: 1 1 420px; gap: 6px; min-width: 0; }
.rs-banner-text p { margin: 0; max-width: 72ch; color: var(--nv-text); font-size: 13px; line-height: 1.5; }
.rs-banner-text .rs-banner-eyebrow { color: var(--nv-muted); font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
.rs-banner-text .rs-banner-facts { color: var(--nv-muted); font-size: 12.5px; }
.rs-banner-value { color: var(--nv-ink); font-family: var(--nv-serif); font-size: 30px; font-weight: 500; line-height: 1.15; font-variant-numeric: tabular-nums lining-nums; }
.rs-banner-action { display: grid; justify-items: start; gap: 4px; }
.rs-banner-action small { color: var(--nv-muted); font-size: 11.5px; }
.rs-banner.is-example { border-color: #e2c27d; border-left-color: #d8a548; background: repeating-linear-gradient(135deg, #fdf6e7 0 14px, #faf0da 14px 28px); }
.rs-banner.is-example .rs-banner-eyebrow { color: #8a5a12; }
.view-results.is-example .ev-card { border-style: dashed; border-color: #d8a548; }
/* Antes de los votos: dónde, quiénes y el Pronóstico. */
.rs-list.is-waiting .rs-race-main { grid-template-columns: minmax(0, .9fr) minmax(0, 1.6fr) minmax(0, .8fr); }
.rs-list.is-waiting .rs-person { grid-template-columns: minmax(0, 1fr); grid-template-areas: "name"; }
html[data-theme="dark"] .rs-banner.is-example { border-color: rgba(240, 196, 108, .45); border-left-color: #f0c46c; background: repeating-linear-gradient(135deg, rgba(240, 196, 108, .08) 0 14px, rgba(240, 196, 108, .04) 14px 28px); }
html[data-theme="dark"] .rs-banner.is-example .rs-banner-eyebrow { color: #f0c46c; }
html[data-theme="dark"] .view-results.is-example .ev-card { border-color: rgba(240, 196, 108, .5); }
@media (max-width: 1100px) { .rs-grid { grid-template-columns: 1fr; } .rs-map-card { position: static; } }
@media (max-width: 760px) {
  .rs-race-main { grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "where count" "people people" "tag forecast"; }
  .rs-where { grid-area: where; } .rs-people { grid-area: people; } .rs-count { grid-area: count; } .rs-tag { grid-area: tag; } .rs-forecast { grid-area: forecast; justify-items: end; text-align: right; }
  .rs-list.is-waiting .rs-race-main { grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "where forecast" "people people"; }
  .rs-banner { padding: 14px 16px; }
  .rs-banner-value { font-size: 24px; }
}
@media (prefers-reduced-motion: reduce) { .watch-status.is-live::before, .rs-bar i, .rs-detail { animation: none; } }

/* ---------- Pronóstico: tabla de calificaciones (filas) y detalle en la misma tarjeta ----------
   Como las tablas de calificación de los analistas: por partido y, dentro, Seguro / Probable /
   Inclinado. Cada fila: estado, favorito y probabilidad, con una línea fina que se llena de 50% a 100%. */
.admin-app .cb-tier { display: grid; gap: 4px; }
.admin-app .cb-tier-label { display: flex; align-items: center; gap: 8px; margin: 0; color: var(--nv-muted); font-size: 10.5px; font-weight: 600; letter-spacing: .09em; text-transform: uppercase; }
.admin-app .cb-tier-label::after { content: ""; flex: 1; height: 1px; background: var(--nv-line); }
.admin-app .cb-rows { display: grid; }
.admin-app .cb-row { --c: var(--nv-muted); position: relative; display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: baseline; gap: 0 10px; width: 100%; padding: 7px 6px 9px; border: 0; border-bottom: 1px solid var(--nv-line); border-radius: 0; background: none; color: var(--nv-ink); font: inherit; text-align: left; cursor: pointer; transition: background-color .15s ease; }
.admin-app .cb-row.p-dem { --c: var(--map-dem-safe); } .admin-app .cb-row.p-rep { --c: var(--map-rep-safe); } .admin-app .cb-row.p-oth { --c: var(--map-oth); }
.admin-app .cb-rows .cb-row:last-child { border-bottom: 0; }
.admin-app .cb-row-state { overflow: hidden; font-family: var(--nv-serif); font-size: 15px; font-weight: 500; line-height: 1.25; text-overflow: ellipsis; white-space: nowrap; }
.admin-app .cb-row-who { color: var(--nv-muted); font-size: 12.5px; white-space: nowrap; }
.admin-app .cb-row-pct { min-width: 3.2em; color: var(--c); font-size: 13px; font-weight: 700; text-align: right; font-variant-numeric: tabular-nums; }
.admin-app .cb-row.is-house { grid-template-columns: minmax(0, auto) minmax(0, 1fr); }
.admin-app .cb-row.is-house .cb-row-who { overflow-wrap: anywhere; white-space: normal; text-align: right; font-variant-numeric: tabular-nums; }
.admin-app .cb-row-meter { grid-column: 1 / -1; height: 2px; margin-top: 6px; background: var(--nv-line); }
.admin-app .cb-row-meter i { display: block; height: 100%; background: var(--c); opacity: .75; }
.admin-app .cb-row:hover { background: var(--nv-subtle); }
.admin-app .cb-row[aria-expanded="true"] { background: color-mix(in srgb, var(--c) 8%, var(--nv-card)); box-shadow: inset 2px 0 0 var(--c); }
.admin-app .cb-row:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: -2px; }

.admin-app .cb-detail { position: relative; grid-column: 1 / -1; padding: 22px 26px 20px; border-top: 1px solid var(--nv-line); background: var(--nv-subtle); }
.admin-app .cb-detail[hidden] { display: none; }
.admin-app .cb-detail-close { position: absolute; top: 14px; right: 16px; display: grid; place-items: center; width: 30px; height: 30px; border: 1px solid var(--nv-line); border-radius: 50%; background: var(--nv-card); color: var(--nv-muted); font: inherit; font-size: 13px; cursor: pointer; }
.admin-app .cb-detail-close:hover { color: var(--nv-ink); border-color: var(--nv-line-strong, var(--nv-ink)); }
.admin-app .cb-detail-race { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); gap: 16px 36px; padding-right: 36px; }
.admin-app .cb-detail-main, .admin-app .cb-detail-signals { display: grid; align-content: start; gap: 12px; }
.admin-app .cb-detail-signals .cons-sig-head { padding-top: 0; border-top: 0; }
.admin-app .cb-detail-link { justify-self: start; margin-top: 14px; padding: 0; border: 0; background: none; color: var(--nv-ink); font: inherit; font-size: 12.5px; font-weight: 600; text-decoration: underline; text-decoration-color: var(--nv-line-strong, currentColor); text-underline-offset: 4px; cursor: pointer; }
.admin-app .cb-detail-link:hover { text-decoration-color: currentColor; }
.admin-app .cb-district-list { display: grid; margin-top: 12px; padding-right: 36px; }
.admin-app .cb-district { display: grid; grid-template-columns: 52px minmax(0, auto) minmax(0, 1fr) auto 3.4em; align-items: baseline; gap: 4px 12px; padding: 8px 0; border-bottom: 1px solid var(--nv-line); font-size: 13px; }
.admin-app .cb-district:last-child { border-bottom: 0; }
.admin-app .cb-district b { color: var(--nv-ink); font-variant-numeric: tabular-nums; }
.admin-app .cb-district-who { font-weight: 600; }
.admin-app .cb-district-who.dem, .admin-app .cb-district strong.dem { color: var(--map-dem-safe); }
.admin-app .cb-district-who.rep, .admin-app .cb-district strong.rep { color: var(--map-rep-safe); }
.admin-app .cb-district-who.oth, .admin-app .cb-district strong.oth { color: var(--map-oth); }
.admin-app .cb-district-vs { overflow: hidden; color: var(--nv-muted); text-overflow: ellipsis; white-space: nowrap; }
.admin-app .cb-district strong { text-align: right; font-variant-numeric: tabular-nums; }
/* Las tarjetas clave ya no son un botón entero: el enlace a Predicción va al pie. */
.admin-app .cons-race-button { cursor: default; }
.admin-app .cons-race .cb-detail-link { margin-top: 2px; }
@media (max-width: 760px) {
  .admin-app .cb-detail { padding: 18px 16px; }
  .admin-app .cb-detail-race { grid-template-columns: 1fr; padding-right: 0; }
  .admin-app .cb-district-list { padding-right: 0; }
  .admin-app .cb-district { grid-template-columns: 52px minmax(0, 1fr) 3.4em; }
  .admin-app .cb-district-vs, .admin-app .cb-district .cons-rating { display: none; }
}
@media (prefers-reduced-motion: reduce) { .admin-app .cb-row { transition: none; } }
.admin-app .cb-detail > .cons-race-top { padding-right: 44px; }

/* ---------- Qué muestra cada sección (Predicción, Sentimiento y Pronóstico) ---------- */
.lens-strip { display: block; margin: 14px 0 20px; }
.lens-steps { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0; margin: 0; padding: 0; border: 1px solid var(--nv-line); border-radius: 3px; background: var(--nv-card); list-style: none; }
.lens-steps li { position: relative; display: flex; min-width: 0; }
.lens-steps li + li { border-left: 1px solid var(--nv-line); }
.lens-steps li + li::before { content: "›"; position: absolute; top: 50%; left: -9px; z-index: 1; display: grid; place-items: center; width: 17px; height: 17px; border: 1px solid var(--nv-line); border-radius: 50%; background: var(--nv-card); color: var(--nv-muted); font-size: 13px; line-height: 1; transform: translateY(-50%); }
.lens-step { display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; gap: 1px 10px; width: 100%; padding: 11px 16px 11px 18px; color: var(--nv-text); text-decoration: none; }
.lens-step b { display: inline-grid; grid-row: span 2; place-items: center; width: 24px; height: 24px; border: 1px solid var(--nv-line-strong); border-radius: 50%; color: var(--nv-muted); font-size: 12px; font-weight: 700; }
.lens-name { color: var(--nv-ink); font-size: 13.5px; font-weight: 600; }
.lens-step small { color: var(--nv-muted); font-size: 11.5px; font-weight: 400; line-height: 1.35; }
a.lens-step:hover { background: var(--nv-hover); }
a.lens-step:hover .lens-name { text-decoration: underline; text-underline-offset: 3px; }
a.lens-step:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: -2px; }
.lens-steps li.is-here { background: var(--nv-subtle); box-shadow: inset 0 -3px 0 var(--nv-ink); }
.lens-steps li.is-here .lens-step b { border-color: var(--nv-ink); background: var(--nv-ink); color: var(--nv-card); }
.lens-here { max-width: 110ch; margin: 10px 0 0; padding-left: 12px; border-left: 3px solid var(--nv-ink); color: var(--nv-text); font-size: 13px; line-height: 1.55; }

/* ---------- Resultado general (arriba de Predicción) ---------- */
.gen-panel { margin: 0 0 8px; padding: 20px 22px 22px; border: 1px solid var(--nv-line); border-top: 2px solid var(--nv-ink); border-radius: 2px; background: var(--nv-card); }
.gen-head { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 8px 24px; padding-bottom: 12px; border-bottom: 1px solid var(--nv-line); }
.gen-head h3 { margin: 0 0 4px; color: var(--nv-ink); font-family: var(--nv-serif); font-size: 24px; font-weight: 500; letter-spacing: -.01em; }
.gen-head p { max-width: 80ch; margin: 0; color: var(--nv-muted); font-size: 13px; line-height: 1.5; }
.gen-head .gen-meta { color: var(--nv-ink); font-weight: 600; }
.gen-empty, .gen-none { color: var(--nv-muted); font-size: 12.5px; }
.gen-scroll { max-width: 100%; overflow-x: auto; }
.gen-scroll:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: 2px; }
.gen-table, .gen-off-table { width: 100%; border-collapse: collapse; font-variant-numeric: tabular-nums; }
.gen-table th, .gen-table td, .gen-off-table th, .gen-off-table td { padding: 10px 12px; border-bottom: 1px solid var(--nv-line); text-align: left; vertical-align: top; }
.gen-table thead th, .gen-off-table thead th { color: var(--nv-muted); font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; vertical-align: bottom; }
.gen-table thead th small { display: block; margin-top: 2px; font-size: 11px; font-weight: 500; letter-spacing: 0; text-transform: none; }
.gen-table thead th:first-child { width: 24%; }
.gen-group th { padding-top: 16px; padding-bottom: 6px; background: var(--nv-subtle); color: var(--nv-ink); font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
.gen-row th span { display: block; color: var(--nv-ink); font-size: 13px; font-weight: 600; }
.gen-row th small { display: block; color: var(--nv-muted); font-size: 11.5px; font-weight: 400; }
.gen-row.is-final th, .gen-row.is-final td { border-top: 2px solid var(--nv-ink); border-bottom: 0; }
.gen-row.is-final th span { font-family: var(--nv-serif); font-size: 17px; font-weight: 500; }
.gen-cell { min-width: 150px; }
.gen-bar { display: flex; gap: 1px; height: 6px; border-radius: 1px; overflow: hidden; background: var(--map-none); }
.gen-row.is-final .gen-bar { height: 10px; }
.gen-bar i { min-width: 2px; }
.gen-bar i.dem { background: var(--map-dem-likely); } .gen-bar i.rep { background: var(--map-rep-likely); }
.gen-bar i.toss { background: var(--map-toss); } .gen-bar i.oth { background: var(--map-oth); }
.gen-figures { display: flex; flex-wrap: wrap; gap: 2px 10px; margin-top: 6px; color: var(--nv-muted); font-size: 12.5px; }
.gen-figures b.dem { color: var(--map-dem-safe); } .gen-figures b.rep { color: var(--map-rep-safe); }
.gen-row.is-final .gen-figures { font-size: 14px; }
.gen-coverage { display: block; margin-top: 2px; color: var(--nv-muted); font-size: 11px; }
.gen-off { margin-top: 26px; }
.gen-off-head h4 { margin: 0 0 4px; color: var(--nv-ink); font-family: var(--nv-serif); font-size: 19px; font-weight: 500; }
.gen-off-head p { max-width: 90ch; margin: 0 0 10px; color: var(--nv-muted); font-size: 12.5px; line-height: 1.5; }
.gen-off-table { min-width: 720px; font-size: 12.5px; }
.gen-where b { display: block; color: var(--nv-ink); font-weight: 600; }
.gen-off-table small { display: block; margin-top: 2px; color: var(--nv-muted); font-size: 11px; font-weight: 400; }
.gen-who { color: var(--nv-text); }
.gen-who.dem b { color: var(--map-dem-safe); } .gen-who.rep b { color: var(--map-rep-safe); } .gen-who.oth b { color: var(--map-oth); }
.gen-off-table td.is-off { background: #fdf3dc; box-shadow: inset 3px 0 0 #d8a548; }
.gen-final .gen-who b { font-size: 13.5px; }
.gen-chips { display: flex; flex-wrap: wrap; gap: 4px; margin: 0; padding: 0; list-style: none; }
.gen-chips li { padding: 2px 7px; border: 1px solid var(--nv-line); border-left: 3px solid var(--map-toss); border-radius: 2px; color: var(--nv-text); font-size: 11.5px; white-space: nowrap; }
.gen-chips li span { color: var(--nv-muted); font-weight: 600; }
.gen-chips li.dem { border-left-color: var(--map-dem-likely); } .gen-chips li.rep { border-left-color: var(--map-rep-likely); } .gen-chips li.oth { border-left-color: var(--map-oth); }
.gen-action { text-align: right; white-space: nowrap; }
.gen-more { margin-top: 12px; }
html[data-theme="dark"] .gen-figures b.dem, html[data-theme="dark"] .gen-who.dem b { color: #8db8ec; }
html[data-theme="dark"] .gen-figures b.rep, html[data-theme="dark"] .gen-who.rep b { color: #f29a90; }
html[data-theme="dark"] .gen-off-table td.is-off { background: rgba(240, 196, 108, .1); box-shadow: inset 3px 0 0 #f0c46c; }
@media (max-width: 760px) {
  .lens-steps { grid-template-columns: 1fr; }
  .lens-steps li + li { border-top: 1px solid var(--nv-line); border-left: 0; }
  .lens-steps li + li::before { display: none; }
  .lens-step { padding: 9px 12px; }
  .lens-steps li.is-here { box-shadow: inset 3px 0 0 var(--nv-ink); }
  .gen-panel { padding: 14px 14px 16px; }
  .gen-head h3 { font-size: 21px; }
}
.gen-chips li.is-off { border-color: #e2c27d; background: #fdf3dc; }
html[data-theme="dark"] .gen-chips li.is-off { border-color: rgba(240, 196, 108, .45); background: rgba(240, 196, 108, .1); }
.gen-off-table td .gen-chips { margin-top: 6px; }

/* ---------- Análisis de sentimiento: aviso de que no mide votos ---------- */
.media-caveat { margin: 0 0 16px; padding: 10px 14px; border: 1px solid var(--nv-line); border-left: 3px solid #d8a548; border-radius: 2px; background: var(--nv-card); color: var(--nv-text); font-size: 13px; line-height: 1.5; }
.media-caveat b { color: var(--nv-ink); }
html[data-theme="dark"] .media-caveat { border-left-color: #f0c46c; }

/* ---------- Pronóstico: control del Senado y evolución ---------- */
.fc-control { margin: 8px 0 6px; }
.fc-control-body { display: grid; gap: 14px; padding: 18px 20px; border: 1px solid var(--nv-line); border-top: 2px solid var(--nv-ink); border-radius: 2px; background: var(--nv-card); }
.fc-trend { margin-top: 14px; padding: 18px 20px; border: 1px solid var(--nv-line); border-radius: 2px; background: var(--nv-card); }
.fc-trend-head h4 { margin: 0 0 4px; color: var(--nv-ink); font-family: var(--nv-serif); font-size: 19px; font-weight: 500; }
.fc-trend-head p { max-width: 100ch; margin: 0 0 10px; color: var(--nv-muted); font-size: 12.5px; line-height: 1.5; }
.fc-chart { position: relative; max-width: 760px; }
.fc-chart-svg { display: block; width: 100%; height: auto; overflow: visible; }
.fc-grid { stroke: var(--nv-line); stroke-width: 1; }
.fc-axis { fill: var(--nv-muted); font-family: var(--nv-font); font-size: 11px; }
.fc-majority { stroke: var(--nv-ink); stroke-width: 1.25; }
.fc-majority-label { fill: var(--nv-text); font-weight: 600; }
.fc-band { fill: var(--map-dem-lean); opacity: .55; }
.fc-line { fill: none; stroke: var(--map-dem-likely); stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; }
.fc-dot { fill: var(--map-dem-likely); stroke: var(--nv-card); stroke-width: 2; }
.fc-dot.is-last, .fc-dot.is-active { fill: var(--map-dem-safe); }
.fc-dot.is-active { r: 6; }
.fc-end-label { fill: var(--nv-ink); font-family: var(--nv-font); font-size: 12px; font-weight: 600; }
.fc-hit { fill: transparent; cursor: default; outline: none; }
.fc-hit:focus-visible { fill: var(--nv-hover); opacity: .5; }
.fc-tip { position: absolute; top: 4px; z-index: 2; display: grid; gap: 2px; min-width: 190px; white-space: nowrap; padding: 8px 10px; border: 1px solid var(--nv-line); border-top: 2px solid var(--nv-ink); border-radius: 2px; background: var(--nv-card); box-shadow: 0 10px 28px -14px rgba(18, 17, 16, .35); color: var(--nv-text); font-size: 12px; pointer-events: none; transform: translateX(12px); }
.fc-tip.is-right { transform: translateX(calc(-100% - 12px)); }
.fc-tip b { color: var(--nv-ink); }
.fc-data { margin-top: 10px; font-size: 12.5px; }
.fc-data summary { color: var(--nv-muted); cursor: pointer; }
.fc-data-table { margin-top: 8px; border-collapse: collapse; font-variant-numeric: tabular-nums; }
.fc-data-table th, .fc-data-table td { padding: 5px 12px 5px 0; border-bottom: 1px solid var(--nv-line); color: var(--nv-text); text-align: left; }
.fc-data-table th { color: var(--nv-muted); font-size: 11px; font-weight: 700; text-transform: uppercase; }
html[data-theme="dark"] .fc-band { fill: var(--map-dem-likely); opacity: .35; }
html[data-theme="dark"] .fc-line, html[data-theme="dark"] .fc-dot { stroke: #8db8ec; }
html[data-theme="dark"] .fc-line { stroke: #8db8ec; }
html[data-theme="dark"] .fc-dot { fill: #8db8ec; stroke: var(--nv-card); }
html[data-theme="dark"] .fc-dot.is-last, html[data-theme="dark"] .fc-dot.is-active { fill: #c5dcf7; }
@media (max-width: 760px) {
  .fc-control-body, .fc-trend { padding: 14px; }
}
/* Texto sólo para lectores de pantalla en los bloques nuevos (fuera de .sim-panel). */
.admin-app .gen-panel .sr-only, .admin-app .fc-control .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; }
/* Análisis de sentimiento: la comparación por cargo va al final, como referencia. */
.media-reference { margin-top: 34px; padding-top: 18px; border-top: 1px solid var(--nv-line); }
.media-reference + .media-sources-box { margin-top: 18px; }
.media-tabs + .media-variation { margin-top: 12px; }

/* ---------- Pronóstico · detalle del estado: nombres y cifras en serif, texto legible ---------- */
.admin-app .sim-state-detail { --sd-dem: var(--sim-dem, #2361a4); --sd-rep: var(--sim-rep, #b63b35); --sd-oth: #72518c; }
html[data-theme="dark"] .admin-app .sim-state-detail { --sd-dem: #8db8ec; --sd-rep: #f29a90; --sd-oth: #c3a9d8; }
.admin-app .sim-state-detail .sim-race-heading { margin-bottom: 4px; }
.admin-app .sim-state-detail .sim-race-heading h4 { color: var(--nv-ink); font-size: 23px; line-height: 1.15; letter-spacing: -.012em; }
.admin-app .sim-state-detail .sim-state-race .sim-race-meta { margin: 0 0 10px; color: var(--nv-text); font-size: 12px; }
.admin-app .sim-state-detail .sim-state-sources { color: var(--nv-text); font-size: 12px; }
/* Cada candidatura: foto, nombre y las dos cifras que se leen primero. */
.admin-app .sim-state-detail .sim-candidates { gap: 0; }
.admin-app .sim-state-detail .sim-candidate { grid-template-columns: 48px minmax(0, 1fr) 8rem 8rem; gap: 14px; padding: 14px 0; border-bottom: 1px solid var(--nv-line); }
/* Encabezado de columnas: qué es cada cifra, con «?» que abre su explicación. */
.admin-app .sim-candidates-head { display: grid; grid-template-columns: 48px minmax(0, 1fr) 8rem 8rem; align-items: end; gap: 14px; padding: 8px 0 8px; border-bottom: 1px solid var(--nv-line-strong); }
.admin-app .sim-candidates-head > span { color: var(--nv-ink); font-size: 10.5px; font-weight: 700; line-height: 1.3; letter-spacing: .07em; text-transform: uppercase; }
.admin-app .sim-candidates-head-name { grid-column: 1 / 3; }
.admin-app .sim-candidates-head-col { display: flex; justify-content: flex-end; align-items: flex-end; gap: 6px; text-align: right; }
.admin-app .sim-calc-open { flex: none; display: inline-grid; place-items: center; width: 17px; height: 17px; padding: 0; border: 1px solid var(--nv-line-strong); border-radius: 50%; background: var(--nv-card); color: var(--nv-text); font: 700 10px/1 var(--nv-font); cursor: pointer; transition: background .15s, color .15s, border-color .15s; }
.admin-app .sim-calc-open:hover { border-color: var(--nv-ink); background: var(--nv-ink); color: var(--nv-card); }
.admin-app .sim-calc-open:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: 2px; }
.admin-app .sim-state-detail .sim-avatar { width: 48px; height: 54px; border-radius: 3px; font-family: var(--nv-serif); font-size: 17px; font-weight: 500; }
.admin-app .sim-state-detail .sim-candidate-copy { gap: 4px; }
.admin-app .sim-state-detail .sim-candidate-copy small, .admin-app .sim-state-detail .sim-candidate-vote small, .admin-app .sim-state-detail .sim-candidate-chance small {
  color: var(--nv-text); font-size: 10.5px; font-weight: 600; letter-spacing: .07em; text-transform: uppercase; opacity: .82;
}
.admin-app .sim-state-detail .sim-candidate-copy strong { font-family: var(--nv-serif); font-size: 20px; font-weight: 500; line-height: 1.15; letter-spacing: -.01em; }
.admin-app .sim-state-detail .sim-candidate-vote, .admin-app .sim-state-detail .sim-candidate-chance { display: grid; gap: 5px; text-align: right; }
.admin-app .sim-state-detail .sim-candidate-vote strong, .admin-app .sim-state-detail .sim-candidate-chance strong {
  font-family: var(--nv-serif); font-size: 32px; font-weight: 500; line-height: .95; letter-spacing: -.02em; font-variant-numeric: tabular-nums lining-nums; font-optical-sizing: auto;
}
.admin-app .sim-state-detail .sim-candidate-vote strong { color: var(--nv-ink); }
.admin-app .sim-state-detail .sim-candidate-vote small, .admin-app .sim-state-detail .sim-candidate-chance small { font-size: 11px; font-weight: 500; letter-spacing: 0; text-transform: none; opacity: 1; font-variant-numeric: tabular-nums; }
.admin-app .sim-state-detail .sim-candidate.dem .sim-candidate-copy strong, .admin-app .sim-state-detail .sim-candidate.dem .sim-candidate-chance strong { color: var(--sd-dem); }
.admin-app .sim-state-detail .sim-candidate.rep .sim-candidate-copy strong, .admin-app .sim-state-detail .sim-candidate.rep .sim-candidate-chance strong { color: var(--sd-rep); }
.admin-app .sim-state-detail .sim-candidate.oth .sim-candidate-copy strong, .admin-app .sim-state-detail .sim-candidate.oth .sim-candidate-chance strong { color: var(--sd-oth); }
/* Dos barras rotuladas: promedio de encuestas (con lo que no es de ninguno en medio) y probabilidad. */
.admin-app .sim-duels { display: grid; gap: 14px; margin: 18px 0 12px; }
.admin-app .sim-duel-head { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; margin: 0 0 7px; }
.admin-app .sim-duel-head span { color: var(--nv-text); font-size: 10.5px; font-weight: 600; letter-spacing: .07em; text-transform: uppercase; }
.admin-app .sim-duel-head b { color: var(--nv-ink); font-size: 13px; font-weight: 650; font-variant-numeric: tabular-nums; }
.admin-app .sim-duel .sim-probability-bar { height: 8px; gap: 2px; margin: 0; background: transparent; }
.admin-app .sim-duel:first-child .sim-probability-bar { height: 12px; }
.admin-app .sim-duel .sim-probability-bar .dem { background: var(--map-dem-likely); }
.admin-app .sim-duel .sim-probability-bar .rep { background: var(--map-rep-likely); }
.admin-app .sim-duel .sim-probability-bar .rest { background: var(--nv-line); }
.admin-app .sim-duel:first-child .sim-probability-bar .dem { background: var(--map-dem-safe); }
.admin-app .sim-duel:first-child .sim-probability-bar .rep { background: var(--map-rep-safe); }
.admin-app .sim-state-detail .sim-interval { margin: 4px 0 14px; color: var(--nv-text); font-size: 12px; line-height: 1.6; }
.admin-app .sim-state-detail .sim-od-undecided, .admin-app .sim-state-detail .sim-primary-rest, .admin-app .sim-state-detail .sim-primary-note { font-size: 12px; line-height: 1.6; }
.admin-app .sim-state-detail .sim-primary-rest, .admin-app .sim-state-detail .sim-od-undecided { color: var(--nv-text); }
/* Qué dice cada fuente: las mismas cifras serif. */
.admin-app .sim-state-detail .sim-comparison-title { margin: 22px 0 12px; color: var(--nv-ink); font-size: 10.5px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
.admin-app .sim-state-detail .sim-comparison-row > span:first-child { color: var(--nv-text); font-size: 11px; font-weight: 650; }
.admin-app .sim-state-detail .sim-comparison-row strong { font-family: var(--nv-serif); font-size: 27px; font-weight: 500; line-height: 1; letter-spacing: -.015em; font-variant-numeric: tabular-nums lining-nums; }
.admin-app .sim-state-detail .sim-comparison-row strong.dem { color: var(--sd-dem); }
.admin-app .sim-state-detail .sim-comparison-row strong.rep { color: var(--sd-rep); }
.admin-app .sim-state-detail .sim-comparison-row .sim-comparison-name { color: var(--nv-ink); font-size: 12px; }
.admin-app .sim-state-detail .sim-comparison-row small, .admin-app .sim-state-detail .sim-comparison-row .sim-no-data { color: var(--nv-text); font-size: 11px; }
/* ---------- Ventana flotante del Pronóstico: cálculo, encuestas usadas y encuestas de Odiseo ---------- */
.admin-app .sim-sheet {
  --sim-line: var(--nv-line); --sim-muted: var(--nv-muted); --sim-dem: #2361a4; --sim-rep: #b63b35;
  --sd-dem: #2361a4; --sd-rep: #b63b35; --sd-oth: #72518c;
  width: min(640px, calc(100vw - 32px)); max-width: none; max-height: min(86vh, 880px); margin: auto; padding: 0; overflow: hidden;
  border: 1px solid var(--nv-line); border-radius: 8px; background: var(--nv-card); color: var(--nv-ink);
  box-shadow: 0 30px 80px -20px rgba(18, 17, 16, .45);
}
.admin-app .sim-sheet.is-wide { width: min(780px, calc(100vw - 32px)); }
html[data-theme="dark"] .admin-app .sim-sheet { --sim-dem: #8db8ec; --sim-rep: #f29a90; --sd-dem: #8db8ec; --sd-rep: #f29a90; --sd-oth: #c3a9d8; box-shadow: 0 30px 80px -20px rgba(0, 0, 0, .7); }
.admin-app .sim-sheet[open] { display: flex; flex-direction: column; animation: sim-sheet-in .18s ease-out; }
.admin-app .sim-sheet::backdrop { background: rgba(18, 17, 16, .5); backdrop-filter: blur(2px); }
@keyframes sim-sheet-in { from { opacity: 0; transform: translateY(10px) scale(.985); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .admin-app .sim-sheet[open] { animation: none; } }
html.sim-sheet-open { overflow: hidden; }
.admin-app .sim-sheet-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; padding: 16px 20px 14px; border-bottom: 1px solid var(--nv-line); background: var(--nv-card); }
.admin-app .sim-sheet-titles { display: grid; gap: 3px; min-width: 0; }
.admin-app .sim-sheet-kicker { margin: 0; color: var(--nv-text); font-size: 10.5px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
.admin-app .sim-sheet-head h3 { margin: 0; color: var(--nv-ink); font-family: var(--nv-serif); font-size: 23px; font-weight: 500; line-height: 1.2; letter-spacing: -.01em; overflow-wrap: anywhere; }
.admin-app .sim-sheet-back { justify-self: start; margin: 0 0 4px; padding: 0; border: 0; background: none; color: var(--nv-text); font: 600 12px/1.3 var(--nv-font); cursor: pointer; }
.admin-app .sim-sheet-back:hover { color: var(--nv-ink); text-decoration: underline; text-underline-offset: 3px; }
.admin-app .sim-sheet-close { flex: none; display: grid; place-items: center; width: 34px; height: 34px; padding: 0; border: 1px solid var(--nv-line); border-radius: 50%; background: var(--nv-card); color: var(--nv-ink); cursor: pointer; transition: background .15s, border-color .15s; }
.admin-app .sim-sheet-close svg { width: 18px; height: 18px; fill: currentColor; }
.admin-app .sim-sheet-close:hover { border-color: var(--nv-line-strong); background: var(--nv-hover); }
.admin-app .sim-sheet-close:focus-visible, .admin-app .sim-sheet-back:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: 2px; }
.admin-app .sim-sheet-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; overscroll-behavior: contain; padding: 16px 20px 22px; background: var(--nv-subtle); }
.admin-app .sim-sheet-strip { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-bottom: 14px; }
.admin-app .sim-sheet-strip > span:not(.sim-od-tag) { padding: 4px 10px; border: 1px solid var(--nv-line); border-radius: 999px; background: var(--nv-card); color: var(--nv-text); font-size: 11.5px; }
.admin-app .sim-sheet-strip b { color: var(--nv-ink); font-weight: 700; font-variant-numeric: tabular-nums; }
/* Botones que abren la ventana, dentro de la tarjeta del estado. */
.admin-app .sim-calc-trigger { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 12px; width: 100%; margin: 4px 0 16px; padding: 11px 14px; border: 1px solid var(--nv-line); border-radius: 4px; background: var(--nv-subtle); color: inherit; font: inherit; text-align: left; cursor: pointer; transition: border-color .15s, background .15s; }
.admin-app .sim-calc-trigger:hover { border-color: var(--nv-line-strong); background: var(--nv-hover); }
.admin-app .sim-calc-trigger:focus-visible, .admin-app .sim-sheet-link:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: 2px; }
.admin-app .sim-calc-trigger-icon { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 50%; background: var(--nv-ink); color: var(--nv-card); font-family: var(--nv-serif); font-size: 16px; }
.admin-app .sim-calc-trigger-text { display: grid; gap: 2px; }
.admin-app .sim-calc-trigger-text b { color: var(--nv-ink); font-size: 13px; font-weight: 650; }
.admin-app .sim-calc-trigger-text small { color: var(--nv-text); font-size: 11.5px; }
.admin-app .sim-calc-trigger-go { color: var(--nv-ink); font-size: 12px; font-weight: 650; white-space: nowrap; }
.admin-app .sim-calc-trigger-go::after { content: " ›"; }
.admin-app .sim-sheet-link { display: flex; justify-content: space-between; align-items: center; gap: 12px; width: 100%; margin: 14px 0 0; padding: 10px 2px; border: 0; border-top: 1px solid var(--nv-line); background: none; color: var(--nv-ink); font: 600 12.5px/1.3 var(--nv-font); text-align: left; cursor: pointer; }
.admin-app .sim-sheet-link:hover span { text-decoration: underline; text-underline-offset: 3px; }
.admin-app .sim-sheet-link b { font-weight: 600; transition: transform .15s ease; }
.admin-app .sim-sheet-link:hover b { transform: translateX(3px); }
.admin-app .sim-od-context .sim-sheet-link { margin-top: 0; }
html[data-theme="dark"] .admin-app .sim-od-row:hover { background: rgba(255, 255, 255, .04); }
/* Encuestas usadas: fichas en dos columnas. */
.admin-app .sim-poll-cards { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin: 0; padding: 0; list-style: none; }
.admin-app .sim-poll-card { display: grid; gap: 8px; align-content: start; padding: 12px 14px; border: 1px solid var(--nv-line); border-radius: 4px; background: var(--nv-card); }
.admin-app .sim-poll-card-head { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }
.admin-app .sim-poll-card-head strong { color: var(--nv-ink); font-size: 13px; font-weight: 650; overflow-wrap: anywhere; }
.admin-app .sim-poll-chip { flex: none; padding: 2px 7px; border-radius: 2px; background: var(--nv-hover); color: var(--nv-text); font-size: 10.5px; font-weight: 600; }
.admin-app .sim-poll-card-meta { margin: 0; color: var(--nv-text); font-size: 11.5px; line-height: 1.45; }
.admin-app .sim-poll-card-results { display: grid; gap: 5px; }
.admin-app .sim-poll-card-row { display: grid; grid-template-columns: 5.5rem minmax(0, 1fr) 3.2rem; align-items: center; gap: 8px; font-size: 12px; }
.admin-app .sim-poll-card-row span:first-child { overflow: hidden; color: var(--nv-ink); text-overflow: ellipsis; white-space: nowrap; }
.admin-app .sim-poll-card-row b { color: var(--nv-ink); font-weight: 700; text-align: right; font-variant-numeric: tabular-nums; }
.admin-app .sim-poll-card-row .sim-od-track { height: 6px; }
.admin-app .sim-poll-card-row.dem .sim-od-track i { background: var(--map-dem-likely); }
.admin-app .sim-poll-card-row.rep .sim-od-track i { background: var(--map-rep-likely); }
.admin-app .sim-poll-card-row.oth .sim-od-track i { background: var(--map-oth); }
.admin-app .sim-poll-card-foot { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 4px 10px; padding-top: 8px; border-top: 1px solid var(--nv-line); color: var(--nv-text); font-size: 11.5px; }
.admin-app .sim-poll-card-foot .sim-poll-link { font-size: 11.5px; }
/* Encuesta de Odiseo: sus preguntas en tarjetas. */
.admin-app .sim-od-sheet-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.admin-app .sim-od-sheet-grid .sim-od-question { padding: 12px 14px; border: 1px solid var(--nv-line); border-radius: 4px; background: var(--nv-card); }
.admin-app .sim-od-sheet .sim-od-ask { color: var(--nv-ink); font-size: 12px; }
.admin-app .sim-od-sheet .sim-od-ask small { color: var(--nv-text); }
.admin-app .sim-od-sheet .sim-od-bar { grid-template-columns: minmax(0, 1fr) 4.5rem 3rem; font-size: 11.5px; }
.admin-app .sim-od-sheet .sim-od-label { color: var(--nv-ink); }
.admin-app .sim-od-sheet .sim-od-why { margin-top: 12px; color: var(--nv-text); font-size: 12px; }
.admin-app .sim-od-sheet-list { padding: 0 6px; border: 1px solid var(--nv-line); border-radius: 4px; background: var(--nv-card); }
.admin-app .sim-od-sheet-list .sim-od-item:first-child { border-top: 0; }
@media (max-width: 640px) {
  .admin-app .sim-sheet, .admin-app .sim-sheet.is-wide { width: 100vw; max-height: 92vh; margin: auto 0 0; border-radius: 12px 12px 0 0; }
  .admin-app .sim-sheet-head { padding: 14px 16px 12px; }
  .admin-app .sim-sheet-body { padding: 14px 16px 20px; }
  .admin-app .sim-poll-cards, .admin-app .sim-od-sheet-grid { grid-template-columns: minmax(0, 1fr); }
  .admin-app .sim-calc-trigger-go { display: none; }
}
.admin-app .sim-calc-tabs { display: flex; gap: 2px; margin-bottom: 14px; padding: 3px; border: 1px solid var(--nv-line); border-radius: 4px; background: var(--nv-card); }
.admin-app .sim-calc-tabs button { flex: 1; padding: 8px 10px; border: 0; border-radius: 2px; background: none; color: var(--nv-text); font: 600 12px/1.2 var(--nv-font); cursor: pointer; }
.admin-app .sim-calc-tabs button[aria-selected="true"] { background: var(--nv-ink); color: var(--nv-card); }
.admin-app .sim-calc-tabs button:hover:not([aria-selected="true"]) { background: var(--nv-hover); }
.admin-app .sim-calc-pane { display: grid; gap: 12px; }
.admin-app .sim-calc-lead { margin: 0; color: var(--nv-ink); font-family: var(--nv-serif); font-size: 15.5px; line-height: 1.45; }
.admin-app .sim-calc-rules { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; margin: 0; padding: 0; list-style: none; }
.admin-app .sim-calc-rules li { padding: 7px 9px; border: 1px solid var(--nv-line); border-radius: 3px; background: var(--nv-card); color: var(--nv-text); font-size: 11.5px; line-height: 1.4; }
.admin-app .sim-calc-rules b { color: var(--nv-ink); font-weight: 650; }
.admin-app .sim-calc-table-wrap { overflow-x: auto; border: 1px solid var(--nv-line); border-radius: 3px; background: var(--nv-card); }
.admin-app .sim-calc-table { width: 100%; border-collapse: collapse; font-size: 12px; font-variant-numeric: tabular-nums; }
.admin-app .sim-calc-table th, .admin-app .sim-calc-table td { padding: 7px 10px; border-bottom: 1px solid var(--nv-line); color: var(--nv-text); text-align: left; vertical-align: middle; }
.admin-app .sim-calc-table thead th { color: var(--nv-ink); font-size: 10.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; white-space: nowrap; }
.admin-app .sim-calc-table thead th.dem { color: var(--sd-dem); } .admin-app .sim-calc-table thead th.rep { color: var(--sd-rep); }
.admin-app .sim-calc-table .num { text-align: right; white-space: nowrap; }
.admin-app .sim-calc-poll strong { display: block; color: var(--nv-ink); font-weight: 600; }
.admin-app .sim-calc-poll small { color: var(--nv-text); font-size: 11px; }
.admin-app .sim-calc-weight { min-width: 92px; }
.admin-app .sim-calc-meter { display: inline-block; width: 44px; height: 5px; margin-right: 7px; overflow: hidden; vertical-align: middle; background: var(--nv-line); }
.admin-app .sim-calc-meter i { display: block; height: 100%; background: var(--nv-ink); }
.admin-app .sim-calc-weight b { color: var(--nv-ink); font-weight: 650; }
.admin-app .sim-calc-more td { color: var(--nv-text); font-size: 11.5px; font-style: italic; }
.admin-app .sim-calc-table tfoot th { color: var(--nv-text); font-weight: 600; }
.admin-app .sim-calc-table tfoot td { color: var(--nv-ink); font-weight: 600; }
.admin-app .sim-calc-table tfoot .is-adjust td { color: var(--nv-text); font-weight: 500; }
.admin-app .sim-calc-table tfoot .is-total th, .admin-app .sim-calc-table tfoot .is-total td { border-bottom: 0; background: var(--nv-subtle); color: var(--nv-ink); }
.admin-app .sim-calc-table tfoot .is-total td { font-family: var(--nv-serif); font-size: 18px; font-weight: 500; }
.admin-app .sim-calc-note { margin: 0; color: var(--nv-text); font-size: 12px; line-height: 1.55; }
.admin-app .sim-calc-steps { display: grid; gap: 0; margin: 0; padding: 0; list-style: none; counter-reset: calc; border: 1px solid var(--nv-line); border-radius: 3px; background: var(--nv-card); }
.admin-app .sim-calc-steps li { position: relative; padding: 10px 12px 10px 42px; border-bottom: 1px solid var(--nv-line); counter-increment: calc; }
.admin-app .sim-calc-steps li:last-child { border-bottom: 0; background: var(--nv-subtle); }
.admin-app .sim-calc-steps li::before { content: counter(calc); position: absolute; left: 12px; top: 10px; display: grid; place-items: center; width: 20px; height: 20px; border-radius: 50%; background: var(--nv-ink); color: var(--nv-card); font-size: 11px; font-weight: 700; }
.admin-app .sim-calc-step-head { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; }
.admin-app .sim-calc-step-head span { color: var(--nv-ink); font-size: 12.5px; font-weight: 650; }
.admin-app .sim-calc-step-head b { color: var(--nv-ink); font-family: var(--nv-serif); font-size: 19px; font-weight: 500; white-space: nowrap; font-variant-numeric: tabular-nums lining-nums; }
.admin-app .sim-calc-steps p { margin: 3px 0 0; color: var(--nv-text); font-size: 12px; line-height: 1.5; }
.admin-app .sim-calc-curve { display: block; width: 100%; height: auto; }
.admin-app .sim-calc-curve .area.dem { fill: var(--map-dem-likely); } .admin-app .sim-calc-curve .area.rep { fill: var(--map-rep-likely); } .admin-app .sim-calc-curve .area.oth { fill: var(--map-oth); }
.admin-app .sim-calc-curve .area.lose { opacity: .35; }
.admin-app .sim-calc-curve .axis { stroke: var(--nv-line-strong); stroke-width: 1; }
.admin-app .sim-calc-curve .zero { stroke: var(--nv-ink); stroke-width: 1.2; stroke-dasharray: 3 3; }
.admin-app .sim-calc-curve text { fill: var(--nv-text); font-family: var(--nv-font); font-size: 11.5px; }
.admin-app .sim-calc-curve .zero-label { fill: var(--nv-ink); font-weight: 600; }
.admin-app .sim-calc-scale { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 3px; margin: 0; padding: 0; list-style: none; }
.admin-app .sim-calc-scale li { display: grid; gap: 2px; padding: 7px 8px; border-top: 3px solid var(--nv-line); background: var(--nv-card); }
.admin-app .sim-calc-scale li.is-current { border-top-color: var(--nv-ink); background: var(--nv-active); }
.admin-app .sim-calc-scale b { color: var(--nv-ink); font-size: 11.5px; font-weight: 650; }
.admin-app .sim-calc-scale small { color: var(--nv-text); font-size: 11px; }
@media (max-width: 560px) {
  .admin-app .sim-candidates-head { grid-template-columns: 42px minmax(0, 1fr) auto auto; gap: 10px; }
  .admin-app .sim-calc-rules, .admin-app .sim-calc-scale { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .admin-app .sim-calc-rules { grid-template-columns: minmax(0, 1fr); }
  .admin-app .sim-state-detail .sim-candidate { grid-template-columns: 42px minmax(0, 1fr) auto auto; gap: 10px; }
  .admin-app .sim-state-detail .sim-avatar { width: 42px; height: 48px; }
  .admin-app .sim-state-detail .sim-candidate-copy strong { font-size: 17px; }
  .admin-app .sim-state-detail .sim-candidate-vote strong, .admin-app .sim-state-detail .sim-candidate-chance strong { font-size: 25px; }
}
.admin-app .sim-sheet .sim-calc-tabs { position: sticky; top: -16px; z-index: 1; box-shadow: 0 -16px 0 var(--nv-subtle), 0 6px 12px -10px rgba(18, 17, 16, .35); }
/* El cálculo tiene alto fijo: al cambiar de pestaña la ventana no salta. */
.admin-app .sim-sheet.is-tall { height: min(86vh, 780px); }
/* Panorama estatal: a la izquierda el mapa y, debajo, las fuentes de la contienda elegida (qué dice
   cada fuente y cómo se combinan); a la derecha, las candidaturas y Odiseo en las dos filas. */
.admin-app .sim-explorer { grid-template-areas: "map detail" "extra detail"; grid-template-rows: auto 1fr; row-gap: 16px; }
.admin-app .sim-explorer > .sim-map-card { grid-area: map; }
.admin-app .sim-explorer > aside.sim-state-detail { grid-area: detail; }
.admin-app .sim-explorer > .sim-state-extra { grid-area: extra; align-self: start; }
.admin-app .sim-explorer > .sim-state-extra[hidden] { display: none; }
@media (max-width: 1100px) and (min-width: 961px), (max-width: 780px) {
  .admin-app .sim-explorer { grid-template-areas: "map" "detail" "extra"; grid-template-rows: auto; }
}
.admin-app .sim-state-extra { display: grid; gap: 0; }
.admin-app .sim-extra-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 4px 14px; margin-bottom: 14px; padding-bottom: 12px; border-bottom: 1px solid var(--nv-line); }
.admin-app .sim-extra-head h4 { margin: 0; color: var(--nv-ink); font-family: var(--nv-serif); font-size: 21px; font-weight: 500; letter-spacing: -.01em; }
.admin-app .sim-extra-head span { color: var(--nv-text); font-size: 10.5px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
.admin-app .sim-state-extra .sim-blend { margin-top: 6px; }
.admin-app .sim-state-extra .sim-blend .sim-comparison-title { margin-top: 18px; }
.admin-app .sim-state-extra .sim-od-context { margin-top: 18px; }

/* ---------- Pronóstico · Lectura y Control del Senado: tipografía editorial ----------
   Cifras y títulos en Playfair Display (serif de alto contraste); textos en Figtree. */
.admin-app #sim-source-panel { --rd-display: "Playfair Display", "Newsreader", Georgia, serif; --rd-sans: "Figtree", "Libre Franklin", "Helvetica Neue", Arial, sans-serif; }
.admin-app #sim-source-panel .sim-overview-head, .admin-app .sim-answer, .admin-app .sim-sources, .admin-app .fc-control { font-family: var(--rd-sans); }
.admin-app #sim-source-panel .sim-overview-head h3 { font-family: var(--rd-display); font-size: 26px; font-weight: 500; letter-spacing: -.005em; font-variant-numeric: lining-nums; }
.admin-app #sim-source-panel .sim-overview-head p { color: var(--nv-text); font-size: 13.5px; line-height: 1.55; }
.admin-app #sim-source-panel .sim-run-count { color: var(--nv-text); font-size: 12px; }
.admin-app .sim-sources { color: var(--nv-text); font-size: 12px; }

/* Lectura: marcador y contiendas en una sola pieza. */
.admin-app .sim-answer { padding: 24px 26px 18px; }
.admin-app .sim-read { display: flex; align-items: stretch; gap: 18px; }
.admin-app .sim-read-group { flex: 1 1 0; min-width: max-content; display: grid; grid-template-rows: auto auto; align-content: start; gap: 12px; }
.admin-app .sim-read-group.toss, .admin-app .sim-read-group.oth { text-align: center; }
.admin-app .sim-read-group.rep { text-align: right; }
.admin-app .sim-read-head { display: grid; gap: 4px; }
.admin-app .sim-read-head strong { color: var(--nv-ink); font-family: var(--rd-display); font-size: 54px; font-weight: 500; line-height: .9; letter-spacing: -.01em; font-variant-numeric: lining-nums tabular-nums; }
.admin-app .sim-read-group.dem .sim-read-head strong { color: var(--map-dem-safe); }
.admin-app .sim-read-group.rep .sim-read-head strong { color: var(--map-rep-safe); }
.admin-app .sim-read-group.oth .sim-read-head strong { color: var(--map-oth); }
.admin-app .sim-read-head span { color: var(--nv-ink); font-size: 11px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; white-space: nowrap; }
.admin-app .sim-read-cells { display: flex; gap: 3px; height: 30px; }
.admin-app .sim-read-cell { flex: 1 1 0; min-width: 7px; padding: 0; border: 0; border-radius: 2px; background: var(--map-toss); cursor: pointer; transition: transform .18s cubic-bezier(.23, 1, .32, 1), filter .18s ease; }
.admin-app .sim-read-cell.dem.safe { background: var(--map-dem-safe); } .admin-app .sim-read-cell.dem.likely { background: var(--map-dem-likely); } .admin-app .sim-read-cell.dem.lean { background: var(--map-dem-lean); }
.admin-app .sim-read-cell.rep.safe { background: var(--map-rep-safe); } .admin-app .sim-read-cell.rep.likely { background: var(--map-rep-likely); } .admin-app .sim-read-cell.rep.lean { background: var(--map-rep-lean); }
.admin-app .sim-read-cell.tossup { background: var(--map-toss); } .admin-app .sim-read-cell.oth { background: var(--map-oth); }
@media (hover: hover) and (pointer: fine) { .admin-app .sim-read-cell:hover { transform: translateY(-3px); filter: brightness(1.08); } }
.admin-app .sim-read-cell:focus-visible, .admin-app .sim-read-cell[aria-pressed="true"] { outline: 2px solid var(--nv-ink); outline-offset: 2px; }
.admin-app .sim-read-none { display: grid; place-items: center; flex: 1; min-width: 92px; border: 1px dashed var(--nv-line-strong); border-radius: 2px; color: var(--nv-muted); font-size: 11px; }
.admin-app .sim-read-foot { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 8px 20px; margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--nv-line); }
.admin-app .sim-read-foot p { margin: 0; color: var(--nv-text); font-size: 12px; line-height: 1.5; }
.admin-app .sim-read-key { display: flex; flex-wrap: wrap; gap: 6px 16px; margin: 0; padding: 0; list-style: none; color: var(--nv-text); font-size: 11.5px; }
.admin-app .sim-read-key li { display: inline-flex; align-items: center; gap: 3px; }
.admin-app .sim-read-key li i { width: 10px; height: 10px; border-radius: 2px; }
.admin-app .sim-read-key li i:last-of-type { margin-right: 4px; }
.admin-app .sim-read-key .safe i.dem { background: var(--map-dem-safe); } .admin-app .sim-read-key .safe i.rep { background: var(--map-rep-safe); }
.admin-app .sim-read-key .likely i.dem { background: var(--map-dem-likely); } .admin-app .sim-read-key .likely i.rep { background: var(--map-rep-likely); }
.admin-app .sim-read-key .lean i.dem { background: var(--map-dem-lean); } .admin-app .sim-read-key .lean i.rep { background: var(--map-rep-lean); }
.admin-app .sim-read-key .tossup i { background: var(--map-toss); }
@media (max-width: 780px) {
  .admin-app .sim-answer { padding: 18px 16px 14px; }
  .admin-app .sim-read { flex-wrap: wrap; gap: 14px 12px; }
  .admin-app .sim-read-group { flex-basis: 100%; text-align: left !important; }
  .admin-app .sim-read-head { grid-template-columns: auto 1fr; align-items: baseline; gap: 10px; }
  .admin-app .sim-read-head strong { font-size: 40px; }
  .admin-app .sim-read-cells { height: 24px; }
}

/* Control del Senado: marcador sin orillas de color, hemiciclo y notas cortas. */
.admin-app .fc-control-body { gap: 18px; padding: 22px 24px; border: 1px solid var(--nv-line); border-radius: 4px; }
.admin-app .fc-headline { margin: 0; padding-bottom: 14px; border-bottom: 1px solid var(--nv-line); color: var(--nv-ink); font-family: var(--rd-display); font-size: 24px; font-weight: 400; line-height: 1.25; letter-spacing: -.005em; }
.admin-app .fc-headline strong { font-weight: 600; }
.admin-app .fc-headline strong.dem { color: var(--map-dem-safe); } .admin-app .fc-headline strong.rep { color: var(--map-rep-safe); }
.admin-app .fc-board { display: grid; grid-template-columns: minmax(0, 1fr) minmax(260px, 360px) minmax(0, 1fr); align-items: center; gap: 24px; }
.admin-app .fc-side { display: grid; gap: 4px; align-content: center; }
.admin-app .fc-side.rep { text-align: right; }
.admin-app .fc-side-party { color: var(--nv-ink); font-size: 11.5px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; }
.admin-app .fc-side-value { color: var(--nv-ink); font-family: var(--rd-display); font-size: 60px; font-weight: 500; line-height: .95; letter-spacing: -.015em; font-variant-numeric: lining-nums tabular-nums; }
.admin-app .fc-side.dem .fc-side-value { color: var(--map-dem-safe); } .admin-app .fc-side.rep .fc-side-value { color: var(--map-rep-safe); }
.admin-app .fc-side:not(.is-lead) .fc-side-value { opacity: .55; }
.admin-app .fc-side-label { color: var(--nv-ink); font-size: 13px; font-weight: 500; }
.admin-app .fc-side small { color: var(--nv-text); font-size: 12px; }
.admin-app .fc-hemi-wrap { display: grid; gap: 6px; margin: 0; }
.admin-app .fc-hemi { display: block; width: 100%; height: auto; }
.admin-app .fc-hemi-seat { fill: var(--map-toss); }
.admin-app .fc-hemi-seat.dem { fill: var(--map-dem-safe); } .admin-app .fc-hemi-seat.dem.soft { fill: var(--map-dem-lean); }
.admin-app .fc-hemi-seat.rep { fill: var(--map-rep-safe); } .admin-app .fc-hemi-seat.rep.soft { fill: var(--map-rep-lean); }
.admin-app .fc-hemi-mid { stroke: var(--nv-ink); stroke-width: 2; }
.admin-app .fc-hemi-score { fill: var(--nv-ink); font-family: var(--rd-display); font-size: 30px; font-weight: 500; font-variant-numeric: lining-nums tabular-nums; }
.admin-app .fc-hemi-note { fill: var(--nv-text); font-family: var(--rd-sans); font-size: 11px; letter-spacing: .06em; text-transform: uppercase; }
.admin-app .fc-hemi-wrap figcaption { color: var(--nv-text); font-size: 11.5px; line-height: 1.45; text-align: center; }
.admin-app .fc-hemi-key { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px 18px; margin: -6px 0 0; color: var(--nv-text); font-size: 11.5px; }
.admin-app .fc-hemi-key span { display: inline-flex; align-items: center; gap: 6px; }
.admin-app .fc-hemi-key i { width: 9px; height: 9px; border-radius: 50%; background: var(--map-toss); }
.admin-app .fc-hemi-key .dem i { background: var(--map-dem-safe); } .admin-app .fc-hemi-key .rep i { background: var(--map-rep-safe); }
.admin-app .fc-hemi-key .soft i { background: linear-gradient(90deg, var(--map-dem-lean) 50%, var(--map-rep-lean) 50%); }
.admin-app .fc-facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 10px; padding-top: 16px; border-top: 1px solid var(--nv-line); }
.admin-app .fc-fact { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 3px 10px; padding: 12px 14px; border: 1px solid var(--nv-line); border-radius: 4px; background: var(--nv-subtle); color: inherit; font: inherit; text-align: left; cursor: pointer; transition: border-color .15s ease, background .15s ease; }
.admin-app .fc-fact:hover { border-color: var(--nv-line-strong); background: var(--nv-hover); }
.admin-app .fc-fact:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: 2px; }
.admin-app .fc-fact-label { grid-column: 1 / -1; color: var(--nv-text); font-size: 10.5px; font-weight: 700; letter-spacing: .09em; text-transform: uppercase; }
.admin-app .fc-fact strong { color: var(--nv-ink); font-family: var(--rd-display); font-size: 24px; font-weight: 500; line-height: 1.1; font-variant-numeric: lining-nums tabular-nums; }
.admin-app .fc-fact small { grid-column: 1; color: var(--nv-text); font-size: 12px; line-height: 1.4; }
.admin-app .fc-fact-go { grid-column: 2; grid-row: 2 / 4; align-self: end; color: var(--nv-ink); font-size: 12px; font-weight: 650; white-space: nowrap; }
.admin-app .fc-fact-go::after { content: " ›"; }
.admin-app .fc-fact-sheet { display: grid; gap: 10px; padding: 16px 18px; border: 1px solid var(--nv-line); border-radius: 4px; background: var(--nv-card); }
.admin-app .fc-fact-sheet p { margin: 0; color: var(--nv-text); font-size: 13.5px; line-height: 1.6; }
.admin-app .fc-fact-sheet b { color: var(--nv-ink); }
html[data-theme="dark"] .admin-app .sim-read-group.dem .sim-read-head strong, html[data-theme="dark"] .admin-app .fc-side.dem .fc-side-value, html[data-theme="dark"] .admin-app .fc-headline strong.dem { color: #8db8ec; }
html[data-theme="dark"] .admin-app .sim-read-group.rep .sim-read-head strong, html[data-theme="dark"] .admin-app .fc-side.rep .fc-side-value, html[data-theme="dark"] .admin-app .fc-headline strong.rep { color: #f29a90; }
@media (max-width: 900px) {
  .admin-app .fc-board { grid-template-columns: 1fr 1fr; gap: 16px; }
  .admin-app .fc-hemi-wrap { grid-column: 1 / -1; grid-row: 2; max-width: 380px; justify-self: center; width: 100%; }
  .admin-app .fc-side-value { font-size: 46px; }
  .admin-app .fc-control-body { padding: 16px; }
}

/* ---------- Metodología: botón junto al título de cada página y su contenido en la ventana ---------- */
.admin-app .page-title-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px; min-width: 0; }
.admin-app .method-open { display: inline-flex; align-items: center; gap: 7px; padding: 6px 12px 6px 10px; border: 1px solid var(--nv-line-strong); border-radius: 999px; background: var(--nv-card); color: var(--nv-ink); font: 600 12.5px/1.2 var(--nv-font); cursor: pointer; transition: background .15s ease, border-color .15s ease; }
.admin-app .method-open[hidden] { display: none; }
.admin-app .method-open svg { width: 15px; height: 15px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linejoin: round; stroke-linecap: round; }
.admin-app .method-open:hover { border-color: var(--nv-ink); background: var(--nv-hover); }
.admin-app .method-open:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: 2px; }
.admin-app .md-body { display: grid; gap: 18px; }
.admin-app .md-lead { margin: 0; color: var(--nv-ink); font-family: "Playfair Display", var(--nv-serif); font-size: 19px; line-height: 1.45; }
.admin-app .md-facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 8px; }
.admin-app .md-fact { display: grid; gap: 3px; padding: 11px 13px; border: 1px solid var(--nv-line); border-radius: 4px; background: var(--nv-card); }
.admin-app .md-fact strong { color: var(--nv-ink); font-family: "Playfair Display", var(--nv-serif); font-size: 24px; font-weight: 500; line-height: 1.05; font-variant-numeric: lining-nums tabular-nums; }
.admin-app .md-fact span { color: var(--nv-text); font-size: 12px; line-height: 1.4; }
.admin-app .md-section { display: grid; gap: 9px; }
.admin-app .md-section h4 { margin: 0; color: var(--nv-ink); font-size: 10.5px; font-weight: 700; letter-spacing: .09em; text-transform: uppercase; }
.admin-app .md-sources { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 8px; margin: 0; padding: 0; list-style: none; }
.admin-app .md-sources li { display: grid; gap: 3px; padding: 10px 12px; border: 1px solid var(--nv-line); border-radius: 4px; background: var(--nv-card); }
.admin-app .md-sources b { color: var(--nv-ink); font-size: 13px; font-weight: 650; }
.admin-app .md-sources span { color: var(--nv-text); font-size: 12.5px; line-height: 1.5; }
.admin-app .md-steps { display: grid; margin: 0; padding: 0; list-style: none; counter-reset: md; border: 1px solid var(--nv-line); border-radius: 4px; background: var(--nv-card); }
.admin-app .md-steps li { position: relative; padding: 11px 14px 11px 46px; border-bottom: 1px solid var(--nv-line); counter-increment: md; }
.admin-app .md-steps li:last-child { border-bottom: 0; }
.admin-app .md-steps li::before { content: counter(md); position: absolute; left: 14px; top: 11px; display: grid; place-items: center; width: 21px; height: 21px; border-radius: 50%; background: var(--nv-ink); color: var(--nv-card); font-size: 11px; font-weight: 700; }
.admin-app .md-steps b { color: var(--nv-ink); font-size: 13px; font-weight: 650; }
.admin-app .md-steps p { margin: 3px 0 0; color: var(--nv-text); font-size: 12.5px; line-height: 1.55; }
.admin-app .md-scale { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 4px; margin: 0; padding: 0; list-style: none; }
.admin-app .md-scale li { display: grid; gap: 2px; padding: 8px 10px; border-top: 3px solid var(--nv-ink); background: var(--nv-card); }
.admin-app .md-scale li:nth-child(2) { border-top-color: color-mix(in srgb, var(--nv-ink) 65%, transparent); }
.admin-app .md-scale li:nth-child(3) { border-top-color: color-mix(in srgb, var(--nv-ink) 38%, transparent); }
.admin-app .md-scale li:nth-child(4) { border-top-color: var(--nv-line-strong); }
.admin-app .md-scale b { color: var(--nv-ink); font-size: 12.5px; font-weight: 650; }
.admin-app .md-scale span { color: var(--nv-text); font-size: 11.5px; }
.admin-app .md-limits { display: grid; gap: 6px; margin: 0; padding: 0; list-style: none; }
.admin-app .md-limits li { position: relative; padding-left: 18px; color: var(--nv-text); font-size: 12.5px; line-height: 1.5; }
.admin-app .md-limits li::before { content: ""; position: absolute; left: 3px; top: .62em; width: 6px; height: 6px; border-radius: 50%; border: 1.5px solid var(--nv-text); }
@media (max-width: 640px) {
  .admin-app .md-scale { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .admin-app .method-open span { display: none; }
  .admin-app .method-open { padding: 7px; }
}

/* ---------- Metodología de un estado (Inicio y Pronóstico) ---------- */
.admin-app .hs-method { display: inline-flex; align-items: center; gap: 6px; margin-left: 4px; padding: 5px 11px 5px 9px; border: 1px solid var(--nv-line-strong); border-radius: 999px; background: var(--nv-card); color: var(--nv-ink); font: 600 12px/1.2 var(--nv-font); cursor: pointer; transition: background .15s ease, border-color .15s ease; }
.admin-app .hs-method svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linejoin: round; stroke-linecap: round; }
.admin-app .hs-method:hover { border-color: var(--nv-ink); background: var(--nv-hover); }
.admin-app .hs-method:focus-visible { outline: 2px solid var(--nv-focus); outline-offset: 2px; }
/* Dentro de la ventana: elegir contienda del estado. */
.admin-app .sim-calc-races { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 12px; }
.admin-app .sim-calc-races button { padding: 6px 12px; border: 1px solid var(--nv-line); border-radius: 999px; background: var(--nv-card); color: var(--nv-text); font: 600 12px/1.2 var(--nv-font); cursor: pointer; }
.admin-app .sim-calc-races button[aria-pressed="true"] { border-color: var(--nv-ink); background: var(--nv-ink); color: var(--nv-card); }
.admin-app .sim-calc-races button:hover:not([aria-pressed="true"]) { background: var(--nv-hover); }
/* Pestaña Predicción: señales que coinciden o no con el ganador. */
.admin-app .sim-calc-signals { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 6px; margin: 0; padding: 0; list-style: none; }
.admin-app .sim-calc-signals li { display: grid; grid-template-columns: auto 1fr; gap: 1px 8px; align-items: center; padding: 8px 10px; border: 1px solid var(--nv-line); border-radius: 4px; background: var(--nv-card); }
.admin-app .sim-calc-signals i { grid-row: 1 / 3; display: grid; place-items: center; width: 22px; height: 22px; border-radius: 50%; background: var(--nv-hover); color: var(--nv-text); font-style: normal; font-weight: 700; font-size: 12px; }
.admin-app .sim-calc-signals .agree i { background: #e3f1e8; color: #23613a; }
.admin-app .sim-calc-signals .disagree i { background: #f8e4e1; color: #a2282a; }
html[data-theme="dark"] .admin-app .sim-calc-signals .agree i { background: #1b3424; color: #c1e1cd; }
html[data-theme="dark"] .admin-app .sim-calc-signals .disagree i { background: #3d1f1c; color: #f2b1a9; }
.admin-app .sim-calc-signals b { color: var(--nv-ink); font-size: 12px; font-weight: 650; }
.admin-app .sim-calc-signals span { color: var(--nv-text); font-size: 11.5px; }

/* ---------- Pronóstico: «Todas las contiendas» como tabla de periódico ---------- */
.admin-app .sim-race-directory { --rd-dem: var(--sim-dem, #2361a4); --rd-rep: var(--sim-rep, #b63b35); --rd-oth: #72518c; --rd-toss: #8a857b; }
html[data-theme="dark"] .admin-app .sim-race-directory { --rd-dem: #8db8ec; --rd-rep: #f29a90; --rd-oth: #c3a9d8; --rd-toss: #a7a296; }
.admin-app .sim-race-directory .sim-directory-head { align-items: flex-end; padding-bottom: 14px; border-bottom: 2px solid var(--nv-ink); }
.admin-app .sim-race-directory .sim-directory-head h3 { font-size: 28px; font-weight: 400; letter-spacing: -.018em; }
.admin-app .sim-race-directory .sim-directory-head p { margin-top: 4px; color: var(--nv-muted); font-family: var(--nv-serif); font-size: 15px; font-style: italic; }
.admin-app .sim-race-directory #sim-results-count { color: var(--nv-muted); font-size: 10.5px; font-weight: 600; letter-spacing: .09em; text-transform: uppercase; }
.admin-app .sim-race-directory .sim-directory-tools { margin: 14px 0 6px; }
.admin-app .sim-race-directory .sim-directory-tools .view-search, .admin-app .sim-race-directory .sim-select select { border-radius: 3px; }

/* Sin caja: reglas horizontales, como una tabla impresa. */
.admin-app .sim-race-directory .sim-table-wrap, html:not([data-theme="dark"]) .admin-app .sim-race-directory .sim-table-wrap,
html[data-theme="dark"] .admin-app .sim-race-directory .sim-table-wrap { border: 0; border-radius: 0; background: transparent; box-shadow: none; }
.admin-app .sim-race-directory .sim-forecast-table { font-size: 13px; border-collapse: collapse; }
.admin-app .sim-race-directory .sim-forecast-table thead th,
html[data-theme="dark"] .admin-app .sim-race-directory .sim-forecast-table thead th {
  padding: 12px 14px 10px; border-bottom: 1px solid var(--nv-ink); background: transparent; color: var(--nv-muted);
  font-size: 10px; font-weight: 600; letter-spacing: .1em; text-transform: uppercase; white-space: nowrap;
}
.admin-app .sim-race-directory .sim-forecast-table thead th:first-child { padding-left: 46px; }
.admin-app .sim-race-directory .sim-forecast-table td, html[data-theme="dark"] .admin-app .sim-race-directory .sim-forecast-table td {
  padding: 18px 14px; border-bottom: 1px solid var(--nv-line); vertical-align: middle;
}
.admin-app .sim-race-directory .sim-forecast-table tbody tr { transition: background-color .18s ease; }
.admin-app .sim-race-directory .sim-forecast-table tbody tr:hover,
html[data-theme="dark"] .admin-app .sim-race-directory .sim-forecast-table tbody tr:hover { background: var(--nv-subtle); }
.admin-app .sim-race-directory .sim-forecast-table tbody tr:hover td:first-child { box-shadow: inset 2px 0 0 var(--nv-ink); }

/* Estado: número de orden en serif itálica y nombre en serif. */
.admin-app .sim-race-directory .sim-where { display: flex; align-items: baseline; gap: 14px; min-width: 190px; }
.admin-app .sim-race-directory .sim-rank { flex: none; width: 18px; color: var(--nv-muted); font-family: var(--nv-serif); font-size: 13px; font-style: italic; font-variant-numeric: tabular-nums lining-nums; opacity: .7; }
.admin-app .sim-race-directory .sim-where strong { display: block; color: var(--nv-ink); font-family: var(--nv-serif); font-size: 18px; font-weight: 500; line-height: 1.2; letter-spacing: -.008em; font-optical-sizing: auto; }
.admin-app .sim-race-directory .sim-where small { display: block; margin-top: 5px; color: var(--nv-muted); font-size: 10px; font-weight: 600; line-height: 1.4; letter-spacing: .08em; text-transform: uppercase; }

/* Candidaturas: retrato recto con filete del partido. */
.admin-app .sim-race-directory .sim-table-person { display: flex; align-items: center; gap: 12px; }
.admin-app .sim-race-directory .sim-table-person .sim-avatar { flex: none; width: 36px; height: 42px; border-radius: 2px; font-family: var(--nv-serif); font-size: 14px; font-weight: 500; }
.admin-app .sim-race-directory .sim-table-person .sim-avatar img { filter: saturate(.85) contrast(1.02); }
.admin-app .sim-race-directory .sim-table-person .sim-avatar::after { content: ""; position: absolute; z-index: 1; left: 0; right: 0; bottom: 0; height: 3px; background: var(--rd-toss); }
.admin-app .sim-race-directory .sim-table-person.dem .sim-avatar::after { background: var(--rd-dem); }
.admin-app .sim-race-directory .sim-table-person.rep .sim-avatar::after { background: var(--rd-rep); }
.admin-app .sim-race-directory .sim-table-person.oth .sim-avatar::after { background: var(--rd-oth); }
.admin-app .sim-race-directory .sim-table-person-copy strong { display: block; color: var(--nv-ink); font-family: var(--nv-serif); font-size: 16px; font-weight: 500; line-height: 1.2; letter-spacing: -.005em; }
.admin-app .sim-race-directory .sim-table-person-copy small { display: flex; flex-wrap: wrap; align-items: center; gap: 0 8px; margin-top: 4px; color: var(--nv-muted); font-size: 11px; line-height: 1.4; }
.admin-app .sim-race-directory .sim-party { font-size: 10px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; }
.admin-app .sim-race-directory .dem .sim-party { color: var(--rd-dem); }
.admin-app .sim-race-directory .rep .sim-party { color: var(--rd-rep); }
.admin-app .sim-race-directory .oth .sim-party { color: var(--rd-oth); }
.admin-app .sim-race-directory .sim-vote { font-variant-numeric: tabular-nums lining-nums; }
.admin-app .sim-race-directory .sim-vote::before { content: ""; display: inline-block; width: 3px; height: 3px; margin: 0 8px 2px 0; border-radius: 50%; background: currentColor; opacity: .55; }

/* Probabilidad: cifra serif grande, medidor fino y calificación en versalitas. */
.admin-app .sim-race-directory .sim-probability { min-width: 150px; }
.admin-app .sim-race-directory .sim-probability > strong {
  display: block; margin: 0; font-family: var(--nv-serif); font-size: 30px; font-weight: 400; line-height: 1; letter-spacing: -.025em;
  font-variant-numeric: tabular-nums lining-nums; font-optical-sizing: auto;
}
.admin-app .sim-race-directory .sim-probability > strong.dem { color: var(--rd-dem); }
.admin-app .sim-race-directory .sim-probability > strong.rep { color: var(--rd-rep); }
.admin-app .sim-race-directory .sim-probability > strong.oth { color: var(--rd-oth); }
.admin-app .sim-race-directory .sim-pct { margin-left: 1px; font-size: .5em; letter-spacing: 0; vertical-align: .62em; opacity: .8; }
.admin-app .sim-race-directory .sim-meter { display: block; width: 120px; height: 2px; margin: 9px 0 8px; background: var(--nv-line); }
.admin-app .sim-race-directory .sim-meter i { display: block; height: 100%; background: var(--rd-toss); transition: width .4s ease; }
.admin-app .sim-race-directory .sim-meter.dem i { background: var(--rd-dem); }
.admin-app .sim-race-directory .sim-meter.rep i { background: var(--rd-rep); }
.admin-app .sim-race-directory .sim-meter.oth i { background: var(--rd-oth); }
.admin-app .sim-race-directory .sim-probability .sim-chance,
html:not([data-theme="dark"]) .admin-app .sim-race-directory .sim-probability .sim-chance,
html[data-theme="dark"] .admin-app .sim-race-directory .sim-probability .sim-chance {
  display: inline-flex; align-items: center; gap: 6px; width: auto; margin: 0; padding: 0; border-radius: 0; background: none; color: var(--nv-muted);
  font-size: 9.5px; font-weight: 600; letter-spacing: .1em; text-transform: uppercase;
}
.admin-app .sim-race-directory .sim-chance::before { content: ""; width: 7px; height: 7px; background: var(--rd-toss); }
.admin-app .sim-race-directory .sim-chance.lean::before { background: var(--nv-ink); opacity: .4; }
.admin-app .sim-race-directory .sim-chance.likely::before { background: var(--nv-ink); opacity: .7; }
.admin-app .sim-race-directory .sim-chance.safe::before { background: var(--nv-ink); }
html[data-theme="dark"] .admin-app .sim-race-directory .sim-probability .sim-chance.tossup,
.admin-app .sim-race-directory .sim-probability .sim-chance.tossup { color: var(--nv-ink); }

/* Encuestas y acción. */
.admin-app .sim-race-directory .sim-poll-count strong,
html:not([data-theme="dark"]) .admin-app .sim-race-directory .sim-poll-count strong,
html[data-theme="dark"] .admin-app .sim-race-directory .sim-poll-count strong {
  display: block; color: var(--nv-ink); font-family: var(--nv-serif); font-size: 22px; font-weight: 400; line-height: 1; font-variant-numeric: tabular-nums lining-nums;
}
.admin-app .sim-race-directory .sim-poll-count small { display: block; margin-top: 6px; color: var(--nv-muted); font-size: 10px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; }
.admin-app .sim-race-directory .sim-row-action { text-align: right; white-space: nowrap; }
.admin-app .sim-race-directory .sim-row-action .sim-link {
  display: inline-flex; align-items: center; gap: 8px; padding: 6px 0; border-bottom: 1px solid transparent; color: var(--nv-ink);
  font-size: 10.5px; font-weight: 600; letter-spacing: .09em; text-transform: uppercase; text-decoration: none; transition: border-color .18s ease;
}
.admin-app .sim-race-directory .sim-row-action .sim-link::after { content: "\2192"; font-size: 13px; letter-spacing: 0; transition: transform .18s ease; }
.admin-app .sim-race-directory .sim-row-action .sim-link:hover,
.admin-app .sim-race-directory tr:hover .sim-row-action .sim-link { border-bottom-color: var(--nv-ink); text-decoration: none; }
.admin-app .sim-race-directory tr:hover .sim-row-action .sim-link::after { transform: translateX(3px); }
.admin-app .sim-race-directory .sim-row-action .sim-link:focus-visible { outline: 2px solid var(--nv-ink); outline-offset: 3px; }

@media (max-width: 760px) {
  .admin-app .sim-race-directory .sim-directory-head h3 { font-size: 24px; }
  .admin-app .sim-race-directory .sim-forecast-table thead th:first-child { padding-left: 14px; }
  .admin-app .sim-race-directory .sim-forecast-table tbody tr { padding: 18px 4px; border-bottom: 1px solid var(--nv-line); }
  .admin-app .sim-race-directory .sim-forecast-table td, html[data-theme="dark"] .admin-app .sim-race-directory .sim-forecast-table td { padding: 0; border-bottom: 0; }
  .admin-app .sim-race-directory .sim-forecast-table .sim-where { padding-bottom: 12px; border-bottom: 1px solid var(--nv-line); }
  .admin-app .sim-race-directory .sim-forecast-table td[data-label]::before { color: var(--nv-muted); font-size: 9.5px; font-weight: 600; letter-spacing: .1em; text-transform: uppercase; }
  .admin-app .sim-race-directory .sim-forecast-table tbody tr:hover td:first-child { box-shadow: none; }
  .admin-app .sim-race-directory .sim-row-action { text-align: left; }
  .admin-app .sim-race-directory .sim-probability > strong { font-size: 26px; }
}
@media (prefers-reduced-motion: reduce) {
  .admin-app .sim-race-directory .sim-meter i, .admin-app .sim-race-directory .sim-row-action .sim-link::after { transition: none; }
}
