/* aquacalc — tokens do Tema B "Instrumento" (etapa 0, 11/08/2026)
   Fonte única de cor, escala tipográfica e motion. NENHUM hex de tema vive fora daqui —
   se aparecer hex em componente de página convertida, é bug (o LINT-TEMA do
   verificar-site.py cobra isso nas páginas do manifesto).
   Os pares de contraste foram validados WCAG 2.1 AA na spec (texto >= 4,5:1; borda de
   campo >= 3:1). AO TROCAR QUALQUER VALOR, RECALCULAR ANTES DE GRAVAR.
   O modo é propriedade da SEÇÃO do produto (escuro: home/calculadoras/Pulso · claro:
   fichas/guias/área do lojista), não preferência do usuário — sem toggle na v1, sem
   prefers-color-scheme de propósito. Spec: claude/tema-b-instrumento-spec.md */

:root[data-tema="escuro"], [data-tema="escuro"] {
  --bg:            #0C1418;
  --bg-elev:       #121C21;   /* cartão, campo */
  --bg-sunken:     #101A1F;   /* bloco de resultado */
  --line:          #26383E;   /* régua decorativa */
  --line-forte:    #63848C;   /* borda de campo — 4,29:1 sobre --bg-elev */
  --ink:           #E4EFEC;   /* 15,8:1 */
  --ink-2:         #93A8A5;   /* 7,4:1 — texto secundário */
  --ink-3:         #7F9793;   /* 6,0:1 — labels */
  --teal:          #3FCFB0;   /* estrutura: barra, ponto, anel de foco */
  --teal-ink:      #57E0BE;   /* 10,8:1 — número e dado */
  --coral:         #E8623C;   /* CTA e alerta */
  --coral-ink:     #F1854F;   /* 7,3:1 — texto de ressalva */
  --on-coral:      #170703;   /* 5,9:1 sobre --coral */
}

:root[data-tema="claro"], [data-tema="claro"] {
  --bg:            #F7FAF9;
  --bg-elev:       #FFFFFF;
  --bg-sunken:     #EEF3F2;
  --line:          #D6E0DE;
  --line-forte:    #728481;   /* borda de campo — 3,94:1 sobre branco */
  --ink:           #0E1A1E;   /* 16,9:1 */
  --ink-2:         #4A5D5A;   /* 6,7:1 */
  --ink-3:         #5E716E;   /* 4,9:1 */
  --teal:          #0F7A63;
  --teal-ink:      #0F7A63;   /* 4,7:1 sobre --bg-sunken */
  --teal-fundo:    #0C6553;   /* fundo de badge, texto branco a 7,0:1 */
  --coral:         #C2431C;   /* CTA sólido */
  --coral-ink:     #A33413;   /* 6,5:1 — texto de ressalva */
  --on-coral:      #FFF6F2;   /* 4,8:1 sobre --coral */
}

/* ---- severidade: ok · atenção · crítico (03/09) ------------------------------------------
   Estes nove valores já existiam, copiados à mão em OITO páginas (app, admin-lojas, as quatro
   do Pulso, e agora a aclimatação). Nenhuma delas está errada — o que estava errado era não
   haver casa: a nona cópia é a que diverge, e ninguém a veria. Aqui é a casa.
   Os pares são os que o Pulso já publicava e valem sobre superfície CLARA; sobre o cartão
   petróleo das calculadoras o triplo funciona porque o bloco traz o próprio fundo.
   Contraste medido do texto sobre o próprio fundo: ok 7,6:1 · atenção 7,1:1 · crítico 8,0:1.
   AS OITO CÓPIAS ANTIGAS CONTINUAM LÁ e são dívida contada, não conserto pela metade — o teto
   está no `componente-do-resultado.test.js` e no §8 do ESTADO, com data e dono. */
:root {
  --sev-ok-fundo:      #e9f6ef;
  --sev-ok-borda:      #a8d8bf;
  --sev-ok-tinta:      #14603c;
  --sev-atencao-fundo: #fff7ec;
  --sev-atencao-borda: #f0cf9a;
  --sev-atencao-tinta: #8a5300;
  --sev-critico-fundo: #fdecea;
  --sev-critico-borda: #f0b4ae;
  --sev-critico-tinta: #8c1d18;
}

