/* Colinha eleitoral: o desenho da ferramenta, igual em todos os sites.
 *
 * Mora em C:\dev\colinha-motor e e COPIADO para cada site por
 * `node sincroniza.mjs`. Nao edite a copia do site.
 *
 * Tudo fica debaixo de .colinha-app, para nao brigar com a folha do site
 * (o Joel e WordPress, e o tema tem estilo de botao, paragrafo e titulo).
 *
 * A casca de cada site define as cores pelas variaveis abaixo, no seletor
 * .colinha-app. As que tem reserva podem ficar de fora. A imagem baixada le as
 * mesmas variaveis (colinha.js, funcao cor), entao pagina e imagem nao divergem.
 *
 * As reservas NAO moram no .colinha-app: esta folha carrega depois da casca, e
 * no mesmo seletor ela ganharia e apagaria a cor do site (foi assim que o 4544
 * da Ju saiu em magenta, e nao na tinta). As constantes ficam no :root, que
 * perde para o .colinha-app; as que derivam de outra cor sao reserva no uso,
 * var(--x, var(--y)).
 *
 *   --colinha-escuro         titulo, rotulos, fundo do cartao fixo e do botao
 *   --colinha-escuro-hover   botao principal com o ponteiro em cima
 *   --colinha-destaque       quadrinhos do numero fixo e borda da foto
 *   --colinha-sobre-destaque numero dentro do quadrinho de destaque
 *   --colinha-fixo-rotulo    rotulo e segunda linha no cartao fixo (escuro)
 *   --colinha-numero         numeros dos outros cargos na imagem, >= 3:1 no branco
 *   --colinha-caixa          borda do quadrinho vazio, >= 3:1 no branco
 *   --colinha-tinta          nome do candidato achado
 *   --colinha-suave          texto corrido
 *   --colinha-muted          texto secundario, partido
 *   --colinha-fonte          familia da pagina (a da imagem vem do data-fonte)
 */
:root {
  --colinha-branco: #fff;
  --colinha-claro: #f4f5f8;
  --colinha-borda: #dfe3ec;
  --colinha-erro: #b3261e;           /* 6,5:1 sobre branco */
  --colinha-erro-fundo: #fdf3f2;
  --colinha-veu: rgba(0, 0, 0, .05);
  --colinha-sombra: 0 8px 30px rgba(0, 0, 0, .08);
}
.colinha-app {
  max-width: 520px; margin: 0 auto; padding: clamp(28px, 5vw, 56px) 22px 56px;
  display: flex; flex-direction: column; gap: 18px;
  font-family: var(--colinha-fonte); color: var(--colinha-suave); text-align: left;
}
.colinha-app *, .colinha-app *::before, .colinha-app *::after { box-sizing: border-box; }
.colinha-app p, .colinha-app h1, .colinha-app h2 { margin: 0; }

.colinha-app .titulo {
  font-family: var(--colinha-fonte); font-weight: 900; line-height: 1; letter-spacing: -0.02em;
  font-size: clamp(34px, 9vw, 52px); color: var(--colinha-escuro); text-wrap: balance; text-transform: none;
}
.colinha-app .titulo .hl { background: var(--colinha-escuro); color: var(--colinha-branco); padding: 0 .12em; }
.colinha-app .chamada { font-size: 16.5px; line-height: 1.55; font-weight: 400; color: var(--colinha-suave); text-wrap: pretty; }
/* A promessa de privacidade fica visivel antes do primeiro digito. */
.colinha-app .privacidade {
  display: flex; align-items: flex-start; gap: 8px;
  font-size: 13.5px; line-height: 1.5; font-weight: 500; color: var(--colinha-muted);
}
.colinha-app .privacidade svg { flex: 0 0 auto; width: 16px; height: 16px; margin-top: 2px; color: var(--colinha-escuro); }
.colinha-app .dica { font-size: 13.5px; line-height: 1.5; font-weight: 400; color: var(--colinha-muted); }

