/* Sistema visual das páginas de análise — Senado RS 2026.
 *
 * TIPOGRAFIA herdada de PAGINA-INICIAL.html (o manual do mapa), escolha de
 * Gabriel: Barlow / Barlow Condensed, largura 1180. Não se trocam.
 *
 * CORES oficiais da campanha desde 17/09/2026 (ordem de Gabriel: «todas as
 * páginas no padrão oficial»). Fonte única: scripts/eleitoral/paleta_oficial.py
 * (extraída do CSS de pimenta131.com.br, confirmada por pixel nos logos). O
 * gate_paleta.py lê os dois lados. O contrato: hex só da tabela; cinza proibido
 * como marca (neutro = tinta com opacidade); véu sempre preto; cor de dado é
 * exceção nomeada.
 *
 * Medidos sobre o papel #faf9f6 (WCAG AA texto ≥ 4,5:1):
 *   tinta #1a130d → 17,45:1 · tinta-2 (tinta a 84%) → 4,62:1
 *   ação #b60510 → 6,61:1 · foco #1d5541 → 8,22:1
 * O par categórico de dados foi revalidado com o vermelho-escuro no lugar do
 * vinho antigo: ação × série-2, ΔE medido na migração (o azul segue — é dado).
 */

:root {
  /* os dez tokens oficiais, verbatim — a tabela de paleta_oficial.CORES */
  --verde: #00933a;
  --verde-medio: #057b41;
  --verde-escuro: #1d5541;
  --verde-ink: #07271a;
  --vermelho: #e30613;
  --vermelho-escuro: #b60510;
  --laranja: #f07e26;
  --amarelo: #ffd200;
  --fundo: #faf9f6;
  --tinta: #1a130d;

  /* derivados medidos — neutro é tinta com opacidade, nunca um cinza de fora */
  --tinta-2: rgb(26 19 13 / 84%);
  --tinta-3: rgb(26 19 13 / 84%);
  --fundo-2: rgb(26 19 13 / 4%);
  --linha: rgb(26 19 13 / 16%);
  /* borda de COMPONENTE (campo de formulário): o teste do manual mede ≥ 3:1 —
     42% media 1,64:1 e reprovava; 75% mede 3,33:1. Hairline de tabela é --linha. */
  --borda: rgb(26 19 13 / 75%);
  --acao: #b60510;
  --acao-2: #95040d;
  --acao-clara: #f9eae8;
  --foco: #1d5541;
  --fonte: "Barlow", system-ui, -apple-system, "Segoe UI", sans-serif;
  --fonte-titulo: "Barlow Condensed", "Barlow", system-ui, sans-serif;
  --largura: 1180px;

  /* o par categórico de DADOS. Série 1 = conquista (o vermelho-escuro oficial);
     série 2 = conversão (azul de dados — exceção declarada do contrato) */
  --serie-1: #b60510;
  --serie-1-clara: #f9eae8;
  --serie-2: #2166ac;
  --serie-2-clara: #e8f0f8;
  /* rampa sequencial (um hue, claro → escuro) — dado, não marca */
  --seq-1: #deebf7;
  --seq-2: #9ecae1;
  --seq-3: #4292c6;
  --seq-4: #2166ac;
  --seq-5: #084594;
  /* a urna, esquemática — o papel é a tela, a moldura é tinta com opacidade */
  --urna-tela: var(--fundo);
  --urna-borda: rgb(26 19 13 / 32%);
}

*, *::before, *::after { box-sizing: border-box; }

/* Os pares cor×fundo abaixo trazem o valor literal ANTES do var(). Não é
 * redundância: o gate de artefato afere contraste dentro de uma regra e, sem um
 * par literal, ele SKIPa — e um SKIP não vira aprovação (ele reprova por não
 * conseguir medir, que é a postura certa). O literal também é fallback real em
 * navegador sem custom properties. Medidos sobre o papel #faf9f6:
 *   #1a130d → 17,45:1 · tinta a 84% → 4,62:1
 *   #b60510 →  6,61:1 · #1d5541 → 8,22:1   (todos ≥ 4,5:1, WCAG AA texto)
 */