/* ---- escala tipográfica: usar os extremos, não os meios (salto corpo->display ~3,8x) ---- */
:root {
  --fonte-texto: 'Bricolage Grotesque', system-ui, sans-serif;
  --fonte-mono:  'JetBrains Mono', ui-monospace, monospace;

  --t-display: clamp(38px, 6vw, 64px);   /* peso 800 · lh .98 · tracking -.03em  */
  --t-titulo:  clamp(27px, 4vw, 40px);   /* peso 800 · lh 1.02 · tracking -.025em */
  --t-sub:     20px;                     /* peso 800 · lh 1.25 */
  --t-corpo:   17px;                     /* peso 400 · lh 1.65 */
  --t-menor:   13px;                     /* peso 400 · lh 1.55 */
  --t-label:   11px;                     /* peso 600 · MAIÚSCULAS · tracking .16em */
  --t-num-g:   44px;                     /* mono 700 · tabular · tracking -.02em */
  --t-num-m:   22px;                     /* mono 700 · tabular */
  --t-num-p:   13px;                     /* mono 400 · tabular */
}

/* Todo número que o usuário lê como resultado ou parâmetro é mono tabular — é isso que faz
   a interface parecer instrumento. */
.num, .num-g, .num-m, .num-p { font-family: var(--fonte-mono); font-variant-numeric: tabular-nums; }
.num-g { font-size: var(--t-num-g); font-weight: 700; letter-spacing: -.02em; }
.num-m { font-size: var(--t-num-m); font-weight: 700; }
.num-p { font-size: var(--t-num-p); font-weight: 400; }
.t-label { font-size: var(--t-label); font-weight: 600; text-transform: uppercase; letter-spacing: .16em; }

/* ---- os tons de BOTAO da marca (decisao do Franco, 02/09/2026 — A11) ----
   Medido em 28/08 sobre 75.977 textos: branco sobre o coral (#e85d3a) da 3,47 e sobre o
   petrol-claro (#1e9e94) da 3,29 — abaixo do 4,5 da WCAG AA. A cor da IDENTIDADE nao muda:
   onde e fundo grande, detalhe ou o `calc` do wordmark, continua a mesma. O que muda e so o
   tom do BOTAO com texto branco em cima, por estes dois tokens: --coral-botao #c74f31 (4,57)
   e --petrol-botao #19847c (4,53). Quem olha lado a lado quase nao distingue; quem le no
   celular no sol, sim. Cor de botao com texto branco nasce DESTES tokens, nao dos da marca. */