.colinha-app .sr {
  position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* ====== A colinha ======
   O desenho da pagina e o mesmo da imagem baixada (cartao por cargo, rotulo,
   quadrinhos da urna), para o eleitor baixar exatamente o que ve.
   --colinha-caixa e a UNICA coisa que diz "aqui se digita", entao precisa de
   3:1 contra o branco (WCAG 1.4.11). */
.colinha-app .colinha { display: flex; flex-direction: column; gap: 12px; }
.colinha-app .cargo {
  display: flex; flex-direction: column; gap: 10px; margin: 0;
  background: var(--colinha-branco); border: 1px solid var(--colinha-borda); border-radius: 16px;
  padding: 14px 18px 16px; box-shadow: var(--colinha-sombra);
}
/* Numero pela metade: o foco sobe ate o cartao, e a borda diz qual e o problema. */
.colinha-app .cargo.incompleto { border: 2px solid var(--colinha-erro); }
/* Rotulo e Limpar na mesma linha. A altura minima e a do botao, para o cartao
   nao pular quando ele aparece no primeiro digito. */
.colinha-app .rot-linha { display: flex; align-items: center; justify-content: space-between; gap: 10px; min-height: 36px; }
.colinha-app .limpar {
  flex: 0 0 auto; display: inline-flex; align-items: center; gap: 6px;
  min-height: 36px; padding: 0 12px; margin: 0 -6px 0 0;
  border: 1.5px solid var(--colinha-caixa); border-radius: 999px; background: var(--colinha-branco);
  font: 700 13.5px var(--colinha-fonte); color: var(--colinha-escuro); cursor: pointer;
  text-transform: none; letter-spacing: 0; box-shadow: none;
}
.colinha-app .limpar svg { width: 14px; height: 14px; }
.colinha-app .limpar:hover { border-color: var(--colinha-escuro); background: var(--colinha-branco); color: var(--colinha-escuro); }
.colinha-app .limpar:focus-visible { outline: 3px solid var(--colinha-escuro); outline-offset: 2px; }
.colinha-app .cargo-rot {
  font-family: var(--colinha-fonte); font-weight: 900; line-height: 1.2;
  text-transform: uppercase; letter-spacing: -0.01em; font-size: 16px;
  color: var(--colinha-escuro); margin: 0;
}

/* Um <input> de verdade por cargo, transparente por cima dos quadrinhos. Os
   quadrinhos sao so espelho do valor. Assim o teclado numerico, o colar, o
   leitor de tela e o preenchimento sem JS continuam sendo os do navegador.
   font-size 16px mesmo invisivel: abaixo disso o iOS da zoom no foco. */
.colinha-app .digitos { position: relative; display: inline-flex; gap: 6px; align-self: flex-start; border-radius: 12px; }
.colinha-app .digitos span {
  width: 42px; height: 54px; display: grid; place-items: center;
  border: 2px solid var(--colinha-caixa); border-radius: 10px; background: var(--colinha-branco);
  font: 900 30px/1 var(--colinha-fonte); color: var(--colinha-escuro);
}
.colinha-app .digitos input {
  position: absolute; inset: 0; width: 100%; height: 100%; min-height: 0;
  margin: 0; padding: 0; border: 0; opacity: 0; font-size: 16px; cursor: text; box-shadow: none; background: none;
}
.colinha-app .digitos:focus-within { outline: 3px solid var(--colinha-escuro); outline-offset: 4px; }
.colinha-app .digitos:focus-within span.atual { border-color: var(--colinha-escuro); background: var(--colinha-veu); }

/* O candidato achado na lista do TSE aparece embaixo dos quadrinhos. A foto e
   um recorte da folha do cargo (background-position): o aparelho baixa a folha
   inteira e nunca pede ao servidor a foto de um numero so. */
.colinha-app .cand { margin: 0; display: flex; align-items: center; gap: 10px; min-width: 0; }
.colinha-app .cand-foto {
  flex: 0 0 auto; width: 40px; height: 56px; border-radius: 8px;
  background-color: var(--colinha-claro); background-repeat: no-repeat;
}
.colinha-app .cand strong {
  display: block; font: 900 15px/1.15 var(--colinha-fonte);
  text-transform: uppercase; color: var(--colinha-tinta);
}
.colinha-app .cand span span { font: 700 13px/1.4 var(--colinha-fonte); color: var(--colinha-muted); }
.colinha-app .cand--erro { font: 500 13.5px/1.45 var(--colinha-fonte); color: var(--colinha-erro); }

/* O cartao do proprio candidato: o unico preenchido, no par escuro + destaque. */
.colinha-app .cargo--fixo {
  display: grid; grid-template-columns: 1fr auto; gap: 10px 14px; align-items: center;
  background: var(--colinha-escuro); border-color: var(--colinha-escuro);
}
.colinha-app .cargo--fixo .cargo-rot { color: var(--colinha-fixo-rotulo, var(--colinha-destaque)); }
.colinha-app .linha-fixo { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; }
.colinha-app .cargo--fixo .digitos span { background: var(--colinha-destaque); border-color: var(--colinha-destaque); color: var(--colinha-sobre-destaque, var(--colinha-escuro)); }
.colinha-app .nome-fixo { margin: 0; display: flex; flex-direction: column; gap: 2px; }
.colinha-app .nome-fixo strong {
  font: 900 22px/1.05 var(--colinha-fonte);
  text-transform: uppercase; letter-spacing: -0.01em; color: var(--colinha-branco);
}
.colinha-app .nome-fixo span { font: 700 13.5px/1.3 var(--colinha-fonte); color: var(--colinha-fixo-rotulo, var(--colinha-destaque)); }
.colinha-app .foto-fixo {
  grid-column: 2; grid-row: 1 / span 2;
  width: 76px; height: 76px; max-width: none; border-radius: 14px; object-fit: cover;
  border: 3px solid var(--colinha-destaque); background: var(--colinha-claro);
}
@media (min-width: 440px) {
  .colinha-app .digitos span { width: 50px; height: 62px; font-size: 34px; }
  .colinha-app .foto-fixo { width: 92px; height: 92px; }
}
/* Numero fixo de 5 digitos (deputado estadual): quadrinhos e foto lado a lado
   pedem 404px abaixo de 440 e 460px acima, e a pagina estourava a largura em
   320 (o celular afastava o zoom). Em tela estreita a foto sobe para a linha do
   rotulo, menor, e o numero fica com a largura inteira do cartao. */
@media (max-width: 479px) {
  .colinha-app .cargo--fixo .foto-fixo { grid-row: 1; width: 56px; height: 56px; border-radius: 10px; }
  .colinha-app .cargo--fixo .linha-fixo { grid-column: 1 / -1; }
}

/* ====== Acoes e retorno ====== */
.colinha-app .acoes { display: flex; flex-direction: column; gap: 10px; }
.colinha-app .gerar {
  display: inline-flex; align-items: center; justify-content: center; width: 100%;
  min-height: 52px; padding: 0 24px; margin: 0; border: 0; border-radius: 0; cursor: pointer;
  background: var(--colinha-escuro); color: var(--colinha-branco);
  font: 800 17px var(--colinha-fonte); letter-spacing: .01em; text-transform: none; box-shadow: none;
}
.colinha-app .gerar:hover { background: var(--colinha-escuro-hover, var(--colinha-escuro)); color: var(--colinha-branco); }
.colinha-app .gerar:focus-visible { outline: 3px solid var(--colinha-escuro); outline-offset: 3px; }
.colinha-app .gerar[disabled] { opacity: .7; cursor: progress; }

.colinha-app .aviso {
  background: var(--colinha-branco); color: var(--colinha-escuro); border-left: 4px solid var(--colinha-destaque);
  border-radius: 16px; padding: 12px 16px;
  font-size: 14px; line-height: 1.5; font-weight: 400;
}
.colinha-app .erro {
  background: var(--colinha-erro-fundo); color: var(--colinha-erro);
  border-radius: 16px; padding: 12px 16px;
  font-size: 14px; line-height: 1.5; font-weight: 500;
}

/* ====== Previa ======
   <dialog> nativo: showModal() prende o foco, escurece o fundo e fecha no Esc.
   A imagem e o que importa aqui (o print), entao a moldura e minima e os dois
   botoes sao pequenos, numa linha so. No celular a previa encosta nas bordas.
   A imagem fica com a altura da tela menos 80px: respiro, a dica e os botoes.
   dvh depois de vh: quem nao conhece dvh fica com o vh. */
.colinha-app .previa {
  width: 100%; max-width: min(560px, 100%); max-height: 100%;
  margin: auto; padding: 4px 4px 6px; border: 0; border-radius: 14px;
  background: var(--colinha-claro); color: var(--colinha-tinta); overflow: auto;
}
@media (max-width: 560px) { .colinha-app .previa { border-radius: 0; } }
.colinha-app .previa::backdrop { background: rgba(21, 23, 30, .78); }
/* Sem <dialog> (iOS antes do 15.4) o elemento e um bloco comum, aberto so
   pelo atributo. Onde ha <dialog>, a regra de baixo repete o navegador.
   Aberta, a previa e uma coluna: dica e botoes nao encolhem, e a imagem cede
   a altura que faltar. A dica quebra em duas linhas numa fonte mais larga (a
   Sora do Joel, em 320px), e uma conta fixa de altura empurrava os botoes para
   fora da tela. object-fit segura a proporcao quando a imagem encolhe. */
.colinha-app .previa[open] { display: flex; flex-direction: column; }
.colinha-app .previa:not([open]) { display: none; }
.colinha-app .previa-img {
  display: block; margin: 0 auto; border-radius: 10px;
  width: auto; height: auto; max-width: 100%;
  max-height: calc(100vh - 80px);
  max-height: calc(100dvh - 80px);
  flex: 0 1 auto; min-height: 0; object-fit: contain;
}
.colinha-app .previa-dica { flex: 0 0 auto; font: 500 12.5px/1.3 var(--colinha-fonte); color: var(--colinha-muted); text-align: center; margin: 6px 0 0; }
.colinha-app .previa-acoes { flex: 0 0 auto; display: flex; gap: 8px; margin-top: 6px; }
.colinha-app .previa-acoes button {
  flex: 1 1 0; min-height: 38px; padding: 0 12px; margin: 0; border-radius: 999px;
  border: 1.5px solid var(--colinha-escuro); font: 700 14px var(--colinha-fonte); cursor: pointer;
  text-transform: none; letter-spacing: 0; box-shadow: none;
}
.colinha-app .previa-baixar { background: var(--colinha-escuro); color: var(--colinha-branco); }
.colinha-app .previa-baixar:hover { background: var(--colinha-escuro-hover, var(--colinha-escuro)); color: var(--colinha-branco); }
.colinha-app .previa-voltar { background: var(--colinha-branco); color: var(--colinha-escuro); }
.colinha-app .previa-voltar:hover { background: var(--colinha-branco); color: var(--colinha-escuro); }
.colinha-app .previa-acoes button:focus-visible { outline: 3px solid var(--colinha-escuro); outline-offset: 2px; }

/* O `hidden` do HTML perde para seletor de classe (.acoes e .limpar declaram
   display). Defeito ja visto em outra pagina deste mesmo desenho. */
.colinha-app [hidden] { display: none !important; }