body {
  margin: 0;
  background: #faf9f6;
  background: var(--fundo);
  color: #1a130d;
  color: var(--tinta);
  font-family: var(--fonte);
  font-size: 17px;
  line-height: 1.6;
  -webkit-text-size-adjust: 100%;
}

/* ─── o hero oficial (Gabriel, 17/09/2026) ──────────────────────────────────
 * 18/09: o BACKGROUND saiu daqui. A receita medida (o scrim que segue o texto +
 * a cinta com as quatro cores puras) é gerada INLINE por pagina_indice.py a
 * partir de paleta_oficial.grad_marca(zona) — para o gate_efeito_hero lê-la na
 * página, e porque o véu chapado apagava a paleta (ΔE amarelo 33,5, medido pela
 * coordenadora em dois instrumentos). Aqui ficam o layout e os textos claros;
 * o `position: relative` é a âncora da cinta (::after).
 */
.hero {
  position: relative;
  color: #faf9f6;
  color: var(--fundo);
  padding-block: clamp(48px, 8vw, 88px);
}
.hero h1 { color: #ffffff; }
.hero .sumario { color: rgb(255 255 255 / 92%); }
.hero a:focus-visible, .hero button:focus-visible { outline-color: #ffd200; outline-color: var(--amarelo); }

.faixa { max-width: var(--largura); margin: 0 auto; padding: 0 24px; }

h1, h2, h3 { font-family: var(--fonte-titulo); font-weight: 600; line-height: 1.12; margin: 0; }
h1 { font-size: clamp(2.1rem, 5.2vw, 3.5rem); letter-spacing: -0.01em; }
h2 { font-size: clamp(1.5rem, 3.2vw, 2.1rem); margin-bottom: 0.5rem; }
h3 { font-size: 1.22rem; margin-bottom: 0.35rem; }
p { max-width: 68ch; }
a { color: var(--foco); text-decoration-thickness: 1px; text-underline-offset: 2px; }
a:focus-visible, button:focus-visible {
  outline: 3px solid var(--foco); outline-offset: 2px; border-radius: 2px;
}

/* ─── navegação ────────────────────────────────────────────────────────────
 * A barra NÃO mora mais aqui. Ela era `.barra` neste arquivo E, com outro
 * significado, um gráfico de distribuição na PAGINA-INICIAL — mesmo seletor,
 * duas funções, esperando colidir. E o CSS num arquivo que só três das sete
 * páginas carregam deixava as outras quatro sem navegação nenhuma.
 *
 * Fonte única: `scripts/eleitoral/navegacao.py` (classe `.nav-acervo`,
 * verificada livre nas sete páginas). Cada página recebe o CSS embutido em
 * `<style data-nav-acervo>`, posto pelo gerador ou por
 * `scripts/eleitoral/sincronizar_navegacao.py`. `tests/test_navegacao.py` afere
 * o disco contra a fonte.
 */

/* ─── seções ──────────────────────────────────────────────────────────── */
section { padding-block: clamp(40px, 6vw, 72px); }
section + section { border-top: 1px solid var(--linha); }
.sumario { color: var(--tinta-2); font-size: 1.1rem; max-width: 62ch; }

/* ─── a tela da urna (ilustração esquemática — NÃO é reprodução oficial) ── */
.urnas { display: grid; gap: 20px; grid-template-columns: 1fr; margin-top: 30px; }
@media (min-width: 720px) { .urnas { grid-template-columns: 1fr 1fr; gap: 28px; } }

.urna {
  border: 2px solid var(--urna-borda);
  border-radius: 3px;
  background: var(--urna-tela);
  padding: 16px 18px 18px;
  font-variant-numeric: tabular-nums;
}
.urna[data-estado="vazia"] { border-color: var(--serie-2); box-shadow: 0 0 0 3px var(--serie-2-clara); }
.urna .cargo {
  font-family: var(--fonte-titulo); font-size: 1.15rem; font-weight: 600;
  display: flex; justify-content: space-between; align-items: baseline;
  border-bottom: 1px solid var(--urna-borda); padding-bottom: 8px;
}
.urna .ordem { font-size: 0.9rem; color: var(--tinta-2); font-family: var(--fonte); }
.urna dl { display: grid; grid-template-columns: auto 1fr; gap: 6px 14px; margin: 14px 0 0; font-size: 0.95rem; }
.urna dt { color: var(--tinta-3); }
.urna dd { margin: 0; font-weight: 500; }
.digitos { display: flex; gap: 5px; }
.digito {
  width: 26px; height: 34px; border: 1px solid var(--urna-borda); border-radius: 2px;
  background: #fff; display: grid; place-items: center;
}
.digito[data-preenchido] { background: var(--tinta); }
.urna .rodape {
  margin-top: 16px; padding-top: 10px; border-top: 1px dashed var(--urna-borda);
  font-size: 0.84rem; color: var(--tinta-2);
}
.urna[data-estado="vazia"] .rodape { color: var(--serie-2); font-weight: 600; }
.cursor {
  display: inline-block; width: 11px; height: 20px; background: var(--serie-2);
  vertical-align: -4px; animation: pisca 1.15s steps(2, start) infinite;
}
@keyframes pisca { to { opacity: 0; } }
@media (prefers-reduced-motion: reduce) { .cursor { animation: none; opacity: 0.55; } }

/* ─── o número que decide ─────────────────────────────────────────────── */
.marcador { display: flex; align-items: baseline; gap: 16px; flex-wrap: wrap; }
.marcador .valor {
  font-family: var(--fonte-titulo); font-weight: 600; font-size: clamp(3rem, 11vw, 6.2rem);
  line-height: 0.92; letter-spacing: -0.015em; font-variant-numeric: tabular-nums;
}
.marcador .valor[data-serie="2"] { color: var(--serie-2); }
.marcador .unidade { font-size: 1.05rem; color: var(--tinta-2); max-width: 30ch; }

/* ─── tabelas de dados ────────────────────────────────────────────────── */
table { border-collapse: collapse; width: 100%; font-variant-numeric: tabular-nums; font-size: 0.95rem; }
caption { text-align: left; color: var(--tinta-2); font-size: 0.92rem; padding-bottom: 8px; }
th, td { text-align: right; padding: 7px 10px; border-bottom: 1px solid var(--linha); }
th:first-child, td:first-child { text-align: left; }
thead th { font-weight: 600; color: var(--tinta-2); border-bottom: 2px solid var(--borda); white-space: nowrap; }
tbody tr:hover { background: var(--fundo-2); }
td.destaque { font-weight: 600; }

/* A legenda longa (fonte, denominadores) fica FORA de .rolagem-tabela: a <caption> herda a
 * largura da TABELA, e nenhuma regra CSS a amarra ao contêiner — medido em 20/09/2026
 * (width, max-width, min-width e sticky não mudam a caixa; display:block corrompe a
 * tabela). Dentro fica só o título curto, que cabe nos 342 px do estreito. */
.legenda-tabela { color: var(--tinta-2); font-size: 0.92rem; margin: 8px 0 0; max-width: 70ch; }

/* O botão de ordenação (ONDE-AGIR). Sem regra própria saía com o estilo do agente — cinza de
 * UA, 13,3 px, 21 px de altura — dentro da tabela da paleta (P5, 20/09/2026). Herda a fonte
 * e a cor do cabeçalho, ganha alvo ≥ 32 px, e a seta diz o sentido da ordenação
 * (data-dir vem de assets/ordenar.js). */
thead th button {
  font: inherit; font-weight: 600; color: inherit; background: none; border: 0;
  margin: 0; padding: 0; min-height: 32px; display: inline-flex; align-items: center; gap: 5px;
  cursor: pointer; white-space: nowrap;
}
thead th button::after { content: "↕"; color: var(--tinta-3); font-size: 0.85em; }
thead th button[data-dir="asc"]::after { content: "↑"; color: var(--acao); }
thead th button[data-dir="desc"]::after { content: "↓"; color: var(--acao); }
thead th button:hover { color: var(--acao); }

/* ─── barra proporcional dentro de célula (mark spec: 4px nas pontas) ──── */
.barra-dado { display: flex; align-items: center; gap: 8px; justify-content: flex-end; }
.barra-dado i {
  display: block; height: 11px; border-radius: 0 4px 4px 0; background: var(--serie-2); flex: none;
}
.barra-dado i[data-serie="1"] { background: var(--serie-1); }

/* ─── nota e advertência ──────────────────────────────────────────────── */
.nota {
  border-left: 3px solid var(--borda); padding: 2px 0 2px 16px;
  color: var(--tinta-2); font-size: 0.95rem; margin: 18px 0; max-width: 70ch;
}
.nota[data-tom="alerta"] { border-left-color: var(--acao); }
.nota strong { color: var(--tinta); }

/* ─── grade de cartões de navegação ───────────────────────────────────── */
.cartoes { display: grid; gap: 18px; grid-template-columns: 1fr; margin-top: 26px; }
@media (min-width: 760px) { .cartoes { grid-template-columns: repeat(3, 1fr); } }
.cartao {
  border: 1px solid var(--linha); border-top: 3px solid var(--borda);
  padding: 20px 20px 22px; text-decoration: none; color: inherit; display: block;
}
.cartao:hover { border-color: var(--borda); background: var(--fundo-2); }
.cartao[data-serie="1"] { border-top-color: var(--serie-1); }
.cartao[data-serie="2"] { border-top-color: var(--serie-2); }
.cartao h3 { margin-bottom: 6px; }
.cartao p { font-size: 0.95rem; color: var(--tinta-2); margin: 0; }
.cartao .chamada { display: block; margin-top: 12px; font-size: 0.9rem; color: var(--foco); font-weight: 600; }

/* ─── legenda de séries ───────────────────────────────────────────────── */
.legenda { display: flex; gap: 20px; flex-wrap: wrap; font-size: 0.92rem; color: var(--tinta-2); margin: 4px 0 14px; }
.legenda span { display: inline-flex; align-items: center; gap: 7px; }
.legenda i, .marca-serie {
  width: 13px; height: 13px; border-radius: 2px; background: var(--serie-1); display: block;
}
.legenda i[data-serie="2"], .marca-serie[data-serie="2"] { background: var(--serie-2); }

/* A marca que torna a legenda verdadeira: uma legenda sem marca correspondente
 * no dado ensina uma chave de leitura e depois não a usa. Fica na célula, ao
 * lado do rótulo — a identidade nunca depende só da cor (o texto está lá). */
.com-marca { display: inline-flex; align-items: center; gap: 9px; }

/* ─── acréscimos de 17/09/2026 (páginas de detalhe — avisado à coordenadora) ─ */
.rolagem-tabela { overflow-x: auto; }  /* tabela larga rola dentro do bloco; a página, nunca */
.selo {
  display: inline-block; padding: 1px 8px; border: 1px solid var(--borda);
  border-radius: 999px; font-size: 0.78rem; color: #52606d; color: var(--tinta-2);
  white-space: nowrap; letter-spacing: 0.02em;
}

/* ─── figuras SVG ───────────────────────────────────────────────────────────
 * O tampão de largura é parte do piso tipográfico mobile (17/09/2026): viewBox
 * ≤ 430 + fonte nominal ≥ 14 + max-width aqui. Sem o tampão, o desktop estica
 * o SVG estreito e o texto vira cartaz. A régua: tests/test_piso_svg_mobile.py.
 */
.figura-svg { display: block; width: 100%; max-width: 530px; height: auto; }
/* A linha «Fonte: …» mora em HTML (P5, 20/09/2026): um <text> de SVG não quebra, e o
 * rótulo de 179 caracteres saía cortado nos DOIS viewports (982 px além do SVG a 1280,
 * medido). A figcaption quebra como parágrafo, sob o mesmo tampão da figura. */
.figura { margin: 0 0 20px; max-width: 530px; }  /* o respiro que a faixa da fonte dava dentro do SVG */
.figura-fonte { font-size: 0.9rem; line-height: 1.45; color: var(--tinta-3); margin-top: 8px; }

footer { border-top: 1px solid var(--linha); padding-block: 30px 44px; color: var(--tinta-3); font-size: 0.9rem; }
footer a { color: var(--tinta-2); }
