/* Apuração do 2º turno — letramento.org/eleicoes/segundoturno. Irmã das páginas por estado (mapa_estado.html):
   a tela inteira é o mapa; controles e resultados flutuam. Desenho em canvas (5.571 municípios com zoom contínuo). */
/* TEMA (Admin 22/10 18h55: "programe o design para o modo noite e dia"). Toda cor que muda com o tema é uma variável; o
   tema escuro só redefine as variáveis. Valem em :root E em qualquer elemento com data-tema — o véu da troca (st.js
   trocaTema) é uma cópia da página no tema de antes, e as variáveis dela vêm do data-tema dela. Por isso NENHUMA regra de
   tema se escreve como ":root[data-tema=escuro] .x{...}": a cópia herdaria o tema novo. A escolha mora em localStorage
   ("letramento-tema-apuracao", só desta página: a de /eleicoes guardava o claro antigo) e entra antes do 1º quadro (script no <head>). */
:root,[data-tema="claro"]{color-scheme:light;
  --bg:#f6f4ef;--terra:#ece9e1;--card:rgba(255,255,255,.96);--ink:#1d1d1f;--mute:#5d5d63;--line:#dcd8cf;--acc:#0f5c8c;
  --a:#c8102e;--b:#1d4e9e;--ok:#1b7f3b;--vivo:#c8102e;--ens:#8a5a00;
  --mar:#f3f3f0;   /* o mar atrás do mapa (era #dde7ec, o "azul bebê"): cinza quente, mais claro que a terra */
  --sup:#fff;--btn:#fff;--sup2:#f1efe9;--sup3:#f6f4ef;
  --trilho:#e4e1d9;--trilho-b:rgba(0,0,0,.04);--linha2:#eeebe4;--borda2:#e3dfd5;--borda-h:#a9a499;
  --ink2:#45454b;--mute2:#6a6a70;--mute3:#a29e94;--cinza-f:#b9b5ab;
  --inv:#1d1d1f;--inv-tx:#fff;--aro:#fff;
  --sombra0:rgba(15,23,42,.07);--sombra1:rgba(0,0,0,.08);--sombra2:rgba(0,0,0,.16);--sombra-d:rgba(15,23,42,.18);
  --mud:#0f5c8c;--mud-glow:rgba(44,138,196,.4);--ctk:100%;
  --apf1:#0f5c8c;--apf2:#2c8ac4;--marca:rgba(0,0,0,.13);--brilho:rgba(255,255,255,.5);--brilho2:rgba(255,255,255,.85);
  --listra1:#efece5;--listra2:#e8e4dc;
  --roxo1:#3f2b6b;--roxo2:#6a4fa3;--roxo-tx:#3b2768;
  --bp-tx:#4527b8;--bp-bg:#f1edff;--bp-b:#c9bcff;--bp-bg-h:#e6deff;--bp-b-h:#5b3fd0;--bp-on:#5b3fd0;--bp-on-h:#4a2fc0;
  --cap-b:#b9a77a;--cap-on:#6b4f12;
  --bbr-b:rgba(15,92,140,.45);--bbr-h:#eef5fa;--sel:#e9f2f8;
  --av-bg:#fff8e6;--av-bg2:#fffdf6;--av-b:#e3be5e;--av-b-h:#c99a2e;--av-tx:#5c430c;--av-sombra:rgba(60,40,0,.14);
  --novo:#fff6d6;--aprox:#7a5a00;--area-apur:#e6ddf2;
  --neutro:#d9d5cb;--neutro-b:#c9c4b8;--semdado:#e6e2d8;--semdado-b:#d3cec2}
/* a noite: grafite morno (nunca preto puro), texto de papel; as cores dos candidatos ficam — no TEXTO elas clareiam
   (--ctk: color-mix com branco) para o contraste do leitor mais velho; nas barras e no mapa, a cor cheia */
:root[data-tema="escuro"],[data-tema="escuro"]{color-scheme:dark;
  --bg:#17191c;--terra:#464b53;--card:rgba(30,32,36,.98);--ink:#edebe6;--mute:#aaa8a2;--line:#3a3d43;--acc:#6cb4e4;
  --ok:#5cc27f;--vivo:#e23a52;
  --mar:#101215;
  --sup:#1f2125;--btn:#272a2f;--sup2:#30343a;--sup3:#262a2f;
  --trilho:#3a3e45;--trilho-b:rgba(255,255,255,.04);--linha2:#2f3238;--borda2:#3a3d44;--borda-h:#646870;
  --ink2:#cfccc5;--mute2:#9a9893;--mute3:#706f6b;--cinza-f:#5d6168;
  --inv:#edebe6;--inv-tx:#141518;--aro:#1f2125;
  --sombra0:rgba(0,0,0,.3);--sombra1:rgba(0,0,0,.38);--sombra2:rgba(0,0,0,.5);--sombra-d:rgba(0,0,0,.55);
  --mud:#86c8f2;--mud-glow:rgba(110,180,230,.45);--ctk:62%;
  --apf1:#2a78b0;--apf2:#5aaee6;--marca:rgba(255,255,255,.16);--brilho:rgba(255,255,255,.22);--brilho2:rgba(255,255,255,.2);
  --listra1:#2a2d32;--listra2:#31353b;
  --roxo1:#6b4fc4;--roxo2:#a58bf0;--roxo-tx:#c8b6f6;
  --bp-tx:#cbbcff;--bp-bg:#2a2443;--bp-b:#54468f;--bp-bg-h:#342b57;--bp-b-h:#9d86ff;--bp-on:#6a4fe0;--bp-on-h:#7a60f0;
  --cap-b:#8a7a50;--cap-on:#8a6a1e;
  --bbr-b:rgba(108,180,228,.5);--bbr-h:#1d2c38;--sel:#1d2c38;
  --av-bg:#3a3014;--av-bg2:#4a3e1c;--av-b:#8c7128;--av-b-h:#b8932f;--av-tx:#f1d68f;--av-sombra:rgba(0,0,0,.4);
  --novo:#3d3517;--aprox:#e0b84a;--area-apur:#3a3150;
  --neutro:#666b73;--neutro-b:#767b83;--semdado:#4e535b;--semdado-b:#60656d}
*{box-sizing:border-box}
html,body{margin:0;height:100%;overflow:hidden}
body{background:var(--mar);color:var(--ink);font:16px/1.4 "Source Sans 3",system-ui,sans-serif;-webkit-text-size-adjust:100%}
button,select,input{font:inherit;color:inherit}
[hidden]{display:none!important}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.pula{position:fixed;left:-999px;top:8px;z-index:20;background:var(--inv);color:var(--inv-tx);padding:6px 10px;border-radius:6px}
.pula:focus{left:8px}
:focus-visible{outline:3px solid #ffbf47;outline-offset:2px}
#mapa{position:fixed;inset:0;width:100%;height:100%;display:block;cursor:grab;touch-action:none}
#mapa.arrasta{cursor:grabbing}
#realce{position:fixed;inset:0;width:100%;height:100%;display:block;pointer-events:none}   /* contorno do lugar sob o ponteiro: camada própria, o mapa não se redesenha a cada passada */
.flut{position:fixed;background:var(--card);border:1px solid var(--line);border-radius:12px;box-shadow:0 2px 14px var(--sombra1);z-index:3}

/* cabeçalho de noite de eleição (Admin 21/10 17h: "muito mais interessante", "com profissionalismo"): três faixas —
   o TOPO (de onde, qual página, de onde vem o dado | disputas e Projeção), o PLACAR (a disputa e a apuração numa grade só,
   trilhos alinhados) e os FILTROS. A busca, o painel e a régua leem a altura do #cab: nada aqui tem número fixo de posição. */
#cab{top:10px;left:10px;right:10px;padding:11px 14px 7px;display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;z-index:4}   /* acima do painel: o balão do zoom e o menu de fontes descem por cima dele */
.cab-a{display:flex;align-items:center;gap:14px;position:relative;min-width:0;order:0}
.volta{color:var(--acc);text-decoration:none;font-weight:600;white-space:nowrap;font-size:15px;padding-right:14px;border-right:1px solid var(--line);line-height:24px}
.volta:hover{text-decoration:underline;text-underline-offset:3px}
h1{font-size:21px;margin:0;font-weight:800;letter-spacing:-.015em;white-space:nowrap;line-height:1.15}
h1 small{font-weight:600;color:var(--mute);font-size:15px;margin-left:8px;letter-spacing:0}
.st{border:1px solid var(--line);background:var(--btn);border-radius:999px;padding:3px 12px 3px 10px;font-size:14px;font-weight:700;cursor:pointer;white-space:nowrap}
.st .pt{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:6px;vertical-align:1px;background:var(--mute3)}
.st.vivo .pt{background:var(--vivo);animation:pulsa 1.6s infinite}
.st.ens .pt{background:#e0a100}
.st.real .pt{background:var(--mute)}
.st.parado{border-color:#e0a100}   /* mapa parado, reconectando, sem internet (P0-3/4, 23/10): o ponto âmbar, parado — não é AO VIVO */
.st.parado .pt{background:#e0a100;animation:none}
.st .h{font-weight:600;color:var(--mute);margin-left:6px}
@keyframes pulsa{0%{box-shadow:0 0 0 0 rgba(200,16,46,.55)}70%{box-shadow:0 0 0 7px rgba(200,16,46,0)}100%{box-shadow:0 0 0 0 rgba(200,16,46,0)}}
.menu{position:absolute;top:calc(100% + 8px);left:0;z-index:10;background:var(--sup);border:1px solid var(--line);border-radius:10px;box-shadow:0 6px 24px var(--sombra2);padding:8px;width:min(420px,90vw)}
.menu button{display:block;width:100%;text-align:left;border:0;background:none;padding:8px 10px;border-radius:8px;cursor:pointer;font-size:15px}
.menu button:hover,.menu button[aria-current="true"]{background:var(--sup2)}
.menu .nota{margin:2px 10px 6px;color:var(--mute);font-size:13px}
#disp{display:flex;flex-wrap:wrap;align-items:center;gap:4px;margin-left:auto;order:1}
#disp .sep{color:var(--mute);font-size:13px;font-weight:600;margin:0 2px 0 8px;text-transform:uppercase;letter-spacing:.04em}
#disp button,.grp button{border:1px solid var(--line);background:var(--btn);border-radius:8px;padding:4px 10px;cursor:pointer;font-weight:600;font-size:15px;min-height:34px}
#disp button[aria-pressed="true"],.grp button[aria-pressed="true"]{background:var(--inv);color:var(--inv-tx);border-color:var(--inv)}
#disp button.cap{border-color:var(--cap-b)}
#disp button.cap[aria-pressed="true"]{background:var(--cap-on);border-color:var(--cap-on);color:#fff}
#disp button:disabled,.grp button:disabled{opacity:.4;cursor:default}
/* o botão da Projeção saiu do cabeçalho (Admin 23/10 14h): a Projeção é a tela principal e a troca de tela é pelas ABAS nas bordas
   (projecao/painel.css .aba) e pela tecla P; o leque da noite mora na aba "Veja a projeção" (#aba-proj) */

/* O PLACAR (Admin 21/10 17h: "barras desalinhadas", "fotinhos muito pequenas", "o número da apuração à direita da barra").
   Uma grade só, de cinco colunas — foto | nome e % | trilho | nome e % | foto — e três linhas — nomes | % e trilho da disputa |
   apuração. A disputa (#pcab) e a apuração (#apur) são só agrupamentos (display:contents): seus filhos moram na MESMA grade,
   então os dois trilhos começam e terminam no mesmo pixel, o texto de cada lado encosta no trilho e a % das seções fica à
   direita do trilho dela, na coluna da % de quem está à direita. As fotos atravessam as três linhas (no celular, as duas de
   cima). Tamanhos em variáveis, por largura de tela, mais abaixo.
   MAIS BAIXO (Admin 22/10 19h49: "diminuir o tamanho do cabeçalho em que aparecem o Lula e o Flávio e as seções apuradas,
   assim os outros elementos da página ganham mais fôlego"): os botões saíram da linha de cima (foram para a faixa do
   título), o nome e a % ficam numa linha só, colados no trilho — sete colunas: foto | nome | % | trilho | % | nome | foto —,
   a linha de cima é só a legenda do trilho (14 px), fotos de 56 px, as % de 28 px e a das seções de 22 px (leitor mais
   velho: nada de número miúdo), menos ar entre as linhas. No computador o placar caiu de 142 para ~86 px. */
.placar{order:5;flex:1 1 100%;min-width:0;display:grid;grid-template-columns:auto max-content max-content minmax(0,1fr) max-content max-content auto;grid-template-rows:auto auto auto;
  column-gap:var(--pg);row-gap:2px;align-items:center;border-top:1px solid var(--line);padding:5px 0 4px;margin-top:4px;   /* ar para os círculos de 48 px da faixa do título (que transbordam 7 px da linha de 34) */
  --pf:56px;--anel:4px;--pg:14px;--vf:28px;--nf:17px;--bh:14px;--af:22px;--abh:9px;--r3:3px}
.pcab,.apur{display:contents}
.pcab>*{cursor:pointer}
.cp-ft{grid-row:1/4;align-self:center;padding:var(--anel);line-height:0}
.cp-ft.a{grid-column:1}.cp-ft.b{grid-column:7}
.cp-ft .pq{display:block;border-radius:50%}
.ft.pc{width:var(--pf);height:var(--pf);box-shadow:0 0 0 2px var(--aro),0 0 0 var(--anel) var(--c)}
.cp-ft .pq:hover .ft.pc,.cp-ft .pq:focus-visible .ft.pc{transform:scale(1.04);box-shadow:0 0 0 2px var(--aro),0 0 0 var(--anel) var(--c),0 6px 16px var(--sombra2)}
.cp-nm{grid-row:2;line-height:1.15;white-space:nowrap;min-width:0}
.cp-nm.a{grid-column:2;justify-self:start}.cp-nm.b{grid-column:6;justify-self:end}
.cp-nm b{font-size:var(--nf);font-weight:700;letter-spacing:-.005em;color:var(--ink)}
.cp-nm .pq:hover b,.cp-nm .pq:focus-visible b{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}
.cp-v{grid-row:2;align-self:center;min-width:3.42em;font-size:var(--vf);font-weight:800;line-height:1;letter-spacing:-.02em;font-variant-numeric:tabular-nums;white-space:nowrap}
.cp-v.a{grid-column:3;justify-self:end;text-align:right}.cp-v.b{grid-column:5;justify-self:start;text-align:left}
.cp-v small{font-size:.62em;font-weight:700;margin-left:.06em;letter-spacing:0}
.cp-v span{transition:text-shadow .6s ease}
.pcab .mudando{text-shadow:0 0 12px var(--mud-glow)}
.cp-v .mudando{color:inherit}   /* a % de cada um anda na cor dele (o .mudando genérico pintava a de Lula de azul nos 20 s) */
.cp-t{grid-column:4;grid-row:1;justify-self:center;max-width:100%;margin:0;transition:opacity .3s ease;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;line-height:1.2;color:var(--mute);padding-bottom:1px;font-variant-numeric:tabular-nums}
.cp-t b{color:var(--ink);font-weight:700}
/* o trilho da disputa: no centro da linha do número (line-height 1: o meio da caixa é o meio dos algarismos) */
.cp-br{grid-column:4;grid-row:2;align-self:center;position:relative;height:var(--bh)}
.cp-tr{display:flex;height:100%;border-radius:999px;overflow:hidden;background:var(--trilho);box-shadow:inset 0 0 0 1px var(--trilho-b)}
.cp-tr i{display:block;height:100%}
.cp-tr i:first-child{box-shadow:1.5px 0 0 var(--aro)}
.cp-meio{position:absolute;left:50%;top:-5px;bottom:-5px;width:2px;margin-left:-1px;border-radius:1px;background:var(--ink)}
/* a apuração (3ª linha): rótulo à esquerda do trilho, número à direita, os três no mesmo eixo */
.apur>*{grid-row:3;align-self:center;margin-top:var(--r3)}
.apur .ap-l{grid-column:2/4;justify-self:end;text-align:right;line-height:1.2;white-space:nowrap}
.apur .ap-l b{display:block;font-size:14px;font-weight:700;color:var(--ink)}
.apur .ap-t{display:none}
.apur .ap-b{grid-column:4;position:relative;height:var(--abh);border-radius:999px;background:var(--trilho);overflow:hidden;box-shadow:inset 0 0 0 1px var(--trilho-b)}
.apur .ap-f{position:absolute;left:0;top:0;bottom:0;border-radius:999px;background:linear-gradient(90deg,var(--apf1),var(--apf2));text-shadow:none}
.apur .ap-f::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,var(--brilho),transparent);opacity:0;transition:opacity .6s}
.apur .ap-f.mudando::after{opacity:1;animation:faixa-brilho 2.4s linear infinite}
.apur .ap-ponta{position:absolute;right:0;top:0;bottom:0;width:12px;border-radius:999px;background:#fff;opacity:0;transition:opacity .6s}
.apur .ap-f.mudando .ap-ponta{opacity:.95;animation:ap-ponta 1.2s ease-in-out infinite}
@keyframes ap-ponta{50%{opacity:.35}}
/* marcos 25/50/75: um risco no trilho que acende (fica branco) quando o enchimento passa por ele */
.apur .ap-m{position:absolute;top:0;bottom:0;width:2px;margin-left:-1px;background:var(--marca);transition:background .6s}
.apur .ap-m.on{background:rgba(255,255,255,.8)}
.apur .ap-n{grid-column:5/7;justify-self:start;white-space:nowrap;line-height:1;font-variant-numeric:tabular-nums;color:var(--ink)}
.apur .ap-v{font-size:var(--af);font-weight:800;letter-spacing:-.02em;transition:color .6s ease,text-shadow .6s ease}
.apur .ap-v.mudando{color:var(--mud);text-shadow:0 0 16px var(--mud-glow)}
.apur .ap-pc{font-size:calc(var(--af) * .62);font-weight:700;margin-left:.06em}
/* antes da 1ª seção: o trilho vazio fica alto o bastante para dizer, dentro dele, quando a apuração começa */
.apur.antes .ap-b{height:calc(var(--abh) + 13px);background:repeating-linear-gradient(-45deg,var(--listra1) 0 8px,var(--listra2) 8px 16px);display:flex;align-items:center;justify-content:center}
.apur.antes .ap-m{display:none}
.apur .ap-msg{position:relative;font-size:14px;font-weight:600;color:var(--ink2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 10px}
.apur.antes .ap-v{color:var(--mute)}
/* BRASIL e ATUALIZAR (Admin 21/10 20h44: "um botão fácil de voltar para ver a visualização do BR"; "um botão visível para
   atualizar"). Desde 22/10 19h49 ("transfira os três ícones para o cabeçalho"), na FAIXA DO TÍTULO, depois da Projeção:
   Brasil (só fora da vista Brasil — o lugar fica guardado, nada se mexe quando ele entra), Atualizar, Modo foco e Tema. Os
   círculos têm 48 px, mas a faixa não cresce por eles: a margem negativa os deixa ocupar só a altura das pílulas (34 px).
   No celular eles dividem a faixa da Projeção. A confirmação do Atualizar ("atualizado às 20:45") entra no lugar da legenda
   do trilho por ~4 s.
   Família da lupa (Admin 22/10: "o botão de atualizar está fora do padrão. O ícone de referência é o da lupinha"): um
   OBJETO desenhado de 32 px — o tamanho do desenho da lupa, com o mesmo peso de traço. Desde 22/10 16h40 ("são iguais a
   lupinha, auto-explicativos"), Atualizar e Modo foco ficam lado a lado e SEM rótulo: dois círculos de 48 px, a medida do
   botão da lupa; o nome mora no title e no leitor de tela (.sr). O Atualizar é "a releitura": no vidro, o mesmo mosaico do mapa da lupa; em
   volta, a seta de recarregar em tinta, do peso do aro dela. Mouse: a seta adianta 40° (gesto, 0,4 s). Lendo (.lendo):
   a seta dá a volta no mapa, uma volta a cada 2,4 s — passo de quem lê, não de quem tem pressa — e, quando a leitura
   acaba, PARA onde está (animation-play-state): nunca volta ao zero de um salto. */
.cp-bt{order:3;align-self:center;margin:-7px 0;flex:none;display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 18px 0 5px;
  border:1px solid var(--line);border-radius:999px;background:var(--btn);color:var(--ink);font:700 17px/1.1 "Source Sans 3",system-ui,sans-serif;cursor:pointer;white-space:nowrap;
  box-shadow:0 1px 4px var(--sombra0);transition:border-color .15s,box-shadow .3s,opacity .3s ease,transform .3s ease,visibility .3s}
.cp-bt svg{width:32px;height:32px;flex:none;overflow:visible}
@media (hover:hover){.cp-bt:hover{border-color:var(--borda-h);box-shadow:0 6px 22px var(--sombra2)}}
/* O BRASIL (Admin 22/10 18h40: "o ícone Brasil está com um design clichê antigo"): a casinha saiu; o desenho é o PRÓPRIO
   país — o contorno do Brasil (a malha IBGE da página) em tinta e, dentro dele, o mosaico do mapa: o 2º turno de 2022 em
   miniatura (os votos dos 5.570 municípios somados em 21 células; Lula no vermelho, Bolsonaro no azul). Círculo de 48 px
   sem rótulo, como o Atualizar e o Modo foco; o nome mora no title e no .sr. Parado, o mosaico está aproximado (como a
   página quando se está num lugar); no mouse ou no foco do teclado, a câmera se afasta: o mapa recua até caber o país
   inteiro (0,4 s), que é o que o clique faz. É a lupa ao contrário: a lupa aberta aproxima o mapa; o Brasil afasta. A
   borda azul (--acc) fica: é o caminho de volta. Com movimento reduzido, parado no desenho de repouso. */
.bbr{color:var(--ink);border-color:var(--bbr-b)}
@media (hover:hover){.bbr:hover{background:var(--bbr-h);border-color:var(--acc)}}
.bbr:not(.on){visibility:hidden;opacity:0;transform:translateX(-6px);pointer-events:none}
.bbr svg{width:37px;height:37px}   /* o país tem 32 px de largura: a massa do desenho dos vizinhos */
.bbr .br-mapa{transform-origin:19px 15.5px;transform:scale(1.26);transition:transform .4s cubic-bezier(.3,.7,.3,1)}
@media (prefers-reduced-motion:no-preference){.bbr:focus-visible .br-mapa{transform:none}}
@media (hover:hover) and (prefers-reduced-motion:no-preference){.bbr:hover .br-mapa{transform:none}}
.cp-acoes{order:3;align-self:center;margin:-7px 0;flex:none;display:inline-flex;gap:8px}
.cp-acoes .cp-bt{margin:0}
.cp-bt.cp-ic{width:48px;height:48px;min-height:0;padding:0;gap:0;justify-content:center;border-radius:50%}
.batu .at-seta,.batu .at-giro{transform-origin:16px 16px}
.batu .at-seta{transition:transform .4s cubic-bezier(.3,.7,.3,1)}
.batu .at-giro{animation:at-giro 2.4s linear infinite paused}
@media (hover:hover){.batu:hover .at-seta{transform:rotate(40deg)}}
.batu.lendo{cursor:progress}
.batu.lendo .at-giro{animation-play-state:running}
@keyframes at-giro{to{transform:rotate(360deg)}}
.cp-ok{grid-row:1;grid-column:4;justify-self:center;align-self:end;margin:0;padding-bottom:1px;display:inline-flex;align-items:center;gap:5px;font-size:14px;font-weight:700;line-height:1.2;
  color:var(--ok);white-space:nowrap;opacity:0;transition:opacity .3s ease;pointer-events:none}
.cp-ok svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2.8;stroke-linecap:round;stroke-linejoin:round}
.placar.ok .cp-ok{opacity:1}
.placar.ok .cp-t{opacity:0}
/* filtros: uma faixa comprida DENTRO do cabeçalho (Admin 20/10: "o retângulo dos filtros ocupa muito espaço") */
#ctl{order:9;flex-basis:100%;display:flex;flex-wrap:wrap;align-items:center;gap:4px 14px;border-top:1px solid var(--line);padding-top:6px;margin-top:2px}
.grp{display:flex;flex-wrap:wrap;align-items:center;gap:4px}
.grp .rot{font-size:13px;font-weight:700;color:var(--mute);text-transform:uppercase;letter-spacing:.05em;margin-right:2px}
.grp button{font-size:14px;padding:2px 9px;min-height:30px}
#leg{margin-left:auto}
.leg .exp{display:none}
@media (min-width:1700px){.leg .exp{display:block}}
.leg{font-size:13px;color:var(--mute);display:flex;flex-wrap:wrap;align-items:center;gap:2px 10px}
.tic{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--line);background:var(--btn);border-radius:8px;padding:3px 10px;font-weight:600;font-size:14px;cursor:pointer;min-height:30px;user-select:none}
.tic input{width:16px;height:16px;margin:0;accent-color:var(--ink);cursor:pointer}
#dica-sec{position:fixed;left:calc((100vw - 420px) / 2);bottom:66px;transition:left .55s cubic-bezier(.65,0,.35,1);transform:translateX(-50%);background:rgba(29,29,31,.78);color:#fff;font-size:13px;font-weight:600;padding:4px 12px;border-radius:999px;z-index:4;pointer-events:none;white-space:nowrap}
#dica-sec:empty{display:none}
.tic{padding:2px 8px}
.grp-cel{display:none;gap:8px;margin-bottom:4px;font-size:13px;font-weight:700;color:var(--mute)}
.grp-cel select{border:1px solid var(--line);border-radius:7px;background:var(--btn);padding:2px 4px;font-size:14px;font-weight:600;color:var(--ink);max-width:44vw}
.leg .esc{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.leg .sw{display:inline-flex;height:12px}
.leg .sw i{display:inline-block;width:18px;height:12px}
.leg .nm{font-weight:700;color:var(--ink)}
.leg .cin{display:inline-block;width:12px;height:12px;background:var(--neutro);border:1px solid var(--neutro-b);vertical-align:-1px;margin-right:4px}

/* painel de resultados */
#lado{right:10px;top:70px;bottom:10px;width:400px;display:flex;flex-direction:column;transition:transform .55s cubic-bezier(.65,0,.35,1)}
#lado-c{overflow-y:auto;padding:12px 14px 16px;flex:1;overscroll-behavior:contain;border-radius:12px}
.recolhe{position:absolute;left:-30px;top:18px;width:30px;height:56px;border:1px solid var(--line);border-right:0;border-radius:10px 0 0 10px;background:var(--card);box-shadow:-3px 2px 10px var(--sombra1);cursor:pointer;font-size:22px;font-weight:800;color:var(--ink2);padding:0;display:flex;align-items:center;justify-content:center}
.recolhe span{display:inline-block;transition:transform .55s cubic-bezier(.65,0,.35,1)}
.recolhe:hover{background:var(--sup);color:var(--ink)}
body.recolhido #lado{transform:translateX(calc(100% + 10px))}
body.recolhido .recolhe span{transform:rotate(180deg)}
#zoom,#ens{transition:right .55s cubic-bezier(.65,0,.35,1)}
body.recolhido #zoom{right:40px}
body.recolhido #ens{right:52px}
body.recolhido #dica-sec{left:calc((100vw - 46px) / 2)}
.blado{display:none}
.copia{float:right;margin:-2px 0 0 8px}
.trilha{font-size:14px;color:var(--mute);margin-bottom:8px;line-height:1.5}
.trilha a{color:var(--acc);text-decoration:none;font-weight:600;cursor:pointer}
.trilha b{color:var(--ink)}
h2{font-size:19px;margin:0 0 6px;font-weight:800}
h3{font-size:15px;margin:16px 0 6px;font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:var(--ink2)}
.nota{color:var(--mute);font-size:13px}
.pl{margin:2px 0 6px}
.pl-cands{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.pl-c{border-top:5px solid var(--c);padding-top:5px}
.pl-c.b{text-align:right}
.pl-nome{font-weight:700;font-size:15px;display:block;line-height:1.15}
.pl-nome small{font-weight:600;color:var(--mute);font-size:12px}
.pl-pc{font-size:34px;font-weight:800;letter-spacing:-.02em;font-variant-numeric:tabular-nums;line-height:1.05;display:block}
.pl-v{display:block;min-height:1.4em;font-size:14px;color:var(--mute);font-variant-numeric:tabular-nums}   /* a linha dos votos existe antes do 1º voto: nada desce quando ele chega */
.pl-barra{position:relative;height:18px;border-radius:9px;overflow:hidden;background:var(--trilho);margin:10px 0 4px;display:flex}
.pl-barra i{display:block;height:100%}
/* número correndo: como no acompanhamento local do 1º turno — fica azul e brilha durante a trajetória inteira */
[data-tw]{transition:color .6s ease,text-shadow .6s ease}
.mudando{color:var(--mud);text-shadow:0 0 10px var(--mud-glow)}
.pl-c .pl-pc.mudando{color:color-mix(in oklab,var(--c) var(--ctk),#fff);text-shadow:0 0 12px var(--mud-glow)}
.pl-barra i.o{background:var(--cinza-f)}
.pl-barra .meio{position:absolute;left:50%;top:-2px;bottom:-2px;width:2px;background:var(--ink);opacity:.65}
.pl-dif{font-size:15px;margin:4px 0}
.pl-dif b{font-weight:800}
.prog{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--mute);margin:6px 0 2px}
.prog .tr{flex:1;height:6px;background:var(--trilho);border-radius:3px;overflow:hidden}
.prog .tr{position:relative}
.prog .tr i{display:block;height:100%;background:linear-gradient(90deg,var(--roxo1),var(--roxo2));position:relative;overflow:hidden}
.prog .tr i::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,var(--brilho),transparent);animation:faixa-brilho 2.4s linear infinite}
@keyframes faixa-brilho{from{transform:translateX(-100%)}to{transform:translateX(100%)}}
.prog b{color:var(--ink);font-variant-numeric:tabular-nums}
.selo{display:inline-block;font-size:12px;font-weight:800;letter-spacing:.04em;padding:2px 8px;border-radius:999px;color:#fff;vertical-align:2px;margin-left:6px}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0}
.chip{border:1px solid var(--line);background:var(--btn);border-radius:999px;padding:2px 10px;font-size:13px;cursor:pointer}
table{width:100%;border-collapse:collapse;font-size:14px;font-variant-numeric:tabular-nums}
th{text-align:left;font-size:13px;color:var(--mute);font-weight:700;letter-spacing:0;padding:4px 4px;border-bottom:1px solid var(--line);position:sticky;top:-12px;background:var(--sup);cursor:pointer;user-select:none}
th.n,td.n{text-align:right}
td{padding:5px 4px;border-bottom:1px solid var(--linha2);vertical-align:middle}
tr.cl{cursor:pointer}
tr.cl:hover td{background:var(--sup3)}
td .mini{display:flex;height:8px;width:86px;border-radius:4px;overflow:hidden;background:var(--trilho);margin-left:auto}
td .mini i{display:block;height:100%}
td .ap{color:var(--mute);font-size:13px}
/* A TABELA DO PAINEL (Admin 21/10 19h15: "os números, as barras estão encavalados. Tudo deve caber numa mesma linha
   horizontal e inclusive com duas casas depois da vírgula"). Uma linha por lugar, numa linha de base só:
   nome | % de quem está à esquerda | barra | % de quem está à direita | apurado — a ordem do placar do cabeçalho, cada %
   encostada na barra do lado do seu candidato. As colunas dos números têm largura FIXA (cabem "43,21", "100" e "99,99%"
   em 14 px tabular): o número chega, o "–" vira "0,00" e sobe, e nada na linha nem nas barras das outras linhas se mexe.
   A barra fica com o que sobra (≥ 64 px no celular de 390, 80 a 95 no painel de 400), o nome corta com reticências só além
   de 136 px (o nome inteiro no title) — todo nome de estado cabe. Altura fixa de 34 px por linha. */
.tb{table-layout:auto}
.tb td{height:34px;padding:0;line-height:20px;white-space:nowrap}
.tb th{white-space:nowrap;padding:4px 0}
.tb .tb-nm{width:1px;padding-left:2px;padding-right:10px}
.tb td.tb-nm .lk{display:block;max-width:136px;overflow:hidden;text-overflow:ellipsis}
.tb .tb-v{width:40px;padding-right:6px;text-align:right;font-weight:700}
.tb .tb-vb{padding:0 0 0 6px;text-align:left}
.tb-v span{color:color-mix(in oklab,var(--c) var(--ctk),#fff)}
.tb .tb-b{width:100%;min-width:60px}
.tb .tb-ap{width:60px;padding-left:10px;padding-right:2px;text-align:right}
.tb .lk{font-weight:600}
.tb .z{color:var(--mute);font-weight:600}   /* "0%": dado, legível */
.tb-v .z{color:var(--mute3)}   /* o "–" de quem ainda não tem voto: só marca o lugar, discreto */
.tb-ab div{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.tb-ab span{font-size:14px;font-weight:800;text-transform:none;letter-spacing:0;white-space:nowrap}
.tb-bar{position:relative;display:flex;height:10px;border-radius:5px;background-color:var(--trilho)}
.tb-bar i{display:block;height:100%;border-radius:5px 0 0 5px}
.tb-bar i+i{margin-left:auto;border-radius:0 5px 5px 0}
.tb-bar::after{content:"";position:absolute;left:50%;top:-3px;bottom:-3px;width:2px;margin-left:-1px;border-radius:1px;background:color-mix(in srgb,var(--ink) 45%,transparent)}   /* o meio: quem passa dele lidera */
.tb-v .mudando{color:color-mix(in oklab,var(--c) var(--ctk),#fff);text-shadow:0 0 9px color-mix(in srgb,var(--c) 40%,transparent)}
.tb-ap .mudando{color:var(--ink);text-shadow:0 0 9px var(--mud-glow)}
/* o "chegando" da 1ª leitura (st.js brilho()): enquanto a curva suave ainda não se mexe (os primeiros 4 a 5 s de 20), uma
   luz corre o trilho cinza no sentido da leitura, 4 passadas de 1,8 s, e para antes de as cores andarem de verdade. Fica só
   no cinza: as cores que crescem por cima a escondem. --dl negativo põe o trilho redesenhado na mesma fase dos outros. */
.prim-tr,.apur .ap-b.prim-tr{background-image:linear-gradient(90deg,transparent,var(--brilho2),transparent);background-repeat:no-repeat;background-size:38% 100%;background-position:-80% 0;
  animation:prim-brilho 1.8s cubic-bezier(.45,0,.55,1) var(--dl,0s) 4 both}
@keyframes prim-brilho{from{background-position:-80% 0}to{background-position:180% 0}}
a.lk{color:inherit;text-decoration:none;font-weight:600}
a.lk:hover{text-decoration:underline}
.feed{list-style:none;margin:0;padding:0;font-size:14px}
.feed li{padding:6px 0;border-bottom:1px solid var(--linha2);display:grid;grid-template-columns:52px 1fr;gap:6px;animation:entra var(--trans,20s) cubic-bezier(.83,0,.17,1) both}   /* a novidade apaga no relógio do balé (TRANS, curva ≈ easeInOutQuint); o atraso negativo no li põe a linha no ponto certo */
.feed .h{color:var(--mute);font-variant-numeric:tabular-nums;font-size:13px}
.feed .f{cursor:pointer}
@keyframes entra{from{background:var(--novo)}to{background:transparent}}
.grafico svg{width:100%;height:auto;display:block}
.g-cab{margin:-4px 0 4px;text-align:right}
.capgrid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.capc{border:1px solid var(--line);border-radius:10px;padding:7px 9px;cursor:pointer;background:var(--btn);text-align:left}
.capc:hover{border-color:var(--borda-h)}
.capc .t{font-weight:700;font-size:14px;display:flex;justify-content:space-between;gap:4px}
.capc .t span{color:var(--mute);font-weight:600}
.capc .mini{display:flex;height:8px;border-radius:4px;overflow:hidden;background:var(--trilho);width:100%;margin:5px 0 3px}
.capc .mini i{display:block;height:100%}
.capc .s{font-size:12px;color:var(--mute)}
.secs{display:grid;grid-template-columns:repeat(auto-fill,minmax(64px,1fr));gap:4px;margin:6px 0}
.sq{border:1px solid var(--line);border-radius:6px;padding:3px 4px;font-size:12px;line-height:1.2;cursor:pointer;background:var(--sup3)}
.sq b{display:block;font-size:13px}
.sq.ok{border-color:transparent;color:#fff}
.sq.esp{background:repeating-linear-gradient(45deg,var(--listra1),var(--listra1) 4px,var(--listra2) 4px,var(--listra2) 8px)}
.bu{background:var(--sup3);border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:14px;margin:6px 0}
/* crédito de uma linha no pé do painel (Admin 21/10 17h25): discreto, mas legível (13 px, contraste AA) — a ODbL pede a atribuição visível */
.fonte{font-size:13px;color:var(--mute);margin:22px 0 0;line-height:1.4}
.fonte a{color:inherit;text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--mute) 45%,transparent);text-underline-offset:2px}
.fonte a:hover{color:var(--ink);text-decoration-color:currentColor}

#ens{left:10px;right:432px;bottom:10px;padding:6px 10px;display:flex;align-items:center;gap:8px;font-size:14px}
#ens .tag{background:#e0a100;color:#fff;font-weight:800;font-size:12px;letter-spacing:.06em;padding:2px 8px;border-radius:999px}
#ens button,#ens select{border:1px solid var(--line);background:var(--btn);border-radius:7px;padding:2px 8px;cursor:pointer;min-height:30px}
#ens .rel{font-weight:800;font-variant-numeric:tabular-nums;font-size:17px;min-width:70px}
#ens .play{background:#1b7f3b;color:#fff;border-color:#1b7f3b;font-weight:800;padding:2px 12px;min-width:104px}
#ens .play.rodando{background:var(--btn);color:var(--ink);border-color:var(--line)}
#ens .prox{color:var(--mute);font-size:13px;min-width:150px;font-variant-numeric:tabular-nums}
.st.ens.roda .pt{animation:pulsa 1.6s infinite}
#ens input{flex:1;min-width:80px;width:auto}
@media (max-width:1300px){#ens .prox{display:none}}
/* a mesma barra no AO VIVO (Admin 21/10 19h35): polegar no fim seguindo o dado; arrastar para trás é voltar no tempo.
   O botão da direita é o estado ("agora", com o ponto que pulsa) ou a saída do passado ("às 18:45 · voltar ao vivo"),
   sempre com a MESMA largura: a régua nunca muda de tamanho debaixo do dedo enquanto se arrasta. */
#ens.vivo .tag{background:var(--vivo)}
#ens.vivo.passado .tag{background:var(--btn);color:var(--vivo);box-shadow:inset 0 0 0 1.5px var(--vivo)}
#ens.vivo .play:disabled{background:var(--sup2);color:var(--mute3);border-color:var(--line);cursor:default}
#ens.vivo .prox{display:none}   /* a dica vira o title da régua: texto que liga e desliga mudaria a largura da régua no meio do arrasto */
#ens.vivo #e-zero{min-width:178px;font-weight:700;white-space:nowrap}
#ens.vivo #e-zero:disabled{background:none;border-color:transparent;color:var(--vivo);cursor:default;text-align:left}
#ens.vivo #e-zero .pt{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:1px;background:var(--vivo);animation:pulsa 1.6s infinite}
#ens.vivo.passado #e-zero{background:var(--vivo);border-color:var(--vivo);color:#fff}
#ens.vivo.passado #e-zero:hover{background:#a50d26}
#ens.vivo input:disabled{opacity:.45}
.st.passado .pt{background:var(--btn);box-shadow:inset 0 0 0 2px var(--vivo)}
.st.passado{border-color:var(--vivo)}
/* O ENDEREÇO NA TELA (22/10: no 1º turno, o chat das lives perguntava "qual site é esse?" ao ver a tela — o endereço no
   quadro é o que transforma cada live em divulgação). No canto de baixo à esquerda, fixo em toda vista — mapa, modo foco,
   Projeção (que para a 70 px do pé) —, na faixa da barra da simulação, que anda para a direita para dar lugar a ele.
   Família da lupa: pílula de 44 px com o vidro da casa (o mosaico do mapa, aro de tinta) e o endereço em 18 px, tinta
   sobre branco. Não é botão: sem mouse, sem sombra que sobe; o mapa por baixo continua arrastável. No celular, no pé da
   faixa: à esquerda da alça da gaveta de resultados (.lado-end), que vai para a direita. */
#ender{left:10px;bottom:10px;margin:0;display:flex;align-items:center;gap:8px;min-height:44px;padding:0 18px 0 5px;border-radius:999px;
  font-size:18px;font-weight:600;line-height:1.1;letter-spacing:-.005em;color:var(--ink);white-space:nowrap;pointer-events:none}
#ender b,.lado-end b{font-weight:800}
#ender svg{width:32px;height:32px;flex:none}
:root{--end-w:262px}   /* a largura medida do #ender (18 px): a barra da simulação começa depois dele */
#ens{left:calc(20px + var(--end-w))}
#ender{transition:transform .55s cubic-bezier(.65,0,.35,1)}   /* o relógio do carrossel da Projeção */
/* 901–1259 px, no mapa: a barra não cabe ao lado dele (precisa de ~540 px) — ela volta à borda e o endereço sobe para logo
   acima dela; na Projeção (barra até a borda direita) os dois voltam lado a lado, no mesmo passo do carrossel */
@media (min-width:901px) and (max-width:1259px){
  body:not(.em-proj) #ens{left:10px}
  #ens{transition:right .55s cubic-bezier(.65,0,.35,1),left .55s cubic-bezier(.65,0,.35,1)}
  body:not(.em-proj):has(#ens:not([hidden])) #ender{transform:translateY(-52px)}
}
.lado-end{display:none}
#zoom{right:422px;bottom:64px;display:flex;flex-direction:column;overflow:hidden}
#zoom button{border:0;background:var(--btn);color:var(--ink);width:38px;height:36px;font-size:20px;cursor:pointer;border-bottom:1px solid var(--line)}
#zoom button:last-child{border-bottom:0;font-size:17px}
/* dica (hover) — muda conforme a pintura; cartão leve, entrada curta (150 ms), seta do cabo de guerra corre do antes ao agora */
#dica{position:fixed;z-index:9;pointer-events:none;width:346px;background:var(--sup);border:1px solid var(--borda2);border-radius:14px;box-shadow:0 14px 36px var(--sombra-d),0 2px 6px var(--sombra0);padding:13px 15px 14px;font-size:15px;display:none;line-height:1.35;opacity:0;transform:translateY(5px);transition:opacity .3s ease-out,transform .3s ease-out}   /* entra em fade de 0,3 s, depois da espera de 0,8 s (st.js DICA_ESPERA) */
#dica.on{opacity:1;transform:none}
.dc-cab{display:flex;justify-content:space-between;align-items:baseline;gap:10px;margin-bottom:8px}
.dc-nome{font-weight:800;font-size:19px;letter-spacing:-.01em;line-height:1.2}
.dc-sub{font-size:13px;font-weight:600;color:var(--mute);white-space:nowrap}
.dc-l{display:grid;grid-template-columns:9px 1fr auto auto;align-items:center;gap:8px;font-variant-numeric:tabular-nums;margin:4px 0;font-size:16px}
.dc-l i{width:9px;height:9px;border-radius:2px}
.dc-l b{font-size:20px;font-weight:800}
.dc-l em{font-style:normal;font-size:14px;color:var(--ink2);min-width:76px;text-align:right}
.dc-split{position:relative;display:flex;height:8px;border-radius:4px;overflow:hidden;background:var(--trilho);margin:6px 0 4px}
.dc-split i{display:block;height:100%}
.dc-split b{position:absolute;left:50%;top:-2px;bottom:-2px;width:2px;background:var(--ink);opacity:.55}
.dc-frase{margin:4px 0 0;font-size:15px}
.dc-tr{flex:0 0 70px;height:5px;border-radius:3px;background:var(--trilho);overflow:hidden;display:block}
.dc-tr i{display:block;height:100%;background:linear-gradient(90deg,var(--roxo1),var(--roxo2))}
.dc-tr-g{flex:none;height:9px;border-radius:5px;margin:4px 0 6px;position:relative}
.dc-tr-g i{position:relative;overflow:hidden}
.dc-tr-g i::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,var(--brilho),transparent);animation:faixa-brilho 2.4s linear infinite}
.dc-big{display:flex;align-items:baseline;gap:8px}
.dc-big b{font-size:32px;font-weight:800;letter-spacing:-.02em;color:var(--roxo-tx);font-variant-numeric:tabular-nums}
.dc-big span{font-size:15px;color:var(--ink2)}
.dc-nota{margin:4px 0;font-size:15px;color:var(--ink2);font-variant-numeric:tabular-nums}
.dc-vazio{margin:4px 0;color:var(--ink2);font-size:15px}
.dc-delta{border-left:4px solid var(--c);padding:2px 0 2px 10px;margin:2px 0 6px}
.dc-delta b{display:block;font-size:20px;font-weight:800;color:color-mix(in oklab,var(--c) var(--ctk),#fff);line-height:1.2}
.dc-delta span{font-size:14.5px;color:var(--ink2)}
.dc-delta.neutro{border-color:var(--cinza-f)}
.dc-delta.neutro b{color:var(--ink2)}
.dc-cabo{width:100%;height:auto;display:block;margin:0 0 2px}
.dc-pontas{display:flex;justify-content:space-between;font-size:14px;font-weight:800;margin:8px 2px -2px}
.dc-pontas .m{color:var(--mute2);font-weight:700}
.dc-t{font-family:"Source Sans 3",system-ui,sans-serif;font-size:13.5px;font-weight:700;fill:var(--ink2)}
.dc-t.n{fill:var(--ink)}
.dc-t.p{font-size:10.5px;font-weight:800}
.dc-seta{stroke-width:2.6;fill:none;stroke-linecap:round}
.dc-ponta{stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round;opacity:0}
/* a seta (Admin 20/10): corre em 3 s por cima das bolinhas, a ponta chega, a bolinha de agora pulsa, e a seta some num
   fade de 2 s — o antes e o agora ficam */
#dica.on .dc-seta{animation:dc-corre 3s cubic-bezier(.45,0,.2,1) .08s forwards}
#dica.on .dc-ponta{animation:dc-aparece .25s ease 3s forwards}
#dica.on .dc-agora{animation:dc-pulsa 1.6s ease-out 3.05s}
#dica.on .dc-flecha{animation:dc-some 2s ease-in-out 3.6s forwards}
@keyframes dc-some{to{opacity:0}}
@keyframes dc-corre{to{stroke-dashoffset:0}}
@keyframes dc-aparece{to{opacity:1}}
@keyframes dc-pulsa{0%{stroke-width:2}35%{stroke-width:7;stroke-opacity:.5}100%{stroke-width:2;stroke-opacity:1}}
.dc-acao{margin:8px 0 0;font-size:14px;color:var(--acc);font-weight:700}
/* popover dos botões de pintura: a legenda mora aqui (saiu do cabeçalho) */
#pop{position:fixed;z-index:11;width:300px;background:var(--sup);border:1px solid var(--borda2);border-radius:12px;box-shadow:0 12px 32px var(--sombra-d);padding:10px 12px;font-size:13px;line-height:1.4;pointer-events:none;opacity:0;transform:translateY(-4px);transition:opacity .15s ease,transform .15s ease}
#pop.on{opacity:1;transform:none}
#pop h4{margin:0 0 6px;font-size:13.5px;font-weight:800}
#pop .sc{display:flex;height:12px;border-radius:6px;overflow:hidden;margin:4px 0 3px}
#pop .sc i{flex:1}
#pop .rl{display:flex;justify-content:space-between;gap:10px;font-size:12px;font-weight:700}
#pop p{margin:6px 0 0;color:var(--ink2);font-size:12.5px}
#pop .cz{display:inline-block;width:11px;height:11px;border-radius:2px;background:var(--semdado);border:1px solid var(--semdado-b);vertical-align:-1px;margin-right:4px}
@media (prefers-reduced-motion:reduce){#dica,#pop{transition:none}.dc-seta{stroke-dashoffset:0!important}.dc-ponta{opacity:1}}
#aviso{position:fixed;left:50%;top:76px;transform:translateX(-50%);background:var(--inv);color:var(--inv-tx);padding:7px 14px;border-radius:999px;font-size:14px;z-index:9;display:none}
#carga,#sem-js{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);background:var(--sup);border:1px solid var(--line);border-radius:12px;padding:12px 18px;font-weight:700;z-index:8;box-shadow:0 4px 18px var(--sombra2)}
/* a saída quando o mapa não abre: frase, o resultado oficial e (se for erro) tentar de novo; alvos de 44 px (leitor mais velho) */
#carga.saida,#sem-js{width:min(92vw,520px);text-align:center;font-size:18px;line-height:1.45;font-weight:600}
#carga .saidas{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin-top:12px}
#carga .saidas a,#carga .saidas button{display:inline-flex;align-items:center;min-height:44px;padding:0 18px;border-radius:999px;font:inherit;font-weight:700;cursor:pointer;text-decoration:none}
#carga .saidas a{background:var(--roxo1);color:#fff;border:0}
#carga .saidas button{background:transparent;color:inherit;border:1.5px solid currentColor}
#sem-js a{color:var(--roxo-tx);font-weight:700}

/* celular e tablet em pé: cabeçalho embrulha, painel vira gaveta embaixo */
@media (max-width:900px){
  body{font-size:15px}
  #cab{top:6px;left:6px;right:6px;padding:6px 8px;gap:4px 8px}
  h1{font-size:17px} h1 small{display:none}
  .volta{font-size:14px}
  #disp{margin-left:0;width:100%;overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none}
  #disp button{padding:3px 8px;font-size:14px;flex:none}
  #disp .sep{flex:none}
  #ctl{gap:4px 8px;padding-top:4px}
  #leg{margin-left:0}
  #g-nivel,#g-pint{display:none}
  #g-cap .rot{display:none}
  .tic{font-size:13px;padding:2px 8px}
  .grp-cel{display:flex}
  .leg>div:not(.esc){display:none}
  .leg .esc{font-size:12px}
  #lado{top:auto;left:6px;right:6px;bottom:6px;width:auto;max-height:42vh;border-radius:14px 14px 12px 12px;transform:none!important}
  .recolhe{display:none}
  #dica-sec{left:50%;bottom:auto;top:calc(42vh - 30px)}
  #lado.fechado{max-height:none}
  #lado.fechado #lado-c{display:none}
  .blado{display:block;border:0;background:var(--sup2);color:var(--ink);font-weight:700;padding:6px 12px 6px 6px;cursor:pointer;border-bottom:1px solid var(--line);text-align:right;min-height:34px}
  .pl-pc{font-size:28px}
  #zoom{display:none}
  #ens{left:6px;right:6px;bottom:auto;gap:6px;padding:4px 8px}
  #ender{display:none}
  .lado-end{position:absolute;left:10px;top:0;height:34px;display:flex;align-items:center;gap:6px;font-size:16px;font-weight:600;color:var(--ink);white-space:nowrap;pointer-events:none;z-index:1}
  .lado-end svg{width:26px;height:26px;flex:none}
  .st{font-size:13px;padding:2px 9px}
  h1{font-size:16px}
  #ens input{flex:1;width:auto;min-width:60px}
  #ens #e-zero{display:none}
  #ens .tag{display:none}
  #ens .play .tx{display:none}
  #ens .play{min-width:40px;padding:2px 10px}
  .volta .tx{display:none}
  #ens .prox{display:none}
  #ens .play{min-width:0}
  #ens .rel{font-size:15px;min-width:42px}
  /* no celular, ao vivo: duas linhas fixas — play, hora e a régua larga (para o dedo); embaixo a velocidade e a saída do passado */
  #ens.vivo{flex-wrap:wrap;row-gap:4px}
  #ens.vivo .rel{flex-shrink:0}
  #ens.vivo input{flex:1 1 calc(100% - 130px)}
  #ens.vivo #e-zero{display:inline-block;flex:1 1 auto;min-width:0;font-size:14px;padding:2px 8px}
  #ens.vivo #e-zero .tx{display:none}
}
/* modo foco (Admin 20/10) — body.foco é a página em foco; .bfoco é o BOTÃO (mesmo nome nos dois fazia as regras do botão
   valerem para a página inteira: o svg do cabo de guerra da dica virava 17 px e a fonte ia a 14 px negrito, 20/10). Tela cheia e painel recolhido (a aba ‹ continua para abrir); disputas, recorte, pintura e a
   simulação seguem clicáveis ("no modo foco, seria legal poder interagir com as abas e os botões"). Esc sai. */
/* Família da lupa (Admin 22/10: "o modo foco é pequeno e ignora a fóvea HUMANA de um adulto"; 16h40: "pode ficar ao lado do
   botão atualizar, ambos no cabeçalho e sem mensagem explicativa"): o círculo de 48 px do Atualizar (.cp-ic), ao lado dele
   no placar; em foco, o círculo fica escuro — o botão apertado. */
.bfoco .entra,.bfoco .sai{display:inline-flex;align-items:center}
.bfoco .sai,body.foco .bfoco .entra{display:none}
body.foco .bfoco .sai{display:inline-flex}
body.foco .bfoco{background:var(--inv);color:var(--inv-tx);border-color:var(--inv)}
/* o ícone é "o Brasil no quadro" (desenho da casa, 21/10 21h30): os cantos de tela cheia em volta do Brasil da apuração, no
   mosaico da lupa (contorno da malha IBGE da página). Mouse: os cantos se abrem e o mapa cresce; em foco, os cantos apontam
   para dentro e, no mouse, o mapa encolhe (0,4 s) */
.bfoco svg{width:32px;height:32px;flex:none;overflow:visible;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.bfoco .fq-c,.bfoco .fq-br{transition:transform .4s cubic-bezier(.3,.7,.3,1)}
.bfoco .fq-br{transform-origin:12px 12px}
@media (hover:hover){
  .bfoco:hover .entra .fq-c1{transform:translate(-1px,-1px)}.bfoco:hover .entra .fq-c2{transform:translate(1px,-1px)}
  .bfoco:hover .entra .fq-c3{transform:translate(1px,1px)}.bfoco:hover .entra .fq-c4{transform:translate(-1px,1px)}
  .bfoco:hover .entra .fq-br{transform:scale(1.16)}
  .bfoco:hover .sai .fq-c1{transform:translate(1px,1px)}.bfoco:hover .sai .fq-c2{transform:translate(-1px,1px)}
  .bfoco:hover .sai .fq-c3{transform:translate(-1px,-1px)}.bfoco:hover .sai .fq-c4{transform:translate(1px,-1px)}
  .bfoco:hover .sai .fq-br{transform:scale(.85)}
}
@media (hover:hover){body.foco .bfoco:hover{border-color:var(--inv)}}
body.foco .cab-a .volta,body.foco .cab-a h1{display:none}
/* O TEMA (Admin 22/10 18h55: "programe o design para o modo noite e dia (tem um ícone legal em /eleicoes)"): o botão de
   /eleicoes, o último círculo da faixa do título (Brasil · Atualizar · Modo foco · Tema), no canto direito — de onde a noite sai (st.js
   trocaTema). Mostra para onde leva: a LUA no claro, o SOL no escuro (dourado); a troca é um eclipse: a sombra desliza
   sobre o disco e os raios recolhem girando (0,45 s). Mouse: a lua balança, o sol gira os raios (0,4 s). O desenho segue
   o tema do <html> (não o da cópia no véu): durante a troca, o botão já mostra o tema novo. */
.btema svg{width:32px;height:32px;flex:none;overflow:visible}
.btema .tm-raios{fill:none;stroke:currentColor;stroke-width:2.6;stroke-linecap:round}
.btema .tm-disco{fill:currentColor}
.btema .tm-tudo,.btema .tm-raios,.btema .tm-disco,.btema .tm-sombra{transform-box:view-box;transform-origin:16px 16px}
.btema .tm-raios{transform:rotate(-60deg) scale(.3);opacity:0}
.btema .tm-disco{transform:scale(1.32)}
.btema .tm-sombra{transform:none}
:root[data-tema="escuro"] .btema{color:#f2c45a}
:root[data-tema="escuro"] .btema .tm-raios{transform:none;opacity:1}
:root[data-tema="escuro"] .btema .tm-disco{transform:none}
:root[data-tema="escuro"] .btema .tm-sombra{transform:translate(13px,-13px)}
.btema .tm-raios,.btema .tm-disco,.btema .tm-sombra{transition:transform .45s cubic-bezier(.3,.7,.3,1),opacity .3s ease}
.btema .tm-tudo{transition:transform .4s cubic-bezier(.3,.7,.3,1)}
@media (hover:hover){
  .btema:hover .tm-tudo{transform:rotate(-16deg)}
  :root[data-tema="escuro"] .btema:hover .tm-tudo{transform:none}
  :root[data-tema="escuro"] .btema:hover .tm-raios{transform:rotate(30deg)}
}
/* o véu da troca: a cópia da página no tema de antes, com a borda do crepúsculo (máscara FIXA de --banda px, que esmaece
   devagar no começo e depressa no fim, como a luz). Anda só por transform (st.js andaVeu). */
.veu-tema{position:fixed;left:0;top:0;height:100%;z-index:2147483000;pointer-events:none;overflow:hidden;
  -webkit-mask-image:linear-gradient(90deg,#000 calc(100% - var(--banda)),rgba(0,0,0,.82) calc(100% - var(--banda) * .72),rgba(0,0,0,.45) calc(100% - var(--banda) * .42),rgba(0,0,0,.12) calc(100% - var(--banda) * .16),transparent);
  mask-image:linear-gradient(90deg,#000 calc(100% - var(--banda)),rgba(0,0,0,.82) calc(100% - var(--banda) * .72),rgba(0,0,0,.45) calc(100% - var(--banda) * .42),rgba(0,0,0,.12) calc(100% - var(--banda) * .16),transparent)}
.veu-tema.ao-leste{   /* a noite anda da esquerda para a direita: a mesma borda, espelhada (Admin 23/10) */
  -webkit-mask-image:linear-gradient(270deg,#000 calc(100% - var(--banda)),rgba(0,0,0,.82) calc(100% - var(--banda) * .72),rgba(0,0,0,.45) calc(100% - var(--banda) * .42),rgba(0,0,0,.12) calc(100% - var(--banda) * .16),transparent);
  mask-image:linear-gradient(270deg,#000 calc(100% - var(--banda)),rgba(0,0,0,.82) calc(100% - var(--banda) * .72),rgba(0,0,0,.45) calc(100% - var(--banda) * .42),rgba(0,0,0,.12) calc(100% - var(--banda) * .16),transparent)}
.veu-dentro{position:absolute;left:0;top:0;overflow:hidden}
.veu-dentro>body{position:relative;width:100%;height:100%;margin:0}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
#pop .tk{position:relative;height:14px;font-size:10.5px;font-weight:700;color:var(--mute2);margin-bottom:2px}
#pop .tk span{position:absolute;top:0;transform:translateX(-50%);white-space:nowrap}
#pop .tk span:first-child{transform:none}
#pop .tk span:nth-child(2){transform:translateX(-100%)}
/* os seis governos (governador com recorte UF) */
.g6 td:nth-child(2){white-space:nowrap}
.g6 td .mini{display:inline-flex;vertical-align:middle;margin:0 0 0 6px;width:40px}
.g6 tr.atual td{background:var(--sup3);font-weight:700}
.g6 tr.atual td:first-child{box-shadow:inset 3px 0 0 var(--ink)}
/* fotos e perfis dos candidatos (Admin 20/10): a foto redonda com anel na cor do candidato; foto + nome abrem o perfil
   em letramento.org/eleicoes/perfis numa aba nova (seta ↗ avisa). Hover só com transform/sombra: nada sai do lugar. */
.ft{display:block;flex:none;border-radius:50%;object-fit:cover;background:var(--terra);box-shadow:0 0 0 2px var(--aro),0 0 0 4px var(--c);transition:transform .2s ease,box-shadow .2s ease}
.perfil{color:inherit;text-decoration:none;cursor:pointer;border-radius:10px}
.perfil .ext{width:13px;height:13px;flex:none;fill:none;stroke:currentColor;stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round;opacity:.45;transition:opacity .2s,transform .2s;vertical-align:1px;margin-left:4px}
.perfil:hover .ft,.perfil:focus-visible .ft{transform:scale(1.07);box-shadow:0 0 0 2px var(--aro),0 0 0 4px var(--c),0 4px 14px var(--sombra2)}
.perfil:hover .ext,.perfil:focus-visible .ext{opacity:1;transform:translate(1px,-1px)}
.pl-quem{display:flex;align-items:center;gap:12px;min-height:66px;margin-bottom:4px}
.pl-c.b .pl-quem{flex-direction:row-reverse}
.ft.g{width:60px;height:60px}
.pl-quem .pl-nome small{display:block;margin-top:2px}
.pl-quem:hover .pl-nome{text-decoration:underline;text-decoration-color:var(--c);text-decoration-thickness:2px;text-underline-offset:3px}
.dc-l .ft.d{width:26px;height:26px;box-shadow:0 0 0 1.5px var(--aro),0 0 0 3px var(--c)}
.dc-l:has(.ft){grid-template-columns:28px 1fr auto auto}
.ft.t{display:inline-block;width:20px;height:20px;vertical-align:middle;margin-right:6px;box-shadow:0 0 0 1px var(--aro),0 0 0 2.5px var(--c)}
@media (max-width:900px){.ft.g{width:52px;height:52px}.pl-quem{gap:10px;min-height:56px}}
.nw{white-space:nowrap}
@media (max-width:900px){
  #ctl{flex-wrap:wrap}
  .grp-cel{order:3;flex:1 1 100%;min-width:0}
  .grp-cel label{flex:1 1 0;min-width:0}
  .grp-cel select{max-width:none;width:100%}
  #g-cap{order:1}
  #leg{order:4}
  .grp-cel{margin-bottom:0}
}
/* Governador abre as seis UFs (Admin 20/10): a faixa anima a largura, as UFs entram em cascata; Presidente recolhe */
#disp .bgov{display:inline-flex;align-items:center;gap:3px;padding-right:7px}
#disp .bgov svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round;transition:transform .4s cubic-bezier(.65,0,.35,1)}
#disp .bgov[aria-expanded="true"] svg{transform:rotate(180deg)}
.ufs{display:inline-flex;gap:4px;flex:none;overflow:hidden;width:0;padding:2px 0;margin:-2px 0;transition:width .45s cubic-bezier(.65,0,.35,1),margin-left .45s cubic-bezier(.65,0,.35,1)}
.ufs:not(.aberto){margin-left:-4px}
.ufs button{flex:none;opacity:0;transform:translateX(-12px) scale(.94);transition:opacity .22s ease,transform .32s cubic-bezier(.2,.7,.2,1)}
.ufs.aberto button{opacity:1;transform:none}
.ufs.aberto button:nth-child(1){transition-delay:.06s}.ufs.aberto button:nth-child(2){transition-delay:.1s}.ufs.aberto button:nth-child(3){transition-delay:.14s}
.ufs.aberto button:nth-child(4){transition-delay:.18s}.ufs.aberto button:nth-child(5){transition-delay:.22s}.ufs.aberto button:nth-child(6){transition-delay:.26s}
/* visão geral dos governos: um cartão por estado */
.g6c{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:8px 0 6px}
.g6k{display:block;width:100%;text-align:left;border:1px solid var(--line);border-radius:10px;background:var(--btn);padding:8px 10px 9px;cursor:pointer;font:inherit;color:inherit;transition:border-color .15s,box-shadow .15s,transform .15s}
.g6k:hover{border-color:var(--borda-h);box-shadow:0 4px 14px var(--sombra1);transform:translateY(-1px)}
.g6t{display:flex;justify-content:space-between;align-items:baseline;gap:6px;margin-bottom:4px}
.g6t b{font-size:14.5px;font-weight:800;line-height:1.15}
.g6t span{font-size:11.5px;color:var(--mute);white-space:nowrap}
.g6l{display:flex;align-items:center;gap:7px;font-size:13.5px;margin:4px 0;color:var(--ink2)}
.g6l .ft.t{margin:0}
.g6l .g6n{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.g6l b{font-variant-numeric:tabular-nums;font-weight:700}
.g6l.lid{color:var(--ink)}
.g6l.lid b{color:color-mix(in oklab,var(--c) var(--ctk),#fff);font-weight:800}
.g6k .mini{display:flex;height:6px;border-radius:3px;overflow:hidden;background:var(--trilho);margin-top:6px}
.g6k .mini i{display:block;height:100%}
/* aviso de zoom: balão logo abaixo das caixas Colégios/Seções, apontando para elas (onde o olho está ao marcar), sem
   empurrar a faixa de filtros; entra descendo, acende, a lupa pulsa e um brilho corre o texto no sentido da leitura */
#dica-sec{display:none!important}
#g-cap{position:relative}
#aviso-zoom{position:absolute;top:calc(100% + 11px);left:0;z-index:6;display:inline-flex;align-items:center;gap:7px;padding:6px 14px 6px 10px;min-height:34px;border:1px solid var(--av-b);color:var(--av-tx);border-radius:10px;font-size:14px;font-weight:700;cursor:pointer;white-space:nowrap;
  background:linear-gradient(100deg,var(--av-bg) 42%,var(--av-bg2) 50%,var(--av-bg) 58%) 100% 0/300% 100% no-repeat,var(--av-bg);box-shadow:0 8px 22px var(--av-sombra)}
#aviso-zoom::before{content:"";position:absolute;top:-7px;left:22px;width:12px;height:12px;background:var(--av-bg);border-left:1px solid var(--av-b);border-top:1px solid var(--av-b);transform:rotate(45deg)}
#aviso-zoom[hidden]{display:none!important}
#aviso-zoom:hover{border-color:var(--av-b-h);box-shadow:0 8px 22px var(--av-sombra)}
#aviso-zoom svg{width:18px;height:18px;flex:none;fill:none;stroke:currentColor;stroke-width:2.3;stroke-linecap:round}
#aviso-zoom.entra{animation:azEntra .4s cubic-bezier(.2,.7,.2,1) both,azRealce 1.8s ease-out .3s both,azBrilho 1.2s ease-out .45s both}
#aviso-zoom.entra svg{animation:azLupa .5s ease-in-out .55s 2}
@keyframes azEntra{from{opacity:0;transform:translateY(-8px) scale(.96)}to{opacity:1;transform:none}}
@keyframes azRealce{0%{border-color:#d99a00;box-shadow:0 8px 22px var(--av-sombra),0 0 0 0 rgba(224,160,20,.55)}55%{box-shadow:0 8px 22px var(--av-sombra),0 0 0 10px rgba(224,160,20,0)}100%{border-color:var(--av-b);box-shadow:0 8px 22px var(--av-sombra),0 0 0 0 rgba(224,160,20,0)}}
@keyframes azLupa{50%{transform:scale(1.3) rotate(-10deg)}}
@keyframes azBrilho{from{background-position:100% 0,0 0}to{background-position:0 0,0 0}}
#aviso-zoom .az-cu{display:none}
@media (max-width:900px){
  #aviso-zoom{position:static;margin-left:6px;font-size:13px;padding:4px 11px 4px 8px;min-height:32px}
  #aviso-zoom::before{top:50%;left:-7px;margin-top:-6px;transform:rotate(-45deg)}
  #aviso-zoom .az-tx{display:none}
  #aviso-zoom .az-cu{display:inline}
}
@media (prefers-reduced-motion:reduce){.ufs,.ufs button{transition:none}}
/* tabela das comparações: antes e agora, uma coluna por candidato, ▲ em quem avançou (Admin 20/10: textos ultra claros) */
.dc-tab{width:100%;border-collapse:collapse;margin:8px 0 2px;font-size:15.5px;font-variant-numeric:tabular-nums}
.dc-tab th{font-size:14.5px;font-weight:800;text-align:right;padding:0 2px 4px;border-bottom:1px solid var(--linha2);position:static;background:none;text-transform:none;letter-spacing:0;cursor:default}
.dc-tab td{padding:5px 2px;text-align:right;border-bottom:1px solid var(--linha2);color:var(--ink2)}
.dc-tab td:first-child,.dc-tab th:first-child{text-align:left;font-weight:600;color:var(--ink2)}
.dc-tab td small{font-size:13px;color:var(--mute2);font-weight:600}
.dc-tab tr.agora td{font-weight:700;color:var(--ink);border-bottom:0}
.dc-tab td.sobe{font-weight:800}
.dc-leg{margin:4px 0 0;font-size:13.5px;color:var(--ink2)}
/* número da dica em trajetória (dado novo com a dica aberta): aceso em azul, como no painel */
#dica .mudando{text-shadow:0 0 10px var(--mud-glow)}
.dc-aprox{color:var(--aprox);font-size:14px}

/* avanço da apuração em escala contínua (21/10) */
.grad-apur{display:inline-block;width:150px;height:12px;border-radius:3px;vertical-align:-1px;box-shadow:inset 0 0 0 1px var(--trilho-b)}
#pop .sc .grad-apur{width:100%;height:12px;border-radius:6px}

/* faixas do cabeçalho por largura (Admin 21/10 17h). As seis UFs abertas não mudam a altura do cabeçalho em nenhuma largura:
   ≥ 1440 px as disputas cabem no topo, ao lado do título, com as UFs abertas e os quatro círculos (desde 22/10 19h49; antes,
   ≥ 1280); entre 901 e 1439 elas descem para a faixa dos filtros, onde também cabem abertas. */
@media (max-width:1799px){h1 small{display:none}}
/* a faixa do título com os quatro círculos (22/10 19h49): em 1440–1599 o Governador aberto (as seis UFs) não caberia —
   a seta de volta fica só "←" (o nome no title) e o status perde o " · pausada"/" · tempo real" (a hora fica) */
@media (min-width:1440px) and (max-width:1599px),(min-width:901px) and (max-width:999px){.volta .tx,.st .h2{display:none}}
@media (min-width:901px) and (max-width:1439px){
  #cab .bbr{margin-left:auto}   /* sem o botão Projeção (23/10), os círculos iam para o meio da faixa: o Brasil (que guarda o lugar mesmo invisível) empurra o grupo para a direita */
  .placar{--pf:52px;--vf:26px;--af:21px;--pg:12px}
}
/* 1000–1439: as disputas descem para a faixa dos filtros, na 2ª linha deles (junto do Mostrar), onde cabem até com as
   seis UFs abertas — sem faixa só delas, o cabeçalho não cresce. #ctl vira só agrupamento (display:contents) e o risco que o
   separava do placar passa para a borda de baixo do placar. */
@media (min-width:1000px) and (max-width:1439px){
  .placar{border-bottom:1px solid var(--line);padding-bottom:9px}
  #disp::before{content:"Disputa";font-size:13px;font-weight:700;color:var(--mute);text-transform:uppercase;letter-spacing:.05em;margin-right:4px}   /* como Recorte, Pintar e Mostrar */
  #ctl{display:contents}
  #g-nivel{order:10}#g-pint{order:11}#disp{order:12;margin-left:0}#g-cap{order:13}#leg{order:14}
  #g-nivel,#g-pint,#g-cap,#disp{margin-right:-2px}
}
/* 901–999: não cabem; as disputas ganham uma faixa própria, logo acima dos filtros */
@media (min-width:901px) and (max-width:999px){#disp{order:7;margin-left:0}.cp-dif{display:none}}
@media (max-width:900px){
  .cab-a{flex:1 1 100%;gap:10px}
  .volta{padding-right:10px}
  .st .h2{display:none}
  /* celular: três colunas — % | trilho | % —, as fotos e os nomes numa linha só deles, em cima. Os dois trilhos ficam com
     quase toda a largura e continuam alinhados; a % de cada lado e a das seções encostam neles. */
  .placar{order:5;padding:4px 0 2px;margin-top:0;grid-template-columns:max-content minmax(0,1fr) max-content;row-gap:2px;
    --pf:28px;--anel:2.5px;--pg:8px;--vf:19px;--nf:15px;--bh:11px;--af:19px;--abh:7px;--r3:2px}   /* mais baixo (22/10 19h49): fotos de 28 px, menos ar */
  .cp-ft{grid-row:1;padding:var(--anel)}
  .cp-ft.a{grid-column:1;justify-self:start}.cp-ft.b{grid-column:3;justify-self:end}
  .cp-nm{grid-row:1;align-self:center}
  .cp-nm.a{grid-column:1/3;margin-left:calc(var(--pf) + 2 * var(--anel) + 7px)}
  .cp-nm.b{grid-column:2/4;margin-right:calc(var(--pf) + 2 * var(--anel) + 7px)}
  .cp-v.a{grid-column:1;justify-self:end;text-align:right}.cp-v.b{grid-column:3;justify-self:start;text-align:left}
  .cp-t{grid-column:2;align-self:end}
  .cp-br{grid-column:2}
  .apur .ap-l{grid-column:1}
  .apur .ap-b{grid-column:2}
  .apur .ap-n{grid-column:3}
  .ft.pc{box-shadow:0 0 0 1.5px var(--aro),0 0 0 var(--anel) var(--c)}
  .cp-t{font-size:13px;padding-bottom:4px;max-width:100%;margin:0}
  .cp-ok{grid-column:2;font-size:13px;padding-bottom:4px;margin:0}
  #cab .cp-bt{order:7;flex:none;min-height:44px;margin:0;padding:0 14px 0 5px;gap:7px;font-size:16px}
  #cab .cp-acoes{order:7;flex:none;margin:0 0 0 auto}   /* sem o botão Projeção na faixa, os círculos ficam à direita (o Brasil é display:none aqui) */
  #cab .cp-bt.cp-ic{min-height:0;padding:0;gap:0}
  .bbr:not(.on){display:none}
  .cp-dif{display:none}
  .cp-meio{top:-4px;bottom:-4px}
  .apur .ap-l b{font-size:13px}
  .apur .ap-t{display:none}
  .apur .ap-msg{font-size:13px;padding:0 6px}
  .apur .ap-msg .lg{display:none}
  .apur.antes .ap-b{height:calc(var(--abh) + 12px)}   /* a altura da linha do número: a 1ª seção não faz o cabeçalho pular */
  #disp{order:6}
}
/* celular estreito (≤ 389 px): o topo cabe numa linha — título e status um pouco menores, "começa" sai do status
   ("AO VIVO às 17h"; a frase inteira está no trilho da apuração); ≤ 340 px, só "● AO VIVO" / "● SIMULAÇÃO" (a hora está na régua) */
@media (max-width:389px){
  .cab-a{gap:8px} .volta{padding-right:8px}
  h1{font-size:15px}
  .st{padding:2px 8px}
}
/* até 444 px os avisos do selo encurtam ("● PARADO 20:41", "● AO VIVO 20:41"): a revisão adversarial (23/10) viu o selo sair
   pela borda e a hora sumir entre 341 e 444 px com os rótulos longos */
@media (max-width:444px){ .st .h3,.st .h4{display:none} }
@media (max-width:340px){
  .st .h{display:none}
  #cab .cp-bt{padding:0 11px 0 4px;gap:5px}
  h1{min-width:0;overflow:hidden;text-overflow:ellipsis}
}

/* ------------------------------------------------------------ O VISOR DO MAPA (#vm — Admin 23/10 14h: "um esquema de notícia semelhante ao de
   notícias da projeção, mas com atualizações em tempo real do que o mapa está dizendo"). A faixa sob o cabeçalho, na mesma altura
   do visor da Projeção (as duas telas são uma família): o display é ESCURO nos dois temas, pelo contrato do .pj-visor (painel.css);
   o acento do mapa é AZUL (#86c8f2, o --mud do tema escuro) no LED e no cursor — a Projeção é lilás, e o olho sabe qual instrumento
   está falando. Duas linhas reservadas: nada cresce sob o olho (o motor parte a frase para ela caber). O motor e a pauta: st.js.
   Lugar por largura: 1440 → sob o cabeçalho, ao lado da lupa (left 70), até o puxador do painel (right 448); painel recolhido ou foco →
   right 56; celular → a 1ª linha da gaveta de resultados (st.js posiciona move o #vm para dentro do #lado). */
#vm{position:fixed;left:70px;right:448px;top:216px;z-index:3;min-height:64px;padding:7px 16px;gap:12px;border-radius:12px;
  transition:right .55s cubic-bezier(.65,0,.35,1),transform .55s cubic-bezier(.65,0,.35,1),opacity .55s cubic-bezier(.65,0,.35,1)}
body.recolhido #vm{right:56px}
#vm .pj-v-msg{white-space:normal;line-height:1.3;height:calc(2 * 1.3em);overflow:hidden;position:relative;font-variant-numeric:tabular-nums}
#vm{align-items:baseline}   /* a hora, o LED e o "n de m" na 1ª linha da notícia (Admin 24/10: centrados, ficavam entre as duas linhas reservadas) */
#vm .pj-led{background:#86c8f2;box-shadow:0 0 10px #86c8f2;opacity:.55}
#vm.lendo .pj-led{animation:pj-led 1s infinite;opacity:1}   /* o LED pulsa só enquanto digita */
#vm .pj-caret{background:#86c8f2;height:1em;vertical-align:-.1em}   /* dentro da linha de 1,3 em: o cursor de 22 px alargava a linha e a 2ª linha saía da caixa (medido 23/10) */
#vm.seco .pj-v-msg{color:var(--pj-lcd-mute)}   /* os estados fixos (espera, passado, seis governos): frase inteira, apagada, sem cursor */
#vm.seco .pj-caret{display:none}
/* a frase que tem lugar é um botão (transparente, por cima do display inteiro: alvo de 44 px): Enter, espaço ou o clique levam ao lugar */
#vm .vm-ir{position:absolute;inset:0;width:100%;height:100%;min-height:44px;margin:0;padding:0;background:none;border:0;cursor:pointer;border-radius:inherit;z-index:1}
#vm .vm-ir:focus-visible{outline:3px solid #ffbf47;outline-offset:-3px}
#vm:has(.vm-ir:not([hidden]):hover) .pj-v-msg{text-decoration:underline dotted #86c8f2;text-underline-offset:3px}
@media (max-height:800px){#vm{min-height:58px}#vm .pj-v-msg{font-size:18px;line-height:1.25}}   /* 1366×768: o Brasil fica com ~390 px de altura */
@media (min-width:901px) and (max-width:1259px){#vm .pj-v-h{display:none}}   /* a hora some; o canto mostra só "n de m" (st.js) */
@media (min-width:1700px){#vm{min-height:74px}}
@media (prefers-reduced-motion:reduce){#vm{transition:none}#vm.lendo .pj-led{animation:none}}
/* a DICA (Admin 24/10: depois de 30 s sem novidade, o visor ensina a usar a tela; "efeitos para destacar a mensagem"): âmbar no LED, no
   cursor e no rótulo DICA (no lugar da hora), nos dois visores; e um ANEL que respira 3 vezes em volta do controle de que ela fala
   (st.js anel(): por cima de tudo, sem pegar clique; só transform e opacity; movimento reduzido: fixo) */
#vm.dica .pj-led,.pj-visor.dica .pj-led{background:#ffb52e;box-shadow:0 0 10px #ffb52e;opacity:1}
#vm.dica .pj-caret,.pj-visor.dica .pj-caret{background:#ffb52e}
#vm.dica .pj-v-h,.pj-visor.dica .pj-v-h{color:#ffb52e}
#vm.dica:has(.vm-ir:not([hidden]):hover) .pj-v-msg{text-decoration-color:#ffb52e}
/* o RECADO da casa (st.js recebeRecado, Admin 24/10): AVISO no lugar da hora, o rótulo e o LED em BRANCO cheio — nem o azul das
   notícias do mapa, nem o lilás da Projeção, nem o âmbar das dicas, nem a cor de um candidato */
#vm.aviso .pj-led,.pj-visor.aviso .pj-led{background:#fff;box-shadow:0 0 12px #fff;opacity:1}
#vm.aviso .pj-v-h,.pj-visor.aviso .pj-v-h{color:#fff;font-weight:800}
#vm.aviso .pj-caret,.pj-visor.aviso .pj-caret{background:#fff}
#dica-anel{position:fixed;z-index:40;pointer-events:none;border:2.5px solid #ffb52e;box-shadow:0 0 0 3px rgba(255,181,46,.28),0 0 22px rgba(255,181,46,.55);opacity:0;transform:scale(1.12)}
#dica-anel.on{animation:dica-anel 1.5s cubic-bezier(.3,.6,.3,1) 3 forwards}
@keyframes dica-anel{0%{opacity:0;transform:scale(1.12)}35%{opacity:1;transform:scale(1)}100%{opacity:.35;transform:scale(1)}}
@media (prefers-reduced-motion:reduce){#dica-anel.on{animation:none;opacity:.9;transform:none}}
@media (max-width:900px){
  #lado>#vm{position:relative;top:auto;left:auto;right:auto;z-index:1;min-height:0;padding:8px 12px;gap:0;flex:none;border-width:0 0 1px;border-radius:14px 14px 0 0;box-shadow:none;transition:none}
  #lado:has(> #vm) .lado-end{top:59px}   /* a alça "letramento.org/apuracao" desce para a linha do "Resultados ▾" */
}