:root{--coral-botao:#c74f31;--petrol-botao:#19847c;}

/* ---- marca: aplicacao UNICA do wordmark (decisao do Franco, 12/08/2026) ----
   "aquacalc" e uma palavra, minuscula, bicolor: aqua #0b2b45 (cor do traco do logo SVG)
   + calc #1e9e94. Peso 800, 22px na nav, 17px no rodape (.marca-rodape). Em fundo escuro,
   .marca-escura: aqua branco, calc #7fe0d4. NENHUMA pagina redefine cor, peso ou tamanho
   da marca — quem precisar variar, varia AQUI. (Antes havia 4 aplicacoes divergentes:
   home 24px/#0b2b45, internas 22px/700/#14557f, pulso 21px, app branco/#4ecdc0.) */
.marca{display:inline-flex;align-items:center;gap:9px;font-family:var(--fonte-texto);font-weight:800;font-size:22px;letter-spacing:-.3px;line-height:1;text-decoration:none;color:inherit;}
.marca .aqua{color:#0b2b45;}
.marca .calc{color:#1e9e94;}
/* isola as partes da marca de colisoes de classe (ex.: .calc e tambem o cartao de resultado das calculadoras) */
.marca .aqua,.marca .calc{background:none;box-shadow:none;border:0;border-radius:0;padding:0;margin:0;font-weight:inherit;}
.marca-escura .aqua{color:#fff;}
.marca-escura .calc{color:#7fe0d4;}
/* o `padding` não é estética: a 414 px este link tinha 17 px de altura, abaixo do mínimo de
   24 px de alvo de toque. O padding cresce o ALVO sem mexer no tamanho da letra (28/08). */
.marca-rodape{font-size:17px;gap:6px;padding:5px 0;}

/* ---- motion: UMA entrada orquestrada por página; contagem 0->valor só no resultado ---- */
@keyframes sobe { to { opacity: 1; transform: none } }
.entra { opacity: 0; transform: translateY(14px);
         animation: sobe .7s cubic-bezier(.22,.8,.3,1) forwards }
.entra:nth-child(1) { animation-delay: .05s }
.entra:nth-child(2) { animation-delay: .17s }
.entra:nth-child(3) { animation-delay: .29s }
@media (prefers-reduced-motion: reduce) { .entra { animation: none; opacity: 1; transform: none } }

/* ---- Cabeçalho e rodapé: fonte única de CSS (12/08) ----
   O site tinha TRÊS implementações de nav — estilo.css (altura 64, fonte 14,5, peso 500),
   index.html (68 / 15 / 500 e um botão .btn-p próprio) e pulso.html (60 / 14 / 600 com
   .nav-btn). Como cada página declarava as suas regras depois do tokens.css, a cascata
   escolhia a local e o cabeçalho mudava de tamanho e de cor entre a home, o Pulso e o resto.
   Aqui fica a definição canônica; as locais foram removidas. Vale o mesmo para o rodapé. */
/* `nav.topo`, e não `nav` (28/08, achado do Franco no ar). A regra pegava a TAG, e `<nav>` é o
   landmark de qualquer navegação: os chips de ambiente do /peixes, /marinho, /calculadoras e
   /guias, e os índices de fichas, também são `<nav>`. Resultado: eles grudavam no topo e subiam
   POR CIMA do cabeçalho — cinco páginas, e o Franco viu no /marinho.
   Regra que nomeia a TAG reivindica todo mundo que usa a tag pelo motivo certo. */
nav.topo{position:sticky;top:0;background:rgba(255,255,255,.93);backdrop-filter:blur(8px);
  border-bottom:1px solid #e8edef;z-index:20;}
/* O `gap` aqui não é estética: com `space-between` e sem gap, o espaço entre a marca e o
   primeiro link é o que SOBRA da linha. Quando os 8 links + o botão + a busca ocupam tudo
   (acontece por volta de 1150px), não sobra nada — e a marca cola no "Início", virando
   "aquacalcInício". Foi o que apareceu na tela do Franco em 15/08. O gap garante a separação
   independentemente de sobrar espaço.

   E `white-space:nowrap` no link: sem ele, o item de flex encolhe abaixo do próprio texto e
   "Meu aquacalc" e "Para lojas" quebram em duas linhas dentro da barra, desalinhando a altura. */
nav.topo .container{max-width:1120px;margin:0 auto;padding:0 20px;display:flex;align-items:center;
  justify-content:space-between;gap:20px;height:64px;}
nav.topo .container>.marca{flex:0 0 auto;}
.nav-links{display:flex;gap:19px;align-items:center;font-size:14.5px;font-weight:600;
  flex:0 1 auto;min-width:0;}
.nav-links a{color:#33454f;text-decoration:none;white-space:nowrap;}
.nav-links a:hover{color:#157a72;}
.nav-links a.ativo{color:#157a72;}
/* O SECUNDÁRIO (27/08). A Baymard mede que misturar opção secundária no mesmo peso das
   categorias faz o usuário desistir do menu — 33% dos sites erram nisso no celular. Aqui a
   separação é de PÚBLICO: as seis categorias são do aquarista; `Meu aquacalc` é a conta dele e
   `Para lojas` é de outra pessoa. O traço e o cinza mais claro dizem "isto é outra coisa" sem
   esconder nada de ninguém. */
.nav-fim{display:flex;align-items:center;gap:inherit;margin-left:8px;padding-left:19px;
  border-left:1px solid #e2eaee;}
.nav-fim>a:not(.btn){color:#5f7079;font-weight:600;}
.nav-fim>a:not(.btn):hover{color:#157a72;}
/* O CTA do topo é definido INTEIRO aqui: index.html e pulso.html não carregam estilo.css,
   então qualquer parte que dependesse do .btn de lá saía diferente nessas duas páginas —
   foi exatamente isso que deixou o "Para lojas" menor e sem sombra no Pulso e na home. */
.nav-links a.btn,.nav-links a.nav-btn,.nav-links a.btn-p{display:inline-block;background:#cf4a28;
  color:#fff;padding:10px 20px;border-radius:11px;font-weight:700;font-size:14.5px;line-height:1.15;
  box-shadow:0 8px 20px rgba(232,93,58,.28);}
.nav-links a.btn:hover,.nav-links a.nav-btn:hover,.nav-links a.btn-p:hover{
  filter:brightness(.95);color:#fff;}
/* A BUSCA DO TOPO mora aqui pela MESMA razão do CTA acima (04/09, achado no ar): a regra estava
   no estilo.css, e a home e o Pulso — a página mais vista do site e a área logada — não o
   carregam. Resultado: caixa branca crua, com borda de navegador, exatamente no lugar onde
   mais gente olha. A regra de 28/08 já dizia onde é a casa (§2aj); faltava esta sala mudar. */
.nav-busca{display:flex;align-items:center;margin-left:6px;}
.nav-busca input{width:132px;padding:6px 10px;border:1px solid #d8e2e6;border-radius:16px;
  background:#fff;font:inherit;font-size:13.5px;color:var(--petrol-esc,#0b2b45);transition:width .18s,border-color .18s;}
.nav-busca input::placeholder{color:#6d777c;}
/* só alarga; o anel de foco é o da casa (abaixo) */
.nav-busca input:focus{width:190px;border-color:var(--petrol-claro,#1e9e94);}

/* FOTO DE ESPÉCIE ENVIADA POR AQUARISTA (05/09, C5-4). Três geradores desenham este bloco
   (peixes, plantas, marinho) — classe usada por mais de um componente mora na folha que TODA
   página carrega. É a lição do `.compartilhar`, aplicada antes de custar o defeito desta vez.
   O crédito não é legenda decorativa: é a primeira cláusula do termo que a pessoa assinou. */
.fe-foto{margin:18px 0 4px}
.fe-foto img{width:100%;height:auto;border-radius:14px;display:block;background:#eef4f6}
.fe-foto figcaption{font-size:12.5px;color:#6b757a;margin-top:6px}
.fe-galeria{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:12px;margin:14px 0 4px}
.fe-galeria .fe-foto{margin:0}
.fe-galeria .fe-foto img{aspect-ratio:3/2;object-fit:cover}

/* A BARRA DE COMPARTILHAR (04/09). O estilo vivia DENTRO do compartilhar.js (18/08, "quem
   desenha o componente é o componente") — e as oito páginas que desenham a barra com o
   card-share.js (litragem, lotação, peso, CO₂, iluminação, kit, construtor, meu-aquacalc) não
   carregam aquele script: a barra saía com botão cru do navegador justamente nas páginas de
   maior valor. Uma classe, dois componentes → a casa é a folha que TODA página carrega. O
   compartilhar.js parou de injetar; o verificar-site cobra que a regra mora só aqui. */
.compartilhar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:16px}
.compartilhar span{font-size:13.5px;color:#6b7378;font-weight:600}
.compartilhar button{padding:10px 16px;border-radius:10px;border:none;font-family:inherit;
  font-weight:700;font-size:14px;cursor:pointer;background:var(--petrol,#14557f);color:#fff}
.compartilhar button:hover{background:var(--petrol-esc,#0b2b45)}
/* A11 (02/09): o verde do WhatsApp fica — é a cor de reconhecimento deles; o texto vai ao
   petróleo da casa (branco sobre #25d366 dava 1,98; #0b2b45 dá 7,32, e 4,68 no hover). */
.compartilhar button.wpp{background:#25d366;color:#0b2b45}
.compartilhar button.wpp:hover{background:#1da851;color:#0b2b45}
.compartilhar button.sec2{background:#eef4f6;color:var(--petrol-esc,#0b2b45)}
.compartilhar button.sec2:hover{background:#dfeaee}

/* Faixa intermediária (15/08): entre 1000 e 1180px a barra cabe, mas no limite. Apertar o
   gap, a fonte e a busca é melhor que empurrar tudo para a tira rolável de celular — o mouse
   não rola tira horizontal com naturalidade. */
@media(max-width:1180px){
  .nav-links{gap:13px;font-size:13.8px;}
  .nav-fim{margin-left:5px;padding-left:13px;}
  .nav-links a.btn,.nav-links a.nav-btn,.nav-links a.btn-p{padding:9px 14px;font-size:13.8px;}
  .nav-busca input{width:104px;}
  .nav-busca input:focus{width:150px;}
}
/* Abaixo de 1000px não adianta apertar: vira a tira rolável. Era 900px e ficava espremido
   nos 100px do meio. */
@media(max-width:1000px){
  nav.topo .container{height:auto;flex-direction:column;align-items:flex-start;gap:8px;
    padding-top:10px;padding-bottom:10px;}
  /* DUAS LINHAS, e nada escondido (27/08). Aqui havia uma TIRA ROLÁVEL, e ela mostrava QUATRO
     dos dez itens a 414 px — medido no navegador. O resto ficava fora da tela sem nenhum sinal
     de que existia: é a *ilusão de completude* da NN/g, e o Franco bateu nela duas vezes
     procurando o /lojas.
     As três saídas eram hambúrguer, menu "Mais" e quebra de linha. As duas primeiras ESCONDEM
     categoria, que é exatamente o que a Baymard manda não fazer; e a objeção da NN/g a barras
     com mais de cinco itens é sobre CABER. Quebrar linha resolve caber SEM esconder — é a única
     que atende as duas pesquisas ao mesmo tempo. Custa ~40 px de altura, e a pesquisa de dobra
     (Chartbeat: 66% da atenção acontece abaixo dela) diz que 40 px se paga.
     O sangramento e o degradê que eu tinha escrito horas antes saíram junto: eram o remendo da
     tira, e a tira deixou de existir. O substituto veio antes de o velho sair (§2i). */
  .nav-links{width:100%;gap:8px;font-size:13.5px;flex-wrap:wrap;}
  .nav-links a{flex:0 0 auto;padding:8px 14px;background:#f2f6f8;border-radius:18px;}
  .nav-links a.btn,.nav-links a.nav-btn,.nav-links a.btn-p{padding:8px 14px;}
  /* no celular o secundário vira a ÚLTIMA fileira inteira, com traço em cima em vez de ao lado */
  .nav-fim{width:100%;margin-left:0;padding-left:0;padding-top:8px;margin-top:2px;
    border-left:0;border-top:1px solid #e8eef1;gap:8px;flex-wrap:wrap;}
  /* A BUSCA SOME NO CELULAR — e a regra MUDOU DE ARQUIVO em 27/08, não de conteúdo.
     Ela morava no `estilo.css`, e `index.html` e `pulso.html` NÃO CARREGAM o estilo.css: a busca
     ficava escondida em 602 páginas e visível em duas. Ninguém via, porque na tira rolável ela
     nascia fora da tela; a quebra de linha trouxe a divergência para o meio da tela, crua.
     Uma decisão, dois runtimes, duas respostas — o §2k. O `tokens.css` é o que TODA página
     carrega, então é aqui que a regra do topo mora.
     A DECISÃO em si continua a mesma e é do Franco: a Baymard observa que, quando o menu
     confunde, o usuário vai para a busca — mostrar a busca no celular é candidato a melhoria,
     e está anotado como decisão aberta, não como conserto silencioso meu. */
  .nav-busca{display:none;}
}

footer{padding:36px 0;text-align:center;color:#6b7378;font-size:13px;
  border-top:1px solid #eef2f4;margin-top:48px;}
footer p{max-width:1120px;margin:0 auto;padding:0 20px;line-height:1.9;}
footer a{color:#5b6469;text-decoration:none;}
footer a:hover{color:#157a72;text-decoration:underline;}

/* Pular para o conteúdo — o build-layout.py injeta este link em TODA página fora da EXCLUDE,
   inclusive nas que não carregam estilo.css (index, app, pulso-*). Por isso a regra mora aqui:
   tokens.css é a única folha que toda página carrega. Estava em estilo.css e o resultado era o
   link aparecendo como texto solto no canto superior esquerdo da home. Regra 80 no
   verificar-site.py impede que volte para lá. */
/* O FALLBACK NÃO É ENFEITE (28/08, medido no navegador). Este `background` era
   `var(--petrol-esc)` sem fallback — e `--petrol-esc` é definido no `estilo.css`, não aqui.
   Em 8 páginas que NÃO carregam o estilo.css ou que têm vocabulário próprio de tokens
   (`index`, `app` e as 6 do Pulso), a declaração era inválida: fundo transparente, texto branco,
   contraste 1,07 sobre o fundo claro. O atalho que existe SÓ para quem navega por teclado ficava
   invisível justamente quando recebia foco.
   Regra desta folha: `var()` aqui ou aponta para token que ESTA folha define, ou leva fallback —
   o tokens.css é carregado por páginas que têm o próprio vocabulário. */
.pula-para-conteudo{position:absolute;left:-9999px;top:0;z-index:100;background:var(--petrol-esc,#0b2b45);
  color:#fff;padding:12px 20px;border-radius:0 0 10px 0;font-weight:700;text-decoration:none;}
.pula-para-conteudo:focus{left:0;}

/* [hidden] TEM DE ESCONDER — a casa única (28/08, achado do Franco no site no ar).
   O atributo `hidden` só esconde por regra do NAVEGADOR, e regra de navegador perde para
   qualquer `display` declarado por nós. `.card{display:block}` e `.grade{display:grid}` venciam,
   e o filtro marcava `hidden` com o card seguindo na tela.
   Isso já tinha sido achado em 13/08, no hub de guias — e o conserto de então foi colar a regra
   DENTRO da página. Quatro páginas ganharam a própria cópia; a quinta (`/calculadoras`) foi
   escrita depois, com um comentário dizendo que a regra "vive no estilo.css", e ela NÃO vivia
   em lugar nenhum. O filtro do hub de calculadoras nunca filtrou, e nenhuma prova de código
   pegaria: o HTML e o JS estavam certos.
   A regra mora aqui pela mesma razão do `.pula-para-conteudo` logo acima — o `tokens.css` é a
   única folha que TODA página carrega (o `estilo.css` não é: `index` e `app` não o carregam).
   Guarda: `filtro-esconde-de-verdade.test.js` + regra no `verificar-site.py`. */
[hidden]{display:none!important;}

/* ANEL DE FOCO — a casa única (§2aj, 28/08, medido no navegador).
   Quem navega por teclado precisa VER onde está. O navegador desenha um anel sozinho, e era
   ele que segurava 753 páginas — mas basta um `outline:none` numa regra qualquer para apagá-lo
   em silêncio, e era o que acontecia no campo de busca do cabeçalho, em 746 páginas: medido com
   o campo focado, `outline: none`, sem sombra, e o `border-color` que a regra prometia nem
   chegava a aplicar. Trocar o anel do navegador por uma mudança de 1px de borda já seria piorar;
   trocar por NADA é apagar a única pista.
   A regra mora aqui pela mesma razão do `[hidden]` logo acima: o `tokens.css` é a única folha
   que TODA página carrega. E havia uma segunda casa — o `index.html` declarava este mesmo anel
   no seu `<style>`, com a mesma cor por outro nome (`--lagoa` = `--petrol-claro` = #1e9e94) e um
   seletor morto por erro de digitação (`.btn-.btn`). Sobrou uma casa.
   `:focus-visible` e não `:focus`: o anel aparece para teclado e não para clique de mouse, que
   é o comportamento que o navegador já dá — e é por isso que ninguém reclama dele. */
:focus-visible{outline:2px solid var(--petrol-claro,#1e9e94);outline-offset:2px;}

/* "Quero ter" da ficha de especie (0174, 28/08). Mora AQUI, e nao numa copia por ficha, pela
   licao do §2aj: sao 590 fichas, e regra copiada 590 vezes e 590 lugares onde ninguem percebe
   que falta a 591. */
.quero-ter{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:18px 0 4px}
.qt-bt{font:inherit;font-size:14px;font-weight:700;cursor:pointer;padding:9px 16px;border-radius:10px;
  border:1.5px solid var(--petrol-claro,#1e9e94);background:#fff;color:var(--petrol,#14557f)}
.qt-bt:hover{background:#f2fbfa}
.qt-bt.qt-on{background:var(--petrol-botao,#19847c);color:#fff;border-color:var(--petrol-botao,#19847c)}
.qt-nota{font-size:12.5px;color:#6b757a}
.qt-nota a{color:var(--petrol,#14557f)}

/* SINO DE AVISOS (item 3 da devassa, 28/08). Mora aqui, e não no `<style>` de cada tela do
   Pulso, porque são QUATRO telas: quatro cópias é o §2aj outra vez, e a quarta é sempre a que
   fica para trás. O painel usa `hidden`, cuja casa é a regra logo acima. */
.sino{position:relative;margin-left:auto}
.sino-bt{font:inherit;font-size:13px;font-weight:700;cursor:pointer;padding:6px 12px;border-radius:20px;
  border:1px solid #cfd8dc;background:#fff;color:var(--petrol,#14557f)}
.sino-bt[aria-pressed="true"]{background:var(--petrol,#14557f);color:#fff;border-color:var(--petrol,#14557f)}
.sino-n{display:inline-block;margin-left:6px;min-width:18px;padding:0 5px;border-radius:20px;
  background:#e6eef2;color:var(--petrol-esc,#0b2b45);font-size:12px;text-align:center}
.sino-n.sino-atraso{background:#b3261e;color:#fff}
.sino-painel{position:absolute;right:0;top:calc(100% + 6px);z-index:30;width:min(320px,88vw);
  background:#fff;border:1px solid #dbe2e6;border-radius:12px;box-shadow:0 10px 28px rgba(11,43,69,.14);
  padding:10px 12px}
.sino-lista{list-style:none;margin:0;padding:0;font-size:13px}
.sino-lista li{padding:8px 0;border-bottom:1px solid #eef2f4;line-height:1.45}
.sino-lista li:last-child{border-bottom:0}
.sino-lista li.sino-late b{color:#8c1d18}
.sino-quando{font-size:12px;color:#6b757a}
.sino-vazio{margin:4px 0;font-size:13px;color:#6b757a}

/* a seção "espécies que você quer ter" da minha-lista (0174) — mesma casa, pela mesma razão */
.eq-bloco .eq-item{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  border:1px solid #e6ecee;border-radius:10px;padding:9px 12px;margin-bottom:7px}
.eq-nome{font-weight:700;color:var(--petrol-esc,#0e3a4d);text-decoration:none}
.eq-nome:hover{text-decoration:underline}
.eq-tem{font-size:12.5px;color:#2a6e2c;background:#f0f8f0;border-radius:20px;padding:2px 10px}
/* 29/08 — o mesmo selo, em cinza: "já teve" é passado, não é aviso nem conquista. Verde é a
   cor de "você já tem", e reusá-la para o que não está mais diria a coisa errada de relance. */
.eq-tem.eq-tive{color:#5c6a70;background:#f2f4f5}
.eq-rm{margin-left:auto;font:inherit;font-size:16px;line-height:1;cursor:pointer;
  background:none;border:0;color:#8a959a;padding:2px 6px}
.eq-rm:hover{color:#b3261e}

/* 07/09 — a camada editorial da ficha de espécie (item 6 da devassa). O CSS mora aqui, e não em
   cada gerador, pela mesma razão do bloco de fotos: são três geradores e um bloco só, e classe
   escrita em três lugares diverge. A lista de fontes é discreta de propósito — ela existe para
   ser CONFERÍVEL, não para competir com o texto. */
.curiosidade{margin:26px 0 4px;padding:18px 20px;background:#f6fbfb;border-radius:14px}
.curiosidade h2{margin:0 0 10px}
.curiosidade h3{margin:16px 0 8px;font-size:16.5px}
.curiosidade p{margin:0 0 10px}
.curiosidade-aut{font-size:14px;color:#40525c}
.curiosidade-fontes{margin:14px 0 4px;font-size:13px;color:#5c6a70}
.curiosidade-fontes-lista{margin:0;padding-left:18px;font-size:13px;color:#5c6a70}
.curiosidade-fontes-lista li{margin:3px 0}
.curiosidade-fontes-lista a{color:#14557f}

/* 07/09 — a recusa ao lado do campo (a casa é site/campo.js). O CSS mora aqui, e não em cada
   página, pela mesma razão de sempre: são quatro telas e uma regra. A borda vermelha é o sinal
   de relance; a frase é a razão; e o `aria-invalid` é o que liga as duas para quem não vê a
   tela. O seletor de borda é por atributo de propósito — quem marcar o campo inválido ganha o
   destaque de graça, mesmo sem passar por esta casa. */
.campo-recusa{display:block;font-size:13.5px;color:#a4443c;margin:6px 0 0;line-height:1.45}
input[aria-invalid="true"],select[aria-invalid="true"],textarea[aria-invalid="true"]{
  border-color:#c0574f;background:#fdf7f6}
