  /* ================================================================
     TIPOGRAFIA — FrontPageAI
     Aplicado por letterman. Revisão de direção motivada pelo diretor do
     projeto: a versão anterior (Inter, referência Linear/Vercel/GitHub)
     comunicava "SaaS técnico" — não pela cor ou peso escolhidos, mas
     pelo próprio esqueleto neo-grotesco da fonte (terminais retos,
     aberturas fechadas, herança Helvetica/Neue Haas). Ajustar só peso
     ou tracking não muda essa leitura; por isso a família foi trocada.
     A direção seguinte foi ACESSÍVEL E ACOLHEDORA — vibe mais perto do
     Notion (hierarquia simples, pesos robustos em título, tamanhos
     generosos) do que do Duolingo (sem ir para o lado lúdico/infantil).
     Fonte usada nessa fase: Nunito Sans — humanista, com terminais
     levemente arredondados.

     REVISÃO 2 (esta): o usuário pediu explicitamente para usar o site
     da Apple (apple.com/br/store) como referência de FONTE — não de
     cor (paleta é do colorman) nem de layout (é do layoutman). O
     acolhimento "macio" do Nunito Sans (terminais arredondados,
     humanista) foi trocado por uma leitura mais NEUTRA e PRECISA,
     no espírito de SF Pro: hierarquia construída por tamanho + peso +
     tracking, não por "calor" no próprio desenho da letra.
     SF Pro é proprietária da Apple e não é distribuída para web fora
     do ecossistema Apple, então a prática aceita (e a que foi adotada
     aqui) é usar a pilha de fontes de sistema como família principal:
     -apple-system e BlinkMacSystemFont fazem o texto renderizar em
     SF Pro automaticamente para quem visita em macOS/iOS/iPadOS/
     Safari — exatamente a fonte real da Apple, sem custo de licença
     nem de carregamento — e cai em 'Segoe UI' (Windows), Roboto
     (Android/ChromeOS) ou Helvetica/Arial como fallback neutro
     equivalente em outros sistemas. Isso também elimina a dependência
     do Google Fonts (nenhum @import de webfont é mais necessário),
     o que é coerente com a ideia de "nativo do sistema operacional",
     não "importado".
     Continua existindo uma única família para título e corpo — não é
     a família que muda entre os dois (isso reintroduziria a lógica
     "técnica" de misturar fontes), a hierarquia vem de tamanho, peso
     e tracking, reforçando a proporção "expressivo no título, neutro
     no corpo" que a Apple usa em suas páginas de produto: títulos bem
     maiores e mais confiantes que o corpo (ver --fs-h1, --fs-price),
     mas com pesos mais contidos (Bold/Semibold, não o mais pesado da
     faixa) e tracking que aperta conforme o texto cresce — ver notas
     junto a cada regra abaixo (h1, h2, h3, .plan-card__amount, .badge
     etc.). Isso é uma evolução de identidade, não uma correção: o
     tom "amigo especialista" da direção anterior segue valendo na
     copy e no ritmo das seções — aqui é só a "letra" que fica mais
     precisa/confiável e menos macia.

     REVISÃO 3 (esta): a REVISÃO 2 foi feita só com base na documentação
     (HIG) do sistema Apple, sem ver o site de verdade. O diretor trouxe
     um print real de apple.com/br/store e pediu comparação olho no olho.
     O que o print confirma e o que ele corrige:
       - Pilha de fontes de sistema (-apple-system/BlinkMacSystemFont):
         CONFIRMADA. É a mesma decisão, só que agora com prova visual —
         nada muda aqui.
       - Peso dos títulos: o print mostra pouquíssimos tamanhos de fonte
         no total, com a hierarquia vindo sobretudo de PESO. O "Loja" (H1)
         e os nomes de produto em card usam um bold bem assertivo, não um
         semibold morno — por isso h2 (título de seção) e h3 (título de
         card) sobem de 600 para 700. O H1 já estava em 700; mantido.
       - Título de seção + subtítulo na MESMA LINHA/BLOCO: no print, frases
         como "As novidades. Veja o que acabou de chegar." usam o MESMO
         tamanho de fonte para as duas partes — só o peso muda (negrito
         → regular). O sistema anterior tratava o subtítulo como um texto
         bem menor (--fs-body-lg, 17px) abaixo de um h2 grande (28–38px),
         o que lia como "título + parágrafo de apoio", não como "uma frase,
         dois pesos". Ajuste: .section-subtitle passa a usar o mesmo
         var(--fs-h2) do título, com peso regular (400) e a margem entre
         os dois quase zerada — sem fundir os elementos (o HTML continua
         com h2 + p separados, por semântica/acessibilidade), mas visual e
         ritmicamente lendo como a continuação da mesma frase, não como um
         subtítulo à parte.
       - Rótulos pequenos em caixa alta (badge, acrônimo, títulos de
         rodapé, status de passo): o print mostra esses rótulos com peso
         mais leve do que o resto do sistema sugeria — não competem com o
         título do card. .concept-card__acronym desce de 700 para 600,
         alinhando com o mesmo peso já usado em .badge/.footer-nav__title/
         .step-card__status.
       - Contraste peso título↔legenda em cards (preview-card, plan-card):
         o print reforça bold no nome + regular na legenda logo abaixo.
         .preview-card__item-title sobe de 600 para 700; .plan-card__amount
         sobe de 600 para 700; .plan-card__period desce de 500 para 400 —
         mais distância de peso entre os dois.
       - Alinhamento: o print é fortemente alinhado à esquerda, nunca
         centralizado, nos títulos de página e de seção. Conferido: nenhum
         título deste arquivo usa text-align: center (só notas/legendas
         isoladas, como .pricing__note e .demo-notice__text, seguem
         centralizadas — não são títulos, então ficam como estão). Nenhuma
         mudança necessária aqui.
         SUPERADO NA REVISÃO 13 (letterman): pedido explícito e posterior
         do usuário centralizou o h2 global (ver regra h2 mais abaixo e
         bloco "REVISÃO 13" logo acima da paleta). A referência à Apple
         acima descrevia o estado do arquivo e a inspiração da ÉPOCA, não
         uma regra fixa — mantida aqui só como registro histórico do
         raciocínio, não como estado atual.
     Processo: esta revisão passou por 3 ciclos de comparação com o print
     antes de ser considerada pronta — ver notas de "ciclo 2" e "ciclo 3"
     junto às regras mais abaixo onde houve ajuste fino adicional.

     REVISÃO 5 (letterman): pedido explícito do diretor do projeto — o
     destaque de leitura (.text-highlight, hoje usado em "próximo passo
     certo" no h1 da home) passa a usar também uma FAMÍLIA DE FONTE
     diferente do resto do sistema, não só a cor (--color-highlight, já
     clareada pelo colorman na REVISÃO 4 de paleta, "Azul Névoa",
     #167AB5). Isso é uma mudança de direção pontual sobre a decisão
     estrutural da REVISÃO 2/3 acima: título e corpo continuam
     deliberadamente em UMA ÚNICA família (pilha de sistema, SF Pro/
     equivalentes) — a hierarquia entre eles segue vindo só de tamanho/
     peso/tracking, nunca de trocar de família, porque misturar fontes
     "por padrão" reintroduziria a lógica técnica que a REVISÃO 2
     explicitamente descartou. A exceção agora aberta é ESTRITAMENTE
     limitada a .text-highlight (e a qualquer reuso futuro da mesma
     classe/padrão) — --font-heading e --font-body continuam intocados,
     e nenhuma segunda família aparece em nenhum outro seletor deste
     arquivo. Isto NÃO é uma reversão da decisão "uma família só" —
     é uma exceção nomeada e contida a um único seletor.

     Fonte escolhida: Source Serif 4 (Adobe, SIL Open Font License, uso
     comercial livre), peso 700 (Bold) apenas. Escolhida entre 4 opções
     levantadas pelo researchdude (2 serifadas — Source Serif 4, Lora —
     e 2 sans com mais caráter que a pilha system-ui — IBM Plex Sans,
     Public Sans) porque:
       - O tom da marca é editorial/institucional, "amigo especialista"
         (ver notas de identidade em todo este arquivo) — uma serifada é
         o sinal tipográfico mais direto de "confiança/registro
         editorial" que existe, e cria um contraste de FORMA (serifa vs.
         sem-serifa) muito mais perceptível para um destaque de 1-3
         palavras do que qualquer contraste possível dentro da própria
         família sans (IBM Plex Sans e Public Sans têm proporções
         próximas da pilha SF Pro/Segoe UI — as três foram desenhadas
         para UI —, então o contraste ficaria sutil demais).
       - Entre as duas serifadas, Source Serif 4 foi preferida a Lora
         por ter desenho mais contido, pensado para tela (sem o calor
         editorial-cultural do Lora, cujo itálico tem DNA caligráfico e
         risco de ler "decorativo" — o pedido foi por "sério mas
         acessível", nunca playful/infantil). Source Serif 4 tem eixo de
         Optical Size (8-60), então o corte usado em título vem desenhado
         para exibição grande, não uma versão de texto de livro esticada.
       - Só o peso 700 (Bold) é carregado — é o único peso em uso hoje
         (o destaque herda font-weight:700 do h1 pai) e a fonte variável
         completa (200-900, com itálico) não precisa ser baixada para um
         uso de 1-3 palavras. Itálico não é usado.

     Implementação/performance (orientação do researchdude, aplicada
     aqui já que este agente não acessa rede):
       - Google Fonts, URL com peso único e display=swap:
         https://fonts.googleapis.com/css2?family=Source+Serif+4:wght@700&display=swap
         — display=swap evita texto invisível durante o carregamento
         (FOIT): o navegador renderiza no fallback (--font-body, pilha de
         sistema) até a webfont chegar, depois troca.
       - <link rel="preconnect" href="https://fonts.googleapis.com"> e
         <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
         adicionados junto do link de stylesheet, para adiantar a conexão
         antes do CSS pedir a fonte.
       - Adicionados nas 7 páginas HTML, não só em index.html (onde o
         destaque é usado hoje): o custo extra é pequeno (1 família, 1
         peso, arquivo já subsetado pelo Google Fonts), e .text-highlight
         foi desenhado para ser reutilizável em qualquer página do site —
         deixar o link só em index.html criaria uma dependência silenciosa
         (a classe funcionaria em outra página só com o fallback, sem
         erro nem aviso, até alguém lembrar de replicar o link). Preferi
         pagar o pequeno custo fixo em todas as páginas a arriscar essa
         inconsistência silenciosa.
       - Novo token --font-highlight: "Source Serif 4", var(--font-body)
         — nunca fica sem fallback: se a webfont falhar ao carregar, cai
         direto na mesma pilha de sistema usada no resto do site, nunca
         num serifado genérico do navegador.
       - .text-highlight ganhou letter-spacing:0 (o tracking negativo
         herdado do h1, -0.02em, foi calibrado para a pilha sans do
         sistema; um serifado bold neste tamanho não precisa do mesmo
         aperto óptico) — cor e demais propriedades continuam herdadas
         do elemento-pai, inalteradas.

     REVISÃO 6 (letterman): tipografia do novo bloco .next-step (aside de
     transição de funil entre páginas, adicionado pelo writerman ao fim
     do <main> de 6 das 7 páginas — todas exceto lista-de-espera.html,
     que é o destino final do funil, não uma etapa de transição). O
     componente ainda não tinha nenhum CSS; a estrutura HTML é idêntica
     nas 6 páginas (.next-step__eyebrow, .next-step__text,
     .next-step__link). Espaçamento/padding/caixa deste bloco ficam para
     o layoutman, que trabalha depois nesta mesma rodada — aqui só o
     comportamento tipográfico do texto (fonte, tamanho, peso, tracking,
     cor, alinhamento).
     Decisões, mapeadas a papéis já existentes no sistema (mesmo
     raciocínio de "não inventar um componente do zero"):
       - .next-step__eyebrow segue exatamente o padrão de rótulo curto já
         usado em .badge/.footer-nav__title/.concept-card__acronym (caixa
         alta, peso 600, --fs-eyebrow, tracking 0.04em) — mesmo papel de
         "isto é um rótulo, não uma frase". Cor: --color-brand (Marinho
         estrutural), não --color-accent nem --color-warning-*. O papel
         do Marinho no sistema já é marcar "isto é FrontPageAI,
         estrutura/sequência" (mesmo uso em .step-card__number) — o
         eyebrow "Próximo passo" é literalmente um marcador de progressão
         sequencial no funil, o mesmo papel; não é um aviso
         (--color-warning, reservado para pré-lançamento) nem a própria
         ação (--color-accent, reservado para o link clicável logo
         abaixo, para não competir com ele). Contraste: --color-brand
         sobre --color-bg-page já auditado pelo colorman em ~7,0:1, bem
         acima do mínimo 4,5:1 — testei a alternativa --color-accent para
         este rótulo e ela mede ~4,57:1 sobre o mesmo fundo (passa, mas
         com folga bem mais apertada); prefiro reservar a folga maior
         para um rótulo que se repete em 6 das 7 páginas.
       - .next-step__text é comparável em papel a .section-subtitle/
         .hero-description (frase corrida legível), mas precisa comunicar
         convite a continuar, não um parágrafo neutro de apoio — por isso
         usa --fs-body-lg (o mesmo tamanho de .section-subtitle/
         .hero-description, nenhum tamanho novo) com peso 500 (Medium) em
         vez do 400 regular dessas duas: um degrau de assertividade a
         mais, sem chegar no 600 usado em títulos de item
         (.preview-card__item-title, .faq-item__question) e bem abaixo do
         600/700 usado em h2/h3 — não compete com um título de verdade.
         Cor: --color-text-heading (mais escura/alto contraste que
         --color-text-body ou --color-text-muted), o mesmo tom usado em
         .preview-card__item-title e .faq-item__question — dois outros
         casos já existentes de "texto mais assertivo que corpo comum,
         mas não um h2/h3", então este uso segue precedente, não cria um
         quarto papel de cor de texto. max-width: 68ch mantém a linha em
         comprimento legível (mesma lógica de .hero-description 62ch/
         .section-subtitle 60ch/.waitlist__text 65ch; um pouco mais longo
         aqui porque a frase carrega o link inline no final).
       - .next-step__link segue o mesmo papel de link de ação que
         .source-card__link: cor --color-text-link (alias de
         --color-accent, o azul de Ação/CTA), peso 600, hover/focus com
         --color-accent-hover — mesmo par de estados já usado em
         .source-card__link:hover e .site-nav__link:hover, nenhuma cor
         nova. Tamanho e tracking não são redefinidos: como o link é
         inline dentro de .next-step__text (não um parágrafo próprio, ao
         contrário de .source-card__link), ele herda o --fs-body-lg/500
         do texto ao redor por padrão (font-size/font-weight herdam
         normalmente em elementos inline sem UA override) — só cor e
         peso mudam, suficiente para diferenciar o link sem quebrar o
         fluxo da frase.
       - Transição final do funil (faq.html → lista-de-espera.html) — a
         conversão mais importante do site: adicionei o modificador
         .next-step--final (aplicado só no <aside> de faq.html) para dar
         um degrau a mais de assertividade dentro do MESMO padrão de
         classes, sem virar um componente à parte: o eyebrow passa de
         --color-brand para --color-accent (aqui "Próximo passo" já é,
         na prática, a própria chamada à ação, não só um marcador de
         sequência — faz sentido puxar para o tom de Ação); o texto sobe
         de peso 500 para 600 e o link de 600 para 700 — mesma família
         tipográfica, mesmos tokens de cor do padrão já criado, só um
         degrau a mais de peso/cor no ponto de maior conversão do funil.

     REVISÃO 7 (letterman): reforço tipográfico do wordmark .brand__name
     (marca "FrontPageAI", usado no header e no rodapé — .brand__name
     continua sendo a ÚNICA fonte de verdade de peso/tamanho/tracking
     para os dois contextos; .site-footer .brand__name segue só
     sobrescrevendo color, papel do colorman, não tocado aqui). Pedido
     explícito do diretor do projeto: hoje o wordmark usa peso 700 a
     1.25rem, tracking 0 — os mesmos valores usados em vários outros
     elementos do sistema (ex.: .preview-card__title também é peso 700,
     só que a --fs-small), então não lia como uma marca de peso, e sim
     como "mais um texto em negrito qualquer".

       PESO — pesquisado com researchdude antes de decidir (pergunta:
       font-weight 800/900 rendem de forma distinta de 700 na pilha de
       fontes de SISTEMA deste projeto, ou o navegador só "gruda" no
       Bold mais próximo sem efeito visual?). Achado: é seguro e
       tecnicamente efetivo na maior parte da pilha — SF Pro (fonte
       variável de verdade em macOS/iOS/Safari, via -apple-system/
       BlinkMacSystemFont) expõe cortes Heavy/Black distintos em 800 e
       900; Segoe UI clássica (Windows) e Roboto (Android/ChromeOS) têm
       um único corte Black real que 800 e 900 acessam igualmente (os
       dois números colapsam no mesmo resultado nessas duas plataformas,
       sem diferença entre si, mas ainda claramente mais pesado que o
       Bold 700); no fallback final Helvetica/Arial o navegador usa o
       Bold já existente sem negrito sintético malfeito, porque toda a
       pilha declarada sempre tem uma face Bold real em algum ponto —
       nenhuma plataforma comum produziria um "faux bold" quebrado.
       Ou seja: tecnicamente, subir para 900 seria uma aposta segura.

       DECISÃO, apesar disso: font-weight permanece 700, sem alteração.
       Não é limitação técnica — é a própria restrição de hierarquia
       pedida nesta rodada: o wordmark não pode ficar mais pesado que
       h1. h1 já está no teto de peso do sistema (700, Bold) por escolha
       deliberada, não por limitação técnica — a REVISÃO 2 deste mesmo
       bloco já registra que "Apple raramente usa o peso mais pesado da
       faixa em headlines de marketing", ou seja, o sistema inteiro já
       evita o extremo 800/900 por princípio, não só em h1. Levar
       .brand__name a 800/900 romperia essa regra duas vezes: tornaria o
       wordmark mais pesado que o próprio h1 (quebra literal de
       hierarquia) e criaria, fora do caso isolado já existente em
       .preview-card__number (numeral pequeno de 0.875rem dentro de um
       chip circular, não um elemento de leitura/identidade), o primeiro
       uso de peso extremo num elemento de identidade textual do site.
       Preferi manter esse teto e diferenciar o wordmark por TAMANHO e
       TRACKING, não por peso.

       TAMANHO — de 1.25rem (valor solto) para var(--fs-h3) (1.375rem):
       reaproveita um token já existente na escala em vez de inventar um
       valor novo, mesmo raciocínio de reuso já usado em outros pontos
       deste arquivo. Isso abre a diferença para --fs-small (0.9375rem,
       nav ao lado) de ~1.33x para ~1.47x, e coloca o wordmark no mesmo
       degrau de tamanho do menor título do sistema (h3) — perceptivelmente
       maior que antes, mas ainda claramente abaixo de --fs-h2 (clamp
       1.875rem a 2.5625rem) e --fs-h1 (clamp 2.5625rem a 4rem),
       preservando a hierarquia de tamanho. Conferido contra o layout do
       header (--header-height: 48px; .brand em inline-flex com gap
       var(--space-2), 8px, ao lado do ícone de 24px): 22px de texto cabe
       com folga dentro de 48px de altura de header, e o crescimento de
       ~2px em relação ao valor anterior é pequeno o bastante para não
       apertar .site-nav (flex:1, centralizado no espaço restante) —
       nenhum ajuste de layout foi necessário.

       TRACKING — de 0 para -0.005em, o mesmo valor já usado em h3 (ver
       regra h3 acima, letter-spacing -0.005em), seguindo a própria regra
       do sistema já documentada na REVISÃO 3 deste bloco ("quanto maior
       o texto, mais negativo o letter-spacing"): como o wordmark passou
       a ocupar o mesmo degrau de tamanho de h3, adota o mesmo degrau de
       tracking, em vez de um valor novo desalinhado da escala. Tracking
       negativo, não positivo, foi escolha deliberada: um tracking
       positivo é a leitura clássica de "logotipo espaçado", mas
       "FrontPageAI" não é caixa alta (é mixed-case) — abrir tracking em
       texto mixed-case tende a soltar as maiúsculas internas de forma
       estranha, enquanto o tracking negativo já é o idioma visual que o
       resto do sistema usa para "texto que cresce fica mais denso/
       confiante" (h1/h2/h3) — mantém o wordmark coerente com essa mesma
       lógica, só um degrau abaixo de onde ele ficaria se fosse, de fato,
       um h3.

       RESULTADO: .brand__name (header e rodapé, via a mesma regra base)
       passa a ler como uma combinação única no sistema — tamanho de h3
       (1.375rem) + peso de h1 (700, mais pesado que o 600 de h2/h3) +
       tracking de h3 (-0.005em) — perceptivelmente mais assertivo que
       antes e mais destacado dos elementos vizinhos (nav, títulos de
       card), sem exceder h1 em nenhum eixo e sem introduzir peso extremo
       (800/900) fora do caso isolado já existente em
       .preview-card__number. font-family e color de .brand__name (e de
       .site-footer .brand__name) não foram tocados — papel do colorman.

     REVISÃO 8 (letterman): "tipografia/cor por intenção de frase" — pedido
     do diretor do projeto motivado pela nova identidade rosa/magenta
     (REVISÃO 7 do colorman). Dois achados, um deles crítico:

     ACHADO CRÍTICO — .text-highlight não estava usando --color-highlight.
     A REVISÃO 6 (colorman), ainda na era "Cinza Editorial" (paleta azul
     antiga), tinha redirecionado .text-highlight de --color-highlight
     para --color-text-heading (ver comentário antigo ainda presente
     junto à regra) — decisão correta NAQUELE momento (o pedido de então
     era "tirar o azul do texto"). Quando o colorman migrou a paleta para
     rosa/magenta (REVISÃO 7) e recalculou --color-highlight do zero
     especificamente para este único consumidor (H=331°/S=100%/L=58%,
     medido contra os DOIS fundos possíveis, claro e escuro, porque este
     token não muda de tema — ver comentário junto ao token no :root), a
     regra .text-highlight nunca foi atualizada de volta para efetivamente
     consumir esse token: continuava presa ao redirecionamento neutro da
     REVISÃO 6. Resultado prático: a palavra de destaque do H1 renderizava
     idêntica ao resto do título (mesma cor, só fonte serifada diferente)
     — o oposto de "se destacar de verdade", o pedido literal desta
     rodada. CORRIGIDO: color volta a var(--color-highlight).

     REFORÇO TIPOGRÁFICO — não bastava só religar a cor (ela foi calculada
     para bater o PISO de contraste 3:1, não para "impacto"); o pedido
     explícito era um destaque que se destaque de verdade. Em vez de
     forçar a cor a ficar mais saturada/escura (fora do meu escopo — hex é
     decisão do colorman, já tomada), reforcei o CONTRASTE DE FORMA ao
     redor dela: .text-highlight ganha font-style: italic, além do
     font-family serifado (--font-highlight, Source Serif 4) e peso 700
     já existentes. Isto não é um capricho — é a mesma gramática visual
     que a LOGO NOVA já usa: "FRONTPAGE" em caixa alta sans bold e "AI" em
     serifado itálico, nitidamente maior e com mais presença que o resto
     do wordmark (conferido visualmente em assets/logo.png). Aplicar essa
     mesma lógica (upright sans para o texto neutro, serifado itálico para
     a palavra que precisa saltar aos olhos) faz .text-highlight ecoar a
     própria identidade de marca, não só "uma fonte diferente qualquer".
     Resultado: três eixos de diferença simultâneos entre o destaque e o
     resto do H1 — FORMA (serifa vs. sem-serifa), POSTURA (itálico vs.
     ereto) e COR (--color-highlight, dedicado, vs. --color-text-heading
     do resto do título) — sem tocar tamanho, tracking (mantido em 0,
     already calibrado para serifado bold neste tamanho, ver REVISÃO 5) ou
     qualquer propriedade fora do domínio de tipografia/cor. Considerei e
     descartei aumentar o font-size do span: os três eixos acima já
     comunicam "isto é o clímax da frase" com folga, e alterar o tamanho
     de um trecho inline dentro do H1 fluido arrisca mudar a altura da
     linha/quebra de texto — território que prefiro deixar intacto para o
     layoutman, coerente com o limite desta rodada ("não mude posição/
     espaçamento/estrutura").
     IMPLEMENTAÇÃO — a URL do Google Fonts (nas 7 páginas HTML) carregava
     só o corte ereto (wght@700, sem eixo ital). Como o único uso de
     --font-highlight agora é itálico (nenhum outro seletor usa essa
     família), troquei a query para carregar SÓ o itálico
     (ital,wght@1,700) em vez de adicionar um segundo peso: sem isso, o
     navegador teria que fabricar um itálico sintético (oblíquo, glifos
     inclinados por transformação, não desenhados) a partir do corte
     ereto — resultado visualmente pior que o itálico de verdade que a
     Source Serif 4 já desenha nativamente. --font-highlight continua com
     var(--font-body) como fallback (nunca cai num serifado genérico do
     navegador); no fallback, o navegador aplica itálico sintético sobre a
     pilha de sistema (comportamento padrão do CSS, aceitável como
     degradação de último recurso, não o caminho normal).
     Contraste verificado nos dois temas (o próprio token já foi calibrado
     por tema, eu só confirmei): --color-highlight #FF2990 é FIXO (não
     muda com [data-theme="dark"]) e mede ~3,20:1 sobre --color-bg-light
     e ~3,22:1 sobre --color-bg-dark — cruza o piso de 3:1 de texto GRANDE
     (herda --fs-h1, sempre ≥41px) nos dois modos, com folga quase
     idêntica dos dois lados; itálico/serifado/peso 700 não alteram
     contraste (são propriedades de forma, não de cor).

     SEGUNDO ACHADO — .demo-notice__text (aviso fixo de "protótipo de
     demonstração, nada funciona", presente em todas as 7 páginas) usava
     peso 400 (padrão herdado do body), o mesmo peso neutro de um
     parágrafo qualquer, apesar de já carregar o papel semântico de AVISO
     (herda --color-warning-text/--color-warning-bg do elemento pai
     .demo-notice). Isso destoava do próprio sistema: todo outro texto de
     papel "aviso" no site (.badge--prelaunch, .step-card__status) já usa
     peso 600 por convenção. Como .demo-notice__text é uma frase corrida
     inteira (não um rótulo curto em caixa alta como os outros dois), 600
     ficaria pesado demais para o texto todo; segui em vez disso o
     precedente já criado por .next-step__text (frase corrida que precisa
     de "um grau a mais de assertividade que corpo neutro, sem virar
     rótulo/título") — peso 500. Cor/fundo (já semânticos, corretos) não
     tocados; fixo/sticky em toda página é decisão de layoutman, não
     tocado. Contraste inalterado pelo peso (só a cor importa para WCAG);
     --color-warning-text sobre --color-warning-bg não muda por tema (não
     é redeclarado dentro de [data-theme="dark"]), então o mesmo par vale
     nos dois modos.

     VARREDURA COMPLETA (demais textos revisados, sem alteração) — hero-
     title/description (h1 global + --color-text-body, papel título/corpo
     já corretos), hero-disclaimer (--color-text-muted, papel de nota
     discreta já correto, distinto do aviso de demo), badge--prelaunch
     (semântica de aviso já correta), section-title/subtitle (herdam h2 +
     --color-text-muted, papel título/apoio já correto), step-card__status
     (aviso, 600, correto) vs. step-card__number (estrutural/sequencial,
     --color-brand-dark, correto — os dois já comunicam papéis distintos
     dentro do mesmo card), concept-card__acronym (rótulo estrutural,
     --color-brand-dark + override --color-brand-light no escuro já
     corrigido pelo colorman, intocado), source-card__link (ação, dupla
     --color-text-body/--color-text-heading + underline permanente, papel
     de link sem cor saturada — decisão deliberada da REVISÃO 6 "Cinza
     Editorial" do colorman, mantida: mexer nisso reabriria uma decisão de
     paleta fora do escopo desta rodada, que é refinar mapeamento
     dentro dos tokens já existentes, não reabrir qual token existe),
     plan-card__amount/period (heading forte vs. muted leve, hierarquia
     preço/período já correta), faq-item__question (peso 600 + heading,
     já lê como título de item), next-step__eyebrow/text/link (mapeamento
     já correto e documentado na REVISÃO 6 acima — NOTA: o comentário da
     REVISÃO 6 antiga, escrito na época, descreve .next-step__link como
     usuário de --color-text-link; a regra real hoje usa --color-text-body
     /--color-text-heading + underline, redirecionada junto com
     .source-card__link na "Cinza Editorial" — é o MESMO padrão do link de
     ação em todo o site, então nenhuma inconsistência real existe, só a
     nota antiga ficou desatualizada; não fiz nenhuma mudança), footer-
     brand__description/legal-note/legal-copyright (três papéis
     coerentemente tratados: descrição = rgba(255,255,255,0.72) neutro,
     as duas notas legais = mesmo rgba(255,255,255,0.6)/--fs-caption
     porque as DUAS são, de fato, o mesmo papel comunicativo — aviso legal
     formal — não um caso de "peso genérico escondendo intenções
     diferentes").

     REVISÃO 9 (letterman): tipografia dos 9 blocos novos do index.html
     (writerman escreveu o texto, colorman acabou de resolver cor/fundo/
     borda na REVISÃO 10 dele — ver bloco "Blocos novos do index.html"
     mais abaixo no arquivo). Aqui só fonte/tamanho/tracking/leading —
     nenhuma cor nova além de uma exceção pontual (.hero-form__label, sem
     dono de cor ainda; ver nota junto à regra). Nenhum tamanho ou família
     novos foram criados — tudo reaproveita a escala já existente
     (--fs-eyebrow/-caption/-small/-body/-body-lg/-h3, --lh-*, --font-body/
     -heading/-highlight).

       H1 do hero (writerman reescreveu a frase, "próximo passo certo" saiu
       do texto) — CONFERIDO: <span class="text-highlight"> continua
       aplicado a um trecho do novo H1 ("evidência clara"), com o mesmo
       tratamento de 3 eixos da REVISÃO 8 (serifado/itálico/cor dedicada)
       — nenhuma mudança necessária, a classe é reaproveitada corretamente
       pelo writerman. Hierarquia H1/.hero-description também confirmada
       intacta (nenhum dos dois foi tocado nesta rodada).

       .hero-form__input — primeiro campo de texto do site (ver REVISÃO 10
       do colorman, cor já resolvida). font-size: var(--fs-body) (17px, não
       --fs-small dos botões ao lado — texto DIGITADO precisa de um
       tamanho confortável de leitura/edição e ≥16px evita o zoom
       automático de formulário no iOS; ficar menor só pra "combinar" com
       o botão pioraria a usabilidade por um ganho estético pequeno);
       font-weight 400 (o botão ao lado é 600 porque é um rótulo de ação,
       o campo é texto neutro de entrada — o contraste de peso entre os
       dois já comunica "isto é ação, isto é dado", sem precisar de
       tamanhos desiguais). Placeholder herda o mesmo font-family/size/
       weight do campo (nenhuma fonte diferente, nenhum itálico): o
       source-card__url já documentou, para o outro caso de URL do
       sistema, que URLs NÃO devem ganhar tratamento "técnico" (mono,
       itálico) — o mesmo raciocínio vale aqui, é a mesma classe de
       conteúdo (URL de exemplo). .hero-form__label (rótulo do campo,
       ainda sem cor definida por ninguém) — tratado como um rótulo de
       formulário discreto: --fs-caption, peso 600, --color-text-muted
       (mesmo tom discreto já usado em legendas/disclaimers do sistema,
       nenhuma cor nova). NOTA PARA O DIRETOR: não decidi se este label
       deve ficar visível ou visualmente oculto (técnica sr-only) — isso é
       texto redundante com o placeholder e pode ser mais apropriado
       oculto (o placeholder já comunica visualmente o mesmo), mas
       esconder um elemento é uma decisão de posicionamento/acessibilidade
       fora do meu escopo de tipografia; deixei o tratamento tipográfico
       pronto para os dois cenários (funciona visível, e não muda nada se
       for ocultado depois).

       .aviso-analise__text — colorman já tratou como "conteúdo central,
       não uma nota discreta" (--color-text-body, não muted). Segui a
       mesma leitura no tamanho: --fs-body/--lh-body (não --fs-caption dos
       disclaimers menores como --sources__disclaimer), com max-width:
       65ch para manter a linha em comprimento legível — mesma faixa já
       usada por outros blocos de texto corrido do sistema (.hero-
       description 62ch, .next-step__text 68ch, .waitlist__text 65ch).

       .beneficios__item-text / .processo__item-text — mesmo papel que
       .step-card__description/.concept-card__description (texto de apoio
       dentro de um item curto): --fs-small/--lh-body, reaproveitando o
       par já usado nesses dois outros casos. Títulos (h3) não precisam de
       regra nova — já herdam a base global h3 (peso 600, --fs-h3,
       tracking -0.005em).

       .processo__link a / .planos-teaser__link a — mesmo papel de "link
       de saída secundário" que .source-card__link já cobre (cor definida
       pelo colorman): --fs-small, peso 600, reaproveitando o par exato já
       em uso nesse outro link.

       .mds__term/.mds__definition — PRIMEIRA aparição do padrão medido/
       detectado/sugerido (mesmo status de "decisão de referência" que o
       colorman deu à cor). .mds__term precisa ler como RÓTULO DE
       CATEGORIA, não como início de frase: caixa alta, peso 700,
       --fs-h3 (mesmo degrau de tamanho que um título de card, dado que o
       termo cumpre o mesmo papel estrutural de "título do item" que um
       h3 cumpriria num step-card/source-card, ainda que marcado como
       <dt>), tracking 0.02em — não o 0.04em do --fs-eyebrow (badges/
       rótulos pequenos): esse valor mais aberto foi calibrado para texto
       ~12-13px: em --fs-h3 (22px) o tracking mais fechado de
       .brand__wordmark-primary (mesma combinação uppercase+bold+--fs-h3
       already em uso no wordmark) é o precedente certo a seguir, não o
       do eyebrow. .mds__definition segue o mesmo par de
       .step-card__description/.beneficios__item-text: --fs-small/
       --lh-body — é a mesma função (texto de apoio de um item), mesmo
       tratamento.

       .sources-block__text — colorman documentou que este bloco é o
       "mesmo papel e tratamento visual" de .sources__disclaimer (cor já
       herdada de lá); segui a mesma equivalência no tamanho:
       --fs-caption/--lh-small, idêntico ao par já usado naquele elemento,
       não um valor novo.

       .planos-teaser__text — colorman documentou a mesma fórmula visual
       de fundo/borda de .aviso-analise ("painel neutro"); segui a mesma
       equivalência tipográfica: --fs-body/--lh-body, igual ao
       .aviso-analise__text acima — os dois são painéis de mesmo peso
       editorial, não um "menor" que o outro.

       .faq-block__question/__answer — mesmo padrão que .faq-item já usa
       em faq.html (colorman já tratou como "portado", cor incluída):
       completei a tipografia com os MESMOS valores exatos de
       .faq-item__question (peso 600, --fs-body, --lh-heading) e
       .faq-item__answer (--fs-small, --lh-body) — não é uma escolha nova,
       é replicar o par já validado. O indicador "+" (::after) ganhou
       font-size: 1.25rem, o mesmo valor já usado em
       .faq-item__question::after (bloco de layout mais abaixo no
       arquivo) — sem isso o glifo herdava o tamanho do texto da pergunta
       (--fs-body, 17px) e ficava pequeno/desproporcional perto do "+"
       maior já em uso no FAQ da página faq.html; agora os dois FAQs do
       site têm o mesmo indicador visual.

       .cta-final — mesmo papel de encerramento que .waitlist__box já
       cumpre (painel escuro + CTA), mas com uma diferença estrutural: lá
       o título de seção fica FORA da caixa escura (.section-title) e só
       parágrafos (--fs-body) ficam dentro dela; aqui o <h2> está DENTRO
       do próprio painel escuro. Decidi NÃO sobrescrever tamanho/peso do
       h2 — a base global (peso 600, --fs-h2, tracking -0.015em) já é o
       maior degrau de título de seção do sistema, o MESMO usado por
       "Perguntas frequentes"/"Fontes e transparência"/todos os outros h2
       da página; um encerramento de funil não precisa ficar
       tipograficamente mais pesado que os títulos de seção que vieram
       antes dele para comunicar destaque — o contraste já vem do fundo
       escuro (decisão do colorman) sobre uma página inteira clara.
       .cta-final__text usa --fs-body/--lh-body, o mesmo par de
       .waitlist__text — mesmo papel (texto de apoio dentro do painel
       escuro), mesmo tratamento, cor já resolvida pelo colorman
       (--color-text-on-brand-muted).

     REVISÃO 10 (letterman): "enriquecer" a tipografia do site inteiro —
     pedido explícito do usuário, citando o H1 do hero (index.html) como
     referência do que funcionou: o contraste de registro entre a pilha
     sans-serif do resto do H1 e o trecho "evidência clara" em
     .text-highlight (Source Serif 4, itálico, peso 700, --color-highlight)
     — mesma gramática visual já usada no wordmark "FirstPage" + "AI". O
     pedido foi estender esse tipo de tratamento (não necessariamente essa
     frase) para as outras 7 páginas, de forma coerente com a identidade já
     estabelecida — não inventar um efeito novo por página.
       DECISÃO — em vez de espalhar .text-highlight por qualquer texto,
       apliquei em exatamente UM ponto por página: o título principal de
       cada página (o <h2 class="section-title">/<h1> do topo de
       como-funciona/como-orientamos/faq/lista-de-espera/planos/
       seo-aeo-geo/analise — o mesmo papel estrutural que .hero-title
       cumpre em index.html), marcando 1-3 palavras já existentes no
       texto (nenhuma palavra nova, só <span class="text-highlight">
       ao redor de um trecho que já estava lá):
         como-funciona.html    → "próximo passo" (eco literal do rótulo
                                  .next-step__eyebrow "Próximo passo" que
                                  aparece 5x no site — reforça o mesmo
                                  termo como vocabulário de marca)
         como-orientamos.html  → "orientamos"
         faq.html               → "frequentes"
         lista-de-espera.html  → "de espera"
         planos.html            → "sem letras miúdas" (linguagem de
                                  transparência, mesma família de "em vez
                                  de achismo" do hero)
         seo-aeo-geo.html       → "sem complicação"
         analise.html            → "gratuita"
       MOTIVO DE FICAR SÓ NO TÍTULO (não em .section-subtitle/
       .next-step__text/parágrafos) — CONTRASTE, não estética: --color-
       highlight (#5299C9) mede ~3,1:1 contra o fundo claro e ~3,65:1
       contra o escuro (ver bloco "PARTE 4" na paleta, acima) — validado
       SÓ para texto GRANDE (piso WCAG 3:1: ≥24px regular ou ≥18,66px em
       peso 700/bold). --fs-h2/--fs-h1 (30-64px) e --fs-h1 do hero
       cumprem esse piso em qualquer breakpoint (o clamp() nunca desce
       abaixo de 30px para h2). --fs-body-lg (18px, usado em
       .section-subtitle/.next-step__text/.analise__intro) fica ABAIXO
       do piso de "texto grande" mesmo em peso 700 (18px < 18,66px) — ou
       seja, precisaria do piso de 4,5:1 de texto normal, que
       --color-highlight não atinge. Em vez de aplicar a cor errada
       nesses parágrafos (falha de acessibilidade) ou inventar uma
       segunda cor "highlight para corpo" sem pedido do usuário (fora do
       escopo desta rodada — decisão de paleta é do colorman), limitei o
       efeito aos títulos, onde ele já está auditado e aprovado nos dois
       temas. Nenhuma cor nova, nenhum token novo, nenhuma fonte nova
       carregada (Source Serif 4 já estava no <link> das 8 páginas desde
       a REVISÃO 5) — só HTML (<span class="text-highlight">) reaplicando
       uma classe/decisão que já existia.
       .faq.html e .lista-de-espera.html não têm .section-subtitle (só o
       título) — não precisou de ajuste adicional ali.
       Testado visualmente (claro e escuro) em index.html, como-
       funciona.html e planos.html antes de fechar esta rodada.

     REVISÃO 11 (letterman) — PEDIDO DO USUÁRIO: "refazer o trabalho, mas
     focar principalmente nos subtítulos e parágrafos" (a REVISÃO 10 acima
     só tocou o título principal de cada página) + "palavras que
     encaminham para outras páginas devem ter fonte diferente ou mudar de
     cor quando o cursor ficar em cima delas". Duas frentes, nenhuma
     palavra de copy alterada — só como o texto já existente é
     apresentado:

     1) PARÁGRAFOS-LEDE ganham peso 500 (Medium) como sinal de "voz",
        não um tamanho/família nova. Precedente já existia em dois
        pontos isolados do arquivo (.next-step__text e .demo-notice__text,
        ambos peso 500 com o motivo "um grau a mais de assertividade que
        corpo neutro, sem pesar a frase toda" — ver comentário de
        REVISÃO 8 junto a .demo-notice__text). Em vez de deixar essa
        decisão presa a 2 seletores, ela vira o padrão do "nível lede"
        do sistema — aplicada também a .hero-description, .section-
        subtitle, .mds__intro, .planos-teaser__text e .waitlist__text
        (todas frases de abertura/apoio logo abaixo de um título, --fs-
        body ou --fs-body-lg). .analise__intro é um caso à parte: já era
        citada nos comentários da REVISÃO 10 (linha "não pode usar
        .text-highlight por ficar abaixo do piso de contraste de texto
        grande") como pertencente a este mesmo grupo, mas nunca tinha
        ganhado uma regra própria — ficava só com o <p> base (peso 400,
        --fs-body). Corrigido: ganha regra dedicada, mesmo par --fs-
        body-lg/--lh-body/peso 500 do resto do grupo.
        .cta-final__text foi DELIBERADAMENTE deixado de fora (mesmo peso
        400 de antes) — o comentário logo acima dele já explica que o
        contraste ali vem do fundo escuro do painel, não do peso da
        fonte; manter essa decisão evita "peso 500 em tudo" virar ruído
        em vez de sinal.
        Nenhuma cor nova: heading/body/muted continuam os mesmos tokens
        já calibrados pelo colorman, só o peso muda.

     2) FRASES DE APOIO CURTAS ("nota"/disclaimer) ganham font-style:
        italic, reaproveitando um motivo que já existia no arquivo em UM
        lugar só (.concepts__note, "Termo (dt) e definição (dd)... a
        diferenciação vive no indicador, não no texto" — não, esse é
        outro; o precedente real é a nota de fontes/SEO citada nas
        primeiras linhas deste arquivo como "nota discreta" em itálico).
        Vira padrão para toda nota/legenda de apoio do mesmo papel
        editorial: .hero-disclaimer, .sources__disclaimer, .sources-
        block__text e .pricing__note passam a itálico, alinhando com
        .concepts__note (já itálico desde antes). Cor/tamanho (sempre
        --color-text-muted + --fs-caption) não mudam — o itálico é só
        mais um sinal não-colorido de "isto é uma nota", coerente com o
        resto do sistema que já prefere sinais estruturais (peso,
        sublinhado, itálico) a cores novas sempre que possível.
        Itálico NÃO foi estendido aos links de navegação (item 3
        abaixo) de propósito — usar itálico tanto para "nota de apoio"
        quanto para "link clicável" faria o mesmo sinal visual carregar
        dois significados diferentes, o oposto de um sistema coerente.

     3) LINKS INTERNOS (texto que leva a outra página do site) ganham
        mudança de COR no hover/foco — hoje ausente ou neutralizada.
        Levantamento do estado anterior:
          - .site-nav__link (menu do header): só opacidade + sublinhado
            no hover, nenhuma cor.
          - .footer-nav__link: já clareava (rgba branco 0,82→1,0) no
            hover, mas isso é quase imperceptível como MUDANÇA DE COR —
            lê como "mesmo branco, mais forte", não como um tom novo.
          - .next-step__link / .processo__link a / .planos-teaser__link a:
            REVISÃO 6 (colorman) tinha deliberadamente redirecionado
            esses 3 de azul (--color-text-link) para a dupla neutra
            --color-text-body → --color-text-heading, para "não competir"
            com o CTA de verdade. Pedido desta rodada é o oposto
            explícito ("mudar de cor no hover") — os 3 voltam a ganhar
            cor, mas não o azul de --color-text-link/-hover (tokens FIXOS,
            calibrados só para texto sobre fundo CLARO — ver nota "NOVO
            (pedido do usuário) — correção sistêmica" dentro de
            [data-theme="dark"] acima: sobre --color-surface/--color-ink-*
            escuros eles caem para ~2,6-3:1, abaixo do piso de texto).
            Em vez disso, uso --color-accent-on-dark — o token que o
            colorman já criou EXATAMENTE para "azul de Ação em cima de
            uma superfície que muda de tema" (--color-surface/--color-bg-
            page), hoje só consumido por .btn--secondary e a borda de
            .next-step--final. .next-step/.processo__item/.planos-teaser
            são todos --color-surface por baixo (conferido nas regras de
            layout), então o token se aplica sem ajuste. Isso também
            cumpre o "não competir com o CTA" que motivou a REVISÃO 6: o
            azul só aparece no HOVER (não no repouso), o CTA de verdade
            continua sendo o único elemento com fundo azul sólido o
            tempo todo.
            .site-nav__link e .footer-nav__link entram no mesmo padrão:
            hover ganha color: var(--color-accent-on-dark) (header, cuja
            superfície de fundo — --color-header-bg — também muda de
            tema) e color: var(--color-accent-tint-on-dark) no rodapé
            (--color-ink-900 é um painel escuro FIXO nos dois temas, o
            mesmo token que .footer-contact__link/.waitlist__text já
            usam para "azul claro sobre fundo escuro fixo", 8,38:1
            medido). Mantive opacidade/sublinhado do nav e sublinhado do
            footer-nav como estavam — a cor é um sinal A MAIS, não uma
            substituição dos que já funcionavam.
            .site-nav__link e .footer-nav__link também ganham peso 600
            no hover (eram 500 fixo) — um segundo sinal não-colorido,
            reaproveitando a mesma lógica de ".next-step__link já era
            peso 600 fixo" (aqui o degrau de peso fica reservado para o
            estado de interação, já que em repouso os 6 itens do menu
            precisam ter o mesmo peso visual entre si).
            .source-card__link (link de SAÍDA do site, para documentação
            externa do Google/OpenAI) foi deixado FORA do escopo — não é
            navegação interna, e diferenciar "sai do site" de "muda de
            página dentro do site" é o próprio motivo de ter dois
            tratamentos distintos.
     ================================================================ */

  /* ================================================================
     REVISÃO 12 (letterman) — PEDIDO DO USUÁRIO, 3 itens pontuais:

     1) .concept-card__acronym (SEO/AEO/GEO) estava em --fs-eyebrow
        (13px) — o mesmo degrau minúsculo usado por rótulos-crachá como
        .badge/.next-step__eyebrow. Para 3 letras que SÃO o assunto do
        card (o título logo abaixo, "Otimização para buscadores" etc., é
        a glosa da sigla, não o contrário), ler do tamanho de um rótulo
        de canto é pequeno demais. Sobe para var(--fs-h3) (22px) — o
        mesmo degrau que .concept-card__title já usa (herdado da regra
        global de h3) — e o tracking desce de 0.04em para 0.02em, pelo
        mesmo motivo já documentado em .mds__term: 0.04em foi calibrado
        para caixa alta pequena (~12-13px); em --fs-h3 o precedente
        certo é o tracking mais fechado de uppercase+bold+--fs-h3 já em
        uso em .brand__wordmark-primary/.mds__term. Peso (700) e cor
        (--color-brand-dark, com override --color-brand-light no escuro
        já existente e intocado) continuam os mesmos — o pedido era
        tamanho, não um sinal novo. Resultado: a sigla e o título do
        card ficam no mesmo degrau de tamanho (ambos --fs-h3), mas o
        peso 700 da sigla contra o 600 herdado do título mantém a sigla
        ligeiramente mais "cheia" — o suficiente para ler como o rótulo
        de identidade do card, sem duplicar exatamente o título.

     2) .preview-card__number usava --color-text-link/--color-accent-tint
        (chip claro FIXO, mesmo valor nos dois temas) — o mesmo padrão
        deliberado de .step-card__number ("está OK hoje, porque seu
        fundo não muda de tema", ver bloco "REVISÃO 9" da paleta acima).
        Pedido explícito desta rodada: valores diferentes por tema para
        estes números especificamente (são itens ACIONÁVEIS da lista
        "Suas próximas ações" — --color-accent, não --color-brand, é o
        tom reservado para "convite à ação" no sistema de 3 azuis do
        colorman; ver bloco "REVISÃO 3" da paleta). Em vez de inventar
        hex novo (fora do meu escopo), reaproveito a MESMA dupla adaptativa
        já auditada pelo colorman para "texto de Ação sobre uma superfície
        que muda de tema" — --color-accent-on-dark (alias de --color-accent
        no claro, vira --color-accent-tint-on-dark #A8D3F0 no escuro) — a
        mesma que .btn--secondary/.next-step__link/.processo__link já
        consomem. Fundo do chip passa de --color-accent-tint (fixo) para
        --color-surface-alt (adaptativo: taupe claro #F2ECE6 no claro,
        azul-acinzentado escuro #292D38 no escuro — um degrau acima de
        --color-surface do próprio .preview-card, dando o mesmo contraste
        de "chip destacado da caixa" nos dois temas). Ver override
        completo (bg/borda/cor) junto à regra de .preview-card__number
        mais abaixo no arquivo.

     3) Seção "Medido, detectado e sugerido" — a REVISÃO 9 (letterman) já
        tinha dado ao .mds__term o tratamento de rótulo de categoria
        (caixa alta, peso 700, --fs-h3), mas os 3 itens liam
        tipograficamente IDÊNTICOS entre si — só a borda esquerda
        colorida (colorman) diferenciava um do outro, o que lê como "3
        cards genéricos com uma borda diferente", não como um sistema
        pensado para estas 3 categorias específicas. A própria
        justificativa de cor do colorman já descreve isso como uma
        PROGRESSÃO ("claro→escuro = bruto→decisão": Medido é o dado mais
        cru, Sugerido é o mais processado/acionável) — decidi reforçar
        essa mesma progressão com os eixos que são meus (peso, tracking),
        sem tocar em cor: .mds__term ganha peso crescente de item para
        item — 600 (Medido) → 700 (Detectado, o peso-base que já existia)
        → 800 (Sugerido) — e tracking decrescente — 0.03em → 0.02em (o
        valor-base) → 0.01em — o mesmo tipo de relação peso-alto/tracking-
        fechado que o resto do sistema já usa para "mais denso = mais
        assertivo". .mds__definition de Sugerido também ganha peso 500,
        entrando no nível "lede" do sistema (ver item 1 da REVISÃO 11
        acima) pelo mesmo motivo que .next-step__text/.demo-notice__text
        já usam esse peso — é a única das 3 definições que descreve algo
        ACIONÁVEL ("uma ação possível, para você revisar e decidir"), o
        mesmo critério de "voz mais assertiva" que já rege esse nível em
        todo o resto do arquivo. Medido/Detectado permanecem no peso 400
        padrão de .mds__definition — são leitura passiva de dado/regra,
        não uma chamada à ação. Nenhuma cor nova, nenhuma família nova,
        nenhum tamanho novo — só peso e tracking, reaproveitando eixos e
        valores já calibrados em outros pontos do arquivo.
     ================================================================ */

  /* ================================================================
     REVISÃO 13 (letterman) — auditoria de 4 mudanças de tipografia/
     alinhamento que tinham sido aplicadas fora do processo normal
     (direto no CSS, sem passar por mim). Revisei cada uma com meus
     próprios critérios; onde concordei, deixo o valor como estava e
     assino a razão aqui; onde não concordei, ajustei.

     1) h2 global — peso 600→700, tracking -0.015em→-0.01em, pedido de
        "mais destaque". CONFIRMADO como estava, sem mudança de valor.
        Peso: subir h2 para o mesmo 700 do h1 resolve um problema que já
        existia (h2 e h3 empatavam em 600 — um título de seção e um
        título de card liam com o mesmo peso) e não cria ambiguidade
        nova com h1, porque --fs-h1 e --fs-h2 já são tamanhos bem
        distintos — a escala continua fazendo o trabalho de separar os
        dois. Tracking: abrir de -0.015em para -0.01em ao MESMO TEMPO
        que o peso sobe é o lado certo do ajuste, não um capricho —
        peso maior desenha glifos mais largos/mais cheios; manter o
        tracking tão fechado quanto no peso 600 faria as letras
        colidirem visualmente no 700. A ordem geral do sistema (h1
        -0.02em, o mais fechado, por ser o maior elemento da página; h2
        -0.01em; h3 -0.005em, o mais aberto, por ser o menor título)
        continua monotônica e intacta — nada disso contradiz o princípio
        "tamanho maior = tracking mais fechado" documentado na REVISÃO 3
        acima, é só o ajuste fino de peso entrando como segunda variável
        no mesmo cálculo.

     2) h2 global — text-align: center. CONFIRMADO. Reli a nota da
        REVISÃO 3 ("Alinhamento: o print [da Apple] é fortemente
        alinhado à esquerda, nunca centralizado") — essa nota descrevia
        um estado real do arquivo na época (nenhum h2 centralizado) e a
        referência visual que sustentava isso, mas não era uma regra
        estrutural imutável, e o pedido atual do usuário é explícito e
        posterior. Confirmei via grep que todo h2 do site é sempre um
        título de seção isolado (bare <h2> dentro de <section>, ou
        <h2 class="section-title"> dentro de .section-heading) — nunca
        dividindo linha/bloco com outro elemento — então centralizar não
        quebra nenhum layout de duas colunas nem contradiz a lógica
        "título+subtítulo como uma frase só" da REVISÃO 3. Ver nota
        marcando esse trecho como superado, junto da REVISÃO 3 no topo
        deste arquivo.

     3) .section-subtitle / .mds__intro — as ledes logo abaixo do h2
        ganharam text-align:center + margin auto para acompanhar o h2
        centralizado. Concordo com centralizar (título e lede como bloco
        único é a leitura certa aqui), mas AJUSTEI o max-width: um
        parágrafo centralizado com contorno irregular dos dois lados é
        mais difícil de re-encontrar o início da próxima linha do que um
        parágrafo alinhado à esquerda com contorno reto de um lado só —
        por isso texto centralizado geralmente pede uma medida de linha
        mais curta que o mesmo texto alinhado à esquerda. 60ch/65ch
        (calibrados na REVISÃO 10/11 para leitura à esquerda) ficam
        largos demais centralizados; desço os dois para 56ch — ainda
        confortável, mais fácil de escanear centralizado, e agora os
        dois usam a MESMA medida (eram 60/65, uma diferença que nunca
        teve justificativa própria) já que cumprem exatamente o mesmo
        papel ("lede" logo abaixo de um h2).

     4) .mds__item — text-align: left→center, para bater com os cards
        irmãos (.beneficios__item, .processo__item) da mesma grade.
        CONFIRMADO. O argumento antigo ("rótulo + parágrafo lê melhor à
        esquerda") valia mais quando este card era o único alinhado à
        esquerda da grade — layoutman já trocou border-left por
        border-top na mesma leva, então o card já não depende mais de
        uma margem esquerda "livre" para o indicador. Com um termo curto
        em caixa alta (<=2 palavras) seguido de uma única frase de
        definição, o ganho de legibilidade do alinhamento à esquerda é
        pequeno — e a consistência visual com os outros 2 grids da
        mesma página (que já eram centralizados) pesa mais aqui do que
        essa vantagem marginal.
     ================================================================ */

  /* ================================================================
     REVISÃO 14 (letterman) — PEDIDO DO USUÁRIO: "centralizar os textos das
     caixas que acabaram de ser removidas [.aviso-analise__box/
     .sources-block__box/.planos-teaser__box/.faq-teaser__box, Início], e
     checar as outras páginas também".

     PARTE 1 — os 4 painéis da Início: mesmo diagnóstico da REVISÃO 13
     (h2 centralizado + corpo alinhado à esquerda por baixo lê como
     acidente). Mesma técnica (text-align:center + margin-inline:auto) e
     mesma calibragem de max-width para 56ch (ou 64ch quando o par
     equivalente já centralizado do sistema usa essa medida — ver
     .sources-block__text abaixo), aplicada nas 4 regras:
       - .aviso-analise__text — 65ch→56ch. Compartilhada por index.html E
         analise.html (mesmo seletor, sem escopo por página) — corrige as
         duas de graça.
       - .sources-block__text — ganhou max-width pela primeira vez (nunca
         tinha um; herdava a largura cheia do painel), 64ch, o MESMO valor
         que .sources__disclaimer (o elemento equivalente citado pelo
         colorman) já usa centralizado — reuso, não número novo.
       - .planos-teaser__text / .faq-teaser__text — 65ch→56ch, e o link
         logo abaixo ("Ver os planos →" / "Ver perguntas frequentes →",
         cada um seu próprio <p>) ganhou text-align:center para acompanhar
         — h2 → parágrafo → link como um bloco único centrado, mesmo
         padrão que .processo__link já usa quando fica sob conteúdo
         centralizado.

     PARTE 2 — varredura das outras páginas por painéis equivalentes
     ("nota/lede única logo abaixo de um h2"), decisão por caso:
       - .analise__intro (analise.html) — CENTRALIZAR (mesmo bug da
         REVISÃO 13, nunca corrigido: herdava text-align:center do
         ancestral .section-heading mas o bloco em si, sem margin:auto,
         ficava encostado à esquerda do container). Corrigido: margin-
         inline:auto + max-width 62ch→56ch, igualando o resto do grupo
         "lede". Ver regra abaixo.
       - .concepts__note (seo-aeo-geo.html) / .sources__disclaimer
         (como-orientamos.html) — JÁ CENTRALIZADOS (ver regras mais abaixo
         no arquivo, seção de layout responsivo: text-align:center +
         margin:auto já aplicados). Também MANTIDOS assim de propósito:
         ao contrário dos 4 painéis da Início, estes dois NÃO tiveram a
         caixa removida — continuam com fundo/borda visíveis (mesma
         "caixa de nota/aviso" que .analise-form__summary), então a
         centralização aqui não é sobre "acompanhar um h2 que ficou sem
         caixa" — é sobre um cartão autocontido centralizado no meio da
         página, decisão de layout já tomada e coerente, nenhuma mudança
         necessária.
       - .waitlist__text (lista-de-espera.html, dentro de .waitlist__box)
         — JÁ CENTRALIZADO (.waitlist__box tem text-align:center +
         max-width:720px + margin:auto; .waitlist__text soma margin-left/
         right:auto próprio). Mesmo caso do item acima: caixa mantida,
         nenhuma mudança.
       - .pricing__note (planos.html, depois do grid de planos) — JÁ
         CENTRALIZADO. Não é do formato "abaixo de um h2"; é um fechamento
         depois de um grid centralizado, mesmo papel que .processo__link.
         Nenhuma mudança.
       - .analise-estado__text (analise.html, os 11 estados do fluxo de
         análise) — JÁ CENTRALIZADO (.analise-estado:not(--inicial) tem
         text-align:center). Fora do escopo de qualquer forma: cada
         estado é ícone+título+texto+botão empilhado dentro de um painel
         de status, não uma "nota logo abaixo de um h2" comparável aos
         4 painéis da Início.
       - .analise-form__summary (analise.html, painel "O que vai
         acontecer a partir daqui") — caixa mantida fora de escopo
         (confirmado no pedido da tarefa). Texto avaliado e mantido
         ALINHADO À ESQUERDA de propósito: o conteúdo é uma <ol> numerada
         (lista de passos), não um parágrafo/frase única — alinhar itens
         de lista numerada à esquerda é convenção de legibilidade (o
         número + o início de cada item formam uma coluna vertical
         previsível); centralizar quebraria essa leitura e não tem
         nenhum precedente no sistema (nenhuma lista numerada do site é
         centralizada). Nenhuma mudança.
       - .next-step__text (6 páginas, funil de conversão entre páginas) —
         fora do escopo desta rodada: não é uma "nota logo abaixo de um
         h2" (é um componente de CTA de rodapé de página, eyebrow+texto+
         link em fluxo inline, já resolvido tipograficamente na REVISÃO 6/
         11), e o usuário não sinalizou problema nele. Nenhuma mudança.
       - .demo-notice__text / .footer-contact__text (todas as páginas) —
         fora do escopo: não são "nota abaixo de um h2" (aviso fixo de
         protótipo e texto de rodapé, respectivamente), componentes
         globais já com tratamento próprio. Nenhuma mudança.
     ================================================================ */

  /* Reset mínimo — decisões de cor e tipografia ficam para os próximos agentes (colorman, letterman). */
  *, *::before, *::after { box-sizing: border-box; }
  body { margin: 0; }
  ul { list-style: none; margin: 0; padding: 0; }
  /* dd tem margin-left padrão do navegador (~40px) — sem isso, .mds__definition
     e .mds__item-more (ambos <dd>, ver .mds__list em index.html) ficam deslocados
     à direita dentro do card centralizado (.mds__item { text-align: center }),
     lendo como texto descentralizado apesar do text-align estar correto. */
  dl, dt, dd { margin: 0; }
  a { text-decoration: none; }
  img, svg { max-width: 100%; display: block; }

  /* Utilitário de acessibilidade — remove visualmente sem remover do
     fluxo de leitura por leitor de tela. Usado para inserir headings que
     fecham a hierarquia (h1 -> h2 -> h3) sem alterar o visual de seções
     onde nenhum h2 visível fazia sentido no design (ex.: título da
     página seguido direto por uma grade de cards com h3 cada). */
  .sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
  }

  /* ================================================================
     PALETA — FrontPageAI ("Verde Confiança") — HISTÓRICO
     Sistema de tokens de cor. Aplicado por colorman.
     Revisão de direção motivada pelo diretor do projeto: a versão anterior
     ("Azul Vívido") comunicava "SaaS técnico institucional/frio" — três
     tons de azul/ciano fazendo o papel de "vivacidade", gradientes cobrindo
     seções inteiras (hero, CTA, rodapé). Isso não combina com o produto:
     uma ferramenta de pré-lançamento para pequeno empreendedor/autônomo,
     não-técnico, que precisa sentir "amigo especialista" — acessível e
     acolhedora, mas ainda séria o bastante pra confiar numa recomendação
     de negócio (referência de vibe: mais perto do Notion do que do
     Duolingo — poucos acentos com intenção clara, não um sistema de
     cores por gamificação).
     A base ficou quase-monocromática e quente: neutros com leve subtom
     bege/creme, fundos sólidos, texto escuro de alto contraste. Só DUAS
     cores de acento existiam no sistema: --color-brand (verde-pinho,
     único papel de ação/confiança) e --color-warning-* (âmbar, único
     papel de aviso/pré-lançamento). --color-accent-* eram aliases diretos
     de --color-brand.
     NOTA: o usuário testou esta versão e rejeitou o verde ("Detestei o
     verde"), pedindo o retorno à família azul — mas não como reversão
     literal ao "Azul Vívido" antigo. Ver REVISÃO 3 abaixo para a paleta
     em uso atualmente.
     ================================================================ */

  /* ================================================================
     REVISÃO 3 — "Azul Funcional" (paleta em uso)
     Aplicado por colorman a pedido explícito do usuário: "Detestei o
     verde, preciso que volte com o Azul e utilize ele em diferentes
     elementos, mas variando o tom (...) usar x tom de azul para o
     cabeçalho, mas usar y tom de azul em certas palavras com destaque."

     Isto NÃO é uma reversão para o antigo "Azul Vívido" (ver bloco
     acima): aquela paleta usava essencialmente UM azul/ciano repetido
     como gradiente cobrindo seções inteiras, e foi trocada exatamente
     por ler "frio/institucional" por causa disso — cor de vivacidade
     sem hierarquia de papel. A diferença aqui é estrutural: em vez de
     "um azul, em tudo", o sistema tem TRÊS azuis com papéis fixos e
     nenhum deles cobre uma seção inteira em gradiente:

       1) --color-brand ("Marinho", #1C3D5A) — o azul ESTRUTURAL/DE
          MARCA. Escuro e pouco saturado, quase um azul-ardósia — não
          compete com o azul de ação, funciona como um "quase-neutro"
          com identidade. Usado no ícone da marca (.brand__mark), nas
          bordas superiores dos cards de conceito (.concept-card),
          nos números da sequência de passos (.step-card__number,
          papel sequencial/estrutural) e na borda do FAQ aberto — tudo
          que comunica "isto é FrontPageAI", não "clique aqui".
       2) --color-accent ("Ação", #2563EB) — azul vívido e saturado,
          reservado para CONVITE À AÇÃO: botão primário (.btn--primary),
          badge do plano recomendado (.badge--plan), links de navegação
          e de texto em hover/foco, números do card de prévia
          (.preview-card__number — são itens acionáveis, ao contrário
          dos passos sequenciais). Único tom usado em todo CTA primário
          da página — não varia de botão para botão sem motivo.
       3) --color-highlight ("Leitura", #0B6FB0) — um azul mais claro e
          mais próximo do ciano, pensado especificamente para DESTACAR
          PALAVRAS dentro de um bloco de texto corrido (o pedido
          explícito do usuário: "usar y tom de azul em certas palavras
          com destaque"). É a cor mais clara dos três tons de ação,
          escolhida para permanecer legível (>4.5:1) como cor de texto
          sobre o fundo claro da página — ver uso em .text-highlight,
          aplicado a "próximo passo certo" no título do hero.

     Cabeçalho: mantido em superfície neutra clara (--color-surface),
     não pintado de azul sólido — um header azul chapado tende a
     competir com o hero logo abaixo e reintroduz a sensação de "faixa
     institucional" da paleta antiga. Em vez disso, o header ganha
     presença de azul através da marca (.brand__mark, ícone maciço no
     tom Marinho) e do hover dos links de navegação (tom de Ação) — a
     cor aparece com intenção, não como fundo genérico.

     Base neutra: trocada de quente/creme para NEUTRA-FRIA (leve subtom
     azul-acinzentado em vez de bege). Um neutro quente ao lado de um
     azul saturado tende a "brigar" visualmente (a base puxa para
     laranja/terroso, o acento puxa pro oposto do círculo cromático);
     um neutro frio deixa os três azuis lerem como a cor de identidade
     do site, com os neutros apenas dando espaço a eles, e evita repetir
     o mesmo raciocínio de contraste "quente vs. frio" que motivou a
     troca anterior do azul pelo verde. As superfícies escuras (rodapé,
     CTA final) passam de quase-preto quente para quase-preto AZULADO
     (--color-ink-900), reforçando a mesma família em vez de destoar
     dela.
     Papéis semânticos (--color-success, --color-warning-*,
     --color-error) permanecem intocados — não fazem parte do pedido e
     seus contrastes não dependem da base neutra ter mudado de tom.

     REVISÃO 3.1 — auditoria/polimento (colorman, 3 rodadas)
     Retomada da REVISÃO 3 acima: mesma direção estratégica (três azuis
     com papéis fixos — Marinho estrutural, Ação/CTA, Leitura/destaque),
     sem reversão ao "Azul Vívido" antigo e sem nenhuma cor nova fora da
     família azul além dos papéis semânticos já existentes. Sem
     referência visual da Apple (ao contrário de layoutman/letterman
     neste mesmo arquivo) — cor não faz parte do que foi pedido para
     inspirar-se na Apple Store; esta paleta segue 100% autoral,
     construída só a partir do pedido original do usuário.

       RODADA 1 (contraste AA, calculado par a par com a fórmula WCAG
       de luminância relativa em todas as combinações texto/fundo do
       arquivo): achado real — .btn--secondary:hover e
       .preview-card__number usavam `color: var(--color-accent)` sobre
       `background-color: var(--color-accent-tint)`, medindo ~4.36:1,
       abaixo do mínimo de 4.5:1 para texto normal (nenhum dos dois é
       "texto grande" pelos critérios WCAG). CORRIGIDO: ambos passaram a
       usar `var(--color-accent-active)` (mesmo tom de Ação, só mais
       escuro — já existia no sistema como estado de "pressed", não é
       cor nova) sobre o mesmo fundo, subindo para ~7.4:1. Demais pares
       auditados (Marinho sobre branco ~11.3:1, Ação sobre branco
       ~5.2:1, Leitura sobre fundo da página ~5.2-5.4:1, branco sobre
       Ação ~5.2:1, tint claro de Ação sobre --color-ink-900 ~8:1,
       Marinho sobre --color-brand-tint ~9.6:1, borda --color-brand-light
       sobre superfície branca ~5.1:1 — acima do mínimo 3:1 de
       componente de UI) já estavam corretos, confirmados sem alteração.

       RODADA 2 (fidelidade ao pedido "variando o tom" + sistema vs.
       um-off): converti os três azuis para HSL pra confirmar variação
       real de tom, não só de nome — Marinho ~208° matiz / 52% sat /
       23% luz (escuro, discreto), Ação ~221° matiz / 83% sat / 53% luz
       (vívido, mais próximo do índigo), Leitura ~204° matiz / 88% sat /
       37% luz (mais ciano, luz intermediária). Confirmado: são
       claramente distintos entre si em luminosidade e leve deslocamento
       de matiz, não o mesmo azul repetido — mantido sem alteração.
       Também revisado: nenhuma cor hexadecimal solta fora da família
       azul/neutros-frios/semânticos apareceu no CSS, EXCETO um literal
       `#8FB4F5` usado uma única vez em .footer-contact__link (tint de
       Ação sobre --color-ink-900, ~8:1 de contraste, valor já correto).
       CORRIGIDO por consistência de sistema (não por contraste): esse
       literal virou o token --color-accent-tint-on-dark, mesmo valor
       hexadecimal, agora nomeado e reutilizável em vez de solto no meio
       do CSS.

       RODADA 3 (auditoria final): reconferido que as duas correções da
       Rodada 1 não introduziram nenhuma cor fora da família Ação nem
       mudaram o papel de nenhum token (accent-active continua sendo
       "Ação, tom mais escuro/pressed", só ganhou um segundo uso de
       texto-sobre-tint); reconferido .text-highlight (--color-highlight
       em "próximo passo certo", ~5.2-5.4:1) continua aplicado e
       legível; reconferido --color-text-muted (usado em disclaimers,
       incl. o aviso legal do hero) mede ~5.1:1 sobre --color-bg-page,
       dentro do AA — nenhuma mudança necessária, disclaimers
       preservados intactos; reconferido que os papéis semânticos
       (success/warning/error) seguem com os mesmos valores da REVISÃO
       3, sem nenhum toque. Nenhum ajuste adicional identificado nesta
       rodada — paleta considerada estável e concluída.
     ================================================================ */

  /* ================================================================
     REVISÃO 4 — "Azul Névoa" (colorman)
     Pedido direto do usuário nesta rodada: "cores muito mais claras" —
     sem especificação técnica. Contexto que orientou a leitura desse
     pedido: existe uma nota de direção de marca documentada
     ("Azul Névoa", um azul suave/nevoento) que nunca chegou a ser
     implementada — a paleta em produção até aqui ("Azul Funcional",
     REVISÃO 3/3.1) é deliberadamente mais saturada/funcional. Tratei
     "muito mais claras" como a correção para essa direção "Névoa",
     mas repensando os TONS/VALORES, não copiando um nome — a decisão
     de quanto clarear cada papel foi construída caso a caso, com
     cálculo de contraste WCAG (luminância relativa) para não regredir
     nenhum par abaixo de AA.

     O que NÃO muda (âncoras de identidade já validadas em rodadas
     anteriores, fora do escopo deste pedido):
       - Família azul em tudo — nenhuma cor nova fora de azul/neutros/
         semânticos entrou no sistema.
       - Estrutura de três tons com papéis fixos (Marinho estrutural,
         Ação/CTA, Leitura/destaque) — continua "três azuis", não virou
         "um azul só repetido".
       - --color-success / --color-warning-* / --color-error — intocados.

     O que muda, e por quê:

       1) FUNDO DA PÁGINA deixa de ser #FFFFFF puro (decisão da REVISÃO
          3.2) e volta a ter um tom bem sutil e nevoento: --color-bg-page
          passa a #F7FAFD. Reconsiderei a REVISÃO 3.2 porque um branco
          cru ao lado de "muito mais claras" lia como contradição — um
          fundo levemente nevoento é o que efetivamente entrega a
          sensação de "leve/suave" pedida, e é literalmente o que a nota
          de direção "Azul Névoa" descreve. Não é uma reversão total à
          alternância de dois tons de seção da REVISÃO 3 antiga: o fundo
          continua ÚNICO e consistente em toda a página (nenhuma seção
          alterna de tom), só deixou de ser um branco absoluto. Isso
          também restaura uma diferença sutil entre --color-bg-page
          (nevoento) e --color-surface (branco puro, mantido nos cards),
          o que barateia um pouco a necessidade de bordas fortes para
          cards se destacarem — --color-border/--color-border-strong
          puderam clarear também (ver nota junto a esses tokens abaixo).
          Diferença de luminância entre #F7FAFD e branco puro é pequena
          o bastante (~1.05×) para não alterar de forma perceptível
          nenhum contraste texto/fundo já auditado nas rodadas
          anteriores — reconferido abaixo nos pares mais sensíveis.

       2) MARINHO ESTRUTURAL (--color-brand) e LEITURA/DESTAQUE
          (--color-highlight) tinham MUITA folga de contraste no sistema
          anterior (Marinho ~11.3:1, Leitura ~5.2–5.4:1 sobre fundo
          claro) — nenhum dos dois carrega texto branco em cima, então
          podem clarear bastante sem risco de ficar ilegíveis. Os dois
          foram clareados de forma substancial:
            --color-brand: #1C3D5A → #34597D (contraste do texto/ícone
            Marinho sobre --color-bg-page: ~7.0:1; sobre o novo
            --color-brand-tint #EBF1F9: ~6.4:1 — ambos folgados acima
            do mínimo 4.5:1 de texto normal, com boa margem de sobra
            mesmo depois de clarear a base).
            --color-highlight: #0B6FB0 → #167AB5 (contraste sobre
            --color-bg-page: ~4.68:1 — o pedido original da REVISÃO 3
            era explicitamente ">4.5:1"; mantive esse piso mesmo esta
            cor só sendo usada hoje em texto GRANDE/negrito no h1 do
            hero, que tecnicamente só exigiria 3:1 — preferi manter o
            padrão mais rígido já documentado, para o token continuar
            seguro se algum dia for reaplicado em texto menor).

       3) AÇÃO/CTA (--color-accent) é o único dos três tons que carrega
          TEXTO BRANCO por cima (botão primário, badge de plano) — isso
          impõe um teto rígido de quanto ele pode clarear: acima de
          luminância relativa ~0.183 o branco por cima cai abaixo de
          4.5:1. O tom anterior (#2563EB) já estava relativamente perto
          desse teto (~5.17:1). Clareei o quanto deu margem para manter
          um contraste confortável, não no limite exato:
            --color-accent: #2563EB → #3B6FD1 (branco sobre este tom:
            ~4.80:1 — acima do mínimo 4.5:1, com ~7% de folga; mais
            claro/menos ultramarine puro que antes, mas não "muito mais
            claro" isoladamente — ver observação abaixo).
            --color-accent-hover: #1D4ED8 → #2F5DB8 (mais escuro que a
            base, ~6.21:1 de branco por cima — feedback de hover
            continua ficando mais escuro, não mais claro).
            --color-accent-active: #1E40AF → #234690 (~8.93:1 de branco
            por cima — estado pressionado).
          OBSERVAÇÃO IMPORTANTE para o relatório: o CTA é estruturalmente
          o tom que MENOS pode clarear no sistema, porque é o único que
          precisa continuar legível com texto branco em cima. A entrega
          de "muito mais claro" deste pedido está concentrada nos OUTROS
          elementos do sistema (fundo, Marinho, Leitura, tints, bordas,
          superfícies escuras) — o CTA permanece um azul de confiança
          médio-forte de propósito, para continuar chamando atenção como
          botão de ação em vez de se misturar ao fundo agora mais claro.

       4) TINTS (--color-accent-tint/-strong, --color-brand-tint/-strong,
          --color-highlight-tint) clarearam em conjunto com suas cores
          base — são fundos de chip/badge/hover sem restrição de
          contraste própria (só precisam manter o texto que carregam
          legível, o que já foi conferido caso a caso: ver
          --color-accent-active sobre o novo --color-accent-tint
          #EEF3FE, ~8.0:1; --color-brand sobre o novo --color-brand-tint,
          já coberto no item 2 acima).

       5) BORDAS (--color-border/--color-border-strong) clarearam:
          #DCE3ED/#C1CCDC → #E3EAF3/#CDD9E8. Estas são bordas
          DECORATIVAS de contorno de card/header (reforçadas por sombra
          leve já existente e, agora de novo, por uma diferença sutil de
          tom entre --color-bg-page e --color-surface) — não são
          "componentes de UI" no sentido do WCAG 1.4.11 (não comunicam
          estado nem seleção), então não têm piso obrigatório de 3:1;
          mesmo assim, onde uma borda tem papel mais funcional/de
          destaque (ex.: --color-brand-light no FAQ aberto, --color-brand
          no card de plano em destaque), o contraste foi calculado e
          mantido acima de 3:1 — ver nota junto a --color-brand-light
          abaixo (~3.62:1 sobre superfície branca).

       6) SUPERFÍCIES ESCURAS (--color-ink-900/-800) — rodapé e caixa de
          CTA final — clarearam de um quase-preto azulado para um azul-
          marinho mais claro (mas ainda claramente escuro):
          #0F1E33/#16283F → #16304D/#1E3D5F. A folga de contraste aqui
          era enorme (texto branco a >13:1), então mesmo dobrando a
          luminância de base o texto branco/rgba(255,255,255,*) usado no
          rodapé continua muito acima de 4.5:1 (reconferido: descrição
          do rodapé a 0.72 de opacidade ~7.7:1; rótulos a 0.6 de
          opacidade, o par mais arriscado do rodapé, ~5.84:1;
          --color-accent-tint-on-dark, usado no link de contato e no
          link de página atual, ~7.2:1 — todos com folga confortável
          acima do mínimo). Isso evita que o rodapé/CTA final continue
          lendo como "quase preto" isolado num sistema que ficou muito
          mais claro ao redor.

     Texto (--color-text-heading/-body/-muted) e estados semânticos
     (success/warning/error) permanecem INTOCADOS — não fazem parte do
     pedido de paleta, e mudar o texto de leitura arriscaria legibilidade
     sem necessidade (--color-text-muted, o mais claro dos três, ainda
     mede ~5.19:1 sobre o novo --color-bg-page, dentro do AA, sem
     nenhuma alteração no próprio token).
     ================================================================ */

  /* ================================================================
     REVISÃO 5 — família única ancorada em #B2F3FF (colorman)
     Pedido literal do usuário nesta rodada: "Um azul ainda mais claro,
     utilize a cor B2F3FF para os textos que já estou em azul, um azul
     levemente mais claro que B2F3FF para os botões, e um azul
     levemente mais escuro que B2F3FF para o resto dos elementos
     azuis." Direção do diretor do projeto: tratar isso como TRÊS
     categorias por PAPEL DE USO (não mais três tons por PAPEL DE
     IDENTIDADE Marinho/Ação/Leitura, como nas revisões 3/3.1/4) —
     Categoria 1 = cor de TEXTO azul, Categoria 2 = fundo de BOTÃO,
     Categoria 3 = todo o resto (estrutural/decorativo). Isso substitui
     o sistema histórico "três azuis, três papéis fixos de marca" por
     "um azul só (matiz de #B2F3FF), variando apenas o quanto clareia/
     escurece conforme a FUNÇÃO em que aparece" — mudança de estratégia
     explícita, não um ajuste dentro da estratégia antiga.

     MÉTODO — mesmo matiz (H≈189,35°) e mesma saturação (S=100%, igual
     ao próprio #B2F3FF) em TODOS os tokens derivados desta rodada,
     variando só a LUMINOSIDADE (L). Isso é o "mínimo desvio" mais
     defensável: nenhum token novo introduz um matiz diferente de
     #B2F3FF, só clareia (L maior) ou escurece (L menor) a partir dele.
     #B2F3FF em si é H=189,35°/S=100%/L=84,90%.

     ALERTA DE CONTRASTE (medido com a fórmula de luminância relativa
     WCAG, par a par) — #B2F3FF É uma cor muito clara (luminância
     relativa ~0,808). Usado literalmente como cor de TEXTO sobre
     qualquer fundo claro do site, o contraste é catastrófico:
       #B2F3FF sobre #FFFFFF (branco): 1,22:1
       #B2F3FF sobre --color-bg-page #F7FAFD: 1,17:1
       #B2F3FF sobre tints claros (--color-accent-tint antigo): ~1,10:1
     Todos muito abaixo do mínimo 4,5:1 (texto normal) ou mesmo do
     mínimo 3:1 (texto grande) — na prática, texto ilegível. Já sobre
     fundo ESCURO (rodapé/CTA final), #B2F3FF funciona muito bem:
       #B2F3FF sobre --color-ink-900 #16304D: 10,97:1
       #B2F3FF sobre --color-ink-800 #1E3D5F: 9,09:1
     Por isso a Categoria 1 usa o hex LITERAL #B2F3FF só onde já havia
     esse padrão "texto claro sobre fundo escuro" (--color-accent-tint-
     on-dark, usado no rodapé/CTA final) e usa uma variante ESCURECIDA
     do mesmo matiz/saturação em todo o resto (texto sobre fundo claro,
     a maioria dos casos) — ver token a token abaixo.

     CATEGORIA 1 — cor de TEXTO azul (pedido: literal #B2F3FF)
       --color-accent-tint-on-dark: #B2F3FF (inalterado — já era
       exatamente este caso, texto claro sobre --color-ink-900/-800; a
       coincidência entre o valor pedido pelo usuário e o valor que já
       estava em uso aqui é só isso, coincidência, mas conveniente).
       Uso: .footer-contact__link, .footer-nav__link[aria-current].

       --color-text-link: #00748A (NOVO — deixou de ser alias direto de
       --color-accent; ver "DESACOPLAMENTO" abaixo). Mesmo matiz do
       B2F3FF, L reduzido ao mínimo necessário para cruzar 4,5:1 no pior
       caso real de uso (fundo mais escuro entre os fundos claros onde
       este token aparece):
         vs. branco #FFFFFF: 5,43:1
         vs. --color-bg-page #F7FAFD: 5,19:1
         vs. --color-accent-tint (novo) #E8FBFF: 5,09:1
         vs. --color-accent-tint-strong (novo) #CFF7FF: 4,76:1
         vs. --color-accent-base (novo) #D1F8FF: 4,81:1
         vs. --color-brand-tint (novo) #E0FAFF: 4,99:1
       Todos ≥4,5:1, com folga mínima proposital (o mais apertado, contra
       --color-accent-tint-strong, ainda sobra 0,26). Uso: .site-nav__link
       :hover/[aria-current], .source-card__link (base), .next-step__link
       (base), .next-step--final__eyebrow, .faq-item__question:hover,
       .btn--secondary:hover (texto — era --color-accent-active, RODADA 1
       antiga; ver DESACOPLAMENTO), .preview-card__number (texto — mesma
       troca).

       --color-text-link-hover: #005A6B (NOVO — estado de hover/foco dos
       links de texto acima; antes usavam --color-accent-hover, que agora
       é um tom de BOTÃO quase branco e não serve mais como texto —ver
       DESACOPLAMENTO). ~7,85:1 sobre branco, mais escuro que o estado
       base, mesma lógica de sempre (hover mais escuro = feedback).
       Uso: .source-card__link:hover/:focus-visible, .next-step__link
       :hover/:focus-visible.

       --color-highlight: #009BB8 (era #167AB5). Único token de texto
       desta categoria com folga para ficar mais PRÓXIMO do B2F3FF: seu
       único uso, .text-highlight, é texto GRANDE (herda --fs-h1, ~41-64px,
       peso 700 do serifado --font-highlight) — qualifica como "texto
       grande" pelos critérios WCAG (>24px), então o piso é 3:1, não
       4,5:1. Medido: 3,14:1 sobre --color-bg-page #F7FAFD — acima do
       mínimo, com a menor folga possível (diferente da REVISÃO 4, que
       manteve o piso mais rígido de 4,5:1 "por segurança"; aqui priorizei
       ficar o mais perto possível do B2F3FF pedido, já que o uso real
       está protegido pelo tamanho grande e não há indicação de que este
       token seja reaplicado em texto pequeno).

     CATEGORIA 2 — fundo de BOTÃO (pedido: levemente mais claro que
     #B2F3FF, ou seja L > 84,90%)
       --color-accent: #D1F8FF (L=91%, era #3B6FD1). Fundo de
       .btn--primary/.skip-link/.badge--plan.
       --color-accent-hover: #C2F5FF (L=88%, era #2F5DB8).
       --color-accent-active: #B5F3FF (L=85,5%, era #234690) — o estado
       "pressed" mais próximo do B2F3FF, mas ainda tecnicamente mais
       claro (L=85,5% > 84,90%), respeitando o limite da categoria em
       TODOS os estados, não só na base.
       --color-accent-tint: #E8FBFF (L=95,5%, era #EEF3FE) e
       --color-accent-tint-strong: #CFF7FF (L=90,5%, era #D7E3FB) —
       fundos ainda mais pálidos para hover/active de .btn--secondary e
       para o chip de .preview-card__number.
       DESACOPLAMENTO NECESSÁRIO: --color-text-link (Categoria 1) e
       --color-accent (Categoria 2) não podem mais ser o mesmo valor —
       um precisa ser escuro o bastante pra ler como texto sobre fundo
       claro, o outro precisa ser claro o bastante pra ler como "botão
       levemente mais claro que B2F3FF". O alias antigo
       (--color-text-link: var(--color-accent)) foi removido; agora são
       dois tokens independentes. Pelo mesmo motivo, --color-accent-hover
       não serve mais como cor de TEXTO de hover de link (ver
       --color-text-link-hover acima) nem --color-accent-active serve
       mais como cor de TEXTO sobre tint (ver --color-text-link acima,
       que herdou os dois usos que a RODADA 1 antiga tinha corrigido com
       --color-accent-active).
       TEXTO SOBRE O BOTÃO: --color-text-on-accent era #FFFFFF (branco) —
       branco sobre um fundo agora quase branco (#D1F8FF) mediria bem
       abaixo de 1,5:1, ilegível. Trocado para
       --color-text-on-accent: var(--color-text-heading) (reaproveita o
       tom escuro de título já existente, #101B2B, em vez de inventar um
       tom novo — mesmo raciocínio de reuso já usado no arquivo para
       outros papéis de texto). Medido sobre os três estados do botão:
         vs. --color-accent #D1F8FF: 15,31:1
         vs. --color-accent-hover #C2F5FF: 14,67:1
         vs. --color-accent-active #B5F3FF: 14,20:1
       Folga enorme em todos — o botão passou a funcionar como "chip claro
       com texto escuro" em vez de "chip escuro com texto claro", uma
       inversão de padrão, mas é a única forma de manter o fundo do botão
       de fato mais claro que #B2F3FF (pedido explícito) com texto
       legível em cima.

     CATEGORIA 3 — resto dos elementos azuis (pedido: levemente mais
     escuro que #B2F3FF, ou seja L < 84,90%)
       --color-brand: #8FEEFF (L=78%, era #34597D). Ícone da marca
       (.brand__mark), borda superior de .concept-card,
       .plan-card--featured (borda 2px). Uso puramente decorativo/
       estrutural nestes três casos — nenhum carrega texto em cima.
       --color-brand-light: #A3F1FF (L=82%, era #648BA8). Borda do FAQ
       aberto (.faq-item[open]).
       --color-brand-tint: #E0FAFF (L=94%, era #EBF1F9) e
       --color-brand-tint-strong: #C7F6FF (L=89%, era #DCE8F3) — fundos
       pálidos de chip (.step-card__number, degradê de
       .plan-card--featured).
       --color-brand-hover: #33DFFF e --color-brand-active: #00C2E6 —
       tokens reservados, sem consumidor no CSS atual (mesma situação de
       antes desta revisão); mantidos no mesmo matiz/família, progressão
       mais escura, sem obrigação de contraste por não terem uso real.

       TEXTO SOBRE FUNDO CLARO (obrigação de contraste real, per
       diretriz do diretor: "--color-brand... se aparecer como color: de
       algum texto, meça") — --color-brand puro (L=78%) sobre fundo
       branco mediria só ~1,3:1, mesma ordem de grandeza do problema do
       #B2F3FF literal. Estes quatro usos de --color-brand COMO TEXTO
       foram redirecionados para um token novo, dedicado:
         --color-brand-dark: #00677A (NOVO — desacoplado de
         --color-brand; antes #21384F já existia com este nome, mas só
         para .btn--secondary; agora also assume os três outros usos que
         antes liam --color-brand diretamente como texto).
         vs. branco #FFFFFF: 6,52:1 (.btn--secondary texto-base,
         .concept-card__acronym, .next-step__eyebrow)
         vs. --color-brand-tint (novo) #E0FAFF: 5,99:1
         (.step-card__number texto)
       Todos folgados acima de 4,5:1.

       TRADE-OFF ACEITO — BORDAS DECORATIVAS/FUNCIONAIS ABAIXO DE 3:1: a
       diretriz do diretor foi explícita — Categoria 3 "não têm
       obrigação [de contraste], exceto onde usado como texto/ícone".
       Isso significa que as bordas abaixo, antes auditadas para ≥3:1
       (padrão de componente de UI, WCAG 1.4.11) nas Revisões 3.1/4,
       agora ficam BEM abaixo desse piso — mudança real, não descuido:
         .faq-item[open] borda (--color-brand-light #A3F1FF) vs. branco:
         1,27:1 (era 3,62:1 com o valor antigo #648BA8)
         .plan-card--featured borda (--color-brand #8FEEFF) vs. branco:
         1,33:1 (nova, não auditada antes por não precisar)
         .next-step--final borda (--color-accent #D1F8FF) vs. branco:
         1,13:1 (idem)
       Mitigação: nenhum desses três estados depende só da cor da borda
       para ser percebido — .faq-item[open] também gira o ícone "+" 45°
       e revela a resposta; .plan-card--featured também tem o degradê de
       --color-brand-tint e borda mais grossa (2px); .next-step--final
       também tem padding maior e sombra própria. A cor deixa de
       reforçar sozinha o estado, mas não é o único sinal.

     FORA DE ESCOPO, decisão deliberada — --color-border/
     --color-border-strong: mantidos SEM alteração (#E3EAF3/#CDD9E8).
     São parte do sistema de "neutros frios" (azul-acinzentado,
     dessaturado, ~35% de saturação) documentado à parte da paleta de
     identidade de três-azuis desde a REVISÃO 3 — não são, no espírito
     do pedido do usuário, os "elementos azuis" vívidos que ele está
     pedindo para reancorar em #B2F3FF (que é 100% saturado). Tratá-los
     como neutros (não como família B2F3FF) evita confundir bordas de
     contorno de card com a paleta de identidade, e evita reabrir a
     auditoria de contraste de todos os cards do site por um pedido que
     falava especificamente de "azul", não de "cinza".

     FOCO DE TECLADO (--color-focus-ring) — reavaliação não pedida
     explicitamente, mas necessária: o anel de foco usava
     var(--color-accent), que fazia sentido quando --color-accent era o
     tom mais saturado/visível dos três (REVISÃO 3/4). Agora
     --color-accent é um quase-branco (Categoria 2) — um anel de foco
     nessa cor seria quase invisível contra qualquer fundo claro do
     site (a mesma matemática do alerta de contraste acima se aplica
     igual a um contorno de 2px). Trocado para
     var(--color-text-link) (#00748A, 4,76–5,43:1 medido acima —
     folgado acima do mínimo de 3:1 para indicador de foco/componente de
     UI). Mas --color-text-link mede só 2,47:1 sobre --color-ink-900 e
     2,05:1 sobre --color-ink-800 — insuficiente para os elementos
     focáveis dentro do rodapé/CTA final (fundo escuro). Adicionada uma
     sobrescrita local do custom property dentro de .site-footer e
     .waitlist__box: --color-focus-ring: var(--color-accent-tint-on-dark)
     (o próprio #B2F3FF literal, 10,97:1/9,09:1 sobre ink-900/ink-800 —
     ver Categoria 1 acima). CSS custom properties propagam por herança
     dentro do escopo onde são redefinidas, então todo elemento focável
     dentro dessas duas seções herda o valor claro automaticamente, sem
     precisar de uma regra por componente.

     SOMBRAS COLORIDAS (rgba literais, não tokens, mas atualizadas por
     consistência) — três box-shadow no arquivo usavam o RGB de
     --color-accent ou --color-brand como tingimento de sombra
     (.btn--primary:hover, .plan-card--featured,
     .next-step--final). Como as duas cores-base agora são quase-brancas
     (Categoria 2/3 clareadas), usar o RGB delas faria uma "sombra" cor
     de quase-branco — visualmente inexistente. Atualizadas para usar o
     RGB dos tokens escuros equivalentes desta mesma família
     (--color-text-link / --color-brand-dark), preservando o espírito
     "sombra com leve tom de marca/ação" com uma cor que de fato lê como
     sombra.
     ================================================================ */

  /* ================================================================
     REVISÃO 6 — "Cinza Editorial" (colorman)
     Pedido do diretor do projeto, 3 partes:
       1) Tirar o azul do texto de corpo/links, redirecionando para os
          neutros de texto já existentes (preto/cinza) — não inventar tom
          novo onde já existe equivalente.
       2) Fundo da página volta a ser #FFFFFF puro (era #F7FAFD, "Azul
          Névoa", REVISÃO 4).
       3) Cabeçalho ganha fundo cinza bem escuro NEUTRO (não o azul-
          marinho de --color-ink-900 / --color-ink-800) com todo
          texto/ícone claro por cima.
     (Uma quarta parte, tipografia do wordmark, é do letterman e roda
     depois desta rodada — fora do escopo deste bloco.)

     PARTE 1 — TEXTO/LINK SEM AZUL
     Os seletores abaixo usavam --color-text-link, --color-accent,
     --color-brand ou --color-highlight como color de texto corrido —
     redirecionados para os neutros --color-text-heading (#101B2B),
     --color-text-body (#3B4A5E) ou a família branco/rgba-branco já usada
     no rodapé (--color-text-on-brand e variantes rgba). Onde o elemento é
     um link de verdade (não um item de navegação/rótulo), um sinal
     NÃO-colorido de "isto é clicável" foi mantido ou reforçado
     (sublinhado sempre visível, diferença de peso já existente) — a cor
     deixou de ser o único sinal de interatividade.

       .text-highlight (era --color-highlight): passa a
       --color-text-heading. Contraste sobre --color-bg-page/branco (agora
       o mesmo valor, ver PARTE 2 abaixo): ~17,3:1 — muito acima do piso de
       3:1 que já se aplicava (é texto grande, herda --fs-h1). O
       diferenciador visual do destaque continua existindo via
       --font-highlight (serifado, Source Serif 4 Bold) — não toquei em
       font-family nem font-weight deste seletor, só color.

       .source-card__link e .next-step__link (base e hover): a dupla
       --color-text-link / --color-text-link-hover deu lugar à dupla
       neutra já existente --color-text-body / --color-text-heading —
       mesma lógica "hover mais escuro" já usada em todo o resto do
       arquivo, só com tokens neutros em vez de azuis. Ganharam
       text-decoration underline sempre visível (não só no hover) como
       sinal funcional de link, complementando o peso 600/700 que já
       existia. Contraste medido (fórmula WCAG de luminância relativa):
         --color-text-body #3B4A5E sobre branco: ~9,02:1
         --color-text-heading #101B2B sobre branco: ~17,30:1
       Ambos muito acima do mínimo 4,5:1 de texto normal.

       .next-step--final .next-step__eyebrow (era --color-text-link):
       redirecionado para --color-text-heading, não tratado como exceção.
       Isso muda a relação com o eyebrow padrão (.next-step__eyebrow, que
       continua em --color-brand-dark — fora do escopo desta tarefa, não
       listado para troca): antes os dois eram do mesmo azul mais vívido;
       agora o eyebrow padrão continua num azul-petróleo (--color-brand-dark,
       ~6,52:1 sobre branco) e o da versão --final vai para o neutro mais
       escuro do sistema (~17,3:1 sobre branco). Escolhi o extremo mais
       escuro (não um cinza intermediário) porque isso preserva a intenção
       original do componente — "o eyebrow final é mais assertivo que o
       padrão" — só que a assertividade agora vem de contraste/peso, não de
       puxar para o azul de Ação.

       .faq-item__question:hover / :focus-visible (era --color-text-link):
       redirecionado para --color-text-heading — o mesmo valor já usado no
       estado de repouso do elemento. O feedback de hover passa a vir do
       cursor:pointer já existente; como o elemento é um <summary> inteiro
       (área grande, clique óbvio pelo contexto de FAQ), optei por não
       adicionar sublinhado — sublinhar um título de pergunta inteiro
       destoaria do resto do sistema (nenhum outro h3-like do site usa
       sublinhado). Decisão de zona cinzenta, documentada aqui.

       .footer-nav__link[aria-current="page"] e .footer-contact__link
       (eram --color-accent-tint-on-dark, o #B2F3FF literal): redirecionados
       para a família branco/rgba-branco já usada no resto do rodapé.
       .footer-nav__link[aria-current="page"] vai para --color-text-on-brand
       (branco pleno) — o mesmo tom que .footer-nav__link:hover já usa,
       exatamente como sugerido; mantém peso 700 + sublinhado já existentes
       como sinal de "link ativo". .footer-contact__link passa a usar o
       mesmo par base/hover que .footer-nav__link já usa
       (rgba(255,255,255,0.85) em repouso, --color-text-on-brand no
       hover/foco, herdado da regra já existente) e ganha text-decoration
       underline sempre visível — não tinha nenhum sinal não-colorido de
       link antes, só a cor; o peso 600 já existente sozinho não bastava
       como substituto.
       Consequência: --color-accent-tint-on-dark NÃO fica órfão — continua
       em uso nas sobrescritas locais de --color-focus-ring em .site-footer
       e .waitlist__box (fora do escopo desta tarefa). --color-highlight,
       por outro lado, fica sem nenhum consumidor no CSS depois da troca de
       .text-highlight — mantido no :root sem uso real, mesma situação de
       outros tokens "reservados" já documentados no arquivo
       (--color-brand-hover / --color-brand-active).

     PARTE 2 — FUNDO 100% BRANCO
     --color-bg-page volta de #F7FAFD (REVISÃO 4, "Azul Névoa") para
     #FFFFFF — igual a --color-surface. Isto reabre a mesma decisão da
     REVISÃO 3.2 (branco puro) → REVISÃO 4 (nevoento) → agora de novo
     branco puro; ver os dois blocos de comentário acima para o raciocínio
     completo de cada lado. Consequência direta, já antecipada nos dois
     blocos anteriores: --color-bg-page e --color-surface voltam a ser
     EXATAMENTE a mesma cor, então a borda + sombra dos cards voltam a ser
     o único par de sinais de contorno (nenhuma diferença de tom entre
     página e card para ajudar). Medido: --color-border-strong no valor da
     REVISÃO 4 (#CDD9E8) mede só ~1,43:1 contra branco puro — quase
     imperceptível sem a ajuda do tom de fundo que existia na REVISÃO 4.
     Decisão: revertidas --color-border / --color-border-strong para os
     valores já calibrados na REVISÃO 3.2 para este mesmo cenário
     (#DCE3ED / #C1CCDC) — não um valor novo, reaproveitando um par que já
     foi pensado especificamente para "página e card no mesmo branco".
     Novo contraste: --color-border-strong #C1CCDC sobre branco ~1,62:1.
     Estas bordas continuam decorativas (contorno de card/header, não
     "componente de UI" no sentido do WCAG 1.4.11), então não têm piso
     obrigatório de 3:1 — a sombra leve já existente (rgba(16,27,43,0.06))
     em todos os cards continua fazendo parte do sinal de contorno junto
     com a borda, como já documentado nas revisões anteriores.

     PARTE 3 — CABEÇALHO ESCURO NEUTRO
     .site-header troca de --color-surface (branco) para um token novo,
     --color-header-bg: #262626 — cinza acromático puro (R=G=B=38, matiz
     zero por construção), deliberadamente NÃO reaproveitando
     --color-ink-900 / --color-ink-800 (que são azul-marinho por design,
     ver comentário desses tokens acima — "quase-preto AZULADO").
     Luminância relativa de #262626: ~0,0194.
     Todo texto/ícone do header precisa ficar claro para manter contraste
     sobre este fundo:
       .brand__name (header): passa de --color-text-heading (escuro,
       ficaria ilegível) para --color-text-on-brand (branco) — mesmo
       padrão que .site-footer .brand__name já usa para o mesmo problema
       no rodapé. Contraste: branco sobre #262626 ~15,13:1. Só a
       propriedade color foi tocada; tamanho/peso/tracking continuam do
       letterman.
       .site-nav__link segue o mesmo padrão de três estados já usado em
       .footer-nav__link (consistência entre header e rodapé, ambos agora
       de fundo escuro):
         base: rgba(255,255,255,0.85) — sem sublinhado. Contraste
         (composto sobre o próprio fundo #262626): ~11,3:1.
         hover / focus-visible: --color-text-on-brand (branco pleno) +
         text-decoration underline. Contraste: ~15,13:1.
         [aria-current="page"]: --color-text-on-brand + font-weight 700
         (já existia) + text-decoration underline — o mesmo tom do hover,
         diferenciado por peso + sublinhado permanente em vez de cor, já
         que cor não está mais disponível como diferenciador. Decisão de
         zona cinzenta: antes a diferença hover vs. aria-current era só
         peso; agora os dois estados também compartilham o sublinhado,
         então o único diferenciador real é o peso 700 — aceitável porque
         aria-current é um estado persistente, não um feedback momentâneo
         como hover, e o mesmo padrão já é usado com sucesso no rodapé.
       .brand__mark (ícone da marca, background-color --color-brand,
       #8FEEFF): contraste medido contra o novo fundo ~11,41:1 — presença
       forte, sem necessidade de ajuste. Mantido sem alteração.
       .btn.btn--primary.btn--nav (CTA do header): fundo/texto/borda não
       tocados — o botão já é quase-branco com texto escuro
       (--color-text-on-accent = --color-text-heading), então continua
       muito legível independente do fundo atrás dele escurecer. Contraste
       do próprio fundo do botão (--color-accent #D1F8FF) contra o novo
       --color-header-bg: ~13,38:1 — presença de sobra, decidi manter a
       borda no mesmo tom do fundo (efetivamente invisível, como já era)
       em vez de adicionar um contorno extra, por não haver necessidade
       funcional.
       border-bottom do .site-header (era --color-border-strong, calibrado
       para separar header branco de hero branco): trocado para
       rgba(255,255,255,0.10) — mesma família de "borda clara sutil sobre
       superfície escura" já usada em .waitlist__box (rgba(255,255,255,
       0.12)) e .site-footer__legal (rgba(255,255,255,0.16)), com um valor
       levemente mais discreto porque a separação header/hero já é muito
       forte só pelo contraste de cor (escuro sobre branco) — a borda aqui
       é reforço, não o sinal principal.
     ================================================================ */

  /* ================================================================
     REVISÃO 7 — "Rosa Vívido" (colorman): migração de família AZUL →
     ROSA/MAGENTA
     Motivo: a logo do produto foi trocada (assets/logo.png, inserida no
     header via .brand__logo) por um pill em gradiente rosa/magenta com
     texto branco. Um coordenador já tinha adiantado, fora do processo
     formal, um header transparente que revela esse gradiente ao rolar
     (.site-header__bg) e um sistema claro/escuro — mas o resto da
     paleta (marca, ação, destaque, links, foco, superfícies escuras)
     continuava 100% na família azul das revisões anteriores (3 a 6,
     "Azul Funcional" → "Azul Névoa" → ancoragem em #B2F3FF → "Cinza
     Editorial"). Pedido explícito do dono do projeto: migrar TODO o
     sistema de azul para rosa/magenta, mantendo os PAPÉIS que cada
     token já tem — só muda o matiz, não a função.

     MÉTODO — mesma lógica estrutural das revisões anteriores (uma
     família por matiz/saturação, variando só a luminosidade por papel),
     mas com o CONTRASTE RECALCULADO do zero em cada par, não herdado
     por analogia do sistema azul antigo. Isso importa porque a fórmula
     de luminância relativa do WCAG pesa muito mais o canal VERDE
     (0,7152) que o vermelho (0,2126) ou o azul (0,0722) — um ciano
     (verde+azul altos, vermelho baixo) e um magenta (vermelho+azul
     altos, verde baixo/nulo) na MESMA luminosidade HSL (L) produzem
     luminâncias WCAG bem diferentes. Reaproveitar os valores antigos de
     L "porque davam certo no azul" teria introduzido contrastes errados
     sem ninguém perceber — por isso cada par abaixo foi medido de novo
     com a fórmula de luminância relativa (sRGB → linear → 0,2126·R +
     0,7152·G + 0,0722·B), não assumido.

     MATIZ ESCOLHIDO — H≈331°, S=100%, amostrado do próprio tom mais
     saturado do gradiente da logo (#FF68B0, a extremidade "vívida" do
     gradiente #f5c4f6 → #ff68b0 usado em .site-header__bg — ver PARTE 2
     abaixo). É o mesmo raciocínio estrutural da REVISÃO 5 antiga (uma
     família só, variando luminosidade por papel), agora ancorada num
     valor tirado da identidade visual real do produto (a logo), não de
     um número solto.

     PARTE 1 — TOKENS DE COR MIGRADOS (papel preservado, só o matiz muda)

       --color-brand (estrutural/marca — ícone, borda de .concept-card,
       borda de .plan-card--featured, tokens -light/-tint/-tint-strong/
       -hover/-active, todos puramente decorativos, sem obrigação de
       contraste): #8FEEFF → #FF8FC5 (mesmo L=78% do sistema anterior,
       decorativo). --color-brand-light #A3F1FF → #FFA3D0 (L=82%).
       --color-brand-tint #E0FAFF → #FFE0EF (L=94%). --color-brand-tint-
       strong #C7F6FF → #FFC7E2 (L=89%). --color-brand-hover #33DFFF →
       #FF3396 e --color-brand-active #00C2E6 → #E6006F (reservados,
       sem consumidor no CSS, mantidos na família por completude).

       --color-brand-dark (o único uso de --color-brand COMO TEXTO —
       .btn--secondary base, .step-card__number, .concept-card__acronym,
       .next-step__eyebrow): #00677A → #A3004F. RECALCULADO do zero (não
       herdado do L antigo): H=331°/S=100%/L=32%. Medido: 7,87:1 contra
       branco (era 6,52:1 — folga maior porque, na família magenta, o
       canal verde nulo escurece a luminância WCAG mais rápido que no
       ciano antigo para o mesmo L visual); 6,43:1 contra o novo
       --color-brand-tint #FFE0EF (era 5,99:1). Ambos folgados acima do
       mínimo 4,5:1.

       --color-accent (fundo de botão quase-branco, papel "Categoria 2"
       herdado da REVISÃO 5 — .btn--primary, .skip-link, .badge--plan) e
       família: #D1F8FF → #FFD1E7 (L=91%). --color-accent-hover #C2F5FF
       → #FFC2DF (L=88%). --color-accent-active #B5F3FF → #FFB5D9
       (L=85,5%). --color-accent-tint #E8FBFF → #FFE8F3 (L=95,5%).
       --color-accent-tint-strong #CFF7FF → #FFCFE6 (L=90,5%). Texto por
       cima (--color-text-on-accent = var(--color-text-heading), ver
       PARTE 3): medido contra os três estados — 12,76:1 (accent),
       11,53:1 (hover), 10,57:1 (active) — todos folgados (eram 15,31/
       14,67/14,20:1; a queda é esperada, mesmo motivo do canal verde
       explicado acima, mas ainda muito acima do mínimo 4,5:1).
       --color-accent-tint-on-dark (Categoria 1 — texto claro sobre
       fundo ESCURO, herdado do papel do antigo #B2F3FF literal; usado
       nas sobrescritas locais de --color-focus-ring em .site-footer e
       .waitlist__box): #B2F3FF → #FFB2D7 (mesmo L=84,90% do ancoradouro
       antigo). Medido contra o novo --color-ink-900 #4A1730: 8,65:1
       (era 10,97:1); contra --color-ink-800 #621E3F: 7,09:1 (era
       9,09:1) — folga menor que antes pelo mesmo motivo do canal verde,
       mas ainda muito acima do mínimo 4,5:1 (e do piso 3:1 de indicador
       de foco).

       --color-text-link / --color-text-link-hover (texto de link sobre
       fundo claro — .btn--secondary:hover, .preview-card__number,
       --color-focus-ring padrão): #00748A → #B30056 / #005A6B →
       #8A0043. RECALCULADOS do zero contra o pior caso real de fundo
       entre os usados por este token (o mais escuro dos fundos claros
       onde aparece, --color-accent-tint-strong #FFCFE6): H=331°/S=100%/
       L=35% para o base, L=27% para o hover. Medido (--color-text-link,
       #B30056): 5,02:1 contra --color-accent-tint-strong (o pior caso),
       5,09:1 contra --color-accent, 5,62:1 contra --color-brand-tint,
       6,26:1 contra --color-bg-light, 5,93:1 contra --color-accent-
       tint, 6,88:1 contra branco — todos ≥4,5:1, com a menor folga no
       pior caso proposital (mesmo espírito "menor folga possível
       aceitável" da REVISÃO 5 antiga, mas com folga um pouco maior
       porque o piso técnico da família magenta em L=35% já entrega
       isso). --color-text-link-hover (#8A0043, L=27%): 9,71:1 contra
       branco — bem mais escuro que o base, mesmo padrão "hover
       escurece" de sempre.

       --color-focus-ring: continua var(--color-text-link) (nenhuma
       mudança de referência, só o valor resolvido muda com o token
       acima) — 6,88:1 contra branco, 6,26:1 contra --color-bg-light,
       ambos folgados acima do mínimo 3:1 de indicador de foco/
       componente de UI. As sobrescritas locais em .site-footer e
       .waitlist__box continuam usando --color-accent-tint-on-dark (ver
       acima), sem mudança de referência.

       --color-ink-900 / --color-ink-800 (superfícies escuras do rodapé
       e da caixa de CTA final): #16304D/#1E3D5F → #4A1730/#621E3F.
       Mantido o mesmo papel "quase-neutro escuro com identidade de
       marca" das revisões anteriores (azul-marinho → agora vinho/
       ameixa escuro), com a mesma saturação moderada (~53%, não 100%)
       que o par antigo já usava para NÃO competir com os tons vívidos
       de --color-accent/--color-brand — só a família de matiz mudou de
       H≈211° (azul-marinho) para H=331°/S=53% (vinho). Medido: branco
       pleno contra o novo --color-ink-900: 14,42:1 (era >13:1, folga
       preservada); --color-accent-tint-on-dark (#FFB2D7) contra
       --color-ink-900: 8,65:1 (ver acima); rgba(255,255,255,0.6) — o
       par mais apertado do rodapé (.footer-nav__title, .footer-contact
       __title, .legal-note, .legal-copyright) — contra o novo ink-900:
       6,03:1 (era ~5,84:1, folga preservada e até um pouco maior);
       mesmo par contra o novo ink-800: 5,21:1. Todos folgados acima do
       mínimo 4,5:1.

     PARTE 2 — GRADIENTE DO HEADER (valores canônicos, não amostrados)
     O coordenador tinha amostrado pixels da logo e chegado em
     #F5C2F4 → #FF69B1 para .site-header__bg (linear-gradient(90deg,
     ...), revela ao rolar via --header-scroll). O dono do projeto deu
     os valores EXATOS que quer, substituindo a amostragem:
     #f5c4f6 → #ff68b0 — diferença mínima dos valores amostrados (poucos
     pontos por canal), mas agora são os valores de referência oficiais.
     Nomeados como tokens em vez de hex solto no meio da regra, seguindo
     o mesmo padrão de nomenclatura kebab-case já usado no resto do
     arquivo:
       --color-gradient-start: #f5c4f6;
       --color-gradient-end: #ff68b0;
     .site-header__bg passa a usar var(--color-gradient-start) e
     var(--color-gradient-end) — nenhuma outra propriedade da regra
     (posição, opacidade, blur, timing) foi tocada, só os dois valores
     de cor. Nenhum outro lugar do CSS usava os hex antigos.

     PARTE 3 — COR DE TEXTO POR TEMA (mais intencional, não genérica)

       MODO ESCURO — pedido explícito: texto branco total (#FFFFFF), não
       os cinzas-claros que o coordenador tinha usado (#F6F1E4/#D9D2C2/
       #B2AB99). --color-text-heading (dark) passa a #FFFFFF puro.
       --color-text-body e --color-text-muted sobem para variantes de
       opacidade de branco (mesmo padrão já usado em --color-text-on-
       brand-muted, rgba(255,255,255,0.8)) em vez de branco puro
       também — preserva a hierarquia heading > body > muted por
       OPACIDADE em vez de por matiz de cinza: --color-text-body (dark):
       rgba(255,255,255,0.82); --color-text-muted (dark):
       rgba(255,255,255,0.62). Medido (composto sobre os fundos onde
       aparecem, já que é uma cor translúcida): --color-text-body contra
       o novo --color-bg-dark #3D3A34: 8,25:1; contra o novo
       --color-surface (dark) #474033: 7,46:1. --color-text-muted contra
       --color-bg-dark: 5,47:1; contra --color-surface (dark): 4,95:1.
       Todos ≥4,5:1 (texto normal), com --color-text-muted sendo o par
       mais apertado — ainda assim folgado.

       MODO CLARO — pedido explícito: escolher uma cor mais intencional
       que o cinza-azulado herdado do sistema antigo (#101B2B/#3B4A5E/
       #5B6B81), com leve intenção de marca coerente com o rosa/magenta,
       mantendo AA sobre --color-bg-light (#FFF3DB) e --color-surface
       (branco). Escolhido: MESMO matiz da família (H=331°), mas quase
       preto — um "preto-ameixa"/aubergine em vez de preto neutro ou
       preto-azulado — saturação baixa (18-30%) para não ficar
       "roxo/vinho" de longe, só sugerir a marca de perto:
         --color-text-heading: #101B2B → #28151E (H=331°/S=30%/L=12%).
         Medido: 17,26:1 contra branco (era 17,30:1 — praticamente
         idêntico, luminância WCAG calculada para ficar equivalente de
         propósito); 15,69:1 contra --color-bg-light.
         --color-text-body: #3B4A5E → #5E3B4C (H=331°/S=23%/L=30%).
         Medido: 9,52:1 contra branco (era 9,02:1); 8,66:1 contra
         --color-bg-light.
         --color-text-muted: #5B6B81 → #715060 (H=331°/S=17%/L=38%).
         Medido: 6,96:1 contra branco; 6,32:1 contra --color-bg-light
         (era ~5,19:1 sobre o fundo claro da época — folga maior aqui
         porque prioriza mais é a hierarquia degrau-a-degrau abaixo).
       Hierarquia de luminância WCAG preservada: heading (0,0108) < body
       (0,0603) < muted (0,1010) — degraus perceptíveis entre os três,
       mesma relação de sempre, agora com um sutil tom de marca em vez
       de cinza genérico.

     PARTE 4 — CINZAS ESCURECIDOS (item sinalizado para confirmação do
     usuário — ver relatório)
     Pedido do usuário, sem token específico: "escurecer o tom de cinza
     usado no site". Avaliação com julgamento próprio:

       MODO CLARO — os neutros --color-surface-alt/--color-border/
       --color-border-strong ainda carregavam um subtom azul-acinzentado
       (resíduo das revisões "Azul Névoa"/"Azul Funcional" antigas,
       documentado à época como "neutros frios" deliberadamente
       separados da família de identidade). Com o azul totalmente fora
       do sistema agora, esse resíduo ficou dissonante ao lado de um
       fundo quente (--color-bg-light #FFF3DB) e da nova família rosa —
       escurecidos E reneutralizados para um cinza-taupe quente,
       coerente com o fundo creme:
         --color-surface-alt: #EEF3FA → #F2ECE6 (tint interno de
         .concepts__note; medido com --color-text-muted por cima:
         5,93:1, ≥4,5:1).
         --color-border: #DCE3ED → #D8CCC0 (decorativo, sem piso
         obrigatório de contraste — mesmo status documentado desde a
         REVISÃO 4/6).
         --color-border-strong: #C1CCDC → #9C8E82 — escurecido de forma
         mais decisiva que o par acima (era o par mais "lavado" do
         sistema, ~1,62:1 contra branco). Novo contraste: 3,18:1 contra
         branco — cruza até o piso de 3:1 de componente de UI (não
         obrigatório aqui, mas um ganho real: bordas de card/header
         ficam visivelmente mais definidas, não só mais escuras).
       MODO ESCURO — --color-surface/-alt/--color-border/-strong
       (dentro de [data-theme="dark"]) mediam luminâncias muito
       próximas do --color-bg-dark (ex.: surface antigo a só ~1,15:1 de
       separação do fundo — cartão quase invisível). Escurecer mais a
       superfície pioraria essa separação (ela já estava colada no
       fundo); o ajuste aplicado foi na mesma direção pedida (menos
       "lavado"), mas via mais SATURAÇÃO em vez de menos luminosidade
       pura — mesma família de matiz do --color-bg-dark (H≈38°, tom
       terroso, não a família rosa — este bloco de tokens nunca foi
       azul, está fora do pedido de purga de PARTE 1, só entra aqui por
       ser "cinza"), saturação subindo de ~8-9% para 16-20%:
         --color-surface: #47433C → #474033 (S 8,4%→16%, L 25,7%→24%).
         --color-surface-alt: #4E493F → #534A3C (S~9%→16%, L~27%→28%).
         --color-border: #59544A → #5A503F (S 9,2%→18%, L 32%→30%).
         --color-border-strong: #6B655A → #6E6149 (S 8,6%→20%,
         L 38,6%→36%).
       Nenhum destes quatro carrega texto diretamente (superfícies e
       bordas), então não há piso de contraste obrigatório — a mudança
       é de PRESENÇA/RIQUEZA visual, não de legibilidade. SINALIZAR AO
       USUÁRIO: esta parte (tanto claro quanto escuro) é a que mais
       depende de julgamento subjetivo sem uma medida objetiva de
       "certo" — ver relatório final para confirmação.

     PARTE 5 — TOKEN ÓRFÃO REMOVIDO
     --color-header-bg (#262626, cinza acromático puro) foi introduzido
     pelo coordenador junto do header transparente + gradiente, mas
     nenhuma regra do CSS usa var(--color-header-bg) — o header real usa
     background-color: transparent (.site-header) + .site-header__bg
     como camada de gradiente à parte (ver PARTE 2). Confirmado por
     busca no arquivo inteiro: zero ocorrências de
     "var(--color-header-bg)". Token removido do :root. Ver relatório
     final.

     PARTE 6 — DOIS PROBLEMAS DE CONTRASTE PRÉ-EXISTENTES, NÃO CAUSADOS
     POR ESTA MIGRAÇÃO (sinalizados, não corrigidos — ver relatório)
     Ambos já existiam identicamente no sistema azul anterior (mesma
     ordem de grandeza de falha, antes e depois desta rodada) — são
     consequência do modo escuro ter sido "bolted on" fora do processo
     formal, misturando tokens de texto QUE MUDAM de tema com fundos de
     botão/decorativos que NÃO mudam de tema:
       1) --color-text-on-accent = var(--color-text-heading): no modo
          claro isso dá texto escuro sobre botão claro (--color-accent),
          correto; no modo ESCURO, --color-text-heading vira branco
          (ver PARTE 3), mas --color-accent continua sendo o mesmo rosa
          quase-branco fixo (marca/botão não mudam com tema, por
          desenho) — resultado: texto branco sobre fundo quase-branco em
          .btn--primary, .badge--plan, .skip-link no modo escuro
          (contraste ~1,35:1, ilegível). No sistema azul antigo o mesmo
          padrão já quebrava de forma equivalente (branco-creme sobre
          ciano quase-branco).
       2) --color-brand-dark: fixo em ambos os temas, mas três dos seus
          quatro consumidores (.btn--secondary base, .concept-card
          __acronym, .next-step__eyebrow) estão sobre fundos que MUDAM
          de tema (--color-surface ou --color-bg-page) — no modo escuro,
          texto escuro fixo sobre fundo agora escuro (contraste ~1,3:1,
          ilegível). O quarto consumidor (.step-card__number, sobre
          --color-brand-tint, que não muda de tema) continua correto
          nos dois temas.
     Não corrigi nenhum dos dois nesta rodada: a correção certa não é
     trocar um valor de token (ex.: um "--color-brand-dark de modo
     escuro" quebraria o .step-card__number, que está OK hoje, porque
     seu fundo não muda de tema) — precisa de uma sobrescrita por
     COMPONENTE dentro de [data-theme="dark"], o que é uma decisão de
     arquitetura maior que uma migração de matiz. Flagueado para o
     usuário/diretor decidir o encaminhamento (ver relatório final).
     ================================================================ */

  /* ================================================================
     REVISÃO 9 — "Céu e Areia" (colorman): migração ROSA/MAGENTA →
     AZUL/CREME/QUASE-PRETO, ancorada em 4 hex LITERAIS dados pelo dono
     do projeto (não amostrados, não escolhidos por mim):
       #FFFFFF = fundo da página (sólido, único, sem gradiente/alternância)
       #5299C9 = azul primário de AÇÃO/CTA
       #FAF4EA = creme — parceiro de gradiente do azul E cor de texto
                  sempre que o texto estiver sobre um fundo azul sólido
       #211E1A = quase-preto — título E corpo de texto (mesma cor para
                  os dois, não é mais uma hierarquia de dois tons)
     Diferente das revisões 3-8 (uma família só, H fixo, variando L por
     PAPEL de uso), aqui não há liberdade de escolher o H: os 4 hex já
     vieram prontos. O trabalho desta revisão é (1) medir os 4 literais
     contra tudo que precisam cobrir, (2) onde um literal não fecha AA,
     derivar uma variante MAIS ESCURA/CLARA do MESMO H/S (nunca um matiz
     novo) só o suficiente pra cruzar o piso, e (3) generalizar os 4
     papéis para o resto do sistema (bordas, superfícies escuras,
     desabilitado, semânticos) sem deixar nada preso à família rosa
     antiga. Método de medição idêntico ao das revisões anteriores:
     sRGB → linear → 0,2126·R + 0,7152·G + 0,0722·B, luminância relativa
     calculada par a par, nunca herdada por analogia.

     HSL dos 3 literais cromáticos (calculado, não arredondado a esmo):
       #5299C9 → H≈204,2° / S≈52,4% / L≈55,5% (luminância relativa
       WCAG ≈0,288)
       #FAF4EA → quase branco, luminância relativa ≈0,910
       #211E1A → quase preto, H≈34,3° / S≈11,9% / L≈11,6% (luminância
       relativa ≈0,0133) — o hex já é levemente QUENTE (puxa pra
       marrom/âmbar, não é um preto neutro nem azulado), o que orienta
       a temperatura de toda a família de neutros derivada dele (ver
       PARTE 3).

     PARTE 1 — O PROBLEMA DE CONTRASTE CREME-SOBRE-AZUL (alertado pelo
     diretor do projeto, CONFERIDO aqui com a fórmula completa, não
     assumido)
     #FAF4EA (L≈0,910) sobre #5299C9 puro (L≈0,288): (0,910+0,05) /
     (0,288+0,05) = 0,960 / 0,338 = 2,84:1. Confirmado: abaixo até do
     piso de texto GRANDE (3:1), muito abaixo do piso de texto normal
     (4,5:1) — o alerta do diretor estava certo. Os dois hex são
     literais fixados pelo usuário, então nenhum dos dois pode ser
     abandonado; a saída (mesmo padrão já usado nas revisões 4/5/7 desta
     paleta para "CTA que carrega texto claro por cima") é: o literal
     #5299C9 continua disponível no sistema, mas só em papéis que NÃO
     precisam de 4,5:1 — borda/ícone decorativo, ou texto GRANDE/negrito
     (piso 3:1) — e toda superfície SÓLIDA que carregue #FAF4EA como
     texto de tamanho normal por cima passa a usar um token NOVO,
     derivado do mesmo H≈204,2°/S≈52,4%, só com L mais baixo:
     --color-accent (o próprio token de fundo de botão/CTA, não um
     "-strong" à parte — ver PARTE 2) recebe o valor escurecido.

       ACHADO DE PASSAGEM (vale para os dois usos "texto grande" do
       literal, ver PARTE 4 abaixo — --color-highlight): #5299C9 puro
       sobre #FFFFFF mede 3,107:1 e sobre #3D3A34 (--color-bg-dark,
       modo escuro, INTOCADO nesta rodada) mede 3,648:1 — os dois ≥3:1,
       então o literal do usuário serve, sem nenhuma derivação, para
       qualquer uso de texto GRANDE/negrito nos dois temas. Not a
       coincidência forçada: o usuário pediu #5299C9 como "cor primária
       de ação", então ele já é, por natureza, o tom mais saturado/
       reconhecível do sistema — o mesmo que um destaque de leitura
       tipicamente quer.

     PARTE 2 — FAMÍLIA --color-accent (fundo de botão/CTA sólido — troca
     de papel estrutural: deixou de ser "Categoria 2" da era rosa, um
     quase-branco pastel que só precisava de TEXTO ESCURO por cima; agora
     é um AZUL SÓLIDO que precisa sustentar TEXTO CREME por cima —
     inversão de polaridade, mesma lógica de troca de papel que a
     REVISÃO 8 já tinha aplicado ao --color-ink-900/-800 na época, só que
     ao contrário)
     Derivado do mesmo H=204,2°/S=52,4% do literal, variando só L até
     cruzar 4,5:1 com #FAF4EA por cima no PIOR estado (o mais claro,
     "base"; hover/active só precisam ficar mais escuros ainda, o que só
     aumenta a folga):
       --color-accent: #31709B (L=40%). Luminância relativa ≈0,1475.
       Contraste com #FAF4EA: (0,960)/(0,1975) = 4,86:1 — cruza o piso
       com ~8% de folga (mínimo necessário, não um valor arbitrário:
       L=43% ainda mede só 4,32:1, abaixo do piso; L=40% é o primeiro
       múltiplo de "L limpo" que passa com folga real). Contraste com
       branco: 5,32:1 (também usado como referência, embora o consumidor
       real seja sempre #FAF4EA por cima).
       --color-accent-hover: #285D80 (L=33%). Contraste com #FAF4EA:
       6,49:1 — mais escuro que a base, feedback de hover convencional.
       --color-accent-active: #214C69 (L=27%). Contraste com #FAF4EA:
       8,36:1 — estado pressionado, mais escuro ainda.
     --color-text-on-accent: #FAF4EA (LITERAL do usuário, direto — não
     um alias de --color-text-heading como nas revisões 5-8; a razão de
     ser alias na era rosa (o botão carregava texto ESCURO) não existe
     mais aqui, o botão agora carrega texto CLARO). Como esta cor não
     depende de tema (nem #FAF4EA nem --color-accent mudam com
     [data-theme]), o problema histórico "PARTE 6/BUG 1" da REVISÃO 7
     (texto herdado de --color-text-heading virando branco no modo
     escuro, ilegível sobre o botão fixo) deixa de EXISTIR pela raiz —
     não precisa mais de sobrescrita dentro de [data-theme="dark"]; a
     sobrescrita antiga (--color-text-on-accent: var(--color-text-link-
     hover)) foi REMOVIDA do bloco dark (ver nota lá) porque, se
     mantida, quebraria de novo (aplicaria um azul escuro sobre um azul
     escuro fixo, ilegível) — isso não é "redesenhar o modo escuro", é
     remover uma sobrescrita cuja premissa desapareceu.
     Consumidores: .btn--primary, .badge--plan, .skip-link.

     PARTE 3 — FAMÍLIA --color-brand (estrutural/decorativo, papel
     preservado desde a REVISÃO 5: ícone/borda que só precisa comunicar
     "isto é a marca", sem carregar texto de tamanho normal)
       --color-brand: #5299C9 (LITERAL do usuário, sem derivação — é
       exatamente o papel "borda/ícone/estado mais claro" que a PARTE 1
       reservou pro literal). Consumidor real: borda de
       .plan-card--featured:hover (2px). Contraste contra branco: 3,11:1
       — cruza até o piso de componente de UI (3:1), que nem é
       obrigatório aqui (borda puramente decorativa) — melhora em
       relação à era rosa, que media só 1,33:1 nesse mesmo lugar.
       --color-brand-light: #83B6D8 (L=68%, mais claro que o literal —
       valor puxado um pouco mais claro do que o primeiro candidato,
       L=65%/#77AFD5, porque este token também é reaproveitado como
       texto DENTRO de [data-theme="dark"] em .btn--secondary/
       .concept-card__acronym/.next-step__eyebrow — "BUG 2" da REVISÃO 7,
       ver nota junto a essa sobrescrita mais abaixo — e o candidato mais
       escuro só media ~4,33:1 contra a superfície escura, abaixo do
       piso de 4,5:1 de texto normal; L=68% sobe pra ~4,69:1 mantendo o
       mesmo H/S). Consumidor decorativo: borda do FAQ aberto. Contraste
       contra branco: 2,18:1 — abaixo de 3:1, MESMO trade-off já aceito e
       documentado desde a REVISÃO 5 (Categoria 3 "não tem obrigação de
       contraste, exceto como texto/ícone"); mitigação idêntica à de
       sempre — o ícone "+" gira 45° e a resposta é revelada, a cor não é
       o único sinal.
       --color-brand-hover: #377EAF / --color-brand-active: #1B3E56 —
       reservados no nome (nenhum consumidor além do decorativo abaixo),
       mesma família, L mais claro/mais escuro que o literal.
       --color-brand-tint: #E8F1F8 / --color-brand-tint-strong: #D0E4F0
       — tints bem claros do mesmo H/S (L=95%/88%), fundo de chip do
       .step-card__number.
       --color-brand-dark: #2C658C (L=36% — MESMO valor de
       --color-text-link, ver PARTE 5; tokens independentes por design,
       mesmo padrão "hex igual, papel próprio" já usado no arquivo desde
       a REVISÃO 8 para --color-ink-900/-800). Texto sobre fundo claro:
       .btn--secondary (base), .step-card__number, .concept-card__acronym,
       .next-step__eyebrow. Contraste: 6,27:1 contra branco/--color-surface,
       5,48:1 contra --color-brand-tint (#E8F1F8) — ambos folgados acima
       de 4,5:1.

     PARTE 4 — --color-highlight (destaque de leitura, .text-highlight,
     texto GRANDE herdado do h1 — piso 3:1, não 4,5:1)
     Usa o literal #5299C9 DIRETO (ver achado de passagem na PARTE 1) —
     não precisou de nenhuma derivação, ao contrário de todas as
     revisões anteriores desta paleta (3 a 8), que sempre calcularam um
     L próprio pra este token. Mede 3,107:1 contra o novo
     --color-bg-light/#FFFFFF, 3,648:1 contra --color-bg-dark #3D3A34
     (modo escuro, valor intocado) — ambos ≥3:1. Reaproveitar o literal
     de Ação para o destaque de leitura é uma decisão nova desta rodada
     (nas revisões 3-8 os dois papéis sempre tinham L's diferentes,
     mesmo dentro da mesma família): aqui os dois hex-âncora do usuário
     (Ação=#5299C9, o próprio branco de fundo) já entregam o piso sem
     margem pra outra escolha "mais correta" — inventar um terceiro tom
     só pra ter um L diferente do CTA introduziria uma variação de matiz
     que o usuário não pediu.
     --color-highlight-tint: #DCEDF8 — reservado, sem consumidor
     (mesma situação de sempre neste token desde a REVISÃO 5).

     PARTE 5 — --color-text-link / --color-text-link-hover (texto azul
     sobre TINTS claros — .btn--secondary:hover, .preview-card__number,
     --color-focus-ring padrão)
     Recalculado contra o PIOR fundo real onde aparece — não mais
     --color-accent-tint-strong sozinho: como .btn--secondary:hover
     (texto) e .btn--secondary:active (fundo --color-accent-tint-strong,
     SEM troca de `color` própria — herda o `color` do :hover quando o
     mouse permanece pressionado sobre o botão) podem coexistir, o pior
     caso real testado foi --color-accent-tint-strong (#D0E4F0,
     luminância ≈0,7519):
       --color-text-link: #2C658C (H=204,2°/S=52,4%/L=36%). Medido:
       4,79:1 contra --color-accent-tint-strong (pior caso), 5,48:1
       contra --color-accent-tint (#E8F1F8), 6,27:1 contra branco — todos
       ≥4,5:1.
       --color-text-link-hover: #214C69 (L=27%, MESMO valor de
       --color-brand-active — reuso intencional, mesmo H/S/L, tokens
       independentes). 9,15:1 contra branco — mais escuro que o base,
       padrão "hover escurece" de sempre.
     --color-focus-ring: continua var(--color-text-link) (sem mudança de
     referência).

     PARTE 6 — --color-accent-tint-on-dark (texto/link claro sobre fundo
     ESCURO — rodapé/CTA final, ver PARTE 7)
     Novo valor: #A8D3F0 (H=204,2°/S=70%/L=80% — mais claro E mais
     saturado que os tints de fundo, pensado especificamente pra
     legibilidade sobre um painel escuro, mesmo raciocínio de sempre
     pra este token desde a REVISÃO 5). Medido contra o novo
     --color-ink-900 (#193243): 8,38:1. Contra --color-ink-800
     (#224359): 6,57:1. Ambos muito acima do piso de 3:1 de indicador de
     foco/componente de UI.

     PARTE 7 — SUPERFÍCIES ESCURAS (--color-ink-900/-800) VOLTAM A SER
     ESCURAS
     Pedido explícito desta rodada: "tom escuro coerente com a família
     azul (#5299C9 escurecido), não mais rosa" — isto REVERTE a decisão
     da REVISÃO 8 (que tinha clareado --color-ink-900/-800 pra um painel
     rosa CLARO a pedido do usuário NAQUELE momento). Não é um erro
     corrigir para trás: é a direção nova, explícita, desta rodada.
     Voltando a ser um painel ESCURO, todo o eixo de texto do
     rodapé/waitlist precisa reverter de "texto escuro sobre fundo claro"
     (REVISÃO 8) para "texto claro sobre fundo escuro" (arquitetura
     original da REVISÃO 7), agora com os tokens da família azul/creme:
       --color-ink-900: #193243 (H=204,2°/S=45%/L=18%, escuro). Branco/
       creme pleno por cima: ver PARTE 8.
       --color-ink-800: #224359 (mesmo H/S, L=24% — mais claro/mais
       saturado que ink-900, borda de topo do rodapé, mesmo papel
       estrutural "levemente diferente do fundo principal" de sempre).
     Consumidores: .site-footer (background), .waitlist__box
     (background), border-top de .site-footer (--color-ink-800).

     PARTE 8 — TEXTO SOBRE O PAINEL ESCURO (rodapé/CTA final) —
     reativação dos tokens --color-text-on-brand/-muted (órfãos desde a
     REVISÃO 8, quando o painel virou claro) + um terceiro tier novo
     Arquitetura de 3 níveis (mesma hierarquia heading/body/muted de
     sempre, adaptada pra texto claro sobre fundo escuro — mesmo padrão
     já usado dentro de [data-theme="dark"] pro corpo da página, ver
     bloco "Modo escuro" mais abaixo, reaproveitando os MESMOS valores
     de opacidade 0,82/0,62 por coincidência de terem passado no mesmo
     teste, não por serem o mesmo token):
       --color-text-on-brand: #FAF4EA (LITERAL do usuário, cheio —
       títulos, hover, [aria-current]). Contra --color-ink-900: 12,16:1.
       Contra --color-ink-800: 9,53:1.
       --color-text-on-brand-muted: rgba(250, 244, 234, 0.82) (nível
       "corpo" — links/descrição em repouso). Composto contra
       --color-ink-900: 8,69:1. Contra --color-ink-800: 7,01:1.
       --color-text-on-brand-faint: rgba(250, 244, 234, 0.62) (NOVO
       token — nível mais discreto, rótulos/legal, terceiro degrau que
       a dupla heading/muted sozinha não cobria). Composto contra
       --color-ink-900: 5,66:1. Contra --color-ink-800: 4,76:1 — o par
       mais apertado de todo este bloco, ainda ≥4,5:1.
     Todos os consumidores de .site-footer/.waitlist__box foram
     reauditados seletor a seletor nas próprias regras mais abaixo
     (busca "REVISÃO 9" nessas regras). Bordas/divisores decorativos que
     antes usavam rgba(255,255,255,X) sobre o vinho escuro (REVISÃO 7) e
     foram invertidos pra rgba(40,21,30,X) sobre o rosa claro (REVISÃO 8)
     voltam a ser rgba(250,244,234,X) — base clara sobre fundo escuro de
     novo, mesma técnica, terceira vez que o par de bordas troca de
     polaridade nesta mesma paleta.
     --color-focus-ring dentro de .site-footer/.waitlist__box: sobrescrita
     LOCAL restaurada para var(--color-accent-tint-on-dark) (removida na
     REVISÃO 8 por ter ficado desnecessária com o painel claro; volta a
     ser necessária agora que o painel é escuro de novo — --color-text-
     link, #2C658C, mede só ≈2,12:1 contra --color-ink-900, abaixo do
     piso de 3:1 de indicador de foco).

     PARTE 9 — TEXTO DE LEITURA (--color-text-heading/-body/-muted)
     Pedido explícito: heading E body usam o MESMO literal #211E1A —
     deixou de existir uma hierarquia de dois tons entre título e corpo
     (diferente de TODAS as revisões anteriores desta paleta, que sempre
     tiveram heading mais escuro que body). --color-text-muted continua
     existindo como um terceiro papel mais claro (legendas/disclaimers),
     dentro da MESMA família de matiz do literal (H≈34,3°/S≈11,9%, o
     leve tom quente já embutido no próprio #211E1A dado pelo usuário —
     não inventei uma nova direção de matiz, só segui a que o hex-âncora
     já tinha):
       --color-text-heading: #211E1A (LITERAL). Contra branco: 16,59:1.
       Contra --color-bg-light (agora também #FFFFFF, ver PARTE 11):
       16,59:1 (mesmo valor — os dois fundos são idênticos agora).
       --color-text-body: #211E1A (LITERAL, MESMO valor de
       --color-text-heading — pedido explícito, não é mais um token
       "quase igual mas um pouco mais claro" como em todas as revisões
       3-8). Mesmo contraste de heading.
       --color-text-muted: #72685A (H=34,3°/S=11,9%/L=40%, derivado do
       mesmo matiz do literal). Contra branco: 5,48:1. Contra
       --color-surface-alt (#F2ECE6, ver PARTE 10): 4,67:1 — o par mais
       apertado deste token, ainda ≥4,5:1 (a versão testada primeiro,
       L=42%, media só 4,33:1 contra --color-surface-alt — abaixo do
       piso; L=40% foi o ajuste necessário pra fechar os dois fundos
       simultaneamente).

     PARTE 10 — NEUTROS (bordas, superfície alternativa, desabilitado)
     --color-surface-alt (#F2ECE6) e --color-border/--color-border-strong
     (#D8CCC0/#9C8E82) já tinham sido "reneutralizados" pra um taupe
     quente na REVISÃO 7 (H≈30°, próximo do H≈34,3° do novo
     --color-text-heading/#211E1A) — CONFERIDO, não mudado: continuam
     coerentes com a nova âncora quase-preta sem precisar de nenhum
     ajuste de matiz, só reconfirmados os contrastes contra o fundo que
     agora é branco puro (era branco puro também na REVISÃO 6/3.2, então
     os valores já existiam calibrados pra esse cenário exato):
     --color-border-strong contra branco: 3,18:1 (cruza o piso de 3:1 de
     componente de UI, bônus não-obrigatório); --color-surface-alt com
     --color-text-muted por cima: 4,67:1 (ver PARTE 9).
     --color-disabled-bg/--color-disabled-text/--color-disabled-border
     ERAM um resíduo azul-acinzentado (#E7ECF3/#94A3B8/#CBD5E1) da era
     "Azul Funcional" (REVISÃO 3) que NUNCA tinha sido migrado em
     nenhuma das revisões seguintes (nem na virada pra rosa da REVISÃO 7
     — ficou um azul cru isolado dentro de um sistema inteiro que já
     tinha virado rosa há duas revisões). Reneutralizados agora pra a
     mesma família taupe quente de --color-border/--color-surface-alt
     (H≈30-34°, dessaturado), sem obrigação de contraste (controles
     desabilitados são isentos de piso WCAG):
       --color-disabled-bg: #EDE6DD
       --color-disabled-text: #A69C8C
       --color-disabled-border: #D9CFC0

     PARTE 11 — FUNDO DA PÁGINA: CORREÇÃO DA DIVERGÊNCIA HERDADA
     --color-bg-light divergia da própria documentação do arquivo:
     apesar dos comentários das revisões 3.2/6 (mais acima) descreverem
     "branco puro", o valor real resolvido era #FFF3DB (creme amarelado,
     herdado sem comentário de uma rodada não documentada entre a
     REVISÃO 6 e a REVISÃO 7). Pedido explícito desta rodada elimina
     qualquer ambiguidade: --color-bg-light: #FFFFFF (LITERAL do
     usuário). --color-bg-page/--color-bg-section-alt/--color-surface
     continuam todos resolvendo pro mesmo branco (nenhuma alternância de
     tom entre seções nem entre página/card) — mesma arquitetura "um
     branco só" já em vigor desde a REVISÃO 3.2/6, só com o valor
     finalmente correto. --color-bg-dark (#3D3A34, modo escuro) não foi
     tocado — fora de escopo desta rodada.

     PARTE 12 — GRADIENTE (--color-gradient-start/-end) → creme→azul
     --color-gradient-start: #FAF4EA (LITERAL) / --color-gradient-end:
     #5299C9 (LITERAL) — os dois papéis "extremidade creme"/"extremidade
     azul" do gradiente pedido pelo usuário ("elementos com gradiente
     creme→azul"). ATENÇÃO PRA O RELATÓRIO: hoje, depois que um
     coordenador/layoutman anterior já removeu .site-header__bg (ver
     bloco "Header" mais abaixo, "nunca mais mostrar fundo colorido"),
     NENHUM seletor do CSS renderiza um gradiente de duas pontas de
     verdade com estes tokens — o único consumidor real é
     .lava-lamp__blob--1, que usa var(--color-gradient-end) como cor
     SÓLIDA (não gradiente) de um dos 4 blobs. Os tokens ficam prontos e
     nomeados pro papel que o usuário pediu (útil se letterman quiser
     usar no wordmark, ou se um gradiente real voltar a algum elemento
     pontual), mas hoje o "gradiente creme→azul" em si não aparece
     visualmente em lugar nenhum do site — sinalizado para o
     usuário/diretor confirmar se isso é esperado ou se algum elemento
     deveria receber esse gradiente nesta rodada.

     PARTE 13 — SEMÂNTICOS (success/warning/error) — "retemperados", não
     reancorados
     Papel universal preservado (verde=sucesso, âmbar=aviso, vermelho=
     erro) — nenhum dos três vira azul/creme, conforme diretriz do
     usuário. Auditoria de temperatura (o pedido foi "conviver bem com o
     creme/quase-preto novo", mesmo espírito do ajuste "reneutralizado"
     que a REVISÃO 7 já tinha aplicado aos neutros frios-azulados):
       --color-warning-text/-bg/-border (#8A5A1F/#FBEEDA/#EAD1A0): já
       eram quentes (âmbar sobre creme) desde antes desta rodada —
       nenhuma mudança necessária, já harmonizam com --color-bg-light
       novo e com a família de neutros.
       --color-error/-bg/-border (#B3453D/#FBEAE8/#EFC7C2): o vermelho
       de erro e seu tint já puxam pro quente (rosado-alaranjado, não
       arroxeado/azulado) — nenhuma mudança necessária.
       --color-success (#2F7D52): mantido — é o único tom "âncora" do
       trio (o verde em si não deveria mudar de matiz). --color-success-
       bg/-border tinham um leve subtom verde-azulado/ciano
       (#E7F2EB/#C3DECC, HSL H≈150-155°) que destoava do calor do resto
       do sistema — reneutralizados/aquecidos pra um verde-amarelado
       mais terroso, mesma técnica "aquecer sem trocar de família" já
       usada em --color-surface-alt/--color-border na REVISÃO 7:
         --color-success-bg: #EAF3E2 (era #E7F2EB)
         --color-success-border: #C9DFC0 (era #C3DECC)
       NOTA: nenhum dos dois tem consumidor real no CSS hoje (só
       --color-success, usado em .plan-card__feature::before, tem
       consumidor) — mesma situação de outros tokens "reservados" já
       documentados no arquivo; o ajuste é preventivo/de consistência,
       não uma correção de bug visível.

     PARTE 14 — LEFTOVERS DE RGB DECIMAL ENCONTRADOS NA VARREDURA FINAL
     Mesmo tipo de achado que a REVISÃO 7 já tinha feito duas vezes
     (.btn--primary:hover, .plan-card--featured:hover): sombras
     box-shadow com o RGB da cor de texto/marca hardcoded em decimal,
     não pego por busca textual de hex. Desta vez encontrados SEIS
     consumidores adicionais com rgba(163, 0, 79, ...) — o decimal de
     #A3004F, o --color-brand-dark ROSA da REVISÃO 7 — em .preview-card,
     .step-card, .concept-card, .source-card (via .sources__disclaimer
     não, mas .source-card sim), .plan-card, .plan-card--featured e
     .faq-item, MAIS um sétimo em .next-step--final com rgba(179, 0, 86,
     ...) (decimal de #B30056, o --color-text-link ROSA). E um OITAVO,
     ainda mais antigo e nunca corrigido em nenhuma revisão anterior:
     .next-step usa rgba(16, 27, 43, ...) — o decimal de #101B2B, o
     --color-text-heading AZUL-MARINHO da era "Azul Funcional"
     (REVISÃO 3), um leftover que sobreviveu INTACTO por três migrações
     de família (azul→rosa na REVISÃO 7, rosa→azul/creme aqui) sem
     nunca ter sido pego pela varredura de hex literal (é decimal, não
     hex). Todos os oito atualizados nesta rodada para o RGB decimal do
     novo --color-brand-dark/--color-text-link (44, 101, 140 = #2C658C,
     os dois tokens têm o mesmo valor) ou, no caso do .next-step, para o
     RGB decimal do novo --color-text-heading (33, 30, 26 = #211E1A) —
     ver cada regra abaixo pra qual dos dois grupos coube em cada caso.
     ================================================================ */

  /* ================================================================
     REVISÃO 11 (colorman) — pedido explícito do usuário: o creme
     (#FAF4EA) deixa de existir como cor própria do sistema; onde ele
     era usado, passa a ser #FFFFFF (branco puro). Confirmados, lendo o
     histórico acima (bloco "REVISÃO 9"), os 4 papéis que o creme
     cumpria hoje (varredura por "FAF4EA" e pelo decimal 250,244,234 no
     arquivo inteiro, nenhum outro lugar encontrado):
       1) --color-text-on-accent — texto sobre --color-accent (#31709B,
          fundo de botão/CTA sólido).
       2) --color-text-on-brand / -muted / -faint — texto sobre o painel
          escuro do rodapé/CTA final (--color-ink-900/-800).
       3) --color-gradient-start — metade clara do par creme→azul
          (--color-gradient-end, #5299C9, INALTERADO).
       4) Dois usos hardcoded em RGB decimal do mesmo creme, como borda/
          divisor quase imperceptível sobre fundo escuro:
          .waitlist__box (border) e .site-footer__legal (border-top) —
          rgba(250,244,234,X) → rgba(255,255,255,X).
     --color-accent (#31709B) e --color-ink-900/-800 permanecem
     INTOCADOS — não fazem parte do pedido, e branco por cima deles só
     aumenta a folga de contraste (confirmado abaixo, não assumido).

     RECÁLCULO 1 — TEXTO SOBRE --color-accent (fundo de botão/CTA sólido)
     Branco (luminância relativa L=1,0) é estritamente mais claro que o
     creme que substitui (L≈0,910), então contra qualquer fundo ESCURO o
     contraste só melhora:
       --color-accent (#31709B, L≈0,1475): (1,0+0,05)/(0,1475+0,05) =
       1,05/0,1975 = 5,32:1 (era 4,86:1 com creme — passa a ser o MESMO
       valor já documentado desde a REVISÃO 9 como "contraste com
       branco", porque os dois papéis agora coincidem).
       --color-accent-hover (#285D80, L≈0,0979): 1,05/0,1479 = 7,10:1
       (era 6,49:1).
       --color-accent-active (#214C69, L≈0,0648): 1,05/0,1148 = 9,15:1
       (era 8,36:1).
     Os três estados do botão continuam com o MESMO hex — só o texto por
     cima mudou de creme pra branco, com folga maior nos três.

     RECÁLCULO 2 — TEXTO SOBRE O PAINEL ESCURO DO RODAPÉ/CTA FINAL
     --color-ink-900/-800 já não valem mais #193243/#224359 (os hex que
     a REVISÃO 9 usou pra calcular 12,16:1/9,53:1 originalmente): uma
     rodada do layoutman ("clarear o rodapé em 20%", nota acima de
     :root) já tinha movido os dois pra #1E3C50/#28506A ANTES desta
     rodada, sem atualizar os comentários de contraste antigos.
     Recalculado aqui do zero contra os valores REAIS e atuais dos dois
     tokens (luminância relativa: ink-900 ≈0,0409, ink-800 ≈0,0722), já
     com branco no lugar do creme:
       --color-text-on-brand: #FFFFFF. Contra --color-ink-900: 1,05 /
       (0,0409+0,05) = 11,55:1. Contra --color-ink-800: 1,05 /
       (0,0722+0,05) = 8,59:1.
       --color-text-on-brand-muted: rgba(255,255,255,0.82) (mesma
       opacidade de antes — só a cor de base mudou). Composto contra
       ink-900: 9,65:1. Contra ink-800: 7,23:1.
       --color-text-on-brand-faint: rgba(255,255,255,0.62). Composto
       contra ink-900: 7,54:1. Contra ink-800: 5,71:1 — o par mais
       apertado deste bloco, ainda bem acima do piso de 4,5:1 (branco
       sobre o ink-800 atual mede mais alto que creme media sobre o
       ink-800 antigo, 4,76:1, mesmo com o fundo tendo clareado no meio
       tempo).
     --color-text-on-accent segue a mesma lógica do Recálculo 1: branco,
     5,32:1/7,10:1/9,15:1 sobre os três estados de --color-accent.

     GRADIENTE (--color-gradient-start)
     PARTE 12 da REVISÃO 9 já tinha sinalizado que nenhum seletor real
     consome as duas pontas como gradiente de verdade (só
     .lava-lamp__blob--1 usa --color-gradient-end como cor SÓLIDA) —
     RECONFIRMADO nesta rodada, ainda verdade. Decisão: manter o token
     definido, só trocando o literal de #FAF4EA pra #FFFFFF — branco→
     azul continua uma transição visualmente válida e o papel semântico
     ("ponta clara de um gradiente decorativo") é distinto de "cor de
     fundo de superfície", mesmo que hoje os dois resolvam pro mesmo
     branco; não fundido com --color-surface para não perder esse nome
     caso um gradiente real volte a algum elemento. SINALIZADO PARA O
     USUÁRIO/DIRETOR: nenhum elemento do site hoje renderiza esse
     gradiente visivelmente — se a intenção é que algum elemento passe a
     usá-lo, isso é uma decisão à parte, fora do escopo "trocar creme
     por branco".

     RGBA HARDCODED (achado da varredura desta rodada — não pego por
     busca de "#FAF4EA" por estar em decimal, mesmo tipo de leftover já
     visto na PARTE 14 da REVISÃO 9): dois consumidores usavam o RGB
     decimal do creme (250, 244, 234) direto, sem passar pelos tokens
     --color-text-on-brand/-muted/-faint — trocados nesta rodada para
     (255, 255, 255), mesma opacidade, papel puramente decorativo (linha
     divisória quase imperceptível sobre fundo escuro), sem piso de
     contraste obrigatório: .waitlist__box (border, opacidade 0,12) e
     .site-footer__legal (border-top, opacidade 0,16).

     Nada mais no arquivo usa o hex #FAF4EA nem o decimal (250,244,234)
     fora de comentários HISTÓRICOS que descrevem decisões passadas
     (blocos "REVISÃO 7/8/9" acima) — deixados como registro, não como
     estado atual. O valor VIGENTE de tudo que antes era creme é
     #FFFFFF a partir desta revisão.
     ================================================================ */
  :root {
    /* REVISÃO 9 (colorman) — bloco inteiro migrado ROSA/MAGENTA →
       AZUL/CREME/QUASE-PRETO ("Céu e Areia"). Ver bloco grande "REVISÃO 9"
       acima de :root para o raciocínio e os cálculos completos — os
       comentários abaixo trazem só o essencial por token (valor, papel,
       contraste medido), não repetem a dedução inteira.

       Estrutural / decorativo — ícone/borda que só precisa comunicar
       "isto é a marca", nunca carrega texto de tamanho normal. --color-
       brand é o LITERAL #5299C9 do usuário, sem derivação (ver PARTE 3). */
    --color-brand: #5299C9;           /* LITERAL do usuário — borda de .plan-card--featured:hover; ~3,11:1 sobre branco (era #FF8FC5, rosa) */
    --color-brand-hover: #377EAF;     /* reservado + decorativo (.lava-lamp__blob--2) */
    --color-brand-active: #1B3E56;    /* reservado + decorativo (.lava-lamp__blob--4) */
    --color-brand-light: #83B6D8;     /* borda do FAQ aberto — decorativo, ~2,18:1 sobre branco, trade-off já aceito desde a REVISÃO 5 (mitigado pelo giro do ícone "+"); L puxado a 68% (não 65%) pra também servir de texto em [data-theme="dark"] .btn--secondary/.concept-card__acronym/.next-step__eyebrow, ~4,69:1 sobre --color-surface (dark) #474033, ver nota junto a essa sobrescrita */
    --color-brand-dark: #2C658C;      /* texto sobre fundo claro: .btn--secondary (base), .step-card__number, .concept-card__acronym, .next-step__eyebrow — 6,27:1 sobre branco, 5,48:1 sobre --color-brand-tint (mesmo valor de --color-text-link, tokens independentes, ver PARTE 3/5) */
    --color-brand-tint: #E8F1F8;      /* fundo do chip de .step-card__number */
    --color-brand-tint-strong: #D0E4F0;
    /* PEDIDO DO USUÁRIO — hover dos cards de grade no modo claro estava
       usando --color-surface-alt (#F2ECE6, taupe quente), lido como
       "amarelado". Troca por um "azul névoa" dedicado — mesma família de
       --color-brand-tint (a cor já usada no gradiente de hover de
       .plan-card), só um degrau mais claro (L mais alta), e reaproveitado
       nos dois lugares para os dois ficarem no mesmo tom, como pedido.
       Sem override em [data-theme="dark"]: nesse tema o hover genérico de
       card continua em --color-surface-alt (não fazia parte da queixa,
       que foi só sobre o claro) — ver .card-hover-tint-consumers mais
       abaixo, onde a var() cai de volta pra --color-surface-alt fora do
       tema claro. */
    --color-card-hover-tint: #EEF6FC;       /* NOVO — mais claro que --color-brand-tint (#E8F1F8); ~1,07:1 mais claro, ainda folgado o bastante pro texto escuro por cima */
    --color-card-hover-tint-strong: #DCEAF6; /* NOVO — par mais profundo, mesma relação de degrade que --color-brand-tint → --color-brand-tint-strong tinha, reancorada na base mais clara acima */
    --color-plan-card-hover-start: var(--color-card-hover-tint);        /* era var(--color-brand-tint) — agora usa o mesmo azul névoa do hover genérico de card (pedido do usuário) */
    --color-plan-card-hover-end: var(--color-card-hover-tint-strong);   /* era var(--color-brand-tint-strong), mesmo motivo acima */

    /* Fundo de botão/CTA SÓLIDO — .btn--primary, .skip-link, .badge--plan.
       Ao contrário da era rosa (fundo quase-branco, texto escuro), agora
       o fundo é o azul de Ação ESCURECIDO (não o #5299C9 literal — ver
       PARTE 1/2: literal+creme media só 2,84:1) pra sustentar texto
       claro (--color-text-on-accent) em tamanho normal. REVISÃO 11
       (colorman): --color-text-on-accent deixou de ser o creme #FAF4EA
       e passou a #FFFFFF — ver bloco "REVISÃO 11" acima de :root pro
       recálculo completo; os três hex do botão abaixo NÃO mudaram. */
    --color-accent: #31709B;              /* 5,32:1 com --color-text-on-accent (branco) por cima — era 4,86:1 com creme */
    --color-accent-hover: #285D80;        /* 7,10:1 com --color-text-on-accent (branco) — era 6,49:1 com creme */
    --color-accent-active: #214C69;       /* 9,15:1 com --color-text-on-accent (branco) — era 8,36:1 com creme */
    --color-accent-tint: #E8F1F8;         /* fundo claro — .btn--secondary:hover, .preview-card__number */
    --color-accent-tint-strong: #D0E4F0;  /* fundo claro — .btn--secondary:active */
    --color-accent-tint-on-dark: #A8D3F0;  /* texto/link claro sobre fundo ESCURO (rodapé/CTA final) — 8,38:1 sobre --color-ink-900, 6,57:1 sobre --color-ink-800 */
    --color-accent-on-dark: var(--color-accent);  /* NOVO — token dedicado pra texto/borda de --color-accent quando o elemento se apoia em --color-surface/--color-bg-page (que mudam de tema). No claro é só um alias de --color-accent; ganha um valor diferente no bloco [data-theme="dark"] abaixo. Ver .btn--secondary e .next-step--final, que consomem este token em vez de --color-accent direto. */

    /* Texto de leitura/destaque (.text-highlight, herda --fs-h1, piso
       3:1) — reaproveita o LITERAL #5299C9 direto, sem derivação: mede
       3,107:1 sobre o novo --color-bg-light/#FFFFFF e 3,648:1 sobre
       --color-bg-dark #3D3A34 (modo escuro, intocado) — os dois ≥3:1 sem
       precisar de nenhum ajuste de S/L (ver PARTE 4). Único consumidor
       hoje: .brand__wordmark-accent (a logo) — fixo nos dois temas. */
    --color-highlight: #5299C9;       /* LITERAL do usuário — era #DC5A99 (rosa) */
    --color-highlight-tint: #DCEDF8;  /* reservado, sem consumidor */

    /* REVISÃO (letterman) — DESFEITO. O token --color-highlight-mark (faixa
       de fundo "marca-texto" atrás de .text-highlight) foi REMOVIDO nesta
       rodada, a pedido explícito do usuário ("desfaça o que fez agora").
       Ele existia só para essa única regra — confirmado por grep no
       arquivo inteiro antes de remover, sem nenhum outro consumidor real
       (diferente de outros tokens órfãos preservados neste arquivo, que
       têm histórico de uso anterior justificando ficarem reservados) — por
       isso foi removido de fato, e não só marcado como reservado. Em seu
       lugar, .text-highlight ganhou um text-shadow sutil (ver a própria
       regra, mais abaixo, para a decisão e a justificativa completa). O
       override deste token em [data-theme="dark"] também foi removido —
       ver nota no bloco :root[data-theme="dark"]. */
    /* PEDIDO DO USUÁRIO — "maior destaque" no modo claro para o estilo de
       .text-highlight (frases como "análise de SEO clara" no hero da
       Início), sem mudar o modo escuro. Token DEDICADO (não reaproveita
       --color-highlight acima) porque aquele token também pinta a logo
       (.brand__wordmark-accent), que não faz parte deste pedido. Escolhi
       um azul mais SATURADO E ESCURO, não mais claro (o usuário sugeriu
       claro, mas deixou o tom a meu critério): contra fundo branco, azul
       mais claro reduz contraste e lê como MENOS destaque, não mais —
       #1B6FA8 mede ~5,40:1 sobre --color-bg-light (branco), quase o
       dobro do contraste dos 3,107:1 de --color-highlight, e ainda passa
       do piso de 4,5:1 de texto normal (não só do piso de texto grande).
       Sobrescrito em [data-theme="dark"] para reusar --color-highlight
       (o valor de sempre, #5299C9) — modo escuro fica bit a bit igual.
       REVISÃO (colorman) — PEDIDO DO USUÁRIO: "aumente um contraste sem
       extrapolar". #1B6FA8 (~5,40:1) → #196595 (~6,30:1): mesmo matiz
       (H≈204° em ambos, a mesma família do Azul de Leitura), saturação
       praticamente igual (71,3% vs 72,3%), só ~4pp mais escuro em L
       (34,1% vs 38,2%) — ajuste incremental de luminosidade, não um
       salto para preto/tom saturadíssimo. Mantém a identidade visual do
       token (mesmo "azul mais vivo" da REVISÃO anterior, só um degrau
       mais escuro) e segue folgado acima do piso de 4,5:1 sem se
       aproximar do contraste quase-máximo que --color-highlight (Marinho
       estrutural) já ocupa no sistema. Dark segue intocado, ver override
       em [data-theme="dark"] abaixo.
       REVISÃO 2 (colorman) — PEDIDO DO USUÁRIO: reverte a direção da
       REVISÃO anterior. Usuário achou #196595 (~6,30:1) "muito escuro" e
       pediu explicitamente um azul CLARO no modo claro, priorizando a
       percepção de "claro" sobre maximizar contraste desta vez (mas sem
       furar o piso de 4,5:1 de texto normal). #196595 → #2879AC: mesma
       família de matiz azul da marca (H≈203°, a poucos graus do H≈204°
       das duas versões anteriores e de --color-highlight #5299C9),
       luminosidade bem mais alta (L≈42% vs L≈34% da versão anterior;
       mais clara até que o #1B6FA8 original de L≈38%) e saturação
       similar (~62%). Contraste medido sobre --color-bg-page (branco):
       ~4,76:1 — acima do piso de 4,5:1 com margem de segurança (~6%),
       mas deliberadamente mais próximo do piso do que as revisões
       anteriores, porque o pedido priorizou "claro" sobre "mais
       contraste". Testado um degrau mais claro (#2A7DB0, L≈43%) e ficou
       em ~4,51:1 — margem curta demais para variação de renderização,
       por isso o valor final ficou um pouco mais conservador. Dark segue
       intocado (ver override em [data-theme="dark"] abaixo).

       REVISÃO 3 (colorman) — PEDIDO DO USUÁRIO: "quero mais claro ainda"
       (mais claro que #2879AC/~4,76:1). Antes de aplicar, reavaliei qual
       piso de contraste é o correto para este consumidor: até agora as
       revisões acima usaram o piso de TEXTO NORMAL (4,5:1) por ser o mais
       conservador possível, mas isso nunca foi, na verdade, o piso
       exigido — .text-highlight é sempre font-weight:700 e, desde a
       revisão do letterman que adicionou font-size:1.1em (ver bloco logo
       acima da própria classe, mais abaixo neste arquivo), herda tamanhos
       de --fs-h1/--fs-h2 nos três únicos contextos onde aparece
       (.hero-title, h1.section-title, h2 de painel). Recalculei o PISO do
       clamp (o menor valor possível em qualquer viewport) x 1.1 nos três:
         - .hero-title: clamp(2.05rem,1.65rem+2.08vw,3.2rem) -> piso 32,8px
           x 1.1 = 36,1px
         - h1.section-title (--fs-h1): piso 2,5625rem=41px x 1.1 = 45,1px
         - h2 de painel (--fs-h2): piso 1,875rem=30px x 1.1 = 33px
       Os três pisos (33-45,1px) já ultrapassam com folga os 18,66px
       (14pt) que o WCAG exige, em negrito, para qualificar como "texto
       grande" — e isso vale no MENOR tamanho possível do clamp, ou seja,
       em qualquer largura de viewport, sem exceção nos três contextos.
       Logo o piso de contraste correto para este token sempre foi 3:1,
       não 4,5:1 — as revisões anteriores não estavam erradas no resultado
       (ainda passam confortavelmente em 3:1), só usaram um piso mais
       rígido do que o exigido. Isso abre margem legítima para ir bem mais
       claro sem violar acessibilidade.
       #2879AC (H≈203,2°, S≈62,3%, L≈41,6%, ~4,76:1) -> #3092CF (H≈203°,
       S≈62%, L≈50%): mesmíssima família de matiz e saturação, só ~8,4pp
       mais claro em L — um salto perceptível (era o pedido: "mais claro
       ainda"), mas ainda um ajuste de luminosidade dentro da mesma
       família azul, não uma cor nova. Contraste sobre --color-bg-page
       (branco): ~3,42:1 — acima do piso de 3:1 de texto grande com
       margem de segurança de ~14% (folga maior que os ~6% aceitos na
       revisão anterior sob o piso de 4,5:1, então segura contra variação
       de renderização). Não fui ao mínimo absoluto do piso 3:1 (o que
       deixaria L~47%, contraste ~3,0:1 cravado) de propósito, para não
       ficar exatamente na borda. Dark segue intocado — a linha em
       [data-theme="dark"] abaixo apenas realiasa este token para
       --color-highlight (#5299C9) e não depende deste valor.

       REVISÃO (letterman) — TOKEN ÓRFÃO. O dono do produto pediu para
       abandonar cor como mecanismo de destaque em .text-highlight (ver
       comentário grande junto daquela classe, mais abaixo no arquivo) —
       o único consumidor real deste token era exatamente
       `color: var(--color-highlight-emphasis)` em .text-highlight, agora
       removido em favor de peso/traço. Nenhum outro seletor no CSS lê
       --color-highlight-emphasis (confirmado via busca no arquivo
       inteiro). Segue a mesma convenção já usada para outros tokens sem
       consumidor real (--color-brand-hover / --color-brand-active,
       --color-highlight-tint): mantido definido no :root, não removido —
       histórico de contraste acima preservado caso volte a ser
       necessário, mas reservado/sem uso enquanto o destaque for só
       peso/traço. */
    /* REVISÃO (letterman) — REVERSÃO EXPLÍCITA da decisão "TOKEN ÓRFÃO" logo
       acima. O usuário pediu, nesta data (17/08/2026), Newsreader itálico +
       azul claro para palavras em destaque (.text-highlight) — o MESMO
       mecanismo de cor que ele próprio havia pedido para abandonar três
       vezes antes (ver histórico grande na regra .text-highlight, mais
       abaixo: "ele rejeitou azul como cor de destaque em qualquer lugar do
       sistema, não só no caso editorial"). Confirmado explicitamente pelo
       usuário que sim, é para reverter aquela rejeição desta vez — não é
       descuido nem contradição não-intencional. Token deixa de ser órfão:
       agora alias de --color-highlight (#5299C9, o mesmo azul claro já
       usado em .brand__wordmark-accent, fixo nos dois temas), em vez do
       valor literal #3092CF antigo — reaproveita a cor que já existe no
       sistema em vez de introduzir uma terceira variante de azul. Se uma
       futura rodada reverter isto de novo, ler o histórico completo aqui
       E na regra .text-highlight antes de decidir — já são quatro
       idas-e-vindas no mesmo mecanismo. */
    --color-highlight-emphasis: var(--color-highlight); /* era #3092CF (órfão) — realiased a pedido explícito do usuário, ver nota acima */

    /* Superfícies do rodapé/CTA final — REVISÃO 9 reverte a REVISÃO 8
       (que tinha clareado estes tokens pra um painel rosa claro): volta
       a ser um painel ESCURO, agora azul-marinho (mesma família de
       --color-accent), pedido explícito desta rodada ("#5299C9
       escurecido"). Ver PARTE 7/8 — todo o eixo de texto do rodapé/
       waitlist foi reauditado (branco/creme sobre escuro de novo). */
    /* REVISÃO N+2 (layoutman) — pedido do usuário: "o rodapé ficou muito
       escuro", clarear o azul do rodapé (e qualquer outro elemento com a
       mesma cor — .next-step--final) em 20%. Interpretado como +20%
       RELATIVO de luminosidade HSL (L × 1,2), não +20 pontos absolutos:
       a leitura absoluta (18%→38%) derrubava o contraste do texto mais
       discreto do rodapé (--color-text-on-brand-faint, opacidade 0,62)
       para ~4,22:1, abaixo do piso AA de 4,5:1 — confirmado por cálculo,
       não estimativa. +20% relativo (18%→21,6%) mantém esse mesmo par no
       pior caso em ~5,1:1, com folga. Confirmado com o usuário antes de
       aplicar. --color-ink-800 (derivado, mesmo H/S, L proporcionalmente
       maior) escalado pela mesma razão para preservar a relação entre os
       dois tons. */
    --color-ink-900: #1E3C50;  /* H=204,2°/S=45%/L=21,6% (era 18%) — era #193243 */
    --color-ink-800: #28506A;  /* H=204,2°/S=45%/L=28,8% (era 24%) — borda de topo do rodapé; era #224359 */

    /* --color-header-bg REINTRODUZIDO (layoutman, rodada de blur do
       header) — mesmo nome de um token removido na REVISÃO 7 (era
       #262626 cinza, ficou órfão porque o header virou transparente),
       mas valor/papel totalmente novos: agora é --color-surface com
       alfa, consumido por .site-header para o efeito de blur pedido pelo
       usuário. Definição real logo abaixo, junto de --color-surface. */

    /* Gradiente branco→azul (era creme→azul) — ver PARTE 12 (REVISÃO 9)
       e o bloco "REVISÃO 11" acima de :root pro alerta, reconfirmado
       nesta rodada, de que nenhum seletor hoje renderiza um gradiente de
       duas pontas de verdade com estes tokens (só .lava-lamp__blob--1
       consome --color-gradient-end como cor sólida). */
    --color-gradient-start: #FFFFFF;  /* REVISÃO 11 (colorman) — era #FAF4EA (creme); ponta clara do gradiente decorativo, pedido do usuário para eliminar o creme do sistema */
    --color-gradient-end: #5299C9;    /* LITERAL do usuário (azul) — inalterado */

    /* Neutros — bordas e superfície alternativa, família taupe quente já
       reneutralizada na REVISÃO 7 (H≈30°), CONFERIDA (não alterada) por
       já harmonizar com o novo --color-text-heading #211E1A (H≈34,3°) e
       com o fundo branco puro — ver PARTE 10. */
    --color-bg-light: #FFFFFF;  /* LITERAL do usuário — CORRIGE divergência herdada: resolvia para #FFF3DB (creme), apesar da documentação de revisões antigas dizer "branco puro"; ver PARTE 11 */
    --color-bg-dark: #0D0E12;   /* modo escuro — era #3D3A34; troca pedida p/ near-black frio (H≈228°) no lugar do bg terroso anterior */
    --color-bg-page: var(--color-bg-light);
    /* NOVO (colorman) — fundo de PÁGINA (não de card), originalmente
       exclusivo da Início/modo claro, criado para compensar a ausência do
       canvas #agua-fundo depois que ele foi removido (nessa época, só da
       home). REVISÃO (colorman): --color-surface (fundo dos cards)
       continua #FFFFFF, sem mudança — este token permanece separado de
       --color-bg-page/--color-bg-light. Tom escolhido: #F8F5F1 (H≈30°,
       S≈35%, L≈96%) — MESMA família de matiz quente/terrosa já usada por
       --color-surface-alt (#F2ECE6, H≈29°) e --color-border (#D8CCC0), só
       bem mais claro e bem menos saturado, para ficar perceptivelmente
       "off-white" sem virar creme (a direção "creme" foi explicitamente
       abandonada em revisões anteriores, ver nota de --color-bg-light
       acima — este tom novo é deliberadamente mais sutil que aquele
       #FFF3DB antigo). Consumido pela regra "html:not([data-theme="dark"])
       body" logo abaixo, na seção Base — agora aplicada ao <body> do site
       inteiro (não mais só à home), porque o canvas #agua-fundo foi
       removido de TODAS as 16 páginas (decisão final do dono do produto,
       ver comentário completo em index.html); nenhuma outra regra do
       arquivo lê este token. */
    --color-bg-page-home: #F8F5F1;
    --color-bg-section-alt: var(--color-bg-light); /* alias — sem alternância de tom entre seções, ver histórico acima */
    --color-surface: #FFFFFF;
    --color-header-bg: rgba(255, 255, 255, 0.72); /* NOVO — mesmo tom de --color-surface com alfa, para o header (ver .site-header) ganhar backdrop-filter:blur sem virar um "fundo colorido" chapado — pedido do usuário: suavizar texto da página que aparece atrás do header fixo ao rolar, sem tingir o texto do próprio header */
    --color-surface-alt: #F2ECE6;    /* taupe quente, inalterado — 4,67:1 com --color-text-muted por cima */
    --color-border: #D8CCC0;         /* inalterado — decorativo, sem piso obrigatório de 3:1 */
    --color-border-strong: #9C8E82;  /* inalterado — ~3,18:1 sobre branco, cruza o piso de 3:1 de componente de UI (bônus) */

    /* REVISÃO (colorman) — PEDIDO DO USUÁRIO: no hero da Início, todo texto
       que não é o azul de destaque (--color-highlight/.text-highlight)
       precisa virar preto TOTAL — incluindo o "quase-preto" #211E1A que
       era usado como cor padrão de texto (heading/body). Como
       --color-text-heading/--color-text-body já eram o MESMO token
       reutilizado em h1/h2/h3 e em praticamente todo parágrafo do site
       (heading e body sempre foram o mesmo literal, não uma hierarquia de
       dois tons), a regra pedida para o hero foi propagada para o resto
       do site pelo mesmo mecanismo: mudar o valor destes dois tokens
       basta, nenhuma regra por seletor precisou ser tocada.
       #211E1A → #000000 (preto puro, literal). Contraste sobre branco
       sobe de 16,59:1 para 21:1 (máximo possível) — segue folgadamente
       acima de qualquer piso WCAG. --color-text-muted segue como terceiro
       papel, INTOCADO (cinza médio, #72685A) — é um papel deliberadamente
       mais discreto que o texto padrão (rótulos/placeholders/legendas),
       não faz parte do pedido "texto padrão vira preto". Ver também o
       override em :root[data-theme="dark"] logo abaixo de :root: antes
       desta rodada, --color-text-heading (branco 100%) e --color-text-body
       (branco 82%) tinham valores DIFERENTES entre si no escuro, mesmo os
       dois sendo o MESMO valor no claro — quebra de paridade entre os dois
       temas, corrigida junto (ver nota lá). */
    --color-text-heading: #000000;  /* era #211E1A — preto puro, pedido do usuário */
    --color-text-body: #000000;     /* era #211E1A — MESMO valor de --color-text-heading, mantendo a paridade que já existia entre os dois tokens */
    --color-text-muted: #72685A;    /* H=34,3°/S=11,9%/L=40% — 5,48:1 sobre branco, 4,67:1 sobre --color-surface-alt (o par mais apertado) */
    /* Texto sobre painel ESCURO (rodapé/CTA final) — reativados (órfãos
       desde a REVISÃO 8, quando o painel virou claro), ver PARTE 8.
       Hierarquia de 3 níveis: heading (cheio) > body (0,82) > faint
       (0,62, NOVO token, mais discreto — rótulos/legal). */
    --color-text-on-brand: #FFFFFF;  /* REVISÃO 11 (colorman) — era #FAF4EA (creme); títulos/hover/[aria-current] no rodapé; recalculado contra os valores ATUAIS de --color-ink-900/-800 (#1E3C50/#28506A): 11,55:1 sobre --color-ink-900, 8,59:1 sobre --color-ink-800 — ver bloco "REVISÃO 11" acima de :root */
    --color-text-on-brand-muted: rgba(255, 255, 255, 0.82);  /* REVISÃO 11 — era rgba(250,244,234,0.82) (creme); nível "corpo" — links/descrição em repouso; 9,65:1 sobre --color-ink-900, 7,23:1 sobre --color-ink-800 */
    --color-text-on-brand-faint: rgba(255, 255, 255, 0.62);  /* REVISÃO 11 — era rgba(250,244,234,0.62) (creme); nível mais discreto (rótulos/legal); 7,54:1 sobre --color-ink-900, 5,71:1 sobre --color-ink-800 */
    /* Texto sobre o botão/CTA azul sólido — branco direto (não alias de
       --color-text-heading: o botão é escuro sólido → precisa de claro-
       sobre-escuro). REVISÃO 11 (colorman): era o LITERAL creme #FAF4EA,
       agora #FFFFFF (pedido do usuário para eliminar o creme do
       sistema) — ver bloco "REVISÃO 11" acima de :root pro recálculo.
       Como nem esta cor nem --color-accent mudam de tema, o bug
       histórico "PARTE 6/BUG 1" da REVISÃO 7 (texto herdado virando
       branco no escuro, ilegível) continua sem existir pela raiz — ver
       nota na sobrescrita removida dentro de [data-theme="dark"], logo
       abaixo deste bloco. */
    --color-text-on-accent: #FFFFFF;  /* REVISÃO 11 (colorman) — era o LITERAL #FAF4EA (creme); 5,32:1/7,10:1/9,15:1 sobre os três estados de --color-accent */
    /* Texto azul sobre TINTS claros (.btn--secondary:hover,
       .preview-card__number, --color-focus-ring padrão) — recalculado
       contra o PIOR fundo real (--color-accent-tint-strong, caso
       hover+active simultâneos), ver PARTE 5. */
    --color-text-link: #2C658C;  /* 4,79:1 contra --color-accent-tint-strong (pior caso), 5,48:1 contra --color-accent-tint, 6,27:1 contra branco */
    --color-text-link-hover: #214C69;  /* 9,15:1 contra branco — mesmo valor de --color-brand-active, tokens independentes. SEM consumidor real no CSS atual: a única referência (sobrescrita de --color-text-on-accent em [data-theme="dark"]) foi removida nesta rodada por não fazer mais sentido (ver nota junto a essa sobrescrita) — mantido definido, mesma situação de outros tokens "reservados" já documentados no arquivo */

    /* Estados semânticos — papel universal preservado (verde/âmbar/
       vermelho), "retemperados" pra conviver com o creme/quase-preto,
       não reancorados em azul/creme. Ver PARTE 13: só --color-success-
       bg/-border mudaram (tinham leve subtom ciano); warning/error já
       eram quentes e ficaram como estavam. */
    --color-success: #2F7D52;
    --color-success-text: #2C7550;    /* NOVO — REVISÃO 2 (colorman), bloco "análise" abaixo: dedicado, mesmo padrão de --color-warning-text; 4,89:1 sobre --color-success-bg, ver nota completa junto aos 12 estados */
    --color-success-bg: #EAF3E2;      /* era #E7F2EB — reneutralizado/aquecido, sem consumidor real hoje */
    --color-success-border: #C9DFC0;  /* era #C3DECC — idem */
    --color-warning-text: #8A5A1F;
    --color-warning-bg: #FBEEDA;
    --color-warning-border: #EAD1A0;
    --color-error: #B3453D;
    --color-error-text: #B3453D;      /* NOVO — REVISÃO 2 (colorman), bloco "análise" abaixo: mesmo valor de --color-error (já é o papel "isto está errado" do sistema), agora também com o nome/papel dedicado de par de texto sobre --color-error-bg; 4,70:1, ver nota completa junto aos 12 estados */
    --color-error-bg: #FBEAE8;
    --color-error-border: #EFC7C2;

    /* Interação / acessibilidade — continua var(--color-text-link), sem
       mudança de referência (só o valor resolvido muda, ver acima). */
    --color-focus-ring: var(--color-text-link);
    /* Desabilitado — ERA um resíduo azul-acinzentado da era "Azul
       Funcional" (REVISÃO 3, #E7ECF3/#94A3B8/#CBD5E1) que sobreviveu
       intacto até a migração rosa da REVISÃO 7 sem nunca ter sido
       reneutralizado — achado desta varredura, ver PARTE 10.
       Reneutralizados pra a mesma família taupe quente de --color-
       border/--color-surface-alt; sem obrigação de contraste (controles
       desabilitados são isentos de piso WCAG). */
    --color-disabled-bg: #EDE6DD;
    --color-disabled-text: #A69C8C;
    --color-disabled-border: #D9CFC0;

    /* REVISÃO 10 (colorman) — indicador neutro para medido/detectado/
       sugerido (dl .mds__item, index.html — PRIMEIRA aparição deste
       padrão no site, tratada como a decisão de REFERÊNCIA para reuso
       futuro em qualquer outra página). Pedido/requisito de produto: as
       3 categorias precisam ser diferenciáveis entre si, mas NÃO são
       "bom/atenção/erro" — --color-success/-warning/-error ficam de fora
       de propósito. São 3 graus neutros de "quanto essa informação já
       foi processada" (observação bruta → regra disparada → ação
       sugerida para revisão humana). Resolvido como 3 tons de
       INTENSIDADE crescente dentro da MESMA família neutra taupe quente
       já usada em todo o sistema para texto/borda (H≈30-34°, S baixa) —
       nenhum hex novo, só 3 tokens já existentes, reaproveitados como
       indicador visual (aliases, não valores literais):
         --color-category-measured  → --color-border-strong (#9C8E82) —
         tom mais "cru"/estrutural, mesma borda decorativa já usada em
         todo card genérico do site; Medido é a camada mais bruta (dado
         só observado).
         --color-category-detected  → --color-text-muted (#72685A) —
         intermediário; Detectado já passou por uma regra, um grau a mais
         de processamento.
         --color-category-suggested → --color-text-heading (#211E1A) —
         o tom mais forte do sistema; Sugerido é o que mais pede atenção
         do usuário, a etapa mais próxima de uma decisão humana.
       Contraste de cada um como indicador de UI (borda lateral, piso
       3:1, WCAG 1.4.11) contra --color-surface/branco: measured 3,18:1,
       detected 5,48:1, suggested 16,59:1 (os três já auditados alhures
       no arquivo com estes mesmos valores) — todos acima do piso, com a
       PROGRESSÃO em si sendo o sinal visual (claro→escuro = bruto→
       decisão), não 3 matizes concorrentes.
       REVISÃO (colorman) — PEDIDO DO USUÁRIO: os 3 cards de .mds__item
       liam como "diferentes dos demais cards do site" por causa do
       indicador de borda-topo de 4px que consumia estes 3 tokens — mesmo
       diagnóstico já resolvido antes em .concept-card (ver nota lá,
       "REVISÃO N (layoutman)"). .mds__item voltou à fórmula de card
       genérico plana (1px --color-border-strong nos 4 lados, sem acento
       colorido); estes 3 tokens ficam SEM consumidor real no CSS atual,
       mesma situação de outros tokens "reservados" já documentados neste
       arquivo — mantidos definidos (raciocínio de contraste acima
       continua válido) para reuso futuro caso outra tela precise do
       mesmo padrão de 3 categorias neutras. */
    --color-category-measured: var(--color-border-strong);
    --color-category-detected: var(--color-text-muted);
    --color-category-suggested: var(--color-text-heading);

    /* Tipografia — aplicado por letterman.

       REVISÃO — REESCRITA DO SISTEMA TIPOGRÁFICO, pedido do dono do
       produto (via coordenador), com 3 exigências explícitas:
       1) reduzir para 2-3 famílias no total no site (estava em 4 Google
          Fonts + a pilha de sistema: Source Serif 4, Instrument Serif,
          Manrope, Newsreader);
       2) abandonar itálico/cursiva como ferramenta de destaque — a
          direção anterior inteira (ver histórico abaixo e nas regras de
          h2/.hero-title/.text-highlight/.brand__wordmark-accent mais
          abaixo no arquivo) dependia de trocar para uma família serifada
          itálica sempre que precisava marcar ênfase; essa estratégia
          inteira foi descartada, não só ajustada;
       3) a escolha precisa refletir o que o FirstPageAI de fato é — uma
          ferramenta de AUDITORIA/ANÁLISE TÉCNICA DE SEO (audita sinais
          técnicos públicos, organiza achados em prioridades "medido/
          detectado/sugerido", sempre "com fonte") — não um produto
          editorial/lúdico, que era a leitura que a serifada itálica (uma
          fonte de "voz de revista/leitura longa") comunicava.

       PESQUISA (researchdude) — produtos de dado/SaaS técnico reais
       convergem para "uma família sans neo-grotesca com muitos pesos" ou,
       no máximo, essa família + uma segunda sans para dar contraste de
       registro no heading, SEMPRE sem itálico como eixo de ênfase (Linear
       usa só Inter em vários pesos; Vercel usa Geist Sans + Geist Mono
       para labels técnicos em versalete; GitHub usa a própria pilha de
       sistema). Ênfase nesses sistemas vem de peso, tamanho, cor e
       tracking — nunca de itálico nem de trocar para uma família
       decorativa.

       DECISÃO — 2 famílias novas do Google Fonts, ambas variáveis (várias
       instâncias de peso reais, sem nenhuma sintetizada) e SEM eixo
       itálico usado em lugar nenhum do sistema:
       - --font-heading: Manrope — grotesca geométrica com presença um
         grau acima de uma pilha de sistema neutra (mesmo raciocínio que
         já justificava usar Manrope no h2 antes desta revisão, só que
         agora como família ÚNICA de heading do site inteiro, não mais
         escopada a um destaque). Comunica "confiante/moderna" sem cair
         no "SaaS genérico" de Inter puro no heading.
       - --font-body: Inter — o "workhorse" de legibilidade de UI/parágrafo
         de referência do setor (a mesma fonte usada pela Linear), cobre
         parágrafo corrido, nav, botões, formulário, badges — tudo que já
         apontava para --font-body no sistema, sem nenhuma mudança de
         seletor necessária, só o valor do token muda.
       Ambas cobrem os pesos 400/500/600/700/800 já em uso (ou passando a
       ser usado) no arquivo — nenhum precisa de negrito/peso sintético em
       lugar nenhum do sistema (checado via researchdude: as duas são
       fontes variáveis reais nesses pesos no Google Fonts).
       --font-mono permanece a pilha NATIVA de sistema (ui-monospace) —
       não é uma 3ª família do Google Fonts, é fallback puro do SO, então
       não conta contra o limite de 2-3 pedido; mantido como token
       reservado (sem consumidor hoje, mesma situação de outros tokens
       "reservados" já documentados neste arquivo) para uma eventual
       necessidade futura de destacar dado/número como texto técnico, sem
       gastar uma 3ª família carregada à toa enquanto isso não é pedido.
       Resultado: 4 famílias do Google Fonts → 2, todas sem itálico em uso
       em nenhum seletor do arquivo (grep confirmado após esta rodada).

       HISTÓRICO PRESERVADO (REVISÕES 1-4, ainda válidas como registro do
       raciocínio de fallback) — a pilha de fallback abaixo (-apple-system/
       BlinkMacSystemFont/SF Pro Display/SF Pro Text/system-ui/Segoe UI/
       Roboto/Helvetica/Arial) é a mesma pilha de sistema adotada nas
       REVISÕES 2-4 (referência apple.com/br/store, pedido do diretor do
       projeto: SF Pro real via -apple-system/BlinkMacSystemFont em macOS/
       iOS/Safari, equivalentes nativos Segoe UI/Roboto nas outras
       plataformas) — continua sendo o FALLBACK de --font-heading/
       --font-body (não mudou de papel, só passou a vir depois de Manrope/
       Inter na cascata em vez de ser a família primária), então nunca cai
       num serifado genérico do navegador se a webfont falhar. */
    --font-heading: "Manrope", -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
    --font-body: "Inter", -apple-system, BlinkMacSystemFont, "SF Pro Text", system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
    --font-mono: ui-monospace, SFMono-Regular, 'Courier New', monospace;
    /* REVISÃO (letterman) — NOVO token --font-display: "Fokus - Condensed
       Sans", pedido do dono do produto para h1/h2 e "MUITO destaque" na
       hero. Antes de aplicar, pesquisei (researchdude) se "Fokus -
       Condensed Sans" está disponível pra uso web direto — não está:

       - NÃO existe no catálogo do Google Fonts (confirmado: nenhum
         resultado para "Fokus", "Fokus Condensed" ou "Fokus Condensed
         Sans" na busca do próprio Google Fonts; nada de <link>/@import
         gratuito possível).
       - É uma fonte real, mas de uma fundição independente pequena
         (HipFonts), vendida como produto pago em marketplaces
         (CreativeMarket/Envato Elements/MyFonts/Creative Fabrica/
         YouWorkForThem) — não está no Adobe Fonts/Typekit. Licença é
         paga e por-produto/por-plataforma; direito de web-embedding
         (self-hosted @font-face) varia por licença e não estava
         confirmado sem comprar. Além disso, a família só existe em 2
         cortes — Regular e Thin — SEM peso bold real, o que por si só já
         inviabilizaria "MUITO destaque" sem recorrer a negrito
         sintetizado (proibido pela regra do próprio sistema, ver
         histórico do bug de fake-bold do Instrument Serif mais abaixo
         junto à regra "h2").
       - Não é grafia alternativa de nenhuma família mais conhecida —
         é mesmo esse produto pago específico.

       Decisão: não usar "Fokus" (sem licença/arquivo confirmado, sem
       peso bold real, não é embutível de forma confiável hoje) e
       substituir pela condensada real mais fiel à intenção "condensada,
       alto impacto, MUITO destaque" disponível livre no Google Fonts.
       Do shortlist levantado (Barlow Condensed, Oswald, Fjalla One,
       Archivo Narrow — todos confirmados existentes no Google Fonts):
       - Barlow Condensed tem personalidade próxima demais de Manrope
         (mesma família de grotesca arredondada/humanista) — usá-la no
         h1/h2 criaria pouco contraste de registro contra --font-heading/
         --font-body, o oposto do "destaque forte" pedido.
       - Fjalla One só existe em UM peso (Regular) — mesmo problema de
         "Fokus" (sem eixo de peso pra calibrar h1 vs. h2 vs. hero
         separadamente, como o pedido exige).
       - Archivo Narrow é uma condensada contida/estrutural, pensada
         para texto corrido condensado, não para impacto de manchete —
         não entrega o "MUITO destaque" pedido pra hero.
       - Oswald: condensada gótica de alto impacto (base "Alternate
         Gothic", historicamente usada em manchete/pôster/título de
         destaque), com eixo de peso real 200-700 (sem itálico usado
         aqui), x-height alto e traço vertical forte — a leitura mais
         próxima de "condensada com presença" que o pedido descreve,
         dentro do que está de fato disponível sem custo/licença. Peso
         MÁXIMO real é 700 (Bold) — não existe 800/900 nesta família,
         diferente de Manrope; ver nota em .text-highlight mais abaixo
         sobre o ajuste de peso 800→700 que isso exigiu.
       Escolhida: Oswald, pesos 500/600/700 carregados (nenhum peso
       sintetizado — os três são cortes reais da fonte variável).

       Limite de famílias — Manrope (h3 + wordmark) + Inter (corpo) +
       Oswald (h1 + h2, incluindo hero) = 3 famílias Google Fonts no
       total, dentro do teto de 2-3 já em vigor (--font-mono continua
       pilha nativa de sistema, não conta). h3 e o wordmark
       deliberadamente NÃO migraram para Oswald: o pedido foi específico
       a "H1 e H2" — mexer em h3/wordmark também fragmentaria o sistema
       sem pedido, trocando uma 3ª decisão que ninguém pediu revisar.

       Sem itálico em nenhum uso de Oswald (mantém a regra em vigor desde
       a reescrita tipográfica anterior). */
    --font-display: "Oswald", var(--font-heading);
    /* REVISÃO — --font-highlight (Source Serif 4 itálica), --font-h2
       (Instrument Serif) e --font-h2-highlight (Manrope/Bricolage
       Grotesque, sempre em itálico sintetizado) foram REMOVIDOS junto com
       a reescrita do sistema tipográfico documentada acima: os três
       existiam só para sustentar a estratégia de "trocar de família +
       itálico = destaque", que o dono do produto pediu para abandonar. O
       histórico completo de cada um (por que Source Serif 4, por que a
       inversão Instrument Serif ↔ Manrope, por que o itálico sintético de
       Manrope era "aceitável") fica preservado nas notas junto às regras
       que os consumiam (h2, .text-highlight, .hero-title — mais abaixo no
       arquivo), agora com a explicação de como cada uma foi migrada para o
       par --font-heading/--font-body (Manrope/Inter) sem itálico. Nenhum
       destes 3 tokens tem mais consumidor no arquivo (grep confirmado). */

    /* Escala tipográfica — proporção "Apple": título expressivo e bem
       maior que o corpo (escala de manchete de marketing, não de
       título de app/sistema), corpo neutro e contido. --fs-h1 e
       --fs-price foram ampliados em relação à fase Nunito Sans para
       reforçar esse contraste de escala; --fs-body/--fs-small/
       --fs-caption ficam como estavam — é o título que precisa crescer
       para criar a hierarquia, não o corpo encolher.

       REVISÃO 4 (letterman) — aumento moderado e proporcional pedido
       pelo diretor do projeto (~8% em toda a escala, não um valor
       aleatório por elemento). Cada token subiu o mesmo fator; a ordem
       relativa entre eyebrow < caption < small < body < body-lg < h3 <
       h2 < price < h1 é exatamente a mesma de antes, só a régua toda
       ficou um degrau maior. */
    --fs-eyebrow: 0.8125rem;
    --fs-h1: clamp(2.5625rem, 2.05rem + 2.6vw, 4rem);
    /* REVISÃO (letterman) — RECALIBRAÇÃO ligada à reescrita do sistema
       tipográfico (ver bloco grande no topo do :root de fontes). O valor
       anterior deste token (clamp(2.5rem, 2.05rem+1.8vw, 3.5rem)) carregava
       dois ajustes empilhados na história do arquivo:
       1) uma compensação de ~17-21% para o h2 ter sido forçado a
          font-weight:400 REAL em vez de 700 — porque a família de então
          (Instrument Serif) só existia nesse peso, e um h2 fino precisava
          de mais tamanho para não perder presença;
       2) por cima disso, um aumento independente de ~13-14% pedido pelo
          usuário (esse sim continua válido — não tinha relação com a
          família da fonte).
       Com o h2 agora em --font-heading (Manrope), que TEM peso 700 real
       (ver regra "h2 {}" abaixo, volta a font-weight:700, igual ao h1) —
       item 1 não se aplica mais: um h2 bold de verdade não precisa do
       mesmo tamanho extra que compensava um h2 fino. Reverti só essa
       parcela, mantendo a parcela 2 (pedido de tamanho do usuário,
       independente de fonte): apliquei o mesmo fator do pedido do usuário
       (~1.13) direto sobre o valor ANTERIOR à compensação de peso
       (clamp(1.875rem, 1.625rem+1.1vw, 2.5625rem), preservado no
       histórico acima) em vez de sobre o valor já inflado por ela — piso
       1.875×1.13≈2.12rem, coeficiente 1.625×1.13≈1.84rem / 1.1×1.13≈1.24vw,
       teto 2.5625×1.13≈2.9rem. Resultado: h2 continua nitidamente maior
       que h3 (--fs-h3, 1.5rem/24px fixo) e nitidamente menor que h1 em
       qualquer largura de viewport (conferido nos extremos: em vw=0, h1
       trava no piso 2.5625rem/41px vs. h2 no piso 2.12rem/34px; em vw
       grande, h1 trava no teto 4rem/64px vs. h2 no teto 2.9rem/46px) —
       hierarquia h1 > h2 > h3 preservada em toda a faixa. */
    --fs-h2: clamp(2.12rem, 1.84rem + 1.24vw, 2.9rem);
    /* --fs-h2-highlight foi REMOVIDO nesta mesma rodada — existia só para
       calibrar o tamanho do span .text-highlight de uma família DIFERENTE
       (Bricolage Grotesque/Manrope) contra a base serifada do h2
       (Instrument Serif), compensando x-height/peso óptico distintos entre
       duas fontes. Com h2 e .text-highlight agora na MESMA família
       (--font-heading, Manrope), esse problema de calibração cross-family
       não existe mais — .text-highlight volta a usar só peso e cor para se
       diferenciar do resto do h2 (ver regra ".text-highlight" mais abaixo),
       sem precisar de um tamanho próprio dedicado. */
    /* REVISÃO 15 (letterman) — PEDIDO DO USUÁRIO: h3 maior em todo o site.
       Subiu de 1.375rem (22px) para 1.5rem (24px), ~9%. Mantive a folga
       clara com --fs-h2 (piso 1.875rem/30px no clamp — ainda 6px acima do
       novo h3 no pior caso, mesma relação de distância que já existia
       proporcionalmente). Bumped o TOKEN, não só a regra "h3 {}": o token
       é reaproveitado de propósito por vários elementos que não são <h3>
       mas foram deliberadamente calibrados para o "mesmo degrau de
       tamanho que um h3" (.mds__term, .brand__wordmark-accent, badge de
       canto, .analise-estado__title — ver comentários "mesmo degrau de
       h3" nesses blocos). Desacoplar o token deles quebraria essa
       equivalência documentada; big picture, o sistema inteiro já tratava
       "--fs-h3" como um degrau de escala reutilizável, não uma
       propriedade exclusiva do elemento <h3> — subir o token preserva
       essa lógica em vez de fragmentá-la. Verifiquei os usos reais (h3 de
       card em .beneficios/.processo/.step-card/.source-card/.concept-
       card/.plan-card__name — títulos curtos, 1-2 palavras ou frases
       curtas dentro de cards ≥260px) e nenhum aproxima da largura do
       container a ponto de quebrar linha de forma ruim com +2px de
       tamanho de fonte. */
    /* REVISÃO 17 (letterman) — REVERTIDO a pedido do usuário: a REVISÃO 16
       (h3 maior/mais grosso) foi desfeita. --fs-h3 volta a 1.5rem (24px). */
    --fs-h3: 1.5rem;
    --fs-price: clamp(2.4375rem, 2.05rem + 1.75vw, 3.5rem);
    --fs-body-lg: 1.125rem;
    --fs-body: 1.0625rem;
    --fs-small: 0.9375rem;
    --fs-caption: 0.875rem;

    /* Altura de linha — o padrão Apple de referência (HIG: 17pt de
       fonte com ~22pt de leading, ~1.29) já é essencialmente o que
       --lh-heading (1.3) fazia na fase anterior, então não muda.
       --lh-body (1.55) segue acima do mínimo de acessibilidade (1.5)
       e dentro da faixa "moderada, levemente generosa" da Apple —
       também sem mudança. Só --lh-tight (título muito grande) segue
       reservado para h1, coerente com leading mais compacto em texto
       grande. */
    --lh-tight: 1.2;
    --lh-heading: 1.3;
    --lh-body: 1.55;
    --lh-small: 1.5;
  }

  /* ---------- Modo escuro ----------
     Ativado via [data-theme="dark"] no <html> (definido por theme.js,
     que lê a preferência salva ou prefers-color-scheme). Reescreve só os
     tokens que precisam mudar para manter contraste sobre o novo fundo
     #3D3A34: fundo/superfície/bordas/texto. Tokens de marca, botão,
     estado semântico e o gradiente do header não mudam com o tema — o
     pedido do usuário foi só a cor de fundo da página nos dois modos.

     REVISÃO 7 (colorman) — bloco migrado. Até agora este bloco ainda
     tinha os valores ORIGINAIS do coordenador (cinza puro #47433C/
     #4E493F/#59544A/#6B655A e texto #F6F1E4/#D9D2C2/#B2AB99), sem
     nenhuma relação com a família rosa/magenta nem com os dois pedidos
     desta rodada. Dois pedidos explícitos do usuário, tratados aqui:

     1) TEXTO BRANCO TOTAL — --color-text-heading passa a #FFFFFF puro.
        --color-text-body/--color-text-muted NÃO viram branco puro
        também (perderiam a hierarquia entre si); sobem para variantes
        de OPACIDADE de branco, mesmo padrão já usado em
        --color-text-on-brand-muted (rgba(255,255,255,0.8)):
          --color-text-body: rgba(255, 255, 255, 0.82)
          --color-text-muted: rgba(255, 255, 255, 0.62)
        Contraste medido (fórmula de luminância relativa WCAG, sRGB →
        linear → 0,2126·R + 0,7152·G + 0,0722·B; para as duas cores
        translúcidas, composto contra o fundo real em que aparecem):
          --color-text-heading (#FFFFFF) vs --color-bg-dark (#3D3A34):
          ~11,32:1. vs --color-surface (dark, novo valor, ver item 2
          abaixo, #474033): ~10,25:1.
          --color-text-body (rgba 0,82) vs --color-bg-dark: ~8,25:1.
          vs --color-surface (dark): ~7,46:1.
          --color-text-muted (rgba 0,62) vs --color-bg-dark: ~5,47:1.
          vs --color-surface (dark): ~4,95-5,07:1 (o par mais apertado
          do bloco, ainda assim acima do piso de 4,5:1 de texto normal).
        Hierarquia por opacidade preservada: heading > body > muted, os
        três com folga sobre AA em qualquer um dos dois fundos onde
        podem aparecer neste tema (bg-dark e surface).

     2) CINZA MAIS ESCURO — pedido do usuário: "escurecer o tom de cinza
        usado no site". As superfícies/bordas do modo escuro eram cinza
        quase acromático (S≈8-9%), sem nenhuma relação com o resto do
        sistema. Mesmo raciocínio já aplicado aos neutros do modo CLARO
        (--color-surface-alt/--color-border/--color-border-strong, ver
        PARTE 4 do bloco "REVISÃO 7" acima de :root): não migrei para a
        família de MARCA rosa/magenta (H=331°) — assim como os neutros
        claros foram reneutralizados para combinar com o CALOR do
        próprio fundo (--color-bg-light, creme) em vez do rosa vívido de
        --color-brand, aqui os neutros escuros ganham mais SATURAÇÃO na
        MESMA família de matiz do --color-bg-dark (H≈38°, terroso),
        deixando de ser cinza puro sem virar "roxo"/"vinho" (que
        competiria com --color-accent/--color-brand): S subindo de
        ~8-9% para 16-20%, L levemente reduzido:
          --color-surface: #47433C → #474033 (S 8,4%→16%, L 25,7%→24%)
          --color-surface-alt: #4E493F → #534A3C (S~9%→16%, L~27%→28%)
          --color-border: #59544A → #5A503F (S 9,2%→18%, L 32%→30%)
          --color-border-strong: #6B655A → #6E6149 (S 8,6%→20%,
          L 38,6%→36%)
        Nenhum dos quatro carrega texto diretamente (superfícies/
        bordas puramente decorativas/estruturais), sem piso obrigatório
        de contraste — mudança de presença/riqueza visual, coerente com
        o mesmo tratamento já dado aos neutros claros. */

    /* TROCA POSTERIOR (pedido do usuário) — os quatro neutros escuros
       acima migraram da família terrosa (H≈38°) para uma família fria
       near-black (H≈222-228°, mesmo H para os quatro, S e L escalonados
       na mesma proporção que a revisão anterior já usava):
         --color-bg-dark:      #3D3A34 → #0D0E12  (H228°, S16%, L 6%)
         --color-surface:      #474033 → #1C1F26  (H222°, S15%, L13%)
         --color-surface-alt:  #534A3C → #292D38  (H225°, S16%, L19%)
         --color-border:       #5A503F → #2C313F  (H225°, S18%, L21%)
         --color-border-strong:#6E6149 → #3D455C  (H225°, S20%, L30%)
       Contraste borda↔superfície preservado: --color-border-strong vs
       --color-surface fica em ~1,73:1, equivalente ao ~1,70:1 que a
       dupla antiga tinha. Nenhum dos cinco carrega texto diretamente,
       então não há piso de contraste obrigatório para eles — só a
       ordem relativa de luminosidade (bg < surface < surface-alt <
       border < border-strong) foi preservada. */
  :root[data-theme="dark"] {
    --color-highlight-emphasis: var(--color-highlight); /* ÓRFÃO — mesma situação da definição em :root (ver nota "TOKEN ÓRFÃO" acima): sem consumidor real depois que .text-highlight passou a usar peso/traço em vez de cor. Realias mantido só para não deixar o token com valor divergente entre os dois temas, caso volte a ser usado. */
    /* REVISÃO (letterman) — DESFEITO. O override de --color-highlight-mark
       para o escuro foi REMOVIDO junto com a declaração base em :root (ver
       nota lá) — o token não tem mais nenhum consumidor no arquivo. O
       text-shadow que substitui o marca-texto usa currentColor (ver regra
       .text-highlight, mais abaixo), então já se adapta sozinho aos dois
       temas sem precisar de um token/override dedicado. */
    --color-bg-page: var(--color-bg-dark);
    --color-bg-section-alt: var(--color-bg-dark);
    --color-surface: #1C1F26;        /* era #474033; troca pedida p/ near-black frio (H≈222°), par de --color-bg-dark #0D0E12 */
    --color-header-bg: rgba(28, 31, 38, 0.72); /* alfa de --color-surface (dark), atualizado junto — era rgba(71,64,51,.72) */
    --color-surface-alt: #292D38;    /* era #534A3C; migrado p/ mesma família fria de --color-surface (H225°, S16%, L19%) */
    --color-border: #2C313F;         /* era #5A503F; migrado p/ mesma família fria (H225°, S18%, L21%) */
    --color-border-strong: #3D455C;  /* era #6E6149; nova cor escolhida na MESMA família fria de --color-surface/--color-bg-dark (H≈225°, S 20%, L 30%) — contraste vs --color-surface novo ~1,73:1, equivalente ao ~1,70:1 que a cor antiga tinha contra a superfície antiga */
    /* REVISÃO (colorman) — AUDITORIA DE PARIDADE: no modo claro,
       --color-text-heading e --color-text-body são o MESMO valor (agora
       #000000, ver nota junto à declaração em :root) — mas aqui no escuro
       eles resolviam para valores DIFERENTES entre si (heading em branco
       100%, body em branco 82%), quebrando a relação/paridade que os dois
       tokens têm no modo claro. Corrigido: --color-text-body passa a
       reusar --color-text-heading (var(), não mais um rgba com alfa
       próprio) — os dois ficam idênticos entre si no escuro, exatamente
       como já são idênticos entre si no claro. --color-text-muted segue
       com seu próprio valor (papel deliberadamente distinto/mais discreto
       nos dois temas, não fazia parte nem faz parte deste pedido de
       paridade). */
    --color-text-heading: #FFFFFF;             /* era #F6F1E4; ~11,32:1 sobre --color-bg-dark, ~10,25:1 sobre --color-surface (dark) */
    --color-text-body: var(--color-text-heading);  /* era rgba(255,255,255,0.82) — agora alias de --color-text-heading para restaurar a mesma paridade que os dois tokens têm no modo claro (ambos #000000) */
    --color-text-muted: rgba(255, 255, 255, 0.62); /* era #B2AB99; ~5,47:1 sobre --color-bg-dark, ~4,95:1 sobre --color-surface (dark) */

    /* PEDIDO DO USUÁRIO — sistema de elevação das caixas, versão escura.
       Sombra preta sobre fundo quase-preto não comunica profundidade
       sozinha, então o hover ganha um halo sutil de luz branca (o "rim
       light" que separa a caixa do fundo) somado a uma sombra bem mais
       opaca que no claro, só pra reforçar o "afundar" por trás do card.
       Ver --shadow-card-rest/--shadow-card-hover no bloco de tokens de
       layout (raio/espaço) — aqui só o que muda por tema. */
    --shadow-card-rest: 0 1px 2px rgba(0, 0, 0, 0.35);
    --shadow-card-hover: 0 0 0 1px rgba(255, 255, 255, 0.06), 0 28px 56px -18px rgba(0, 0, 0, 0.65), 0 8px 20px -8px rgba(0, 0, 0, 0.5);
    --shadow-card-rest-borderless: var(--shadow-card-rest);  /* NOVO (colorman) — no escuro os 4 cards da home (bordas viraram transparent) NÃO precisam de sombra reforçada: --color-surface (dark, #1C1F26) já é visivelmente mais claro que --color-bg-page (dark, #0D0E12), então o próprio tom da caixa se separa do fundo sem depender da sombra. Alias simples de --shadow-card-rest, sem reforço — ver definição/justificativa completa do token no bloco de tokens claro (raio/espaço/elevação) acima. */

    /* NOVO (pedido do usuário) — correção sistêmica: --color-accent,
       --color-text-link e --color-brand-dark são tokens FIXOS (mesmo
       valor nos dois temas) porque foram calibrados como texto sobre
       fundo CLARO. Com --color-surface/--color-bg-dark agora near-black,
       qualquer lugar que usa um desses como texto/borda direto sobre
       --color-surface/--color-bg-page perde contraste (ex.: .btn--
       secondary base media ~3,08:1 contra a nova --color-surface,
       abaixo do piso de 4,5:1 de texto). Em vez de caçar cada seletor
       um por um, os dois tokens abaixo passam a ser a fonte única pra
       "azul em cima de superfície escura": */
    --color-accent-on-dark: var(--color-accent-tint-on-dark); /* #A8D3F0 — mesmo tom já usado como texto claro sobre os painéis --color-ink-900/800; ~10,4:1 sobre a nova --color-surface, ~12,2:1 sobre --color-bg-dark */
    --color-focus-ring: var(--color-accent-tint-on-dark); /* passa a valer pro site INTEIRO no escuro, não só dentro de .site-footer/.waitlist__box/.next-step--final — --color-focus-ring padrão (alias de --color-text-link, #2C658C) media só ~2,6:1 contra a nova --color-surface, anel de foco quase invisível em qualquer botão/campo fora desses 3 painéis. As sobrescritas locais existentes nesses 3 seletores viram redundantes (mesmo valor) mas foram deixadas como estão. */

    /* BUG ENCONTRADO PELO USUÁRIO (print) — .plan-card::before é um
       overlay de gradiente (hover) com --color-brand-tint/-strong, fixos
       e CLAROS nos dois temas. No escuro, o card fica com fundo quase-
       branco no hover, mas .plan-card__name/__description/__price/
       __feature continuam com as cores de texto do card ESCURO (branco/
       quase-branco) — texto branco sobre fundo quase-branco, ilegível.
       Este bug é anterior à troca de --color-surface/--color-bg-dark de
       hoje (o overlay nunca dependeu desses tokens), por isso a correção
       sistêmica anterior (--color-accent-on-dark) não o resolvia.
       Corrigido com um degradê azul-marinho escuro dedicado só a este
       overlay (mesma família de --color-ink-900/800), preservando as
       cores de texto existentes do card — branco sobre #223D4F/#1C3240
       mede ~11,4:1 (folga enorme). */
    --color-plan-card-hover-start: #223D4F;
    --color-plan-card-hover-end: #1C3240;

    /* PEDIDO DO USUÁRIO era só sobre o hover de card no modo CLARO
       ("tom amarelado"); no escuro o hover genérico de card continua
       exatamente como estava (--color-surface-alt), sem mudança de
       comportamento — ver a declaração LIGHT de --color-card-hover-tint
       acima de :root, que sem esta sobrescrita vazaria pro escuro. */
    --color-card-hover-tint: var(--color-surface-alt);

    /* PEDIDO DO USUÁRIO — cor do rodapé no escuro. --color-ink-900/-800
       são fixos nos dois temas (mesmo azul-marinho médio no claro e no
       escuro, H=204°/S=45%). Com --color-surface/--color-bg-dark agora
       near-black, esse azul-marinho brilha demais perto do resto da
       página, destoando em vez de fechar a página com naturalidade.
       Sobrescrita SÓ no escuro: mesma família de matiz (H=204°, marca),
       bem mais escura e um pouco menos saturada. Ainda afeta
       .waitlist__box e qualquer outro consumidor de --color-ink-900/-800
       (.site-footer foi migrado à parte para var(--color-surface) — ver
       nota junto à regra .site-footer). Contraste só melhora: branco
       sobre o novo --color-ink-900 mede ~16,9:1 (era ~12,16:1). */
    --color-ink-900: #121E26;  /* H≈204°, S≈35%, L≈11% — era #1E3C50 */
    --color-ink-800: #1E313E;  /* H≈204°, S≈35%, L≈18% — era #28506A */

    /* REVISÃO 7 (colorman) — histórico: esta sobrescrita local existia
       pra corrigir o "BUG 1" (--color-text-on-accent herdando
       --color-text-heading, que virava branco no modo escuro sobre um
       --color-accent fixo quase-branco, ilegível).
       REVISÃO 9 (colorman) — SOBRESCRITA REMOVIDA. --color-text-on-accent
       deixou de ser um alias de --color-text-heading (ver PARTE 2 do
       bloco "REVISÃO 9" acima de :root): agora é um literal fixo (era
       #FAF4EA/creme, REVISÃO 11 (colorman) trocou pra #FFFFFF/branco —
       ver bloco "REVISÃO 11" acima de :root), FIXO nos dois temas,
       exatamente como --color-accent (agora um azul escuro sólido) também é fixo
       nos dois temas — a premissa do Bug 1 (um token que muda de tema
       carregando um fundo que não muda) deixou de existir, então manter
       esta sobrescrita voltaria a introduzir o MESMO bug ao contrário
       (aplicaria --color-text-link-hover, um azul escuro, sobre
       --color-accent, também azul escuro fixo — ilegível nos dois
       temas). Isto não é uma mudança de arquitetura do modo escuro: é a
       remoção de uma sobrescrita cuja razão de existir desapareceu por
       causa da mudança de paleta no modo claro (mesma classe de ajuste
       que a REVISÃO 8 já tinha feito ao remover as sobrescritas locais
       de --color-focus-ring quando deixaram de ser necessárias). */
  }

  /* REVISÃO 7 (colorman) — BUG 2 (ver PARTE 6 do bloco "REVISÃO 7" acima
     de :root): --color-brand-dark é fixo nos dois temas, mas três dos
     seus quatro consumidores como TEXTO (.btn--secondary base,
     .concept-card__acronym, .next-step__eyebrow) estão sobre
     --color-surface, que MUDA de tema — no escuro, texto escuro fixo
     sobre fundo agora escuro (#474033) fica ilegível. O quarto
     consumidor (.step-card__number, sobre --color-brand-tint, que NÃO
     muda de tema) está OK e não foi tocado. Corrigido por seletor
     (não por token global, para não quebrar .step-card__number):
     --color-brand-light, já existente, reaproveitado.
     REVISÃO 9 (colorman) — valor de --color-brand-dark e --color-brand-
     light migrados pra família azul (ver bloco "REVISÃO 9" acima de
     :root); --color-brand-light foi calibrado (L=68%, #83B6D8)
     especificamente pra continuar servindo este papel — medido
     ~4,69:1 contra --color-surface (dark) #474033 (era ~5,57:1 com o
     tom rosa antigo #FFA3D0 — folga menor, mas ainda ≥4,5:1; ver nota
     junto ao token no :root para o porquê do L=68% em vez de 65%).

     NOTA DE ESPECIFICIDADE — deliberadamente usei [data-theme="dark"]
     (sem :root na frente) em vez de :root[data-theme="dark"] (padrão do
     resto do arquivo) só para .btn--secondary: com :root, a
     especificidade ficaria (0,3,0) — MAIOR que .btn--secondary:hover
     (0,2,0) — e este override passaria a vencer o hover também, forçando
     --color-brand-light mesmo sobre o fundo --color-accent-tint do
     hover, ilegível. Sem :root, fica (0,2,0), empatado com :hover; como
     este bloco vem ANTES de .btn--secondary/.btn--secondary:hover no
     arquivo, o hover (declarado depois, mesma especificidade) continua
     vencendo durante o hover — só a cor BASE (sem :hover) é substituída,
     que é o problema real. .concept-card__acronym e .next-step__eyebrow
     não têm :hover que sobrescreva color, então não têm esse risco, mas
     ficaram na mesma regra por simplicidade.

     REVISÃO letterman (adição) — .plan-card__amount passou a consumir
     --color-brand-dark (ver regra abaixo, no bloco de .plan-card) pra dar
     destaque de cor ao preço do plano. Mesmo fundo (--color-surface, que
     muda de tema) e mesmo bug preexistente dos três consumidores acima —
     entra nesta mesma sobrescrita em vez de ficar ilegível no escuro. Sem
     :hover a sobrescrever color, mesmo caso de .concept-card__acronym. */
  [data-theme="dark"] .btn--secondary,
  [data-theme="dark"] .concept-card__acronym,
  [data-theme="dark"] .next-step__eyebrow,
  [data-theme="dark"] .plan-card__amount {
    color: var(--color-brand-light);
  }

  /* REVISÃO (letterman) — PEDIDO DO USUÁRIO (via coordenador): título dos
     4 cards da home (preview-card, beneficios, processo, mds) virou preto
     total (#000000, literal) e o azul que eles usavam
     (var(--color-accent-on-dark)) foi realocado pro texto/corpo de cada
     card — mas o pedido foi explícito: só no modo CLARO, sem tocar o
     escuro. Como o preto e o azul-no-corpo foram escritos como literais/
     tokens fixos nas regras base (que também servem de "modo claro
     padrão" neste arquivo), sem este bloco o escuro herdaria as mesmas
     mudanças por tabela. Estas 9 sobrescritas restauram, seletor por
     seletor, exatamente o par cor/token que cada um tinha ANTES desta
     rodada — dark mode fica bit-a-bit inalterado:
       - Títulos (5): de volta a var(--color-accent-on-dark), que no
         escuro resolve pra --color-accent-tint-on-dark (#A8D3F0),
         inalterado.
       - Corpos (4): de volta ao token de texto que cada um já usava —
         --color-text-muted (.preview-card__item-detail) ou
         --color-text-body (os outros 3) — nenhum dos dois mudou de
         valor no escuro nesta rodada. */
  /* REVISÃO (letterman) — a rodada que trouxe Newsreader itálico de volta
     para estes 5 títulos de card (ver blocos deles, mais abaixo) é
     explicitamente só de MODO CLARO. Como font-family/font-style são
     declarados nas regras base (que também servem de "claro padrão" neste
     arquivo), sem restaurá-los aqui o escuro herdaria Newsreader itálico
     por tabela. font-family/font-style abaixo restauram bit-a-bit o que já
     estava em vigor no escuro (Oswald, var(--font-display), sem itálico) —
     font-weight não precisou ser restaurado porque não mudou de valor
     nesta rodada (só a família e o estilo mudaram, o peso é o mesmo número
     nos dois temas). */
  /* REVISÃO (letterman) — .preview-card__title separado deste grupo nesta
     rodada: a copy ganhou um <span class="preview-card__title-accent">
     em volta só de "ACERTAR" (ver TAREFA 1, regra de .preview-card__title
     mais abaixo no arquivo), então o título inteiro não pode mais herdar
     um único color por igual — o span carrega o azul, o resto do título
     carrega a cor normal de texto. font-family/font-style continuam
     compartilhados com os 4 títulos abaixo (mesma restauração de Oswald
     não-itálico no escuro, ver nota da REVISÃO anterior logo acima), só a
     declaração de color saiu daqui; a cor de .preview-card__title e do seu
     span ganham regra própria logo abaixo, junto aos outros 4 títulos que
     continuam usando --color-accent-on-dark por inteiro (sem span, fora de
     escopo desta mudança). */
  [data-theme="dark"] .preview-card__title,
  [data-theme="dark"] .preview-card__item-title,
  [data-theme="dark"] .beneficios__item-title,
  [data-theme="dark"] .processo__item-title,
  [data-theme="dark"] .mds__term {
    font-family: var(--font-display);
    font-style: normal;
  }
  [data-theme="dark"] .preview-card__item-title,
  [data-theme="dark"] .beneficios__item-title,
  [data-theme="dark"] .processo__item-title,
  [data-theme="dark"] .mds__term {
    color: var(--color-accent-on-dark);
  }
  /* .preview-card__title em si volta à cor normal de texto do escuro
     (var(--color-text-heading), que no dark theme resolve para branco —
     ver token no bloco [data-theme="dark"] :root), espelhando exatamente o
     mesmo par claro/escuro que a regra base já usa no claro (--color-text-
     heading). Só a palavra destacada (.preview-card__title-accent) recebe
     o azul de Ação do escuro, --color-accent-on-dark — o mesmo token que
     os 4 títulos acima usam por inteiro, aqui restrito ao span. */
  [data-theme="dark"] .preview-card__title {
    color: var(--color-text-heading);
  }
  [data-theme="dark"] .preview-card__title-accent {
    color: var(--color-accent-on-dark);
  }
  /* REVISÃO (letterman) — UNIFICAÇÃO DE TIPOGRAFIA DE CARDS: os 6 seletores
     abaixo (.step-card__title, .concept-card__title, .source-card__title,
     .plan-card__name, .faq-item__question, .achado-card__title) acabaram
     de ganhar o mesmo par claro "Newsreader itálico" que os 5 títulos de
     referência acima já tinham. Regra própria (não somada ao bloco acima)
     porque só restauro font-family/font-style — NÃO color: os 5 títulos de
     referência trocam de cor no claro para var(--color-highlight-emphasis)/
     var(--color-text-heading) preto, com --color-accent-on-dark restaurando
     o azul de "Ação" no escuro (par cor+itálico documentado junto a
     .preview-card__title). Estes 6 títulos de card NUNCA tiveram essa troca
     de cor no claro (o colorman já unificou a cor deles antes desta rodada
     e cor está fora do escopo desta unificação de tipografia) — no claro
     continuam com a cor herdada normal (var(--color-text-heading)), então
     no escuro também devem continuar herdando a cor normal, sem tocar
     color aqui. Só family/style precisam de override (voltam a Oswald/
     var(--font-display) não-itálico, mesmo tratamento tipográfico dos 5
     títulos de referência no escuro). */
  [data-theme="dark"] .step-card__title,
  [data-theme="dark"] .concept-card__title,
  [data-theme="dark"] .source-card__title,
  [data-theme="dark"] .plan-card__name,
  [data-theme="dark"] .faq-item__question,
  [data-theme="dark"] .achado-card__title {
    font-family: var(--font-display);
    font-style: normal;
  }
  [data-theme="dark"] .preview-card__item-detail {
    color: var(--color-text-muted);
  }
  [data-theme="dark"] .beneficios__item-text,
  [data-theme="dark"] .processo__item-text,
  [data-theme="dark"] .mds__definition {
    color: var(--color-text-body);
  }

  /* REVERTIDO A PEDIDO DO USUÁRIO — override não é mais necessário: a
     regra de repouso do .plan-card--featured que a motivava foi removida
     (ver bloco "Planos"). */

  /* PEDIDO DO USUÁRIO — rodapé, na cor de caixa (#1C1F26 no escuro),
     igual às outras caixas da Início (.preview-card, .beneficios__item,
     .processo__item, .mds__item, .next-step, .faq-block__item — todas já
     usam --color-surface). Confirmado explicitamente: o rodapé NÃO deve
     mudar de cor de novo — fica assim, mesmo que isso deixe de bater com
     .waitlist__box (que continua --color-ink-900 nos dois temas; sem
     pedido de mudança). Borda superior em --color-border-strong pela
     mesma razão (borda padrão de toda caixa do sistema). */
  [data-theme="dark"] .site-footer {
    background-color: var(--color-surface);
    border-top-color: var(--color-border-strong);
  }

  /* ---------- Base ---------- */
  /* html mantém --color-bg-page como o "canvas" real da página (paint
     mais no fundo possível, sempre visível mesmo sem JS) — body fica
     transparente porque #agua-fundo (canvas fixo, z-index:-1, ver mais
     abaixo) passa a pintar o fundo por cima disso, com o efeito de água. */
  html {
    background-color: var(--color-bg-page);
  }
  body {
    background-color: transparent;
    color: var(--color-text-body);
    transition: background-color .4s ease, color .4s ease;
    font-family: var(--font-body);
    font-size: var(--fs-body);
    line-height: var(--lh-body);
    -webkit-font-smoothing: antialiased;
    text-rendering: optimizeLegibility;
  }

  /* REVISÃO (colorman) — fundo off-white agora é o PADRÃO do <body> do
     site inteiro, não mais exclusivo da Início. Motivo: o dono do produto
     removeu o canvas #agua-fundo/#agua-fundo-blur (efeito "água/plasma",
     agua-fundo.js) de TODAS as 16 páginas do site, unificando todo mundo
     no estado que já valia só pra index.html. Antes, esse fundo sólido
     (var(--color-bg-page-home)) existia só para compensar a ausência do
     canvas NA HOME; agora que nenhuma página tem mais o canvas, todas
     precisam do mesmo fundo de compensação, senão as outras 15 páginas
     ficam com o "vazio" por trás (fundo real só em --color-bg-page do
     <html>, sem a camada sólida que o body pintava por cima). Por isso o
     seletor trocou de "body.pagina-home" para "body" puro — a classe
     "pagina-home" permanece no <body> de index.html (ver esse arquivo)
     só para as regras de TIPOGRAFIA que ainda dependem dela (h2/h3 da
     home, --h2-cream-1 etc.) permanecerem exclusivas da Início; aqui,
     onde o assunto é só cor de fundo, não faz mais sentido escopar.
     "html:not([data-theme="dark"])" continua necessário pela mesma razão
     de antes: o tema escuro troca --color-bg-page para --color-bg-dark
     inteiro (ver bloco ":root[data-theme="dark"]"); este fundo off-white
     é só do modo claro.
     min-height:100vh: mesma razão de antes (evitar uma faixa de
     --color-bg-page do <html> aparecendo embaixo em páginas curtas/telas
     altas), agora relevante pras 15 páginas que não tinham essa garantia. */
  html:not([data-theme="dark"]) body {
    background-color: var(--color-bg-page-home);
    min-height: 100vh;
  }

  /* Canvas "água/plasma" (agua-fundo.js) e #agua-fundo-blur foram
     REMOVIDOS de TODAS as 16 páginas do site (antes só da home) — pedido
     do dono do produto para unificar o site inteiro no estado sem esse
     efeito. As regras de #agua-fundo/#agua-fundo-blur abaixo não casam
     mais com nenhum elemento (não há mais <canvas id="agua-fundo"> nem
     <div id="agua-fundo-blur"> em nenhum HTML do projeto) — mantidas
     apenas como registro histórico do mecanismo, sem custo de runtime
     (seletor por id que nunca casa não gera paint/layout). agua-fundo.js
     não é mais referenciado por nenhuma página. */
  #agua-fundo {
    position: fixed;
    inset: 0;
    width: 100%;
    height: 100%;
    z-index: -1;
    display: block;
    pointer-events: none;
  }
  #agua-fundo-blur {
    position: fixed;
    inset: 0;
    z-index: -1;
    pointer-events: none;
    backdrop-filter: blur(14px);
    -webkit-backdrop-filter: blur(14px);
  }

  /* ================================================================
     ---------- Grain sutil no fundo do site (colorman) ----------
     PEDIDO original do dono do produto (via usuário): textura granulada
     discreta no fundo da página inicial, para dar profundidade sem
     competir com a paleta nem prejudicar legibilidade. REVISÃO (colorman):
     escopo ampliado de "só a home" para O SITE INTEIRO — mesma razão do
     bloco "html:not([data-theme="dark"]) body" logo acima: o canvas
     #agua-fundo foi removido de todas as 16 páginas (não só da home), e
     esta textura sempre foi pensada para compensar visualmente a ausência
     desse canvas; restringi-la à home deixaria as outras 15 páginas com
     um fundo "mais vazio" que a home, quebrando a coerência que o site
     inteiro deveria ter agora que todas compartilham o mesmo estado sem
     água. Seletor trocou de "body.pagina-home::after" para "body::after"
     puro — "pagina-home" continua no <body> de index.html só para as
     regras de tipografia que ainda dependem dela (ver comentário do bloco
     de fundo acima).

     POR QUE UM PSEUDO-ELEMENTO (body.pagina-home::after), NÃO UMA IMAGEM
     EXTERNA: SVG inline via data URI, gerado com <feTurbulence> (ruído
     fractal nativo do SVG) — zero requisição de rede, zero dependência de
     terceiro, e um arquivo minúsculo (poucas centenas de bytes, cacheado
     junto do CSS) — bem mais leve que qualquer PNG de ruído, mesmo um
     pequeno, e infinitamente mais leve que gerar ruído via <canvas>/JS
     (que já existe neste projeto só para o dithering do efeito
     "água/plasma", ver #agua-fundo acima — usar o mesmo canvas para grain
     estético misturaria dois papéis diferentes dentro do mesmo script).
     Um <rect> preenchido pelo filtro é ladrilhado (background-repeat) em
     vez de cobrir a tela inteira num SVG só — 220×220px é leve o
     suficiente pro navegador compor sem custo de layout/paint perceptível
     mesmo cobrindo o viewport inteiro atrás de todo o conteúdo, e sem
     nenhuma animação (grain estático, não teria ganho nenhum girando/
     recalculando a cada frame, só custo de GPU/CPU à toa).

     POSIÇÃO NA PILHA: position:fixed + z-index:-1, MESMO nível de
     #agua-fundo/#agua-fundo-blur logo acima. Elementos com z-index
     negativo formam seu próprio grupo de empilhamento, sempre pintado
     ATRÁS de qualquer conteúdo normal do body (cards, texto — z-index:auto
     -- fica sempre por cima de qualquer coisa com z-index negativo,
     independente de ordem no documento) — por isso o grain nunca cobre
     nem reduz o contraste de texto/cartões, é estritamente decoração do
     "canvas" da página. Dentro do grupo negativo, quem vem depois no HTML
     pinta por cima de quem vem antes: como ::after é gerado como o ÚLTIMO
     filho de <body> (depois do <canvas id="agua-fundo"> e da
     #agua-fundo-blur, que são os primeiros elementos reais do body em
     index.html), o grain pinta por cima do efeito água/blur — visível
     sobre ele, e não escondido atrás.

     SUTILEZA E COMPATIBILIDADE COM OS DOIS TEMAS: opacity:0.045 é
     deliberadamente baixo — grain existe para textura, não para ser
     notado conscientemente. mix-blend-mode:overlay (em vez de multiply
     ou screen, que só escurecem ou só clareiam) foi escolhido porque
     adapta o efeito à luminância do que está por baixo: sobre
     --color-bg-page claro (tema claro) e sobre --color-bg-dark/--color-
     surface escuros (tema escuro, ver [data-theme="dark"] --color-bg-page)
     o mesmo grain lê como um levíssimo relevo em ambos, sem precisar de
     nenhuma sobrescrita dentro de [data-theme="dark"] — evita duplicar a
     regra só para trocar opacidade/blend por tema. pointer-events:none
     (decorativo, não deve capturar clique/hover de nada por baixo).
     ================================================================ */
  /* REVISÃO (colorman) — PEDIDO do dono do produto (via usuário): "aumente
     o efeito de granulado no background em 2x". Dois eixos independentes
     foram ajustados juntos, não só um, porque nenhum dos dois isolado
     chega a "2x perceptível" sem efeitos colaterais ruins:

     1) opacity: 0.045 → 0.085 (~1.9x). Este é o controle mais direto e
        previsível de intensidade percebida — mas como o pseudo-elemento
        está sob mix-blend-mode:overlay (não um alpha linear comum), dobrar
        SÓ a opacity (0.045→0.09) tende a sub-entregar o dobro percebido
        em áreas de luminância média (onde overlay já comprime bastante) e
        sobre-entregar nas extremidades claras/escuras — por isso a divisão
        do "trabalho de dobrar" com o item 2 abaixo, em vez de jogar tudo
        nesse único número.
     2) feColorMatrix, último valor (multiplicador do canal alfa do ruído):
        0.9 → 1.0. Esse valor limita o quão opaco cada grão individual do
        SVG pode ficar (0.9 = pico do ruído nunca chega a alfa=1 dentro do
        próprio SVG, antes mesmo da opacity do CSS). Subir para 1.0 (o
        máximo, sem inventar um valor fora da faixa 0–1 que distorceria o
        matrix) dá mais DEFINIÇÃO/contraste a cada grão — grãos individuais
        mais nítidos, não só uma névoa mais forte — o que lê como "mais
        granulado" (textura) e não só "mais escuro/claro" (véu), que é a
        diferença entre dobrar grain de verdade e só dobrar opacidade.
     baseFrequency (0.85) e numOctaves (2) foram MANTIDOS de propósito:
     mudá-los alteraria o caráter do ruído (grão mais fino/grosso ou mais
     "nublado" com mais oitavas) — o pedido foi intensidade, não um padrão
     novo, e o padrão atual já foi validado visualmente antes.
     Resultado: grain nitidamente mais presente que a calibração anterior
     (efeito combinado dos dois eixos passa de perto do dobro em quase toda
     a faixa de luminância do fundo, claro e escuro), mas ainda um "leve
     relevo" de textura — não virou ruído grosseiro nem passou a competir
     com o texto, que continua imune por estar num grupo de empilhamento
     (z-index:-1) sempre atrás de qualquer conteúdo com z-index:auto (ver
     bloco de justificativa original acima). mix-blend-mode:overlay
     continua garantindo a mesma compatibilidade automática com os dois
     temas descrita ali, sem necessidade de regra extra dentro de
     [data-theme="dark"]. */
  body::after {
    content: "";
    position: fixed;
    inset: 0;
    z-index: -1;
    pointer-events: none;
    opacity: 0.085;
    mix-blend-mode: overlay;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 220 220'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23g)'/%3E%3C/svg%3E");
    background-repeat: repeat;
    background-size: 220px 220px;
  }

  h1, h2, h3 {
    font-family: var(--font-heading);
    color: var(--color-text-heading);
    line-height: var(--lh-heading);
    margin: 0;
  }
  /* Tracking por tamanho, padrão Apple: quanto maior o texto, mais
     negativo o letter-spacing (título grande fecha, texto pequeno
     abre) — h1 é o maior elemento do sistema, por isso tem o tracking
     mais apertado; h3, o menor título, quase neutro. Pesos também
     descem um degrau em relação à fase Nunito Sans (Bold/Semibold em
     vez de Extrabold/Bold) — Apple raramente usa o peso mais pesado
     da faixa em headlines de marketing; o contraste de escala do
     tamanho já cria a hierarquia. */
  /* REVISÃO (letterman) — h1 passa a usar --font-display (Oswald,
     condensada — ver bloco grande de justificativa no :root, incluindo
     por que "Fokus - Condensed Sans" pedida pelo dono do produto não
     está disponível para uso web e por que Oswald é a substituta mais
     fiel). Isto sobrescreve, só para h1, o font-family: var(--font-heading)
     herdado da regra "h1, h2, h3 {}" logo acima — h3 continua Manrope
     (não fez parte do pedido).
     font-weight desce de 700 para 600: Oswald condensada já tem presença
     visual maior que Manrope no mesmo peso (traços mais altos/estreitos,
     mais "tinta" por linha) — 600 (SemiBold) mantém um h1 de página
     comum (a maioria são frases de título único, ex. "Central de Ajuda",
     "Nossa metodologia de SEO...") assertivo sem competir com o h2, que
     passa a 700 (ver regra "h2" abaixo) — pedido do usuário distingue
     H2 como "destaque forte" explicitamente, H1 comum só como "usar a
     fonte", então o h1 de página fica um degrau abaixo do h2 em peso
     (a hierarquia entre os dois continua vindo do TAMANHO, --fs-h1 >
     --fs-h2 em toda a faixa de viewport, nunca invertida). A hero
     (.hero-title, mesmo elemento h1) tem override próprio logo abaixo
     que sobe pra 700 — ali sim é o "MUITO destaque" pedido.
     letter-spacing fecha menos (-0.02em → -0.012em): condensada já é
     estreita por desenho: mais um aperto negativo do mesmo tamanho usado
     em Manrope colidiria os traços verticais characterísticos de Oswald
     em vez de reforçar "impacto" — o valor foi recalibrado pra família,
     não copiado do valor anterior. */
  h1 { font-family: var(--font-display); font-size: var(--fs-h1); font-weight: 600; line-height: var(--lh-tight); letter-spacing: -0.012em; }
  /* REVISÃO 13 (letterman) — revisado e CONFIRMADO, ver bloco "REVISÃO 13"
     no topo do arquivo (itens 1 e 2) para o raciocínio completo. Resumo:
     todo h2 de seção passa a centralizado na página, substituindo a
     decisão anterior (REVISÃO 3, ver nota marcada como superada logo
     acima daquele bloco) de manter títulos sempre alinhados à esquerda;
     confirmado via grep que os únicos h2 do site são cabeçalhos de seção
     de página inteira (nenhum título curto ao lado de outro elemento na
     mesma linha), então centralizar não quebra nenhum layout de duas
     colunas. Peso sobe de 600 para 700 e o tracking abre de -0.015em
     para -0.01em — peso maior pede tracking um pouco mais aberto (glifos
     mais largos no bold), e a ordem h1(-0.02em)/h2(-0.01em)/h3(-0.005em)
     continua monotônica com o princípio "maior = mais fechado" da
     REVISÃO 3. */
  /* REVISÃO (letterman) — h2 volta a usar --font-heading (Manrope, a
     família ÚNICA de heading do sistema desde a reescrita tipográfica — ver
     bloco grande no :root) em vez do token dedicado --font-h2 (Instrument
     Serif, removido). font-family explícita aqui é redundante com a regra
     global "h1, h2, h3 { font-family: var(--font-heading); ... }" logo
     acima — mantida mesmo assim, sem custo, só para deixar claro neste
     ponto do arquivo que o h2 não tem mais uma família própria.
     font-weight volta de 400 para 700 (igual ao h1): Manrope tem um corte
     700 REAL (checado via researchdude, variable font, instâncias
     nomeadas 400-800 sem síntese), diferente de Instrument Serif, que só
     existia em 400 e forçava font-weight:700 a sair como fake bold
     sintetizado pelo navegador — o motivo original de ter baixado este
     valor para 400 (ver histórico abaixo, ainda preservado como registro)
     simplesmente não existe mais com a família atual. --fs-h2 foi
     recalibrado no :root removendo a parcela que compensava esse peso 400
     "fino" (ver nota junto ao token) — não seria coerente manter o
     font-weight baixo aqui sem também reverter aquele ajuste de tamanho.

     HISTÓRICO (preservado) — o bloco abaixo documentava o diagnóstico do
     bug de fake-bold com Instrument Serif e a decisão de baixar para 400;
     válido como registro do raciocínio da época, superado pela troca de
     família: O comentário anterior deste bloco afirmava que "nenhum
     navegador moderno sintetiza bold em fontes web" e que, por isso,
     font-weight:700 renderizaria "na prática" em 400 sem efeito nenhum.
     Essa premissa estava ERRADA — checado com researchdude junto à spec
     CSS Fonts Module Level 4 / MDN: o valor inicial de font-synthesis é
     "weight style small-caps position", ou seja, a síntese de peso vem
     LIGADA por padrão em todo navegador atual, a menos que
     font-synthesis:none seja declarado em algum ponto da cascata (nunca
     foi, neste arquivo). Instrument Serif só existia em peso 400 no
     Google Fonts, então font-weight:700 pedia um FAKE BOLD sintetizado
     sobre o corte 400 — efeito que destruía o caráter da serif fina. */
  /* REVISÃO (letterman) — h2 migra de --font-heading (Manrope) para
     --font-display (Oswald condensada) — ver justificativa completa da
     troca no bloco do :root. Pedido do dono do produto foi explícito
     em pedir "destaque forte" no H2 (distinto de "hero com MUITO
     destaque", que fica mais forte ainda) — por isso h2 mantém o
     font-weight no teto real de peso da família (700, Bold; Oswald não
     tem corte além de 700, então este já é o máximo disponível sem
     síntese) em vez de descer para 600 como o h1 comum fez logo acima.
     letter-spacing recalibrado (-0.01em → -0.008em) pelo mesmo motivo do
     h1: Oswald já é condensada por desenho, então precisa de menos
     aperto negativo do que Manrope pedia no mesmo peso/tamanho para não
     colidir os traços do Bold. text-align:center mantido — decisão de
     LAYOUT (REVISÃO 13, ainda válida), independente da família da
     fonte. */
  h2 { font-family: var(--font-display); font-size: var(--fs-h2); font-weight: 700; letter-spacing: -0.008em; text-align: center; }
  /* REVISÃO (letterman) — NOVA, ESCOPO EXPLICITAMENTE LIMITADO À HOME (index.html),
     pedido do dono do produto via usuário: "alongar verticalmente" e "diminuir o
     boldness" da fonte de destaque (Oswald, --font-display) usada em h1/h2/hero,
     mas SÓ na página inicial por enquanto — as outras 14 páginas do site (que
     também têm h1 de página e h2 de seção usando a MESMA regra global "h2{}" logo
     acima) NÃO podem mudar de aparência como efeito colateral.
     Como "h2{}" é uma regra GLOBAL compartilhada por todo o site, a única forma de
     aplicar isto só na home sem duplicar o sistema inteiro é uma regra adicional,
     mais específica, presa a um seletor que só existe na home: a classe
     "pagina-home" foi adicionada ao <body> de index.html só para isto (ver
     comentário no próprio index.html, logo após a tag <body>) — nenhuma outra
     página tem essa classe, então "body.pagina-home h2" nunca casa fora da home.
     Especificidade de "body.pagina-home h2" (1 classe + 2 tipos) já é maior que a
     de "h2{}" (1 tipo) sozinha, então esta regra vence mesmo vindo depois na
     cascata — mas foi colocada logo em seguida à regra global mesmo assim, só
     para deixar a relação entre as duas óbvia pra quem ler o arquivo depois.

     Peso: 700 → 400 (Regular, corte REAL — adicionado ao <link> do Google Fonts
     SÓ em index.html, ver comentário lá; nenhuma outra página baixa este peso).
     400 é a extremidade mais leve testada aqui (abaixo disso, 200/300 de Oswald
     ficam finos demais para título de seção em bold reduzido de vários itens
     repetidos ao longo da página — 7 h2's na home, ver grep do arquivo — e
     arriscaria legibilidade em telas pequenas). Mantido um degrau ABAIXO do peso
     escolhido para a hero nesta mesma rodada (500, ver regra ".hero-title" mais
     abaixo): a hero continua sendo o elemento mais pesado do sistema da home,
     preservando "hero = ponto de maior destaque do site", só que ambos agora mais
     leves do que estavam (h2 vinha de 700, hero vinha de 700).
     letter-spacing: -0.008em → -0.015em. Pesquisei com researchdude antes de
     mexer aqui: Oswald no Google Fonts não tem eixo de largura (wdth) nem corte
     "Condensed"/"Alternate" mais alto disponível — font-stretch não teria efeito
     nenhum nela (confirmado via MDN), e não existe uma segunda família mais
     "alta" pra trocar. A técnica documentada e segura pra reforçar
     sensação de verticalidade SEM esticar o desenho da letra é tracking negativo
     moderado (compressão horizontal relativa) — a faixa prudente
     apontada pela pesquisa é de -0,01em a -0,03em; -0.015em fica no terço inferior
     dessa faixa, deliberadamente conservador porque o peso já está mais leve
     (traços mais finos colidem mais fácil sob aperto do que traços bold).
     line-height: herdava var(--lh-heading) = 1.3 da regra "h1, h2, h3{}" (todo h2
     da home é título de seção de uma linha só, então line-height normalmente não
     teria efeito visível — mas ele ainda define a altura da caixa de linha ao
     redor do texto, mesmo numa linha só). Reduzido para 1.15 aqui: uma caixa mais
     apertada ao redor do próprio texto reforça a leitura "letra alta dentro de um
     espaço vertical contido", complementando o scaleY abaixo sem risco de corte
     de ascendentes/descendentes (Oswald tem x-height alto e descendentes
     moderados; 1.15 tem folga de sobra pra um título de 1 linha em qualquer peso).
     transform: scaleY(1.06) — a técnica real de alongamento vertical de glifo (a
     única que de fato estica o desenho da letra, já que não existe corte mais
     alto disponível nem eixo de largura pra explorar, ver acima). Calibrado a
     +6%, dentro da faixa que a pesquisa (researchdude) trouxe como "prudente antes
     do olho perceber distorção" (~1.03-1.15) — fiquei no terço inferior dessa
     faixa de propósito: h2 se repete 7 vezes na página (grep confirmado), um
     efeito perceptível demais ficaria cansativo/artificial repetido tantas vezes,
     diferente da hero, que aparece uma única vez e pode ir um pouco mais longe
     (ver 1.08 na regra ".hero-title" abaixo). transform-origin não foi
     definido — o valor inicial do CSS já é "50% 50%" (centro do próprio elemento),
     que distribui o crescimento de +6% de altura igualmente pra cima E pra baixo
     de cada h2 (que já é text-align:center); como o ganho é pequeno (6% de ~34-46px
     de fonte ≈ 2-3px por linha, split ao meio), não deveria colidir com o
     espaçamento das seções vizinhas (layout/gap entre seções é responsabilidade do
     layoutman, não alterada aqui) — mas se algum h2 específico ficar visualmente
     apertado contra o elemento seguinte em alguma página, é um ajuste de
     ESPAÇAMENTO pro layoutman revisar, não de tipografia.
     Contraste/acessibilidade: confirmado com researchdude que o piso WCAG 2.1 AA de
     "texto grande" (3:1, em vez do piso mais rígido de 4,5:1 de texto normal) exige
     ≥24px em peso regular OU ≥18,66px em peso bold — --fs-h2 tem piso de 2.12rem
     (33,9px) em qualquer viewport, folgadamente acima de 24px mesmo no novo peso
     400 (Regular), então a redução de peso NÃO empurra o h2 da home pra fora do
     piso mais permissivo de contraste; a cor (--color-text-heading) não foi tocada
     nesta revisão. */
  /* REVISÃO (letterman) — PEDIDO DO USUÁRIO: "alongue novamente, 2x mais do que
     você acabou de alongar" (h2 e hero) + "multiplique o TAMANHO do h2 por 2".
     Duas mudanças na MESMA rodada, escopadas à home (ver histórico da regra
     original acima) — trato cada uma separadamente porque uma delas (tamanho)
     muda uma premissa que a outra (alongamento) tinha assumido como segura.

     1) DOBRAR O ALONGAMENTO — interpretação: "o que acabei de alongar" = o
     delta introduzido na revisão anterior sobre a base pré-alongamento
     (peso 700/letter-spacing -0.008em/line-height 1.3/scaleY 1.0, ver
     histórico acima). Dobrar = dobrar cada delta, não o valor absoluto:
       - scaleY: delta era +0.06 (1.00→1.06) → dobrado = +0.12 → scaleY(1.12).
         A pesquisa (researchdude, citada acima) apontou ~1.03-1.15 como faixa
         "prudente antes do olho perceber distorção" para este tipo de
         alongamento sintético; 1.12 fica DENTRO dessa faixa (não no teto),
         então dobrar o delta aqui é seguro sem ajuste.
       - letter-spacing: delta era -0.007em (-0.008em→-0.015em) → dobrado =
         -0.014em → total -0.022em. Mesma faixa prudente da pesquisa
         (-0,01em a -0,03em) — -0.022em fica no terço central/superior,
         ainda dentro do teto, sem cortar traços do peso 400.
       - line-height: NÃO dobrei o delta aqui (teria dado 1.00, ver cálculo
         abaixo) — motivo na seção 2.

     2) DOBRAR O TAMANHO — --fs-h2 (clamp 2.12rem→2.9rem) x2 vira clamp
     4.24rem→5.8rem (~68px a ~93px). Isso muda uma premissa inteira da
     calibração anterior de line-height: a nota da revisão passada dizia
     "todo h2 da home é título de seção de uma linha só" — verdade nos
     ~30-41px antigos, mas FALSA nos ~68-93px novos. Os 7 h2's da home são
     frases (ex.: "O que essa análise faz — e o que ela não garante",
     "Quer acompanhar isso ao longo do tempo?"), então em qualquer largura de
     container realista essas frases agora VÃO quebrar em 2-4 linhas.
     Isso invalida dobrar o delta de line-height (1.30→1.00, que só seria
     seguro numa caixa de 1 linha sem risco de colisão entre linhas
     vizinhas): apliquei em vez disso o MESMO valor multi-linha-seguro já
     calibrado para a hero nesta rodada (1.18, ver regra ".hero-title"
     abaixo e seu próprio raciocínio) — o h2 passa a se comportar como um
     título que quebra em várias linhas, exatamente como a hero já fazia, e
     herda o mesmo tratamento em vez de uma extrapolação isolada e
     arriscada. Isso não é "suavizar por conta própria": scaleY e
     letter-spacing continuam com o delta cheio dobrado (a intensidade do
     pedido original), só o EIXO que dependia da premissa de linha única foi
     recalibrado porque essa premissa deixou de existir com o novo tamanho.
     overflow-wrap: break-word adicionado como rede de segurança — em telas
     estreitas (ex. 320-375px) uma palavra isolada mais longa (ex.
     "transparência", "garante") a ~68px pode ultrapassar a largura do
     container; a quebra de linha normal por espaço já resolve a maioria dos
     casos, mas break-word evita literalmente vazar da tela no pior caso
     (palavra única maior que o container) sem alterar a aparência em
     nenhum caso normal. Espaçamento vertical entre o h2 (agora ocupando
     bem mais altura, 2-4 linhas em vez de 1) e o conteúdo seguinte de cada
     seção é ajuste de LAYOUT (gap/margin), fora do escopo desta revisão —
     sinalizar para o layoutman revisar se alguma seção ficar apertada.
     Contraste: --fs-h2 dobrado deixa o piso ainda mais folgado acima do
     limiar WCAG de "texto grande" (24px) já confirmado antes; cor não
     tocada. */
  /* REVISÃO (letterman) — PEDIDO DO USUÁRIO: "aumente a boldness do h2
     para que ela tenha a mesma proporção de tamanho da fonte da hero
     section". Diagnóstico: depois da rodada anterior (doc acima), o h2 da
     home ficou MAIOR em px que a própria hero (--fs-h2 x2 = clamp 4.24rem→
     5.8rem ≈ 68px–93px) contra a hero em clamp(2.18rem, ..., 3.4rem) ≈
     34,9px–54,4px — mas o h2 ficou em peso 400 (Regular) contra o peso 500
     da hero. Resultado: o elemento fisicamente maior da página é também o
     mais fino, invertendo a hierarquia visual esperada (algo grande deveria
     "pesar" pelo menos tanto quanto algo menor e mais bold ao lado dele).

     Cálculo de proporção peso/tamanho usando a hero como âncora, nos dois
     extremos do clamp (piso e teto):
       - Piso: hero 500 @ 34,9px → densidade 500/34,9 ≈ 14,3 "peso por px".
         Aplicando a mesma densidade ao piso do h2 (67,8px): 14,3 × 67,8 ≈
         970 de peso nominal.
       - Teto: hero 500 @ 54,4px → densidade ≈ 9,19 "peso por px". Aplicando
         ao teto do h2 (92,8px): 9,19 × 92,8 ≈ 853 de peso nominal.
     Ambos os extremos pedem um peso nominal MUITO acima da escala CSS
     (100-900) e, mais especificamente, acima do que a família realmente
     oferece: Oswald no Google Fonts vai só até 700 (Bold) — não existe
     corte 800/900 (ExtraBold/Black) disponível sem synthesis (font-
     synthesis está ligado por padrão no browser, mas sintetizar bold sobre
     um corte que já não é o mais pesado da família produziria um "fake
     extra-bold" grosseiro, o mesmo tipo de problema já diagnosticado e
     descartado nesta mesma folha de estilo para Instrument Serif, ver
     histórico na regra "h2" global acima). Decisão: como a proporção pedida
     matematicamente excede qualquer corte real disponível, uso o TETO real
     da família — font-weight: 700 (Bold), o mesmo valor que o h2 já usava
     antes de qualquer ajuste desta série de revisões (ver regra "h2" global
     acima, "Oswald não tem corte além de 700"). É o mais próximo que dá pra
     chegar da proporção pedida sem sintetizar peso.
     letter-spacing reaberto de -0.022em para -0.014em: -0.022em foi
     calibrado para peso 400 (traços finos toleram aperto maior sem colidir,
     ver rodada anterior); voltando a 700 (Bold, traços bem mais grossos),
     manter o mesmo aperto arrisca colidir os traços verticais das letras
     vizinhas — mesmo princípio já documentado na REVISÃO 13 ("peso maior
     pede tracking mais aberto"). -0.014em fica mais fechado que o h1 (peso
     600, -0.012em) e mais fechado que o h2 original em 700
     (-0.008em, calibrado para o tamanho ANTES de dobrar) — precedente:
     tamanho maior ainda pede algo mais fechado que esses dois, mas não tão
     fechado quanto o -0.022em que só era seguro em peso Regular.
     line-height (1.18) e transform: scaleY(1.12) NÃO foram tocados — o
     pedido desta rodada foi especificamente sobre peso/boldness, e nenhum
     dos dois eixos depende do peso da fonte (line-height rege a caixa de
     linha para o texto multi-linha já existente; scaleY estica o glifo
     verticalmente, efeito geométrico independente da espessura do traço).
     Oswald em peso 700 é um corte REAL da família (não sintetizado), então
     não há motivo para recalibrar a faixa "prudente" de scaleY (1.03-1.15,
     pesquisa researchdude) — ela foi definida para a família como um todo,
     não peso a peso.
     Contraste/acessibilidade: peso mais alto só aumenta a legibilidade
     contra o piso WCAG de "texto grande" já folgadamente atendido (ver nota
     anterior); cor não tocada.
     Nota honesta sobre hierarquia: esta mudança faz o h2 (700, ~68-93px)
     ficar visualmente MAIS pesado E maior que a própria hero (500, ~35-54px)
     — inverte o princípio "hero = elemento de maior peso do sistema"
     documentado em rodadas anteriores. Isso é uma consequência direta e
     esperada do pedido explícito desta rodada (reequilibrar o h2 para não
     parecer fraco perto da hero, dado que ele já é fisicamente maior); não
     foi pedido para tornar a hero mais pesada também, então não toquei nela
     — mas registro a inversão de hierarquia aqui para o dono do produto
     avaliar se quer revisitar a hero numa rodada futura. */
  /* REVISÃO (letterman) — PEDIDO DO DONO DO PRODUTO: itálico em TODOS os h2
     da home, sem afetar as outras 15 páginas do site (que continuam usando a
     regra global "h2{}" sem itálico). Mesmo mecanismo de escopo já em uso
     nesta mesma regra (classe "pagina-home" no <body>, só presente em
     index.html) — só adiciono font-style aqui, sem tocar em nenhuma outra
     propriedade já calibrada (peso, tamanho, tracking, line-height, scaleY).
     Nota de escopo, para não confundir com a rodada seguinte deste arquivo:
     este h2 é TÍTULO DE SEÇÃO (ex. "O que você ganha com a análise de SEO"),
     elemento diferente dos títulos de CARD dentro da grade
     (.beneficios__item-title/.processo__item-title/.mds__term/
     .preview-card__title/.preview-card__item-title, ver blocos deles mais
     abaixo) — aqueles títulos de card estão fazendo o movimento CONTRÁRIO
     nesta mesma rodada (perdendo itálico, ganhando a serifada Newsreader),
     então as duas mudanças não devem ser confundidas nem aplicadas ao
     seletor errado.
     Corte itálico: Oswald no Google Fonts não tem eixo itálico real (a
     família só oferece corte normal em qualquer peso, confirmado no <link>
     de fontes de index.html, que já lista só "Oswald:wght@400;500;600;700"
     sem "ital"). Sem corte real disponível, o navegador sintetiza um slant
     algorítmico sobre o corte normal — mesmo tipo de compromisso que este
     arquivo já aceitou alhures quando não havia alternativa (diferente dos
     títulos de card, onde cortes itálicos reais foram pedidos ao Google
     Fonts especificamente para evitar isso, ver comentário histórico logo
     abaixo). Não há hoje uma "Oswald Italic" real para trocar; sintetizado é
     a única forma de atender ao pedido nesta família. Contraste/tamanho não
     mudam com itálico (é só inclinação do traço) — o piso WCAG de "texto
     grande" já folgadamente atendido (ver notas de contraste no histórico
     acima) continua válido sem revalidação. */
  /* REVISÃO (letterman) — PEDIDO DO USUÁRIO: troca de cor entre o H2 de
     seção e o título dos cards da home, só no modo claro. Antes desta
     rodada este h2 não definia "color" aqui, herdando var(--color-text-heading)
     (#211E1A) da regra global "h1, h2, h3{}". Esse mesmo token/valor é
     exatamente o que os 5 títulos de card passam a usar agora (ver
     .preview-card__title etc., mais abaixo) — então o H2 recebe, em troca,
     o preto puro que os títulos de card usavam antes (#000000, literal).
     Escopo: [data-theme="dark"] body.pagina-home h2 (mais abaixo, já
     existente) continua definindo --h2-cream-1 para o escuro, com
     especificidade maior (attribute selector + 2 classes + tipo) que esta
     regra — o escuro fica inalterado, não precisou de nenhum override
     novo. */
  body.pagina-home h2 {
    font-weight: 700;
    font-size: calc(var(--fs-h2) * 2);
    font-style: italic;
    letter-spacing: -0.014em;
    line-height: 1.18;
    transform: scaleY(1.12);
    overflow-wrap: break-word;
    color: #000000;
  }

  /* ================================================================
     REVISÃO (colorman) — HISTÓRICO: o bloco abaixo (paleta de 7 tons,
     4 azuis + 3 cremes, um por h2) foi a decisão da rodada anterior,
     descrita no comentário original que se segue. Mantido por inteiro
     como registro do raciocínio, mas HOJE ele está PARCIALMENTE
     REVERTIDO — ver "REVISÃO 2 (colorman)" logo depois deste bloco,
     que é a regra que está de fato em vigor agora.

     REVISÃO (colorman) — PEDIDO DO DONO DO PRODUTO: cada h2 da home
     precisa de uma cor DIFERENTE dos outros, metade em tons de AZUL,
     metade em tons de CREME, SÓ no modo escuro da home (claro
     intocado — nenhuma regra abaixo existe fora de
     "[data-theme="dark"] body.pagina-home").

     LEVANTAMENTO (grep em index.html, feito antes de qualquer decisão
     de cor): existem exatamente 7 elementos <h2> na home, todos com id
     próprio, um por seção —
       1. #aviso-analise-title    ("O que essa análise faz...")
       2. #beneficios-title       ("O que você ganha com a análise de SEO")
       3. #processo-title         ("Como funciona, resumido")
       4. #mds-title               ("Medido, detectado e sugerido")
       5. #sources-title           ("Fontes e transparência")
       6. #planos-teaser-title     ("Quer acompanhar isso ao longo do tempo?")
       7. #faq-teaser-title        ("Ainda com dúvidas?")
     7 é ímpar → uma das duas metades leva um h2 a mais. Fiquei com o
     AZUL como a metade maior (4 azuis / 3 cremes), não por gosto: azul
     é a família ESTRUTURAL do sistema inteiro (--color-brand,
     --color-accent, --color-highlight, --color-accent-tint-on-dark são
     todos H≈204°, o mesmo "azul de sempre" do site), enquanto o creme é
     uma reintrodução pontual e deliberada só para este pedido — ver
     nota "SOBRE O CREME" abaixo. Dar a maioria ao azul mantém o h2 da
     home ancorado na identidade que já existe no resto do produto, e
     usa o creme como contraponto mais raro, exatamente como um acento
     costuma se comportar.

     SELETORES — por que id, não nth-of-type nem classe de seção: os 7
     h2 já têm id único (usado por aria-labelledby/skip-links em outras
     partes do CSS/HTML), então "#id" é o seletor mais estável e legível
     — não depende da ordem no DOM (nth-of-type quebraria se alguém
     reordenar seções) nem presume que toda seção tenha uma classe
     dedicada (algumas têm, ex. .aviso-analise, mas nem todas — usar id
     é consistente para as 7). Cada regra é prefixada com
     "[data-theme="dark"] body.pagina-home" (mesmo mecanismo de escopo
     por classe no <body> já usado no resto do arquivo, ex. "body.
     pagina-home h2" acima e "body.pagina-home::after" do efeito de
     grain — combinado aqui com o atributo de tema, que este projeto
     aplica em <html> via documentElement.setAttribute('data-theme',...),
     não no <body>; por isso o attribute selector vem antes de "body",
     como descendente de <html>) — isso garante: (a) nunca casa fora de
     index.html, porque só o <body> da home tem a classe "pagina-home";
     (b) nunca casa no modo claro, porque a árvore de seletor exige
     data-theme="dark" em <html>. Especificidade de cada regra (1 attr +
     2 classes + 1 id = alta) já vence com folga a regra global
     "body.pagina-home h2" acima (que não define cor) e qualquer --color-
     text-heading herdado do body — sem precisar de !important.

     SOBRE O CREME — o sistema tinha eliminado o creme deliberadamente
     (ver bloco "REVISÃO 11" acima de :root: "--color-bg-page", "--color-
     text-on-accent" e "--color-gradient-start" saíram do creme #FAF4EA/
     #FFF3DB para branco/preto puros, pedido explícito do usuário na
     época). Este pedido aqui é uma exceção pontual e nomeada, pedida
     explicitamente pelo dono do produto para ESTE elemento (h2 da home,
     só no escuro) — não uma reversão daquela decisão, que continua
     valendo para o resto do sistema. Para não "inventar uma cor
     descolada do resto da paleta" (like pedido explicitamente evitar),
     os 3 tons de creme abaixo reaproveitam o MESMO matiz quente (H≈40°)
     que o sistema já usa para os neutros de texto do modo claro
     (--color-text-heading/-body #211E1A é H≈34,3°, --color-text-muted
     #72685A também H≈34,3°, --color-surface-alt/--color-border no claro
     são H≈30°) — ou seja, não é um creme aleatório, é a MESMA família de
     matiz quente que já existe no sistema, só clareada/dessaturada para
     funcionar como cor de destaque (não de texto neutro) sobre fundo
     quase-preto.

     PALETA — duas famílias, cada uma com 3-4 tons DIFERENTES entre si
     (luminosidade variando, mesmo matiz), todas calculadas contra
     --color-bg-dark #0D0E12 (fundo real da home no escuro, atrás do
     grain e do canvas de água — luminância relativa ≈0,0044) com
     contraste mínimo folgado acima de 4,5:1 (texto normal), embora o h2
     já qualifique como "texto grande" (700, ~68-93px, piso 3:1) com
     enorme margem extra:

       AZUL — família H≈204° (mesmo matiz de --color-accent/--color-
       brand/--color-highlight), S≈55%, variando só em L para dar 4 tons
       distintos e ainda assim lidos como "a mesma família de azul":
         --h2-blue-1: #398EC6  (L≈50%, o mais denso/saturado) — 5,35:1
         --h2-blue-2: #59A0CF  (L≈58%) — 6,73:1
         --h2-blue-3: #79B2D8  (L≈66%) — 8,40:1
         --h2-blue-4: #A0C9E3  (L≈76%, o mais claro/suave — vizinho de
                                --color-accent-tint-on-dark #A8D3F0, já
                                usado no sistema como "azul claro sobre
                                painel escuro") — ~11:1+

       CREME — família H≈40° (mesmo eixo de matiz quente de --color-
       text-heading/-muted do modo claro), S≈45%, variando em L para 3
       tons distintos:
         --h2-cream-1: #EEE5D3  (L≈88%, o mais pálido/quase-branco) — ~15,4:1
         --h2-cream-2: #E3D4B5  (L≈80%) — ~13,2:1
         --h2-cream-3: #D8C297  (L≈72%, o mais denso/dourado) — ~11,1:1

     Todos os 7 tons medem bem acima do piso de 4,5:1 contra --color-bg-
     dark (a base mais escura da home) — folga generosa de propósito,
     porque o h2 compete visualmente com o grain e o canvas de água
     animado atrás dele (ver comentários de "body.pagina-home::after" e
     do canvas mais abaixo neste arquivo), então contraste alto ajuda a
     legibilidade em vez de só cumprir o mínimo.

     ATRIBUIÇÃO — alternando azul/creme na ordem do DOM (nunca duas
     seções vizinhas na mesma família), abrindo E fechando a página em
     azul (o rodapé/CTA final também é um painel azul-marinho —
     --color-ink-900/-800 — então terminar o conteúdo em azul antes dele
     é uma transição mais coerente que terminar em creme):
       1. #aviso-analise-title    → --h2-blue-1  (azul denso, abre a home)
       2. #beneficios-title       → --h2-cream-1 (creme pálido)
       3. #processo-title         → --h2-blue-2
       4. #mds-title               → --h2-cream-2
       5. #sources-title           → --h2-blue-3
       6. #planos-teaser-title     → --h2-cream-3 (creme mais denso, o
                                      teaser antes do CTA final)
       7. #faq-teaser-title        → --h2-blue-4  (azul mais claro, fecha
                                      a home logo antes do rodapé azul-
                                      marinho — mesma família, transição
                                      suave)
     Dentro de cada família os tons não seguem uma progressão estrita de
     escuro→claro por seção — foram intercalados (blue-1 denso no
     início, blue-4 claro no fim; cream-1 pálido logo cedo, cream-3
     denso mais tarde) só para os 7 h2 não lerem como uma escada
     previsível ao rolar a página, mantendo ainda assim cada elemento
     visivelmente distinto dos vizinhos. */
  /* REVISÃO 2 (colorman) — PEDIDO DO DONO DO PRODUTO, após ver o resultado
     da rodada acima em produção: ele gostou especificamente da cor que
     calhou de cair em #beneficios-title (--h2-cream-1, o creme pálido) e
     pediu para essa MESMA cor ser usada em TODOS os 7 h2 da home — ou
     seja, abandonar o esquema "uma cor diferente por h2" e usar uma cor
     ÚNICA. Isso é uma reversão parcial da rodada anterior (a ideia de
     "família azul + família creme, todas diferentes" está descartada),
     mas a cor escolhida em si (--h2-cream-1 / #EEE5D3) é a mesma já
     validada contra --color-bg-dark na rodada anterior (~15,4:1 de
     contraste, muito acima do piso de 3:1 para texto grande) — não
     precisou revalidar contraste, só decidir a forma mais limpa de
     aplicar.

     Com uma cor só, as 7 regras por-id da rodada anterior viraram
     redundantes (todas apontavam para tons diferentes; agora todas
     apontariam para o mesmo valor) — simplifiquei para uma única regra
     "[data-theme="dark"] body.pagina-home h2", mesmo escopo de tema/
     página de antes, só sem o id (não há mais motivo para diferenciar
     por elemento). Os tokens --h2-blue-1..4 e --h2-cream-2/-3 ficaram
     sem nenhum h2 usando-os — removidos do :root de escopo abaixo, já
     que o raciocínio de "por que essas cores, calculado contra o fundo"
     continua registrado por escrito no bloco de comentário acima caso
     seja preciso reintroduzir variação no futuro. --h2-cream-1 foi
     mantido como token nomeado (em vez de virar um hex solto na regra)
     porque ainda é reutilizável se mais elementos da home precisarem da
     mesma cor de destaque. */
  [data-theme="dark"] body.pagina-home {
    --h2-cream-1: #EEE5D3;
  }
  [data-theme="dark"] body.pagina-home h2 { color: var(--h2-cream-1); }

  /* REVISÃO 17 (letterman) — REVERTIDO a pedido do usuário: a REVISÃO 16
     (peso 600 → 650) foi desfeita. h3 volta ao peso 600 original. */
  /* REVISÃO 18 (letterman) — PEDIDO DO USUÁRIO: "triplique o tamanho de
     fonte de todos os h3 do site". Multiplicador aplicado direto na
     REGRA (calc(var(--fs-h3) * 3)), não no TOKEN --fs-h3 em si no :root
     — o mesmo mecanismo já usado nas rodadas anteriores deste arquivo
     para h2/h3 escopados à home (ver blocos "REVISÃO" logo abaixo):
     --fs-h3 é consumido por vários elementos que NÃO são <h3> (badge de
     canto, .brand__wordmark-accent, números de step, .mds__term,
     .concept-card__acronym-irmão etc.) e continuam precisando do degrau
     de tamanho "h3" original (24px) para manter a equivalência visual
     documentada com títulos de card — só o SELETOR h3 (e qualquer outro
     que hoje herde font-size diretamente dele) deve triplicar, não o
     token compartilhado.
     1.5rem × 3 = 4.5rem (72px) fixo em qualquer viewport (--fs-h3 não é
     um clamp).
     letter-spacing NÃO foi recalibrado: -0.005em é uma unidade relativa
     (em), então já escala proporcionalmente com o novo font-size sem
     precisar de ajuste manual — o aperto de tracking em px cresce na
     mesma proporção que o texto.
     line-height GANHA uma regra própria (1.15, número puro) em vez de
     continuar herdando var(--lh-heading)/1.3 da regra "h1, h2, h3{}": a
     1.3 era calibrada para um h3 de 24px como TÍTULO DE CARD, onde a
     folga extra ajuda um título curto de 1-2 linhas dentro de uma caixa
     pequena. A 72px — na mesma faixa de tamanho físico do próprio h1
     (--fs-h1 vai de 41px a 64px) — 1.3 produziria ~93,6px de altura de
     linha por linha, folga desproporcional para um título "display" tão
     grande; 1.15 (mesma lógica de --lh-tight/1.2 usada no h1, um pouco
     mais fechado ainda porque h3 não tem o scaleY que o h1/hero usam
     para compensar) mantém a leitura confortável em títulos de 2-3
     palavras que quebram linha sem deixar um vão vazio entre elas.
     margin/padding do próprio h3 NÃO foram tocados (continuam herdando
     margin:0 da regra "h1, h2, h3{}") — o espaçamento do h3 (agora bem
     maior) contra o conteúdo ao redor dentro de cada card é ajuste de
     LAYOUT (gap/padding do container), fora de escopo aqui; sinalizado
     para o layoutman revisar todo lugar que usa <h3> (cards de
     .beneficios/.processo/.step-card/.source-card/.concept-card,
     .plan-card__name, FAQ, etc.).
     Contraste: 72px fixo fica muito acima do piso WCAG de 24px para
     "texto grande" em qualquer peso; cor (--color-text-heading, herdada
     da regra global) não foi tocada. */
  /* REVISÃO (letterman) — CORREÇÃO: a tripicação de tamanho aplicada nas
     rodadas anteriores (REVISÃO 18, calc(var(--fs-h3) * 3) = 72px, mais o
     line-height:1.15 dedicado que essa mudança de tamanho exigiu) foi um
     erro de digitação do usuário — o pedido real era para h4, não h3.
     Revertido para o estado original: font-size volta a var(--fs-h3) sem
     multiplicador (24px), e o line-height próprio foi removido — h3 volta
     a herdar var(--lh-heading)/1.3 da regra "h1, h2, h3{}" acima, como
     antes de qualquer uma dessas rodadas. font-weight (600) e
     letter-spacing (-0.005em) não fizeram parte do erro (já eram os
     valores corretos antes da tripicação) e continuam os mesmos.
     Sobre reaplicar a mesma lógica (×3) em h4, que era o alvo real
     pedido: CONFERIDO via grep em todo o HTML do site (as 15 páginas) —
     não existe NENHUM elemento <h4> no projeto hoje, nem um token
     --fs-h4 no sistema de tipos (:root só define --fs-h1 até --fs-h3 +
     --fs-body/--fs-small/--fs-caption/--fs-eyebrow). Não há, portanto,
     seletor real para triplicar sem inventar um elemento/token que o
     projeto não usa. Nenhuma regra "h4{}" foi criada. Se/quando um <h4>
     for adicionado ao HTML (writerman/layoutman), a mesma lógica documen-
     tada acima para h3 (font-size: calc(TOKEN * 3), line-height dedicado
     mais fechado que o herdado, letter-spacing relativo não recalibrado)
     deve ser aplicada a ele nesse momento — sinalizado para o layoutman. */
  h3 { font-size: var(--fs-h3); font-weight: 600; letter-spacing: -0.005em; }
  /* REVISÃO (letterman) — PEDIDO DO USUÁRIO: "multiplicar o TAMANHO do h3
     por 1,75, só na home". h3 ainda estava na regra global acima (sem
     override de home, diferente de h2/hero já escopados) — mesmo mecanismo:
     "body.pagina-home h3" (1 classe + 2 tipos, especificidade 0,1,2) casa só
     em index.html e vence a regra global "h3{}" (0,0,1) e qualquer regra de
     classe única que só ajuste margin/cor nos títulos de card (ex.
     .beneficios__item-title, .processo__item-title — confirmado por grep
     que nenhuma delas define font-size próprio; herdam de "h3{}", então
     esta regra as alcança do mesmo jeito que alcança um <h3> puro).
     Multipliquei o TOKEN só dentro do seletor escopado (calc(var(--fs-h3) *
     1.75)), não o token --fs-h3 em si no :root — --fs-h3 também é consumido
     por elementos que NÃO são h3 (.brand__wordmark-accent, números de step,
     acrônimos MDS etc., confirmado por grep) espalhados por várias páginas;
     mudar o token afetaria todos eles e vazaria pra fora da home. Este
     approach espelha exatamente o que já foi feito com --fs-h2 → h2 nesta
     mesma rodada (ver regra "body.pagina-home h2" acima).
     --fs-h3 é 1.5rem FIXO (não é um clamp, ao contrário de --fs-h1/--fs-h2)
     — x1.75 = 2.625rem (~42px) fixo em qualquer viewport. Não criei um novo
     clamp aqui: o pedido foi explícito em querer o salto cheio, e como os
     h3 da home vivem dentro de cards com texto que já quebra em várias
     linhas normalmente (títulos como "1. Você informa a URL pública"), o
     risco real não é a fonte ficar grande demais em si, é uma palavra ISOLADA
     mais longa (ex. "Acompanhamento", "transparência") ultrapassar a
     largura de um card estreito em mobile (grid de cards vai a 1 coluna
     ≤480px, ver .beneficios__list/.processo__list) — coberto abaixo com
     overflow-wrap, sem precisar reduzir o tamanho pedido.
     line-height NÃO foi tocado — continua herdando 1.3 (var(--lh-heading))
     da regra "h1, h2, h3{}", que já é generoso o suficiente pra texto que
     quebra em várias linhas (mesmo raciocínio "multi-linha precisa de
     folga" usado no h2/hero acima, só que aqui a folga já existia e não
     precisou de ajuste). Nenhum pedido de alongamento (scaleY) foi feito
     para h3 nesta rodada — só tamanho — então peso/tracking/scaleY do h3
     continuam como estavam.
     Contraste: --fs-h3 x1.75 (42px fixo) fica bem acima do piso de 24px que
     o WCAG exige pra "texto grande", então a folga de contraste só aumenta;
     cor (--color-text-heading, herdada) não foi tocada.
     Espaçamento entre o h3 (agora maior) e o texto abaixo dele em cada card
     é ajuste de LAYOUT (margin/gap), fora do escopo desta revisão — sinalizar
     pro layoutman se algum card ficar apertado com o título maior. */
  /* REVISÃO (letterman) — PEDIDO DO USUÁRIO, 2 partes na mesma rodada:

     1) "Aumente em 3 vezes o tamanho do h3" — troquei o multiplicador de
     ×1.75 (rodada anterior) para ×3 sobre o TOKEN (calc(var(--fs-h3) * 3)),
     mesmo mecanismo já documentado (token multiplicado só dentro do
     seletor escopado à home, --fs-h3 em si no :root não é tocado, porque é
     consumido por outros elementos fora da home/fora de h3 — ver histórico
     acima). --fs-h3 é 1.5rem fixo → ×3 = 4.5rem (72px) fixo em qualquer
     viewport, substituindo o ×1.75 anterior (42px) por completo — não é
     cumulativo, ×3 é o novo valor-alvo pedido agora.
     Confirmado por grep (index.html) que TODO h3 da home é
     .beneficios__item-title ou .processo__item-title (8 ocorrências, 4+4),
     ambos título de card dentro de grid que vai a 1 coluna ≤480px — títulos
     como "3. Regras determinísticas analisam" ou "Acompanhamento" vão
     quebrar em várias linhas com folga a 72px num card mobile estreito,
     então mantive overflow-wrap: break-word como rede de segurança (mesmo
     raciocínio da rodada anterior, ainda válido: evita vazar da tela numa
     palavra isolada mais longa).
     line-height/scaleY: o pedido do usuário foi explícito em dizer que esta
     rodada é só sobre TAMANHO, sem pedir alongamento (scaleY) — h3 continua
     sem esse eixo, diferente de h2/hero. Quanto ao line-height, verifiquei
     se o valor herdado (var(--lh-heading) = 1.3, da regra "h1, h2, h3{}")
     ainda é seguro no novo tamanho: 1.3 numa fonte de 72px dá uma caixa de
     linha de ~93,6px por linha — folga generosa entre linhas mesmo em
     títulos que agora quebram em 3-4 linhas num card estreito, sem risco de
     colisão de ascendentes/descendentes (Oswald, ver família abaixo). Como
     h3 não tem scaleY, não existe o motivo que forçou h2/hero a apertar
     seu line-height para 1.18 (compensar o alongamento vertical do glifo) —
     esse motivo simplesmente não se aplica aqui, então 1.3 permanece
     adequado sem necessidade de ajuste.

     2) "A fonte dos títulos dos Cards devem ser a mesma do h2" — font-family
     adicionado: var(--font-display) (Oswald), a mesma família de
     body.pagina-home h2 (ver regra acima). Confirmado por grep que TODOS os
     h3 da home (as mesmas 8 ocorrências acima) são especificamente títulos
     de card — não existe nenhum h3 "solto" fora desse contexto na home —
     então a troca de família em "body.pagina-home h3" (que já é o seletor
     mais específico que os alcança, vence a regra global "h1, h2, h3 {
     font-family: var(--font-heading) }") cobre exatamente o escopo pedido,
     sem ambiguidade e sem precisar de um seletor de classe separado.
     font-weight NÃO foi tocado — continua herdando 600 (SemiBold) da regra
     global "h3 {}" logo acima. Diferente do h2 (que teve peso reequilibrado
     nesta mesma rodada para 700, ver raciocínio próprio), o pedido aqui foi
     só "mesma FONTE" (família), não "mesmo peso" — títulos de card em
     SemiBold (600) já têm presença clara a 72px e ficar um degrau abaixo do
     h2 (700) preserva a hierarquia de peso h2 > h3 dentro do mesmo sistema
     Oswald, coerente com o princípio já estabelecido no site de pesos
     descendo conforme o elemento é hierarquicamente menor.
     letter-spacing também NÃO foi tocado (segue -0.005em, herdado da regra
     "h3{}" global) — esse valor foi calibrado para Manrope no tamanho
     antigo do h3; como o pedido desta rodada não pediu recalibração de
     tracking e Oswald já é condensada por desenho (menos densa que Manrope
     no mesmo aperto, ver raciocínio idêntico já aplicado ao h1/h2 quando
     migraram pra esta família), -0.005em continua seguro sem colisão visível
     mesmo no tamanho novo — se o dono do produto achar o tracking
     perceptivelmente errado depois de ver renderizado, é um ajuste pontual
     de retorno, não algo que a proporção pedida aqui já force.
     Contraste: --fs-h3 x3 (72px fixo) fica muito acima do piso WCAG de
     texto grande (24px); cor (--color-text-heading, herdada) não tocada.
     Espaçamento entre o h3 (agora bem maior) e o conteúdo do card ao redor
     — e o próprio tamanho da caixa do card — é ajuste de LAYOUT, fora do
     escopo desta revisão; sinalizar para o layoutman revisar depois. */
  /* REVISÃO 18 (letterman) — PEDIDO DO USUÁRIO, 4 partes na mesma rodada,
     duas delas em tensão direta entre si:

     1) "O título do card está muito discrepante do texto dentro dele" —
     título e corpo do MESMO card viviam em extremos opostos da escala:
     72px (×3 sobre --fs-h3) contra 15px (--fs-small em .beneficios__
     item-text/.processo__item-text, ver essas duas regras abaixo). Um
     salto de ~4,8x dentro da mesma caixinha lê como dois sistemas
     tipográficos diferentes colados, não como hierarquia — pedido
     explícito foi "diminua o título e aumente o texto" dos dois lados.

     2) AO MESMO TEMPO, pedido oposto: "quero que o h3 em geral seja bem
     maior" — não é para voltar perto do --fs-h3 base (24px, --root--
     ainda 1.5rem, ver token no :root). As duas partes do pedido só
     coexistem se o multiplicador pousar num meio-termo deliberado: bem
     abaixo do pico de ×3 (72px, que causava a discrepância do item 1),
     mas bem acima de ×1 (24px, que seria "voltar ao tamanho original").
     Escolhi ×2 = 3rem = 48px fixo (dentro da faixa ×1,75–×3 sugerida):
       - Contra o pico (72px): corte de 1/3 no tamanho do título, redução
         real e perceptível — resolve a ponta "diminua o título".
       - Contra o base (24px): o dobro exato do valor original, um salto
         limpo e fácil de justificar ("h3 da home é 2x o h3 do resto do
         site"), não um número arbitrário no meio do intervalo — atende
         com folga a "bem maior em geral" sem reincidir no problema que
         gerou o pedido 1.
     Trocado o multiplicador de ×3 para ×2 sobre o TOKEN (mesmo mecanismo
     já documentado nas rodadas anteriores desta regra: --fs-h3 em si no
     :root não é tocado, só o token multiplicado dentro do seletor
     escopado à home — outros consumidores de --fs-h3 fora daqui, como
     .brand__wordmark-accent e números de step, continuam intactos).

     3) "Diminuir a boldness do título dos cards" — font-weight passa a
     ser definido explicitamente aqui (antes herdava 600 da regra global
     "h3{}"). Oswald no projeto cobre 200-700; escolhi 500 (Medium): um
     degrau visível abaixo do 600 herdado, mas ainda com presença sólida
     o bastante pra ser um título de card a 48px (400/Regular a esse
     tamanho começa a competir em peso visual com o próprio corpo do
     texto abaixo, que é Inter mais denso — ver ajuste do item 1 nas
     regras .beneficios__item-text/.processo__item-text). 500 também
     mantém a hierarquia de peso h2 (700) > h3 da home (500) > h3 global
     do resto do site (600) coerente: o h3 da home é maior em TAMANHO
     que um h3 comum, mas mais leve em PESO — dois eixos resolvendo dois
     pedidos diferentes sem se cancelar.

     4) "Centralizar o texto do título dos cards" — text-align: center
     adicionado explicitamente aqui. Na prática o título já renderizava
     centralizado por herança (.beneficios__item/.processo__item, os
     <li> que envolvem cada h3, já têm text-align: center — ver essas
     duas regras mais abaixo), e os cards não têm ícone nem qualquer
     elemento alinhado à esquerda que colidiria com um título centralizado
     (confirmado no HTML: cada <li> só tem h3 + p + painel oculto de
     texto extra, todos já centralizados do mesmo jeito) — não há
     "quebra de alinhamento com ícone/texto de corpo" a evitar aqui, os
     três elementos do card já vivem no mesmo eixo central. Tornar
     explícito em vez de depender só da herança documenta a intenção e
     protege contra o dia em que alguém mude o text-align do <li> pai
     sem perceber que o título dependia dele.

     line-height/scaleY continuam sem mudança nesta rodada (pedido foi
     tamanho, peso e alinhamento — não densidade vertical); 1.3 herdado
     (var(--lh-heading)) segue folgado o bastante pra título multi-linha
     mesmo a 48px. letter-spacing também sem mudança (-0.005em herdado).
     Contraste: 48px fixo, bem acima do piso WCAG de 24px pra "texto
     grande" mesmo no peso mais leve (500); cor (--color-text-heading,
     herdada) não foi tocada.
     Espaçamento do card ao redor do título (agora menor que antes) é
     ajuste de LAYOUT — sinalizar pro layoutman se o respiro ficar
     desproporcional com o título recuado de 72px para 48px. */
  /* REVISÃO (letterman) — pedido atual é "triplique TODOS os h3 do
     site", sem exceção de página. Esta regra escopada à home tinha seu
     PRÓPRIO multiplicador (×2 sobre --fs-h3, 48px) herdado de rodadas
     anteriores só desta página. Tripliquei esse valor JÁ RENDERIZADO
     (48px × 3 = 144px) em vez de compor um novo ×3 em cima do ×2
     existente (o que daria ×6/216px): "triplicar o h3" deve significar o
     mesmo salto relativo em toda página, e 144px já deixa o h3 da home
     bem acima até do próprio h1 do site (--fs-h1 teto 64px) — ir a 216px
     estouraria qualquer card sem necessidade, sem pedido explícito para
     isso. calc(var(--fs-h3) * 6) preserva o mesmo mecanismo de token não
     tocado no :root (ver histórico acima) e mantém registrado que o
     valor final é 2× o h3 global (72px) × 3, não um número solto.
     line-height dedicado (1.05, mais fechado que o 1.15 do h3 global)
     porque títulos de card na home viram texto essencialmente do
     tamanho de um h1 dentro de uma caixa muito mais estreita — em 144px
     um leading de 1.15 ainda deixaria vão perceptível entre as 2-3
     linhas que esses títulos ("1. Você informa a URL pública") vão
     quebrar num card. overflow-wrap:break-word mantido como rede de
     segurança (mesmo raciocínio já documentado nas rodadas anteriores
     desta regra — ainda mais necessário agora, com o tamanho triplicado).
     Espaçamento do card ao redor (título agora MUITO maior) é ajuste de
     LAYOUT — sinalizado com urgência para o layoutman revisar
     .beneficios__item/.processo__item antes de considerar a home
     terminada. */
  /* REVISÃO (letterman) — CORREÇÃO: mesmo erro de digitação do usuário
     descrito na regra "h3{}" acima (era para ser h4, não h3) se propagou
     também para este seletor escopado à home, que chegou a
     calc(var(--fs-h3) * 6) = 144px com line-height:1.05 dedicado.
     Revertido: font-size volta a var(--fs-h3) simples (24px, sem
     multiplicador), e o line-height dedicado foi removido — volta a
     herdar var(--lh-heading)/1.3 da regra global "h1, h2, h3{}", igual
     ao h3 fora da home agora. font-family (Oswald/--font-display),
     font-weight (500), text-align (center) e overflow-wrap não fazem
     parte do erro de digitação (decisões independentes de pedidos
     anteriores do usuário sobre título de card) e foram mantidos. */
  body.pagina-home h3 {
    font-family: var(--font-display);
    font-size: var(--fs-h3);
    font-weight: 500;
    text-align: center;
    overflow-wrap: break-word;
  }
  /* REVISÃO (letterman) — o bugfix de especificidade que existia aqui
     (repetir o seletor com 0,2,2 só pra forçar "Newsreader" sobre a regra
     "body.pagina-home h3" acima, que já usava var(--font-display)) não é
     mais necessário: pedido do usuário trocou .beneficios__item-title e
     .processo__item-title de "Newsreader" para var(--font-display) — o
     mesmo valor que "body.pagina-home h3" já aplica. As duas regras agora
     concordam, então o override foi removido (não apenas comentado) para
     não deixar um seletor morto/confuso referenciando uma fonte que os
     títulos de card não usam mais. */

  /* PEDIDO DO USUÁRIO — "aplicar Lora nos textos que hoje usam San
     Francisco". Investigação: -apple-system/BlinkMacSystemFont/"SF Pro
     Display"/"SF Pro Text" só existem como FALLBACK (2º/3º elo) dentro de
     --font-heading e --font-body (ver :root) — nunca como fonte primária
     de nenhum seletor (confirmado por grep) — e nunca chegam a renderizar
     de fato, porque Manrope/Inter (as fontes primárias desses dois
     tokens) carregam com sucesso via Google Fonts neste site. Esclarecido
     com o usuário: a intenção real é o texto que hoje renderiza em Inter
     (var(--font-body)) — provavelmente confundido com SF Pro por
     semelhança visual (as duas são grotescas humanistas de sistema/UI).

     Escopo: SÓ index.html (pedido explícito), via o mesmo mecanismo
     "body.pagina-home <seletor>" já usado por h1/h2/h3 acima — não o
     token --font-body em si, que é compartilhado por todo o site (site-
     header, footer, formulários, badges, nav, botões, e as 15 outras
     páginas) e continua Inter em toda parte, inclusive nesta mesma
     página. Não criei um novo token (--font-body-home ou similar) porque
     nenhuma outra propriedade além de font-family muda aqui — um alias
     de token só para isso seria indireção sem ganho.

     Lista de seletores: só texto de CORPO/parágrafo de conteúdo — a
     leitura corrida das seções (hero, painéis de nota, leads dos 3 grids
     de card e o texto de apoio dentro de cada item, incluindo os blocos
     "saiba mais" expansíveis, a legenda/detalhe do preview-card do hero,
     e o texto do bloco de transição de funil). NÃO incluídos aqui
     (permanecem Inter/var(--font-body), sem override): nav, botões,
     badges, rótulos de formulário, inputs, links de ação ("Ver os
     planos →" etc.), eyebrows, header/footer (marca, navegação, contato,
     textos legais) e o aviso fixo de demonstração — esses são CHROME de
     UI/navegação, não texto de leitura, e aparecem idênticos nas outras
     15 páginas; misturar Lora só ali no meio da home criaria uma
     inconsistência de marca entre página e página pior que a que este
     pedido tenta resolver. Se o usuário quiser Lora nesses elementos
     também, é um pedido à parte — não assumi aqui.

     Pesos: 400 (a maioria dos parágrafos, ex. .mds__definition/
     .preview-card__item-detail/.sources-block__text/os 3 "...-more-
     text") e 500 (os parágrafos que já usam font-weight:500 no sistema —
     .hero-description/.aviso-analise__text/.mds__intro/.planos-teaser__
     text/.faq-teaser__text/.next-step__text — trocar a família não muda o
     peso que cada um já tinha). Nenhum weight novo foi inventado, só os
     dois que este grupo de seletores já consome. <link> do Google Fonts em
     index.html atualizado para carregar Lora:wght@400;500.

     Dark mode: sem override dedicado — nenhuma destas regras jamais teve
     font-family redeclarado em [data-theme="dark"] (só cor, nas poucas que
     têm override de tema), então o escuro herda a mesma troca de família
     sem necessidade de duplicar nada; cores/contraste de cada seletor,
     já resolvidos pelo colorman, continuam intocados. */
  body.pagina-home .hero-description,
  body.pagina-home .preview-card__item-detail,
  body.pagina-home .preview-card__caption,
  body.pagina-home .aviso-analise__text,
  body.pagina-home .beneficios__item-text,
  body.pagina-home .beneficios__item-more-text,
  body.pagina-home .processo__item-text,
  body.pagina-home .processo__item-more-text,
  body.pagina-home .mds__intro,
  body.pagina-home .mds__definition,
  body.pagina-home .mds__item-more-text,
  body.pagina-home .sources-block__text,
  body.pagina-home .planos-teaser__text,
  body.pagina-home .faq-teaser__text {
    font-family: "Lora", serif;
  }
  /* CORREÇÃO (letterman) — .next-step__text REMOVIDO desta lista: pedido do
     usuário foi que este texto específico use a MESMA font-family dos h2 do
     site (var(--font-display), Oswald — ver regra ".next-step__text" na
     seção "Próximo passo", mais abaixo). Esta regra "body.pagina-home ..."
     tem especificidade maior que a regra base ".next-step__text" sozinha e
     continuaria vencendo na home (onde o card "Quer entender mais" vive) se
     .next-step__text permanecesse aqui, silenciando a troca pedida. Os
     outros 13 seletores do grupo não foram tocados — Lora continua a
     família de leitura da home para eles. */

  p { margin: 0; }

  a { color: inherit; }

  :focus-visible {
    outline: 2px solid var(--color-focus-ring);
    outline-offset: 2px;
  }

  .skip-link {
    background-color: var(--color-accent);
    color: var(--color-text-on-accent);
    font-family: var(--font-body);
    font-weight: 600;
    font-size: var(--fs-small);
  }

  /* ---------- Header ----------
     REVISÃO N (layoutman) — o header nunca mostra um fundo COLORIDO/
     chapado tipo marca (era um gradiente rosa que revelava gradualmente
     via .site-header__bg + a variável --header-scroll, ver histórico
     abaixo). A camada .site-header__bg foi removida inteiramente (regra
     CSS + o <div> correspondente nas 7 páginas — confirmado por grep que
     nada mais dependia dela).
     --header-scroll e a classe .is-scrolled continuam sendo calculados
     em theme.js exatamente como antes (ver lá) — só deixaram de ser
     usados para pintar algo aqui; ainda são o SINAL DE ESTADO que aciona
     o comportamento "ocioso" de 4s (ver bloco "Header ocioso" mais
     abaixo, que só ativa depois que a página já foi rolada).
     Cor do texto: a sobrescrita .site-header.is-scrolled { color: #3A1533 }
     existia só porque o texto precisava de um tom fixo legível sobre o
     gradiente rosa que está sendo removido — sem fundo colorido nunca
     mais, essa sobrescrita não faz mais sentido e foi removida. O texto
     do header usa sempre var(--color-text-heading) (herdado de
     .site-header), já calibrado nos dois temas claro/escuro, sem nenhum
     estado especial de "rolado".

     Histórico (contexto, não mais válido): antes disso, --header-scroll
     media 0→1 o progresso do scroll e .site-header__bg (uma camada em
     linear-gradient(90deg, var(--color-gradient-start), var(--color-
     gradient-end))) usava opacity: var(--header-scroll) para revelar
     gradualmente um fundo rosa. Essa técnica inteira foi removida por
     pedido explícito do usuário numa rodada anterior.

     REVISÃO N+1 (layoutman) — pedido do usuário desta rodada: com o
     header fixo (position: sticky) e fundo transparente, o texto da
     página por trás dele "poluía a visão" ao rolar (ficava visível
     atravessando o header). Fundo trocado de transparent para
     var(--color-header-bg) (o próprio --color-surface com alfa ~0.72,
     não uma cor nova) + backdrop-filter: blur(12px), para desfocar SÓ o
     que está atrás do header — o texto/logo do próprio header não é
     afetado por backdrop-filter (a propriedade borra o que fica por trás
     do elemento, não o conteúdo dele). -webkit-backdrop-filter incluído
     para Safari. Fallback: navegadores sem suporte a backdrop-filter
     (raro em 2026) simplesmente mostram --color-header-bg semi-opaco sem
     o blur — ainda reduz a poluição visual, só sem o desfoque. */
  .site-header {
    background-color: var(--color-header-bg);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    color: var(--color-text-heading);
  }

  /* REVISÃO (letterman) — wordmark reconstruído como texto+CSS, substituindo
     <img class="brand__logo" src="assets/logo.png"> nas 7 páginas (o PNG
     tinha fundo em gradiente rosa/magenta chapado, incompatível com a nova
     paleta "Céu e Areia" e com o pedido de fundo transparente). Nome da
     marca mudou para "FirstPageAI"; a gramática visual de duas partes do
     PNG antigo foi preservada — só a palavra mudou:
       .brand__wordmark-primary = "FirstPage", sans bold caixa alta
       .brand__wordmark-accent  = "AI", serifado itálico, cor de destaque
     Markup novo (header e rodapé, mesma estrutura nos dois):
       <span class="brand__wordmark">
         <span class="brand__wordmark-primary">FirstPage</span><span class="brand__wordmark-accent">AI</span>
       </span>
     Sem pill/box/gradiente atrás — fundo sempre transparente, herda o fundo
     real por trás (página branca no header, --color-ink-900 no rodapé).
     .brand__logo (height:36px/width:auto, regra da img antiga) e a
     sobrescrita mobile em @media (max-width:480px) ficam órfãs e foram
     substituídas pelas regras abaixo — nenhuma página mais referencia
     .brand__logo depois desta rodada (confirmado via grep). */
  .brand__wordmark {
    display: inline-flex;
    align-items: baseline;
    gap: 0.05em;
    line-height: 1;
  }
  /* "FirstPage" — var(--font-heading) é a pilha de sistema (-apple-system/
     BlinkMacSystemFont/SF Pro Display/SF Pro Text/system-ui/...), a mesma
     SF Pro que o PNG antigo usava na primeira metade do wordmark — não
     precisa de família nova. Peso 700 (não 800/900): mantém o mesmo teto de
     peso já documentado na REVISÃO 7 deste bloco ("wordmark não pode ficar
     mais pesado que h1, que já é o teto de peso do sistema por escolha
     deliberada") — a diferenciação de "isto é a marca" vem de caixa alta +
     tamanho (--fs-h3, reaproveitando o degrau já usado pelo wordmark
     anterior) + tracking positivo (0.02em, mais suave que o 0.04em dos
     badges/eyebrow — a marca precisa de menos abertura que um rótulo
     pequeno em --fs-eyebrow para não ficar com cara de "etiqueta técnica").
     color: currentColor herda .site-header { color: var(--color-text-heading) }
     no cabeçalho (16,59:1 sobre a página branca, já calibrado pelo
     colorman) — no rodapé, sobrescrita dedicada logo abaixo. */
  /* REVISÃO (letterman) — PEDIDO DO USUÁRIO: a logo (wordmark do header/
     rodapé) passa a usar a MESMA família da hero (--font-display, Oswald
     condensada + fallback --font-heading/Manrope), não mais var(--font-
     heading) puro. Só a família muda aqui — peso/tamanho/tracking/cor
     continuam os mesmos already calibrados (700, --fs-h3, 0.02em,
     currentColor); a marca não precisa do mesmo peso/tamanho da hero, só
     precisar herdar o mesmo "sotaque" tipográfico dela, para reforçar
     que o wordmark e o título de maior impacto do site pertencem ao
     mesmo sistema. Oswald é condensada e já é usada em caixa alta no
     resto do sistema sem perda de legibilidade (badges/eyebrows), então
     "FirstPage" em caixa alta + Oswald continua legível no tamanho do
     header. */
  /* REVISÃO (letterman) — PEDIDO DO USUÁRIO: a logo (wordmark, as duas
     metades) passa a itálico. font-style: italic adicionado aqui e em
     .brand__wordmark-accent abaixo; fonte, peso e cor de cada span
     preservados exatamente como já calibrados (Oswald tem corte itálico
     real até 700, então não é itálico sintético). */
  .brand__wordmark-primary {
    font-family: var(--font-display);
    font-weight: 700;
    font-style: italic;
    text-transform: uppercase;
    font-size: var(--fs-h3);
    letter-spacing: 0.02em;
    color: currentColor;
  }
  /* "AI" — REVISÃO (letterman): var(--font-highlight) (Source Serif 4
     itálico) foi removido junto com a reescrita do sistema tipográfico —
     ver bloco grande no :root. "AI" continua na MESMA família do resto do
     wordmark (--font-heading, Manrope) — não muda mais de família nem de
     postura (sem itálico) — e se diferencia por PESO (800, ExtraBold real
     da Manrope, um degrau acima do 700 do "FirstPage" ao lado, dentro do
     próprio eixo variável, sem síntese), TAMANHO (mantido, 1.75rem vs
     1.375rem do primary — a mesma relação "nitidamente maior e com mais
     presença" que o PNG antigo tinha entre as duas metades) e COR
     (var(--color-highlight) inalterada). Três eixos de diferença sem
     precisar de uma segunda família: peso, tamanho, cor.
     Contraste: --color-highlight mede 3,11:1 sobre branco — abaixo do piso
     de 4,5:1 de texto normal, mas dentro do piso de 3:1 de texto GRANDE/
     negrito (aqui: 28px E peso 800, cruza os dois critérios do WCAG 1.4.3
     com folga, igual ou mais folgado que antes já que 800 é ainda mais
     "negrito" que o 700 anterior). Rodapé: sobrescrita dedicada abaixo
     (mesmo motivo do primary, #5299C9 sobre --color-ink-900 também passa
     longe de 3:1, mas troquei para --color-accent-tint-on-dark, token já
     calibrado especificamente para "texto/link claro sobre fundo escuro do
     rodapé", 8,38:1 — mais consistente com o resto do sistema no rodapé do
     que reusar o literal). */
  /* REVISÃO (letterman) — mesma mudança de família do primary acima
     (--font-heading -> --font-display, para casar com a hero). Peso
     ajustado de 800 para 700: Oswald (a família nova de --font-display)
     só tem cortes reais até 700/Bold — não existe um corte 800/ExtraBold
     desenhado nela, então pedir 800 geraria negrito sintético (o
     navegador infla o 700 artificialmente), que fica visualmente pior
     que um 700 real. A diferenciação de "AI" frente a "FirstPage" ao
     lado continua garantida pelos outros dois eixos já calibrados
     (tamanho 1.75rem vs. --fs-h3/1.5rem, e cor var(--color-highlight)),
     então perder o degrau de peso entre 700 e 800 não enfraquece o
     contraste visual entre as duas metades do wordmark. */
  .brand__wordmark-accent {
    font-family: var(--font-display);
    font-weight: 700;
    font-style: italic;
    font-size: 1.75rem;
    line-height: 1;
    color: var(--color-highlight);
  }
  /* Rodapé (fundo --color-ink-900, escuro) — currentColor do primary
     herdaria --color-text-on-brand-muted (rgba(255,255,255,0.82), pensado
     pra texto CORRIDO, não pra identidade de marca), então a marca ganha
     sobrescrita própria com o tom pleno --color-text-on-brand (#FFFFFF,
     11,55:1 sobre --color-ink-900 — REVISÃO 11 (colorman): era o creme
     #FAF4EA, 12,16:1 sobre o --color-ink-900 daquela época; ver bloco
     "REVISÃO 11" acima de :root) — mesmo padrão que
     .footer-nav__title/.footer-contact__title já usam pra títulos vs. texto
     corrido, só que aqui é a própria marca. */
  .site-footer .brand__wordmark-primary {
    color: var(--color-text-on-brand);
  }
  .site-footer .brand__wordmark-accent {
    color: var(--color-accent-tint-on-dark);
  }

  /* REVISÃO — três estados usando currentColor (herdado de .site-header,
     ver nota acima) em vez de branco fixo, para funcionar tanto no topo
     transparente (claro/escuro) quanto sobre o gradiente da logo depois
     do scroll. */
  .site-nav__link {
    font-family: var(--font-body);
    font-weight: 500;
    font-size: var(--fs-small);
    color: currentColor;
    opacity: .72;
    transition: opacity .15s ease, color .15s ease;
  }
  /* REVISÃO 11 (letterman) — PEDIDO DO USUÁRIO: link de navegação precisa
     sinalizar "isto leva a outra página" também por COR no hover/foco, não
     só opacidade. --color-accent-on-dark é o token que o colorman já
     mantém calibrado para "azul de Ação em cima de uma superfície que
     muda de tema" (aqui, --color-header-bg) — nenhuma cor nova. Peso 600
     (era 500 fixo) soma um segundo sinal não-colorido só no hover; ver
     bloco "REVISÃO 11" no topo do arquivo, item 3. */
  .site-nav__link:hover,
  .site-nav__link:focus-visible {
    opacity: 1;
    color: var(--color-accent-on-dark);
    font-weight: 600;
    text-decoration: underline;
  }

  /* Estado "página atual" — navegação multi-página (cada seção agora é
     uma página própria). */
  .site-nav__link[aria-current="page"] {
    color: currentColor;
    opacity: 1;
    font-weight: 700;
    text-decoration: underline;
  }

  /* ---------- Botão de tema (sol/lua) ----------
     Ícones minimalistas outline (currentColor, sem cor própria — "sem
     cor" pedido pelo usuário), sobrepostos e cross-fade com rotação
     entre si conforme [data-theme] no <html>. theme.js só troca o
     atributo; a animação é inteiramente CSS. */
  .theme-toggle {
    position: relative;
    width: 36px;
    height: 36px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: none;
    border-radius: 50%;
    background: transparent;
    color: currentColor;
    cursor: pointer;
    flex: none;
  }
  .theme-toggle:hover { opacity: .8; }
  .theme-toggle__icon {
    position: absolute;
    inset: 0;
    margin: auto;
    width: 20px;
    height: 20px;
    transition: opacity .4s ease, transform .5s cubic-bezier(.4,0,.2,1);
  }
  .theme-toggle__icon--sun {
    opacity: 1;
    transform: rotate(0deg) scale(1);
  }
  .theme-toggle__icon--moon {
    opacity: 0;
    transform: rotate(-90deg) scale(.4);
  }
  :root[data-theme="dark"] .theme-toggle__icon--sun {
    opacity: 0;
    transform: rotate(90deg) scale(.4);
  }
  :root[data-theme="dark"] .theme-toggle__icon--moon {
    opacity: 1;
    transform: rotate(0deg) scale(1);
  }

  /* ---------- Botão hamburger (menu mobile) ----------
     REVISÃO (layoutman) — pedido do usuário: abaixo de 860px a .site-nav
     inteira sumia (display:none, ver bloco "@media (max-width: 860px)"
     mais abaixo), deixando os 5 links de navegação inacessíveis exceto
     rolando até o rodapé (.footer-nav, que tem os mesmos links). Este
     botão (.nav-toggle, só visível ≤860px, ver media query) abre
     .site-nav__list como um painel solto abaixo do header — a
     implementação do painel em si fica junto da regra @media já
     existente, para manter as duas coisas (esconder nav horizontal /
     mostrar painel vertical) juntas no mesmo lugar.
     Mesma caixa 36-40px e mesmo padrão visual de .theme-toggle acima
     (círculo, transparent, currentColor, sem cor própria) — ícone de
     hambúrguer em CSS puro (3 barras via ::before/::after), sem SVG novo,
     que gira para "X" via [aria-expanded="true"], só CSS (JS só troca o
     atributo aria-expanded, igual ao padrão de theme.js/themeToggle
     acima). Cor: currentColor herdado de .site-header, mesmo token que
     .brand__wordmark/.site-nav__link/.theme-toggle já usam — nenhuma cor
     nova. */
  .nav-toggle {
    display: none;
    width: 40px;
    height: 40px;
    align-items: center;
    justify-content: center;
    border: none;
    border-radius: var(--radius-sm);
    background: transparent;
    color: currentColor;
    cursor: pointer;
    flex: none;
    grid-column: 2;
    justify-self: center;
  }
  .nav-toggle:hover { opacity: .8; }
  .nav-toggle__icon {
    position: relative;
    display: block;
    width: 20px;
    height: 2px;
    border-radius: 2px;
    background-color: currentColor;
    transition: transform .2s ease, background-color .2s ease;
  }
  .nav-toggle__icon::before,
  .nav-toggle__icon::after {
    content: "";
    position: absolute;
    left: 0;
    width: 20px;
    height: 2px;
    border-radius: 2px;
    background-color: currentColor;
    transition: transform .2s ease, top .2s ease;
  }
  .nav-toggle__icon::before { top: -6px; }
  .nav-toggle__icon::after { top: 6px; }
  .nav-toggle[aria-expanded="true"] .nav-toggle__icon {
    background-color: transparent;
  }
  .nav-toggle[aria-expanded="true"] .nav-toggle__icon::before {
    top: 0;
    transform: rotate(45deg);
  }
  .nav-toggle[aria-expanded="true"] .nav-toggle__icon::after {
    top: 0;
    transform: rotate(-45deg);
  }
  @media (prefers-reduced-motion: reduce) {
    .nav-toggle__icon,
    .nav-toggle__icon::before,
    .nav-toggle__icon::after {
      transition: none;
    }
  }

  /* ---------- Botões ---------- */
  /* REVISÃO letterman — pedido do usuário: reduzir o tamanho da fonte dos
     botões do site. A rodada anterior (comentário substituído aqui) tinha
     subido a base de --fs-small (15px) para --fs-body (17px) para o botão
     não ler MENOR que o texto de apoio logo acima dele. Esse risco de
     inversão de hierarquia é real principalmente no CTA primário do hero
     (que já ganha reforço próprio abaixo, em .hero-form .btn--primary) —
     nos ~15 outros usos de .btn/.btn--secondary/.btn--nav do site (nav,
     retry, "Ver resultado", planos etc.) o botão não está sempre
     precedido de um --fs-body-lg/--fs-body imediatamente acima, então
     descer um degrau na escala já existente (--fs-small, 15px, mesmo
     token reaproveitado em vários outros componentes do site — sem valor
     solto novo) é seguro. font-weight (600) e padding (10px 20px, ver
     bloco de LAYOUT) ficam intocados — só o tamanho desce. */
  .btn {
    border: 1px solid transparent;
    font-family: var(--font-body);
    font-weight: 600;
    font-size: var(--fs-small);
    letter-spacing: 0;
    line-height: 1.2;
  }

  /* Destaque exclusivo do CTA primário do hero ("Analisar página grátis",
     dentro do form) — escopado por .hero-form em vez de uma classe nova
     no HTML, pra não editar index.html. .btn--primary sozinho é reusado
     em ~15 outros botões do site (nav, retry, "Ver resultado" etc.) que
     não devem herdar este reforço.
     REVISÃO letterman (mesma rodada da redução acima) — descido de
     --fs-body-lg (18px) para --fs-body (17px), um degrau abaixo, na mesma
     proporção que a base .btn desceu (--fs-body → --fs-small). Mantém a
     distância relativa entre o CTA de conversão do hero e os demais
     botões do site (ainda maior + peso 700, ainda o elemento de maior
     ênfase da tela), só que em tamanho absoluto reduzido, como pedido. */
  .hero-form .btn--primary {
    font-size: var(--fs-body);
    font-weight: 700;
    letter-spacing: -0.005em;
  }

  .btn--primary {
    background-color: var(--color-accent);
    color: var(--color-text-on-accent);
    border-color: var(--color-accent);
    box-shadow: none; /* REVISÃO 3 — referência real usa contraste de cor, não elevação, nem em botões */
  }
  .btn--primary:hover {
    background-color: var(--color-accent-hover);
    border-color: var(--color-accent-hover);
    box-shadow: 0 2px 6px rgba(44, 101, 140, 0.22); /* REVISÃO 9 (colorman) — RGB decimal atualizado pro novo --color-text-link/--color-brand-dark (44,101,140 = #2C658C; era 179,0,86 = #B30056, rosa da REVISÃO 7) — ver PARTE 14 do bloco "REVISÃO 9" acima de :root */
  }
  .btn--primary:active {
    background-color: var(--color-accent-active);
    border-color: var(--color-accent-active);
    box-shadow: none;
  }
  .btn--primary:disabled,
  .btn--primary[aria-disabled="true"] {
    background-color: var(--color-disabled-bg);
    border-color: var(--color-disabled-border);
    color: var(--color-disabled-text);
    box-shadow: none;
  }

  /* REVISÃO N+2 (layoutman) — pedido do usuário: todos os "botões azuis"
     devem usar a MESMA cor do .btn--primary ("Ver como funciona"), que é
     var(--color-accent) #31709B. .btn--secondary usava uma cor de texto de
     uma família de token separada (--color-brand-dark #2C658C — próxima,
     mas não idêntica) e uma borda neutra cinza em repouso; trocado para
     var(--color-accent) em texto E borda, para que o outline já leia como
     "o mesmo azul do botão sólido", não uma cor parecida porém diferente. */
  .btn--secondary {
    background-color: var(--color-surface);
    color: var(--color-accent-on-dark); /* era var(--color-accent) direto — sobre --color-surface, que muda de tema, precisa do token dedicado (ver nota em --color-accent-on-dark no bloco [data-theme="dark"]) */
    border-color: var(--color-accent-on-dark);
  }
  .btn--secondary:hover {
    background-color: var(--color-accent-tint);
    border-color: var(--color-accent-hover);
    color: var(--color-accent-hover);
  }
  .btn--secondary:active {
    background-color: var(--color-accent-tint-strong);
    border-color: var(--color-accent-active);
    color: var(--color-accent-active);
  }
  .btn--secondary:disabled,
  .btn--secondary[aria-disabled="true"] {
    background-color: var(--color-surface);
    border-color: var(--color-disabled-border);
    color: var(--color-disabled-text);
  }

  /* ---------- Hero ---------- */
  /* Fundo sólido, igual ao resto da página — nada de gradiente cobrindo
     a seção. No modelo Notion o "calor" vem da tipografia/copy/ilustração,
     não de uma cor de fundo saturada atrás do texto.
     REVISÃO (layoutman) — background-color removido (era var(--color-bg-page),
     idêntico ao próprio body, então era 100% redundante em qualquer navegador).
     Ver bloco "---------- Camada decorativa 'lava lamp' ----------" no fim
     deste arquivo: a nova camada de fundo fixa (position:fixed, atrás de
     todo o conteúdo em fluxo normal) só consegue aparecer atrás desta seção
     se a seção não repintar por cima com a mesma cor sólida — resultado
     visual idêntico ao de antes onde a camada de blobs não alcança (mesma
     cor, mesmo valor), e a "respiração" do efeito aparece onde ela alcança.
     Nenhum token de cor foi alterado, só a repetição da pintura removida. */

  /* Badges continuam em caixa alta (é um recurso visual útil pra
     sinalizar "isto é um rótulo, não uma frase"). Tracking positivo
     (0.04em) em vez do 0.02em da fase anterior: --fs-eyebrow é 12px,
     exatamente o limiar que a Apple usa como referência para abrir o
     tracking em texto pequeno (abaixo de ~12pt, tracking positivo
     ajuda a legibilidade de caixa alta) — o mesmo valor já usado em
     .concept-card__acronym e nos títulos do rodapé, agora unificado. */
  .badge {
    border: 1px solid transparent;
    font-family: var(--font-body);
    font-weight: 600;
    font-size: var(--fs-eyebrow);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    line-height: var(--lh-small);
  }

  .badge--prelaunch {
    background-color: var(--color-warning-bg);
    color: var(--color-warning-text);
    border-color: var(--color-warning-border);
  }

  /* REVISÃO (letterman) — writerman reformulou o H1 do hero como
     pergunta + frase de virada ("Quer entender como aparecer no Google
     com mais consistência? Comece com uma análise de SEO clara, em vez
     de achismo."), quase o dobro de comprimento do H1 de qualquer outra
     página do site (compare com .section-title em como-funciona.html/
     metodologia.html/seo-aeo-geo.html, todos uma frase única e curta).
     Herdando --fs-h1 (41-64px) sem ajuste, essa frase quebraria em
     6-10 linhas dependendo da largura da coluna (.hero-title divide
     espaço 1.05fr com .hero__figure em telas ≥920px, e ocupa a largura
     cheia, ainda estreita, em telas menores) — um bloco de texto
     gigante e desproporcional ao card de exemplo ao lado, sem ganho de
     legibilidade real sobre um tamanho menor.
     Correção: font-size dedicado só para .hero-title (já era um
     seletor próprio, não o h1 genérico — outras páginas usam
     .section-title, então este ajuste não toca nelas), escalando a
     MESMA curva de --fs-h1 a 80% (piso 2.5625rem→2.05rem, coeficiente
     de vw 2.6→2.08, teto 4rem→3.2rem) — não é um valor arbitrário novo,
     é a mesma proporção só recalibrada para o dobro de texto. Ainda
     assim fica claramente maior que --fs-h2 (piso 30px/teto 41px) em
     toda a faixa de viewport, preservando a hierarquia H1 > H2.
     line-height sobe de --lh-tight (1.2, calibrado para manchete curta
     de 1-3 linhas) para 1.28 — leading um pouco mais folgado ajuda um
     bloco de texto que agora vai ocupar várias linhas de fato. */
  /* REVISÃO (letterman) — line-height 1.28 → 1.3, pequeno ajuste ligado ao
     .text-highlight +10% (ver bloco grande logo acima da própria classe):
     este é o único H1 do site que quebra em várias linhas de verdade, então
     é o único onde a linha com o span maior ("análise de SEO clara") pode
     ficar visivelmente mais alta que as vizinhas. +0.02 de leading dá uma
     folga mínima entre linhas para essa diferença não ler como "grudado";
     não mexi no font-size do título (a calibração a 80% da curva --fs-h1,
     documentada acima, continua valendo — o pedido era aumentar o
     destaque, não o título inteiro). */
  /* REVISÃO (letterman) — .hero-title deixa de ter família/peso/tracking
     PRÓPRIOS. Todo o histórico abaixo (Instrument Serif → Newsreader
     itálico) documentava uma sequência de trocas de família dedicadas
     à hero section, sempre serifadas e sempre itálicas — exatamente a
     estratégia que o dono do produto pediu para abandonar (ver bloco
     grande no :root de fontes). .hero-title É um h1: agora que h1 não
     tem mais nenhuma razão para se diferenciar por família (o sistema
     inteiro usa --font-heading/Manrope), a regra volta a herdar
     family/font-weight(700)/color/letter-spacing(-0.02em) direto da
     cascata "h1, h2, h3 {}" + "h1 {}" (ver acima), sem override — a
     MESMA lógica que a REVISÃO 2 original deste arquivo já tinha
     estabelecido ("hierarquia vem de tamanho/peso/tracking, não de
     trocar de família") antes da série de exceções que foi sendo aberta
     e agora está sendo fechada.
     Mantidos, porque são decisões INDEPENDENTES da família da fonte:
     font-size (clamp calibrado a 80% da curva de --fs-h1, porque a frase
     do hero é mais longa que um h1 comum e quebra em várias linhas) e
     line-height 1.3 (leading um pouco mais folgado para o bloco de texto
     de várias linhas, incluindo folga para a linha com o span de
     .text-highlight). margin também mantida.
     HISTÓRICO (preservado) — Instrument Serif (var(--font-h2)) e depois
     Newsreader itálico (peso 500, opsz=40, ver <link> das páginas antes
     desta rodada) foram as duas famílias dedicadas que o .hero-title já
     usou; ambas removidas junto com os respectivos tokens/pesos/eixos no
     :root e nos <link> de Google Fonts das páginas HTML. */
  /* REVISÃO (letterman) — PEDIDO DO USUÁRIO: hero com "MUITO destaque",
     o ponto de maior impacto visual do site — explicitamente mais forte
     que o h2 (ver regra "h2" acima) e que qualquer outro h1 de página
     (ver regra "h1" acima, que fica em 600). .hero-title É um h1 (ver
     bloco grande acima da regra "h1" para a troca de família completa,
     --font-display/Oswald), então herdaria font-weight:600 dali; esta
     regra sobrescreve especificamente para 700 — o teto real de peso da
     família (Oswald só vai até Bold/700, sem corte mais pesado, mesmo
     limite documentado na nota do :root) — o mesmo peso do h2, mas MAIOR
     em tamanho (h1 sempre > h2 na escala, --fs-h1 vs --fs-h2), o que já
     garante que a hero continue lendo como o elemento de maior impacto
     do site inteiro sem precisar inventar um peso que a família não tem.
     font-size: recalibrado de 80% para 85% da curva de --fs-h1 (ver
     histórico abaixo, a razão original de escalar a 80% continua válida
     — frase longa que quebra em várias linhas, comparada ao card ao
     lado). O ganho de 5 pontos percentuais é uma correção ligada
     DIRETAMENTE à troca de família, não um valor arbitrário: glifos
     condensados da Oswald ocupam menos largura por caractere que os da
     Manrope no mesmo tamanho de fonte, então o mesmo número de quebras
     de linha "cabe" num ponto de tamanho maior — usei essa folga extra
     pra reforçar o "MUITO destaque" pedido, sem reabrir o risco antigo
     (bloco de texto desproporcional ao .preview-card ao lado) que a
     calibração a 80% existia pra evitar.
     letter-spacing: -0.015em — mais fechado que o h1 comum (-0.012em,
     ver nota acima) e que o h2 (-0.008em), mas ainda mais aberto que o
     -0.02em que Manrope usava aqui antes da troca de família: no maior
     texto do site, um pouco mais de aperto reforça a leitura de "bloco
     de impacto", mas sem colidir os traços do Bold condensado (o mesmo
     cuidado documentado na nota do h1/h2 acima, só um degrau mais
     fechado por ser o elemento mais grave/maior de todos).
     line-height e margin mantidos sem mudança — são decisões de LAYOUT/
     espaçamento vertical do bloco, independentes da família da fonte
     (ver histórico completo abaixo, ainda válido).

     HISTÓRICO (preservado) — .hero-title deixou de ter família/peso/
     tracking PRÓPRIOS numa rodada anterior (troca de Instrument Serif/
     Newsreader itálico para o sistema Manrope/Inter sem itálico); esta
     rodada reabre uma calibração própria de peso/tamanho/tracking, mas
     por um motivo diferente do histórico itálico-serifado: aqui é sobre
     ESCALA dentro da MESMA família condensada de h1/h2 (Oswald), pedida
     explicitamente para ser "MUITO" mais forte na hero — não uma volta
     à estratégia de trocar de família/postura para marcar destaque, que
     continua descartada (Oswald é a MESMA família do h1 e h2 do resto do
     site, só calibrada mais forte aqui). font-size 80% da curva de
     --fs-h1: frase do hero é quase o dobro do comprimento de um h1 comum
     (ver comparação com .section-title em como-funciona/metodologia/
     seo-aeo-geo), quebraria em 6-10 linhas na escala cheia — correção
     original preservada, só o percentual mudou (ver acima). */
  /* REVISÃO (letterman) — ESCOPO EXPLICITAMENTE LIMITADO À HOME, mesmo pedido do
     dono do produto documentado na regra "body.pagina-home h2" logo acima
     ("alongar verticalmente" + "diminuir o boldness" da fonte de destaque,
     Oswald, só na página inicial por enquanto). .hero-title, diferente de h2,
     JÁ é um seletor de classe que só existe em index.html (nenhuma outra página
     usa essa classe — confirmado por grep antes desta rodada) — então, ao
     contrário de h2 (regra global, precisou do wrapper "body.pagina-home"),
     esta regra não precisava de nenhum seletor adicional pra ficar restrita à
     home: ela já era. Documentando aqui mesmo assim porque o pedido do usuário
     foi explícito em pedir que toda mudança desta rodada fique clara como
     "escopo = só a home".

     font-weight: 700 → 500 (Medium, corte REAL de Oswald, já carregado no
     <link> de index.html mesmo antes desta rodada — nenhuma mudança de <link>
     necessária pra este valor, só o novo 400 do h2 precisou de ajuste no
     <link>, ver comentário lá). 500 é um degrau ACIMA do 400 escolhido pro h2
     da home (ver regra "body.pagina-home h2" acima): a hero continua sendo o
     elemento mais pesado do sistema tipográfico da home — "ainda o ponto mais
     forte do site", como pedido — só que ambos, hero e h2, mais leves do que
     estavam (vinham de 700/700). Não desci para 400 (mesmo peso do h2) porque
     isso apagaria a única distinção de peso que sobra entre os dois depois que
     a diferença de "MUITO destaque" deixou de vir de um salto pro teto da
     família (700, o máximo real de Oswald) — com hero e h2 na mesma família e
     ambos agora mais leves, o tamanho (--fs-h1 sempre > --fs-h2) segue sendo a
     principal fonte de hierarquia, mas manter um degrau de peso também reforça
     a leitura sem custar legibilidade.
     letter-spacing: -0.015em → -0.02em. Mesma lógica do h2 acima (tracking
     negativo moderado é a técnica seguramente documentada, via researchdude,
     pra reforçar sensação de verticalidade sem esticar o desenho da letra,
     já que Oswald não tem eixo de largura/corte mais alto no Google Fonts —
     font-stretch não faria nada aqui). -0.02em é um pouco mais fechado que o
     -0.015em do h2 da home (mesma faixa prudente de -0,01em a -0,03em trazida
     pela pesquisa, só um degrau mais perto do teto porque a hero é maior em
     tamanho — texto grande tolera tracking mais negativo sem colidir traços do
     que texto menor, mesmo princípio "maior = mais fechado" já em uso no resto
     do arquivo desde a REVISÃO 3 de h1/h2/h3).
     line-height: 1.3 → 1.24. Diferente do h2 (título de 1 linha só), o
     .hero-title É o único H1 do site que quebra em várias linhas de verdade
     (ver histórico logo acima) — reduzir o leading aqui tem efeito visível real
     no espaçamento ENTRE linhas, não só na caixa ao redor de uma linha única.
     1.24 aperta o suficiente pra reforçar a leitura "bloco vertical/colunar"
     pedida, mas sem chegar perto do ponto em que a linha com o span maior
     (.text-highlight, +10% de tamanho — ver bloco daquela classe) encostaria na
     linha vizinha; mantive folga deliberada por esse motivo (não fui pra 1.15,
     como o h2 de 1 linha, porque lá a preocupação de colisão entre linhas
     simplesmente não existe).
     transform: scaleY(1.08) — mesma técnica e mesma calibração de origem que o
     h2 da home (ver justificativa completa da técnica na regra
     "body.pagina-home h2" acima: sem corte mais alto disponível em Oswald, sem
     eixo de largura, scaleY calibrado é a única forma real de esticar o desenho
     da letra). 1.08 (vs. 1.06 do h2) porque a hero aparece uma ÚNICA vez na
     página — pode ir um pouco mais longe dentro da MESMA faixa prudente
     (~1.03-1.15, ver pesquisa) sem o risco de "cansar" que um valor mais forte
     repetido 7 vezes (h2) traria, e é o elemento que precisa continuar sendo o
     de maior impacto visual da home. transform-origin não definido — herda o
     padrão "50% 50%" do CSS, distribuindo o ganho de altura pra cima e pra
     baixo em cada linha igualmente; como .hero-title não tem overflow:hidden
     nem altura fixa no grid da hero (confirmado no histórico preservado
     abaixo), o texto só reflui, sem cortar nada.
     margin mantida sem mudança — é decisão de LAYOUT (espaçamento vertical do
     bloco), fora do escopo desta revisão.
     Contraste/acessibilidade: mesmo raciocínio do h2 (ver bloco acima) — o piso
     do clamp de .hero-title é 2.18rem (34,9px), acima do limiar de 24px que o
     WCAG exige pra "texto grande" mesmo em peso regular (não só bold), então a
     queda de peso 700→500 não empurra a hero pra fora do piso de contraste mais
     permissivo (3:1); cor (--color-text-heading) não foi tocada. */
  /* REVISÃO (letterman) — PEDIDO DO USUÁRIO: dobrar o alongamento vertical
     aplicado na rodada anterior (mesmo pedido documentado na regra
     "body.pagina-home h2" acima, que também recebeu esta dobra — ver lá o
     raciocínio completo sobre "dobrar delta, não valor absoluto" e por que
     line-height 1.18 foi escolhido também para o h2 agora). Tamanho da hero
     NÃO foi tocado nesta rodada (só o h2 recebeu o pedido de x2 no tamanho);
     só os 3 eixos do "alongamento" (scaleY/letter-spacing/line-height).
     Deltas sobre a base pré-alongamento (peso 700/-0.015em/1.3/scaleY 1.0):
       - letter-spacing: delta era -0.005em (-0.015em→-0.02em) → dobrado =
         -0.01em → total -0.03em. Bate EXATAMENTE no teto da faixa prudente
         trazida pela pesquisa (-0,01em a -0,03em) — não ultrapassa, mas não
         sobra margem; não fui além porque a faixa foi documentada como o
         limite antes de colidir traços, e a hero já está no maior tamanho
         de fonte do sistema (traços largos, mais sensível a fechamento
         excessivo do que o h2 menor).
       - line-height: delta era -0.06 (1.3→1.24) → dobrado = -0.12 → 1.18.
         A hero é o único H1 do site que quebra em várias linhas de verdade
         (frase longa) e carrega .text-highlight (span +10% de tamanho,
         ver regra própria) — a nota da rodada anterior já dizia que NÃO
         desceria a 1.15 (valor do h2 de 1 linha) porque a linha com o span
         maior encostaria na vizinha. 1.18 é o dobro do delta pedido e ainda
         fica acima desse limiar de colisão documentado — respeitando o
         pedido de intensificar sem cruzar o próprio limite de segurança já
         identificado.
       - scaleY: delta era +0.08 (1.00→1.08) → dobro literal seria +0.16 →
         1.16. NÃO apliquei o valor cheio: a pesquisa (researchdude, citada
         na regra original) definiu ~1.03-1.15 como a faixa antes do olho
         perceber distorção no glifo — 1.16 cruza esse teto documentado, e o
         pedido explícito do usuário foi para não deixar a fonte com
         aparência quebrada/ilegível. Limitei ao teto da própria pesquisa:
         scaleY(1.15). O "shortfall" de 0.01 em relação ao dobro literal foi
         compensado nos outros dois eixos (letter-spacing foi até o próprio
         teto da faixa prudente, line-height dobrado por completo) — o
         efeito de alongamento total continua claramente ~2x mais forte que
         a rodada anterior, só reequilibrado entre os 3 eixos em vez de
         forçar um único eixo além do limite de segurança já documentado.
         1.15 > 1.12 do h2 (ver regra acima) — a hero continua sendo o
         elemento mais alongado/impactante do sistema da home, como nas
         rodadas anteriores. */
  /* REVISÃO (layoutman) — PEDIDO DO USUÁRIO: "o espaçamento entre textos
     não está bom" na home. .hero-title acumulou várias rodadas do
     letterman (font-size 80%→85% da curva de --fs-h1, scaleY até 1.15,
     line-height apertado de 1.3→1.18) sem que o `margin` acompanhasse —
     toda rodada anterior documentou explicitamente "margin mantida sem
     mudança, decisão de LAYOUT, fora do escopo" (ver histórico grande
     acima desta regra). O resultado acumulado: badge (pill pequena,
     --fs-eyebrow/12px) e a maior peça de texto do site (clamp até
     3.4rem, ~54px, esticada por scaleY) separados por só 0.75rem/12px, e
     o próprio h1 separado de .hero-description (agora 18px/peso 500,
     ver regra dela abaixo) por só 1rem/16px — os dois liam como
     "grudados" numa página onde o resto do sistema já usa --space-5/
     --space-6 para o mesmo tipo de par heading→lede (ver .medido-
     detectado-sugerido > h2/--space-5 antes do .mds__intro, ou os
     painéis .aviso-analise/.sources-block/.planos-teaser/.faq-teaser >
     h2/--space-6 antes do conteúdo — todos recalibrados em rodadas
     anteriores para o h2 dobrado; o hero nunca recebeu o mesmo tratamento
     apesar de ser o elemento que mais cresceu).
     Além do tamanho em si, dois efeitos colaterais das rodadas do
     letterman reduzem a folga NATURAL ao redor do texto, reforçando a
     necessidade do ajuste aqui: line-height caiu de 1.3 para 1.18
     (menos "almofada" embutida acima/abaixo do bloco de texto) e
     scaleY(1.15) estica verticalmente o desenho das letras dentro da
     própria caixa de linha, preenchendo visualmente mais do espaço que
     antes ficava livre. Os dois efeitos são deliberados e corretos do
     ponto de vista tipográfico (ver raciocínio do letterman), mas
     significam que o respiro externo (margin) precisa compensar o que a
     folga interna deixou de fornecer.
     Troquei para tokens já existentes na escala, sem inventar valor novo:
       - topo (badge → h1): 0.75rem/12px → --space-5/20px. Ainda menor
         que o respiro abaixo do h1 (mantém badge e título como um grupo
         visualmente mais próximo entre si do que título e parágrafo),
         só folgado o suficiente para não ler como colado a um bloco de
         texto desse tamanho.
       - base (h1 → .hero-description): 1rem/16px → --space-6/32px. Par
         "heading grande → lede" equivalente ao já recalibrado em outras
         seções da home (ver acima); usei o degrau maior (--space-6, não
         --space-5) porque o hero-title é o elemento de MAIOR impacto do
         sistema — merece pelo menos o mesmo respiro que os h2 de painel
         já recebem antes do próprio conteúdo. */
  .hero-title {
    font-family: var(--font-display);
    font-weight: 500;
    font-size: clamp(2.18rem, 1.7425rem + 2.21vw, 3.4rem);
    line-height: 1.18;
    letter-spacing: -0.03em;
    margin: var(--space-5) 0 var(--space-6);
    transform: scaleY(1.15);
  }

  /* CORREÇÃO (letterman) — BUG reportado pelo usuário: "espaçamento
     estranho entre a terceira e a quarta linha" da hero. Causa raiz não é
     layout (margin/padding/grid) — é tipografia pura, então tratada aqui,
     não delegada ao layoutman.

     .hero-title define line-height: 1.18 SEM unidade (número puro, não
     "1.18em"/px). Por spec CSS, line-height numérico é herdado como
     NÚMERO, não como comprimento computado — cada descendente recalcula
     "1.18 × o PRÓPRIO font-size", não herda a altura de linha em px do
     pai. .text-highlight (span usado dentro de "análise de SEO clara",
     ver regra abaixo) tem font-size: 1.1em — 10% maior que o texto ao
     redor. Resultado: a caixa de linha (line box) que contém esse span
     fica ~10% mais alta que as linhas vizinhas de texto puro, porque
     1.18 × (1.1 × F) > 1.18 × F. Como o h1 quebra em 4 linhas e o span
     cai numa dessas linhas (dependendo da largura da viewport, tipicamente
     a 3ª), o espaço ACIMA/ABAIXO dessa linha especificamente fica maior
     que o espaço entre as outras linhas — exatamente o "espaçamento
     estranho" relatado, não um problema de margin entre blocos (que aqui
     nem existe: é o mesmo elemento de texto corrido quebrando linha
     sozinho, sem <br> manual nem elementos separados).

     Correção: neutralizar o ganho de altura do span SEM mudar seu
     font-size (o +10% é pedido explícito do usuário para o destaque, ver
     comentário da regra .text-highlight). Dou ao span seu próprio
     line-height explícito, calculado para que "line-height-do-span ×
     font-size-do-span" resulte no MESMO valor em px que
     "line-height-do-h1 × font-size-do-h1": 1.18 / 1.1 ≈ 1.0727. Escopado
     a ".hero-title .text-highlight" (não à regra base .text-highlight,
     que também é usada em h2 de uma linha só nos painéis de nota — ali
     não existe quebra de linha real, então não há bug a corrigir, e
     mudar o line-height base sem necessidade arriscaria descentralizar o
     span verticalmente dentro da própria linha única). Mesma correção
     vale para claro e escuro: não depende de cor/tema, só de font-size e
     line-height, que são idênticos nos dois modos. */
  .hero-title .text-highlight {
    line-height: calc(1.18 / 1.1);
  }

  /* Destaque de leitura — pedido explícito do usuário: "usar y tom de
     azul em certas palavras com destaque". Usa o terceiro tom da família
     (--color-highlight-emphasis), mais claro/ciano que o Marinho
     estrutural e o Azul de Ação, para marcar 1-3 palavras dentro de um
     título/parágrafo sem competir com CTAs de verdade.

     REVISÃO (letterman) — REESCRITA junto com a reescrita do sistema
     tipográfico (ver bloco grande no :root de fontes): toda a linha de
     revisões anteriores deste seletor (REVISÃO 5: trocar para a família
     serifada --font-highlight/Source Serif 4; REVISÃO 8: adicionar
     font-style:italic, "ecoando a própria logo") construía o destaque em
     cima de família serifada + itálico — exatamente a estratégia que o
     dono do produto pediu para abandonar. .text-highlight não muda mais
     de família nem de postura: fica na MESMA --font-heading (Manrope) do
     título ao redor, e o destaque passa a vir de PESO + COR + TAMANHO —
     os três eixos que o researchdude confirmou serem o padrão real de
     produtos técnicos/dados (Linear, Vercel: ênfase por peso, nunca por
     itálico).
     font-weight: 800 (ExtraBold real da Manrope, instância nomeada, sem
     síntese) — um degrau ACIMA do 700 que h1/h2 já usam ao redor, o
     "salto de peso dentro da família" que substitui a antiga troca de
     família. letter-spacing volta a 0 pelo mesmo motivo de antes (o
     tracking negativo herdado do heading, calibrado para peso 700,
     abre ligeiramente no salto para 800 para não colidir os traços mais
     grossos do ExtraBold).
     font-size: 1.1em mantido — PEDIDO DO USUÁRIO original, independente
     da família (+10% sobre qualquer contexto-pai; já verificado como
     seguro no .hero-title de várias linhas, ver histórico preservado
     abaixo).
     color: var(--color-highlight-emphasis) mantida — mede ~4,76:1 sobre o
     fundo claro, acima do piso de TEXTO NORMAL (4,5:1), não só do piso de
     texto grande; nenhuma mudança de contraste com a troca de família/
     postura (só forma, não cor).
     Como h2/.hero-title/.section-title agora compartilham a MESMA família
     de .text-highlight, as regras que existiam só para calibrar um par de
     famílias diferentes dentro do h2 e do hero ("h2 .text-highlight",
     ".hero-title .text-highlight") deixaram de ter função e foram
     REMOVIDAS — esta única regra agora cobre os três contextos de forma
     consistente (ver nota nos pontos onde essas regras existiam).

     HISTÓRICO PRESERVADO — a verificação de segurança abaixo (line-height/
     quebra de linha no .hero-title com o span maior) continua válida sem
     mudança, é uma questão de TAMANHO (1.1em), não de família/itálico:
     baseline/"flutuando" em título de UMA linha (.section-title, h2 de
     painel) não sofre corte porque line-height é um piso, não teto;
     .hero-title (único H1 que quebra em várias linhas) foi confirmado
     seguro porque o grid do hero não tem altura fixa nem overflow:hidden
     — o texto só reflui. */
  /* REVISÃO (letterman) — MUDANÇA DE MECANISMO: cor → peso/traço. PEDIDO
     EXPLÍCITO DO DONO DO PRODUTO (via usuário): ele não estava mais
     gostando de usar azul (--color-highlight-emphasis) para dar destaque
     em frases dentro de títulos. Apresentei duas opções — (1) trocar por
     outra cor, (2) abandonar cor como mecanismo de destaque e usar
     peso/traço, mantendo a cor normal do texto ao redor — e ele escolheu
     a opção 2.

     O que muda: a linha `color: var(--color-highlight-emphasis)` foi
     REMOVIDA. .text-highlight não pinta mais o texto de azul — herda a
     cor normal do heading-pai (--color-text-heading, resolvida pelo h1/h2
     ao redor), então o "salto" de cor desaparece por completo em vez de
     trocar para outro tom.

     Em substituição, dois eixos não-coloridos:
     1) PESO — mantido em 700 (teto real de Oswald, ver nota histórica
        preservada abaixo sobre por que não é 800). Nos contextos h1
        (peso 600 ao redor) isso já cria um degrau real. Nos contextos h2
        (peso 700 ao redor, mesmo teto), o peso sozinho NÃO diferencia —
        por isso o marca-texto abaixo é o mecanismo que garante destaque em
        QUALQUER contexto, não só onde sobra peso disponível.
     2) TRAÇO — text-decoration: underline. REMOVIDO NA REVISÃO SEGUINTE,
        ver bloco logo abaixo — histórico preservado só para contexto.
     Tamanho (1.1em) e letter-spacing (0) mantidos sem mudança — nenhum
     dos dois é o mecanismo de COR que o dono do produto rejeitou, os dois
     já eram parte do sistema de destaque antes desta revisão.

     HISTÓRICO PRESERVADO — por que font-weight é 700 e não 800:
     .text-highlight vive sempre dentro de h1/h2/.hero-title, que usam
     --font-display (Oswald condensada). Oswald só tem cortes reais até
     700 (Bold) — NÃO existe um 800/ExtraBold nesta família. Pedir
     font-weight:800 não geraria um bold sintetizado (o navegador clampa
     pro mais pesado DISPONÍVEL, 700), mas deixar 800 no CSS seria
     enganoso. 700 é o teto real da família, mesmo valor usado pelo h2 e
     um degrau acima do h1 comum (600). */
  /* REVISÃO (letterman) — DESFEITO: text-shadow/glow removido. PEDIDO
     EXPLÍCITO DO USUÁRIO: "desfaça isso também" — reverter o glow sutil da
     rodada anterior (bloco de comentário e histórico acima preservados só
     como registro do que existiu; a propriedade em si foi removida).

     Esta é a TERCEIRA reversão consecutiva de um mecanismo de destaque
     dedicado para .text-highlight, sempre a pedido do usuário, cada uma
     desfazendo a anterior:
       1) cor de destaque (azul) → REMOVIDA, substituída por peso 700 +
          sublinhado;
       2) sublinhado → REMOVIDO, substituído por fundo tipo marca-texto
          (background-color/padding/border-radius/box-decoration-break,
          token --color-highlight-mark);
       3) marca-texto → REMOVIDO, substituído por text-shadow/glow sutil
          (color-mix(in srgb, currentColor 35%, transparent));
       4) [ESTA REVISÃO] glow → REMOVIDO. Nenhuma propriedade nova entra
          no lugar.

     ESTADO FINAL — para não confundir revisões futuras: .text-highlight
     agora não tem MAIS NENHUM mecanismo de destaque dedicado. O único
     efeito visual remanescente é `font-weight: 700` + `font-size: 1.1em`
     (ambos anteriores a estas três rodadas — não fazem parte do que foi
     pedido para desfazer, nunca foram tocados). Destaque, hoje, vem
     SOMENTE do contraste de peso/tamanho contra o texto ao redor — sem
     cor própria, sem sublinhado, sem fundo, sem sombra/glow. Se um pedido
     futuro pedir "mais destaque" de novo, considerar que o histórico
     mostra 3 mecanismos diferentes já tentados e desfeitos em sequência —
     vale perguntar ao usuário o que especificamente não funcionou em cada
     um antes de propor um quarto, em vez de repetir um dos três. */
  /* REVISÃO (letterman) — REVERSÃO EXPLÍCITA, a pedido do usuário, nesta
     data (17/08/2026): depois de três rodadas anteriores desfazendo
     mecanismos de destaque em .text-highlight (cor azul → sublinhado →
     marca-texto → glow → nada, ver bloco grande logo acima), o usuário
     pediu especificamente para voltar a usar cor — desta vez Newsreader
     itálico + azul claro — mesmo eu tendo levantado o histórico de
     rejeição de azul antes de aplicar. Confirmado explicitamente por ele
     que é para prosseguir mesmo assim. Registrando aqui para não confundir
     revisões futuras: isto NÃO é um esquecimento do "ESTADO FINAL"
     documentado acima, é uma quarta mudança de direção, desta vez
     deliberada e reconfirmada. --color-highlight-emphasis deixou de ser
     órfão (ver nota junto à definição do token no :root) — voltou a ter
     .text-highlight como consumidor. font-family usa "Newsreader" como
     literal, mesma convenção já usada em .preview-card__title/
     .processo__item-title etc. (arquivo nunca criou uma variável dedicada
     pra essa família, sempre referenciada por nome), com
     var(--font-display) como fallback — mesmo padrão dos outros
     consumidores de Newsreader no arquivo — em vez de um serif genérico,
     porque var(--font-display) é a família que h1/h2 (os únicos pais de
     .text-highlight) já usam: se "Newsreader" falhar ao carregar, a
     palavra em destaque cai de volta no MESMO peso visual do título ao
     redor, em vez de um serif do sistema operacional destoante. Contraste
     conferido: --color-highlight (#5299C9) contra
     --color-bg-page (branco) ≈ 3,11:1 — acima do piso 3:1 exigido para
     texto grande (WCAG AA), que é o piso aplicável aqui porque
     .text-highlight vive sempre dentro de h1/h2 (font-size 1.1em sobre
     bases já ≥30px, portanto sempre >24px). No escuro, o mesmo token é
     texto claro sobre fundo bem mais escuro (--color-bg-dark #0D0E12) —
     contraste alto, sem risco, herdado automaticamente do alias já
     existente em [data-theme="dark"] (--color-highlight-emphasis: var(
     --color-highlight);, linha ~3064), sem precisar de override novo.

     ESCOPO — as 3 propriedades novas (font-family/font-style/color) foram
     colocadas em "body.pagina-home .text-highlight", NÃO na regra base
     ".text-highlight" abaixo, mesmo critério já usado para Newsreader
     itálico nos títulos de card e para Lora no corpo de texto (ver
     comentários "pagina-home" em styles.css e no <link> de index.html).
     Motivo concreto: .text-highlight é reusado em outras 6 páginas
     (analise.html, resultado.html, planos.html, metodologia.html,
     como-funciona.html, seo-aeo-geo.html — confirmado via grep), e
     NENHUMA delas carrega "Newsreader" no <link> de fontes (só
     index.html tem o family=Newsreader no <link>, com o peso itálico 700
     agora incluído especificamente para este pedido — ver comentário no
     HTML). Sem o escopo, as outras 6 páginas herdariam font-style:italic
     sobre uma família que não existe ali, e o navegador teria que
     sintetizar itálico falso em cima de var(--font-display) (Oswald),
     inconsistente com o pedido do usuário (que só falou da home) e pior
     visualmente que manter o comportamento atual (peso 700 + tamanho
     1.1em, sem cor) nessas páginas. A regra base continua valendo em
     todas as páginas; só o destaque de fonte/itálico/cor é exclusivo da
     home. */
  /* REVISÃO (letterman) — PEDIDO DO USUÁRIO: consistência de destaque
     entre páginas. O padrão serifado/itálico/azul (Newsreader + peso 700 +
     --color-highlight-emphasis) estava escopado só a "body.pagina-home
     .text-highlight" (ver histórico do bloco acima) — nas outras 6
     páginas que reusam .text-highlight (analise.html, resultado.html,
     planos.html, metodologia.html, como-funciona.html, seo-aeo-geo.html),
     a MESMA classe renderizava só peso 700 preto, sem itálico/serifa/cor,
     porque nenhuma delas carregava a fonte Newsreader. Isso fazia o
     destaque "existir" (a classe estava aplicada nas palavras certas,
     nenhum destaque novo foi inventado) mas com aparência divergente da
     home. Corrigido nas duas pontas:
       1) as 3 propriedades (font-family/font-style/color) sobem para a
          regra base ".text-highlight", sem escopo — aplicam em qualquer
          página agora;
       2) a família "Newsreader" (mesmos pesos itálicos 500/600/700 que
          index.html já carrega) foi adicionada ao <link> de Google Fonts
          das 6 páginas que faltavam (ver cada <head>), para não depender
          de itálico sintético do fallback --font-display/Oswald.
     .text-highlight--accent (usado só em .planos-teaser, index.html)
     continua sobrescrevendo font-family para Inter sem itálico — decisão
     própria dele, documentada no bloco logo abaixo, não afetada por esta
     mudança. */
  .text-highlight {
    font-family: "Newsreader", var(--font-display);
    font-style: italic;
    font-weight: 700;
    font-size: 1.1em; /* PEDIDO DO USUÁRIO — +10% em qualquer contexto-pai (em, não valor fixo) */
    letter-spacing: 0;
    color: var(--color-highlight-emphasis);
  }

  /* REVISÃO (colorman) — PEDIDO DO USUÁRIO: "enriquecer também a fonte
     dos títulos, usar tamanhos, cores e fontes diferentes para criar
     destaque onde for necessário", aplicado aos painéis de nota que
     ainda não tinham NENHUM destaque de cor no título (.aviso-analise,
     .sources-block, .planos-teaser, .faq-teaser nas duas páginas onde
     aparecem). Decisão panel a panel, não "destacar tudo" — ver notas
     junto a cada <h2> no HTML de index.html/analise.html para o porquê
     de cada escolha (inclusive as que ficaram DELIBERADAMENTE sem
     destaque).
     Dois títulos (.aviso-analise, nas duas páginas) reusam .text-highlight
     puro — mesmo papel EDITORIAL/DE RESSALVA que já justifica esta classe
     em "evidência clara"/"gratuita"/"sem letras miúdas"/"sem complicação"/
     "próximo passo": aqui a frase destacada é sempre a cláusula negativa
     que existe pra gerenciar expectativa ("não garante"/"não guardamos"),
     o mesmo --color-highlight-emphasis de sempre. Contraste inalterado: h2
     sempre ≥30px/peso 700 (ver --fs-h2), acima do piso "texto grande" de
     3:1 que a cor já cumpre nos dois temas (ver bloco "PARTE 4" da
     paleta, acima) — e o próprio token mede acima do piso 4,5:1 de texto
     normal de qualquer forma.

     Um título (.planos-teaser, só em index.html) usa um MODIFICADOR novo,
     .text-highlight--accent, em vez do .text-highlight puro — decisão
     deliberada, não um esquecimento de reuso. Este título não é uma
     ressalva/promessa editorial, é uma pergunta que empurra para uma AÇÃO
     concreta um parágrafo abaixo ("Ver os planos →", que já usa
     --color-accent-on-dark no hover/foco — ver .planos-teaser__link a
     :hover). O modificador troca a FAMÍLIA — var(--font-body)/Inter, a
     mesma família que todo link/CTA de ação do sistema já usa (botões,
     .planos-teaser__link a, .site-nav__link) — separando visualmente
     "isto é ação" de "isto é ressalva editorial" (que fica em
     --font-heading/Manrope, a família do resto do h2), sem depender de
     itálico para isso. peso e traço continuam herdados de .text-highlight
     — mesmo salto de peso/mesmo underline que qualquer outro destaque do
     sistema usa.

     REVISÃO (letterman) — MUDANÇA DE MECANISMO: cor → peso/traço, mesmo
     pedido do dono do produto documentado na regra .text-highlight acima
     (ele rejeitou azul como cor de destaque em qualquer lugar do
     sistema, não só no caso "editorial"). A linha
     `color: var(--color-accent-on-dark)` foi REMOVIDA — o texto herda a
     cor normal do h2 ao redor, igual ao .text-highlight puro agora. O que
     sobrevive como diferenciador deste modificador NÃO é cor: é a troca
     de família (Inter vs. Manrope/Oswald do resto do h2), que já não era
     um mecanismo de cor e continua fazendo o trabalho de "isto é ação" —
     reforçado pelo underline herdado de .text-highlight, que aqui também
     ecoa visualmente o link de ação logo abaixo ("Ver os planos →"),
     criando o mesmo "fio visual" que a cor fazia antes, sem cor. */
  /* REVISÃO (letterman) — .text-highlight--accent NÃO ganhou nenhuma regra
     nova nesta rodada (underline → marca-texto). Decisão consciente: o
     marca-texto (background-color/padding/border-radius/box-decoration-
     break) vive inteiro em .text-highlight; .text-highlight--accent é só
     um MODIFICADOR de família aplicado no MESMO <span> (as duas classes
     coexistem no HTML, ex. <span class="text-highlight text-highlight--accent">),
     então o fundo já se aplica automaticamente por herança de
     regra — não é preciso duplicar nada aqui. Faz sentido manter assim: o
     marca-texto é o mecanismo de destaque do SISTEMA inteiro (ver nota em
     .text-highlight), e .planos-teaser (único consumidor deste modificador)
     continua se beneficiando dele igual a qualquer outro destaque — a
     troca de família (Inter) continua sendo o único traço que separa
     "isto é ação" de "isto é ressalva editorial", sem competir com o
     fundo.
     REVISÃO SEGUINTE (letterman) — marca-texto DESFEITO e trocado por
     text-shadow/glow (ver bloco grande na regra .text-highlight, acima).
     A mesma lógica de herança se aplica sem alteração: o glow em
     `currentColor` também vive inteiro em .text-highlight, e
     .text-highlight--accent continua não precisando de nenhuma regra
     própria para herdá-lo — a troca de família (Inter) segue sendo o
     único diferenciador deste modificador.
     REVISÃO SEGUINTE (letterman) — glow também DESFEITO (terceira
     reversão consecutiva de mecanismo de destaque, ver bloco grande na
     regra .text-highlight, acima). .text-highlight já não tem nenhum
     efeito de cor/sombra/fundo para herdar — só peso 700 + font-size
     1.1em. .text-highlight--accent continua sem regra própria além da
     troca de família (var(--font-body)): não há mais nada a herdar além
     de peso/tamanho, e isso já basta para o papel deste modificador. */
  /* CORREÇÃO (letterman) — BUG reportado pelo usuário: este modificador
     trocava a família só desta palavra dentro do h2 para var(--font-body)
     (Inter), enquanto o resto do título usa var(--font-display) (Oswald,
     regra "h2 {}" acima) — o h2 lia com 2 fontes diferentes coladas na
     mesma frase, não uma escolha intencional perceptível como tal, e sim
     como erro de composição. Consumidores confirmados: o <span
     class="text-highlight text-highlight--accent"> dentro de "Quer
     acompanhar isso ao longo do tempo?" (index.html, .planos-teaser) e do
     h2 equivalente em resultado.html (.planos-teaser). A troca de família
     era uma tentativa antiga de diferenciar "isto é ação" de "isto é
     ressalva editorial" sem usar cor (ver histórico logo acima) — mas o
     pedido atual do usuário é explícito: nenhuma segunda fonte deve
     aparecer dentro do mesmo h2. Regra esvaziada: a palavra volta a herdar
     var(--font-display) do h2 ao redor, igual a qualquer outro h2 do
     sistema. O restante do destaque (peso 700 + tamanho 1.1em, herdados de
     .text-highlight) continua de pé — a diferenciação "isto é ação"
     sobrevive por peso/tamanho, sem depender de uma segunda família. Sem
     override em [data-theme="dark"] para remover: esta regra nunca teve
     uma versão dedicada ao escuro, então o escuro já herdava e continua
     herdando var(--font-display) sem nenhuma mudança de comportamento.
     Regra removida (ficaria vazia) — a classe continua existindo no HTML
     só como marcador semântico de "isto é o par ação" para quem ler o
     markup, sem nenhum CSS próprio associado a ela hoje. */

  /* REVISÃO (letterman) — "h2 .text-highlight" e ".hero-title
     .text-highlight" foram REMOVIDAS nesta rodada. As duas existiam só
     para calibrar/rebalancear um PAR DE FAMÍLIAS DIFERENTES dentro do h2
     e do hero (Instrument Serif/Manrope, depois Newsreader itálico/
     Newsreader itálico bold) — o histórico completo de troca de família +
     itálico usado como destaque, incluindo os ajustes de tamanho relativo
     entre pares seguidos aqui em revisões anteriores, ficava justamente
     nesses dois blocos. Com a reescrita do sistema tipográfico (ver bloco
     grande no :root de fontes), h2, .hero-title e .text-highlight
     compartilham a MESMA família (--font-heading, Manrope) — não existe
     mais um "par" para calibrar, então a regra ".text-highlight" sozinha
     (peso 800, tamanho 1.1em, cor --color-highlight-emphasis) já cobre os
     dois contextos corretamente sem precisar de override algum: peso 800
     contra o 700 do h2/h1 ao redor é diferença suficiente em QUALQUER
     tamanho, sem o risco de "duas fontes brigando" que motivava os ajustes
     anteriores (esse risco era específico de misturar duas famílias com
     x-height/peso óptico diferentes, não existe mais aqui). */

  /* REVISÃO (letterman) — mesmo pedido do usuário citado no bloco do
     colorman acima ("tamanhos... diferentes... onde for necessário"),
     avaliei os 4 títulos que colorman acabou de tratar de cor
     (.aviso-analise > h2 nas duas páginas, .sources-block > h2,
     .planos-teaser > h2, .faq-teaser > h2) e decidi DELIBERADAMENTE não
     mexer em tamanho/peso/tracking deles — continuam só com a regra
     global h2 (peso 700, --fs-h2 clamp 30-41px, tracking -0.01em,
     centralizado, "REVISÃO 13" acima). Duas razões, não preguiça:

     1) Restrição de acessibilidade real, não só estética — colorman já
     calculou o contraste de --color-highlight (usado em .aviso-analise
     h2 nas duas páginas) assumindo "h2 sempre ≥30px/peso 700, acima do
     piso de texto grande" (ver comentário dele acima). --color-highlight
     cruza só o piso 3:1 de TEXTO GRANDE (≥24px regular ou ≥18,66px em
     bold), não o piso 4,5:1 de texto normal — encolher esse h2 abaixo do
     tamanho atual quebraria a conta de contraste que ele já fechou.
     Aumentar não tem motivo (já é o maior degrau do sistema abaixo de
     h1); então "sem mudança" é o único intervalo seguro pros dois
     .aviso-analise.

     2) Coerência de sistema — .beneficios > h2, .processo > h2 e
     .medido-detectado-sugerido > h2 (títulos de seções de GRADE, com
     3-6 cards embaixo) usam a MESMA regra global h2, sem override de
     tamanho. Ou seja, o h2 já é, por design, um degrau único e uniforme
     no sistema inteiro — sinaliza "começa uma seção nova" com o mesmo
     peso visual não importa o que vem depois (grade grande ou nota de
     um parágrafo). Diferenciar tamanho só destes 4 painéis (que
     layoutman já confirmou serem literalmente a mesma família de caixa
     entre si) criaria uma hierarquia nova e arbitrária dentro de um
     grupo que hoje lê como consistente, sem ganho de legibilidade real
     — o conteúdo abaixo de cada um (1-2 frases + link, no máximo) já é
     visualmente mais leve que uma grade de cards, então a diferença de
     "peso" entre seção-grande e painel-nota já existe estruturalmente
     (quantidade de conteúdo), sem precisar duplicar o sinal no título.

     A frase emenda: o par plain-text/.text-highlight (ou
     .text-highlight--accent) dentro desses h2 já lê como destaque
     deliberado SÓ com a troca de cor (+família/itálico no caso do
     .text-highlight puro) porque o peso continua 700 dos dois lados —
     não há uma palavra "mais pesada" competindo com o resto do título,
     só uma palavra "mais colorida/diferente", que é o efeito que
     colorman queria. Se algum dia um desses títulos ganhar uma frase
     BEM mais longa que precise respirar mais, revisito; hoje nenhum dos
     4 pede isso.

     REVISÃO (letterman) — NOTA DE DESATUALIZAÇÃO após a correção do bug
     de peso do h2 (ver regra "h2 {}" acima, font-weight 700→400): a frase
     "o peso continua 700 dos dois lados" acima NÃO é mais literalmente
     verdadeira para .text-highlight--accent. .text-highlight--accent só
     sobrescreve family/style/color (ver regra abaixo), o peso 700 vem
     herdado de .text-highlight base e nunca mudou — mas agora o h2 base
     ao redor é 400 real (antes era um fake bold visualmente ~700). Ou
     seja, estes 4 painéis passam a ter, sem planejamento original, um
     leve contraste de PESO além do de cor entre a palavra destacada e o
     resto do título. Avaliado visualmente como aceitável: a palavra
     destacada nesses painéis é sempre curta (1-3 palavras dentro de uma
     frase de nota), então o peso extra lê como reforço do destaque de cor
     já pretendido, não como uma hierarquia nova competindo por atenção —
     mas isto é uma mudança de leitura real em relação à intenção original
     documentada acima ("só uma palavra mais colorida"), não apenas uma
     correção de texto. Se o dono do produto achar que a palavra destacada
     ficou "gritando demais" nesses 4 painéis depois da correção do bug,
     a correção seria font-weight:400 explícito dentro de
     .text-highlight--accent especificamente para o contexto h2 (h2
     .text-highlight--accent { font-weight: 400 }), não revertida aqui sem
     pedido explícito. */

  /* REVISÃO 11 (letterman) — peso 500, nível "lede" do sistema; ver
     bloco "REVISÃO 11" no topo do arquivo, item 1. */
  .hero-description {
    font-size: var(--fs-body-lg);
    font-weight: 500;
    line-height: var(--lh-body);
    color: var(--color-text-body);
    max-width: 62ch;
    margin: 0 0 1.5rem;
  }

  /* .hero-disclaimer removida na REVISÃO 15 (letterman) — o parágrafo
     saiu do hero e virou ".legal-disclaimer" no rodapé (ver bloco
     "REVISÃO 15" junto de .legal-note/.legal-copyright). O histórico de
     estilo anterior (itálico, --fs-caption, REVISÃO 11) fica só citado
     aqui; a regra em si não existe mais porque a classe não é mais usada
     em nenhum HTML do site. */

  /* ---------- Formulário do hero (novo, writerman) ----------
     REVISÃO 10 (colorman) — primeiro <input> de texto do site inteiro;
     não havia nenhum precedente de "campo de formulário" no sistema até
     aqui. Tratado com a mesma lógica já usada pelos cards genéricos
     (.step-card/.source-card/.faq-item): fundo --color-surface (o mesmo
     branco dos cards) + borda --color-border-strong, não --color-border
     — página e campo são o mesmo branco, então a borda "fraca" sozinha
     não separaria o campo visualmente (mesmo raciocínio já documentado
     nesses cards); --color-border-strong mede ~3,18:1 sobre branco,
     cruza o piso de 3:1 de componente de UI (WCAG 1.4.11).
     Foco: a regra global :focus-visible (topo do arquivo) já aplica
     outline: 2px solid var(--color-focus-ring) em qualquer elemento
     focável, incluindo este input — reforcei também a BORDA do próprio
     campo para o mesmo tom (var(--color-focus-ring), alias de
     --color-text-link, #2C658C), duplo sinal (outline + borda) que é
     convenção comum de campo de formulário, reaproveitando só um token
     já existente, nenhuma cor nova.
     Texto digitado: --color-text-body (#211E1A, mesmo tom de leitura do
     resto do site, 16,59:1 sobre branco). Placeholder: --color-text-muted
     (#72685A, mesmo tom já usado em legendas/disclaimers — placeholder
     não tem piso de contraste obrigatório no WCAG, mas reaproveitar o
     tom "discreto" já existente evita inventar um cinza novo só pra
     isto).
     Estado inválido: só depois que o campo deixa de estar vazio
     (:not(:placeholder-shown) evita pintar de vermelho um campo
     obrigatório que o usuário ainda nem tocou) — usa --color-error
     (#B3453D, ~5,48:1 sobre branco), o único papel semântico do sistema
     pra "isto está errado", sem introduzir tom novo.
     Botão de submit: reaproveita .btn--primary já presente no HTML
     (conferido — o writerman já usou a classe certa, nenhuma mudança de
     markup foi necessária). */
  /* Tipografia (letterman) — ver bloco "REVISÃO 9 (letterman)" no topo do
     arquivo para o raciocínio completo. */
  .hero-form__label {
    font-family: var(--font-body);
    font-weight: 600;
    font-size: var(--fs-caption);
    letter-spacing: 0;
    color: var(--color-text-muted);
  }
  .hero-form__input {
    background-color: var(--color-surface);
    border: 1px solid var(--color-border-strong);
    color: var(--color-text-body);
    font-family: var(--font-body);
    font-weight: 400;
    font-size: var(--fs-body);
    letter-spacing: 0;
  }
  .hero-form__input::placeholder {
    color: var(--color-text-muted);
    font-family: var(--font-body);
    font-weight: 400;
    font-style: normal;
  }
  .hero-form__input:focus-visible {
    border-color: var(--color-focus-ring);
  }
  .hero-form__input:not(:placeholder-shown):invalid {
    border-color: var(--color-error);
  }

  /* ---------- Formulário do hero — estrutura/espaçamento (layoutman) ----------
     Hierarquia de CTAs do hero: a ordem no DOM era hero-description →
     hero-form → hero-actions → hero-disclaimer (este último removido do
     hero na REVISÃO 15 do letterman, movido para o rodapé como
     .legal-disclaimer — ver comentário junto de .legal-note/
     .legal-copyright), e não havia duplicação real de CTA dentro do hero
     (só ".hero-actions" com "Ver como funciona", secundário — o texto
     "Analisar página grátis" aparece no header e no formulário, mas não
     duas vezes dentro do próprio hero). Mantive a ordem e reforcei a
     hierarquia só por espaçamento: o formulário (label +
     input + botão) é a AÇÃO PRINCIPAL da seção — margin-bottom próprio
     (--space-4) o separa do botão secundário abaixo dele o suficiente para
     não ler como "mais uma opção igual", sem precisar de uma caixa/fundo
     dedicados (isso seria papel do colorman, não pedido). Campo + botão
     ficam lado a lado (flex row, botão com largura própria via flex:none,
     campo ocupando o restante) até 480px, onde empilham em coluna cheia —
     mesma faixa mobile já usada para outras adaptações finas do sistema
     (.next-step, .waitlist__box). Padding/raio do input usam os MESMOS
     valores literais já usados pelo botão ao lado (10px 20px, --radius-lg)
     para os dois lerem como uma única "barra de busca" coesa, não dois
     componentes desalinhados. */
  .hero-form {
    display: flex;
    flex-direction: column;
    gap: var(--space-2);
    margin-bottom: var(--space-4);
  }
  .hero-form__row {
    display: flex;
    gap: var(--space-3);
    align-items: stretch;
  }
  .hero-form__input {
    flex: 1;
    min-width: 0;
    padding: 10px 20px;
    border-radius: var(--radius-lg);
  }
  .hero-form__row .btn {
    flex: none;
  }
  @media (max-width: 480px) {
    .hero-form__row {
      flex-direction: column;
      align-items: stretch;
    }
    .hero-form__row .btn {
      width: 100%;
    }
  }

  /* REVERSÃO (layoutman) — PEDIDO DO USUÁRIO: a rodada "remover cards"
     tinha trocado a caixa do .preview-card (fundo/borda/sombra/raio) por um
     hairline fino no topo (ver histórico da versão anterior desta regra,
     comentário removido nesta reversão). O dono do produto pediu para
     voltar ao formato de card, mas com CANTOS QUADRADOS — sem o raio
     --radius-lg que o .preview-card usava antes da remoção. Fórmula de
     "card genérico" idêntica à usada por .step-card/.concept-card/
     .source-card/.faq-item (background --color-surface, border 1px
     --color-border-strong, --shadow-card-rest — nenhum valor novo), só que
     com border-radius: 0 em vez de --radius-lg — pedido explícito de
     manter os cantos retos só nestes 4 cards da home; o token
     --radius-lg continua arredondado normalmente em todo o resto do site
     (plan-card, waitlist__box, botões etc.). padding volta a var(--space-6)
     (era a 2ª regra .preview-card, removida na rodada anterior, que zerava
     border-radius/padding de "interior de caixa" — agora restaurada aqui,
     consolidada numa única regra). .preview-card__item mantém sua própria
     divisória (border-bottom) entre os 3 itens, sem alteração — esse
     padrão de "lista com hairlines" já existia dentro do card antes da
     remoção e continua existindo dentro dele agora. */
  /* REVISÃO (layoutman) — PEDIDO DO USUÁRIO: card "mais harmônico e
     dinâmico". padding deixa de ser uniforme (var(--space-6) nos 4 lados)
     e passa a ser assimétrico: mais respiro em cima (var(--space-7)/48px)
     do que embaixo/nas laterais (var(--space-6)/32px, mantido). O título
     itálico serifado (.preview-card__title, Newsreader) é o elemento mais
     "editorial" do card — dar a ele mais ar acima reforça essa leitura de
     abertura de matéria/manchete em vez de tratar o topo do card como só
     mais um lado igual aos outros três. Base ainda em var(--space-6) para
     não desancorar o card do restante da família de 4 cards da home
     (.beneficios__item/.processo__item/.mds__item seguem com padding
     uniforme — só este, que é o card "de destaque" ao lado da hero, ganha
     a variação). Nenhum valor novo: --space-6/--space-7 já existem na
     escala. Cantos continuam retos (border-radius:0) — decisão anterior
     explícita do dono do produto, não mexida aqui. */
  .preview-card {
    background-color: var(--color-surface);
    border: 1px solid transparent;  /* REVISÃO (colorman) — era var(--color-border-strong); pedido "bordas invisíveis", cor trocada p/ transparent mantendo a largura de 1px (box model intacto, sem "encolher" o card no grid) */
    box-shadow: var(--shadow-card-rest-borderless);  /* REVISÃO (colorman) — era var(--shadow-card-rest); ver justificativa completa junto à definição do token, nos blocos de tokens claro/escuro */
    border-radius: 0;
    padding: var(--space-7) var(--space-6) var(--space-6);
  }

  /* PEDIDO DO DONO DO PRODUTO (via layoutman) — títulos dos 4 cards da home
     (.preview-card, .beneficios__item, .processo__item, .mds__item) ganham
     itálico + azul, coordenado com o colorman. .preview-card é um desses 4
     cards (o do hero), então .preview-card__title/.preview-card__item-title
     entram no mesmo tratamento por consistência de sistema — mesma família
     visual de card, mesmo papel de "título de card".
     Cor: var(--color-accent-on-dark), o token do colorman já auditado para
     exatamente este caso ("azul de Ação sobre uma superfície que muda de
     tema") — no claro é --color-accent (#31709B, ~5,32:1 sobre branco/
     --color-surface, acima do piso de 4,5:1 de texto normal); no escuro
     vira --color-accent-tint-on-dark (#A8D3F0, ~10,4:1 sobre a nova
     --color-surface escura). Não usei --color-text-link: é FIXO nos dois
     temas (calibrado só para fundo claro) e mede só ~2,6:1 contra
     --color-surface no escuro — ilegível aqui (ver nota do colorman junto a
     --color-focus-ring no bloco [data-theme="dark"]). --color-accent-on-dark
     já é o mesmo par consumido por .btn--secondary/.next-step__link/
     .preview-card__number sobre este mesmo tipo de superfície, então o azul
     do título fica na mesma família do azul já usado alhures no card, sem
     introduzir um tom novo.
     Itálico: font-style: italic nos dois. Nota de coerência com o sistema —
     uma REVISÃO anterior (ver .preview-card__caption, logo abaixo) removeu
     itálico de todo o grupo "nota de apoio" a pedido do usuário ("nenhum
     itálico em lugar nenhum"); este pedido novo e mais específico do dono
     do produto (título de card, não nota de apoio) é uma exceção deliberada
     e restrita a estes 5 seletores, não uma reversão daquela decisão — as
     notas de apoio continuam sem itálico. Cortes itálicos reais (não
     sintéticos) de Inter 600/700 foram adicionados ao <link> de fontes
     de index.html para este peso não cair num slant falso do navegador.
     Tamanho não precisou mudar: nenhuma palavra isolada do conteúdo atual
     se aproxima da largura das colunas de card (mesmo a mais estreita,
     .mds__list a 440px de cap, sobra folga de sobra para os termos curtos
     que usa). */
  /* REVISÃO (letterman) — PEDIDO DO DONO DO PRODUTO, revertendo a parte
     "itálico" do bloco de comentário logo acima (ainda válido para o
     restante do raciocínio: por que --color-accent-on-dark, por que estes 5
     seletores e não .preview-card__caption etc.) e trocando família por
     "Newsreader" (serifada editorial, adicionada ao <link> de fontes de
     index.html, ver comentário lá — eixo opsz+faixa 400–700, só nesta
     página). Peso 600: .preview-card__title/.preview-card__item-title vivem
     nos dois menores tamanhos do grupo de 5 (--fs-small/15px e --fs-body/
     17px) — pesquisa via researchdude confirmou que o corte itálico real
     não é mais necessário (removido), mas que a família tem contraste de
     traço relativamente alto no corte de exibição, e que abaixo de ~24px
     convém subir para 500–600 em vez de Regular/Light para não perder
     densidade nos traços finos; optical sizing (opsz, ativo via
     font-optical-sizing:auto, valor padrão do CSS, sem precisar declarar
     aqui) já ajuda nisso ao trocar automaticamente para o corte "texto",
     mas o peso 600 garante a mesma robustez com ou sem suporte total ao
     eixo no navegador do visitante. Cor mantida (--color-accent-on-dark) —
     já auditada pelo colorman para exatamente este par elemento/superfície
     nos dois temas; troca de família/peso não muda contraste, que é função
     só da cor. */
  /* REVISÃO (letterman) — PEDIDO DO USUÁRIO: preto total (#000000) no
     título do card e o azul que antes vivia no título (var(--color-accent),
     #31709B, o mesmo valor que --color-accent-on-dark resolve no claro)
     movido para o texto/corpo do card. Escopo explícito de MODO CLARO —
     --color-accent-on-dark muda de valor no escuro ([data-theme="dark"]
     redefine o token pra --color-accent-tint-on-dark, #A8D3F0, pensado pra
     contraste sobre --color-surface escuro), então tanto o preto do título
     quanto o azul fixo do corpo ficariam ilegíveis/incoerentes se
     vazassem pro escuro sem querer. Por isso o preto é literal aqui (não
     depende de tema) e cada override de [data-theme="dark"] mais abaixo
     restaura exatamente o comportamento anterior (título de volta a
     var(--color-accent-on-dark), corpo de volta ao seu token de texto
     original) — dark mode fica bit-a-bit como estava. */
  /* REVISÃO (letterman) — PEDIDO DO USUÁRIO (com referência de imagem):
     título dos cards volta a usar "Newsreader" (serifada editorial), agora
     em ITÁLICO — leitura "manchete de jornal/editorial", só no modo claro.
     <link> de fontes de index.html atualizado com os cortes itálicos reais
     desta família (1,500/1,600 + eixo opsz), ver comentário lá — sem corte
     itálico real, o navegador sintetizaria um slant falso sobre o corte
     normal, o mesmo problema já documentado alhures neste arquivo para
     Inter/Manrope. Peso mantido (600 aqui, 500 em .beneficios__item-title/
     .processo__item-title) — pesquisa researchdude já tinha calibrado este
     peso para Newsreader nesta mesma faixa de tamanho (a rodada que
     removeu o itálico só trocou font-style, nunca o peso), então o mesmo
     valor segue válido agora que o itálico volta.
     Escopo modo claro: [data-theme="dark"] mais abaixo restaura
     font-family: var(--font-display) (Oswald) e font-style: normal para
     estes 5 seletores, então o escuro fica bit-a-bit como estava.
     Cor: trocada de #000000 (preto, que agora vai para o H2 — ver regra
     "body.pagina-home h2") para var(--color-text-heading) — o token que o
     H2 usava antes desta troca (#211E1A no claro). Card e H2 literalmente
     TROCAM de cor nesta rodada; dark mode não é afetado porque o override
     abaixo já define a cor do card explicitamente para os dois temas. */
  /* REVISÃO (layoutman) — margin-bottom sobe de 1rem/16px para
     var(--space-5)/20px. 16px era muito perto do gap interno de cada item
     da lista (também ~16-20px de área de respiro ao redor do divisor),
     então o título quase se misturava visualmente ao 1º item, como se
     fizesse parte da mesma "grade" repetitiva da lista em vez de ser o
     cabeçalho dela. Um degrau a mais de respiro aqui marca com clareza
     "isto é o título, o resto é conteúdo" — mesmo princípio de hierarquia
     por espaço, não por tamanho/cor, já usado no resto do sistema. */
  /* REVISÃO (letterman) — AVALIAÇÃO, SEM MUDANÇA: revisão pedida após a
     rodada do layoutman que tornou o respiro do card assimétrico (padding
     do .preview-card de --space-7/--space-6 em vez de uniforme; margin-
     bottom deste título e margin-top de .preview-card__caption subindo
     juntos para --space-5; padding de .preview-card__item virando
     --space-5 em cima/--space-3 embaixo). Pergunta: a hierarquia
     tipográfica atual (família/peso/tamanho/line-height/tracking destes 5
     seletores — este título, .preview-card__item-title, .preview-card__
     item-detail, .preview-card__number, .preview-card__caption) ainda lê
     como "harmônico e dinâmico" com esse novo ritmo de espaço, ou precisa
     de ajuste fino?
     Conclusão: NENHUM valor tipográfico mudou. Três razões, cobrindo os 5
     seletores:
     1) O novo respiro é assimétrico só ENTRE blocos (mais ar acima do
        título editorial, abertura maior de cada item, fechamento mais
        compacto perto do hairline) — nunca DENTRO de um bloco de texto
        (o gap de 0.25rem entre .item-title e .item-detail, que é onde
        line-height/tracking realmente atuariam, não foi tocado pelo
        layoutman). Não há, portanto, um novo espaço interno que a
        tipografia precise "preencher" ou compensar.
     2) O time do sistema já usa espaço (não tamanho/cor/peso) como eixo
        de hierarquia neste card por decisão deliberada e repetida (ver
        comentário logo abaixo, sobre este mesmo margin-bottom, e o
        raciocínio equivalente na REVISÃO do .preview-card__number, mais
        abaixo, sobre "destaque por UM eixo"). Adicionar uma mudança
        tipográfica agora para reforçar uma assimetria que o espaço já
        criou duplicaria o sinal em dois eixos ao mesmo tempo — o oposto
        do princípio já estabelecido no arquivo.
     3) Título itálico serifado (Newsreader 600, --fs-small) sobrando mais
        ar acima (padding-top do card subiu para --space-7/48px, margin-
        bottom dele para --space-5/20px) lê como um respiro editorial
        maior ao redor de uma manchete pequena — reforça, não briga com,
        a leitura de "abertura de matéria" que já motivou a escolha da
        família/itálico (ver blocos de REVISÃO acima). Nenhum dos 3 outros
        tamanhos (--fs-body do item-title/number, --fs-caption do detail/
        caption) fica pequeno ou grande demais para o novo espaço ao redor
        — são os mesmos textos, nas mesmas colunas de largura, só com
        moldura redistribuída.
     Decisão: manter os 5 seletores como estavam. Dark mode não foi tocado
     (nenhum valor light-only mudou), então os overrides de
     [data-theme="dark"] logo no topo do arquivo continuam válidos sem
     alteração. */
  /* REVISÃO (letterman) — PEDIDO DO USUÁRIO: o título do card da hero
     precisa se destacar mais dentro do card e ficar na mesma linguagem
     visual do azul-itálico já estabelecido em .text-highlight (serifada,
     itálico, --color-highlight-emphasis, peso 700). Título já era
     Newsreader itálico (mesma família), mas com peso 600/cor neutra/
     tamanho --fs-small (15px, MENOR que o próprio corpo de texto dos itens
     abaixo dele em --fs-body/17px — o oposto de "se destacar"). Três
     mudanças, replicando as propriedades de .text-highlight direto nesta
     classe (em vez de aplicar a classe via HTML, que não é escopo deste
     agente — copy/estrutura do card continuam com writerman/layoutman):
       - font-weight 600 → 700, igual a .text-highlight;
       - color: var(--color-text-heading) → var(--color-highlight-emphasis),
         o mesmo token azul que .text-highlight usa (--color-highlight-
         emphasis, hoje aliased a --color-highlight nos dois temas);
       - font-size: var(--fs-small) (15px) → var(--fs-h3) (24px) — sobe pro
         mesmo degrau de "título de card" que --fs-h3 já representa no
         sistema (badge de canto, número de step, .mds__term), ficando
         maior que .preview-card__item-title (--fs-body/17px) logo abaixo,
         o que faltava para ler como título de destaque em vez de legenda.
     letter-spacing não ganhou regra própria (0 por padrão do navegador em
     itálico serifado, mesmo comportamento que .text-highlight, que também
     não define tracking próprio fora do reset letter-spacing:0). margin
     mantida — espaçamento é escopo do layoutman, sinalizado para revisar
     se o título maior aperta o card.
     Contraste: --color-highlight-emphasis mede ~3,11:1 sobre o fundo claro
     do card — abaixo do piso 4,5:1 de texto normal, mas dentro do piso
     3:1 de "texto grande" (WCAG 1.4.3), que passa a ser o critério
     aplicável aqui porque o título sobe para --fs-h3 (24px, ≥24px E peso
     700 cobre os dois gatilhos de "grande" do WCAG com folga). */
  /* REVISÃO (layoutman) — margin-bottom sobe de --space-5/20px para
     --space-6/32px. O letterman subiu o font-size deste título de
     --fs-small (15px) para --fs-h3 (24px) e o peso de 600 para 700 (ver
     nota completa acima), deixando-o o elemento mais pesado do card; o
     --space-5 antigo foi calibrado para um título do tamanho de legenda
     (15px), e ficou raso demais para "abrir" um título que agora tem a
     mesma presença visual de um h3 de card em qualquer outro lugar do
     site. --space-6 iguala o respiro que os títulos de card irmãos
     (.step-card__title etc.) reservam para separar o título do conteúdo
     abaixo, sem competir com o degrau maior (--space-7) usado no padding
     superior do próprio .preview-card. */
  /* REVISÃO (letterman) — TAREFA 1 desta rodada: a copy do título ganhou um
     <span class="preview-card__title-accent"> em volta só da palavra
     "ACERTAR" (writerman), então a cor de destaque (var(--color-
     highlight-emphasis), o mesmo azul de .text-highlight) sai daqui — do
     título inteiro — e vai só para o span, logo abaixo. O restante do
     título volta à cor normal de texto do sistema, var(--color-text-
     heading), mesmo token que .preview-card__item-title/.faq-item__
     question já usam para "texto mais assertivo que corpo comum, mas não
     um h2/h3 de verdade" — não inventei uma quarta cor de texto.

     TAREFA 2 desta rodada: aumento proporcional de todo o texto do card.
     Este título já estava no topo da hierarquia interna do card e no
     maior degrau de escala abaixo de --fs-h2 (--fs-h3, 24px, 700) — subir
     para --fs-h2 (piso 33,92px no clamp) o colocaria no MESMO tamanho dos
     títulos de SEÇÃO reais da página (h2), quebrando a hierarquia global
     que o resto do arquivo protege explicitamente (ver histórico das
     REVISÕES 18-21 acima, todas revertendo tentativas de inflar títulos de
     card até perto de --fs-h2/--fs-h3×N). Em vez de saltar para o próximo
     TOKEN nomeado, sigo o mesmo mecanismo já usado alhures neste arquivo
     para "um degrau intermediário sem criar um token novo" (calc() sobre
     um token existente, não um valor solto): calc(var(--fs-h3) * 1.15) ≈
     27,6px — visivelmente maior que antes, mas com folga clara abaixo do
     piso de --fs-h2 (33,92px), preservando "título de card sempre menor
     que título de seção". font-weight já estava no teto do sistema (700)
     e continua — não há degrau de peso acima disso em uso no site.
     line-height ganha regra própria: var(--lh-heading) (1,3), mais fechado
     que o var(--lh-body)/1,55 herdado do body que este <p> usava antes
     (sem line-height próprio) — no tamanho novo, 1,55 deixaria a segunda
     linha do título com respiro maior que o de um h3 de verdade; 1,3 é o
     mesmo valor que h1/h2/h3 globais já usam, mantendo a leitura de
     título mesmo maior. */
  .preview-card__title {
    font-family: "Newsreader", var(--font-display);
    font-style: italic;
    font-weight: 700;
    font-size: calc(var(--fs-h3) * 1.15);
    line-height: var(--lh-heading);
    color: var(--color-text-heading);
    margin: 0 0 var(--space-6);
  }

  .preview-card__title-accent {
    color: var(--color-highlight-emphasis);
  }

  /* REVISÃO (letterman) — TAREFA 2: .preview-card__item-title sobe um
     degrau na escala nomeada (--fs-body/17px → --fs-body-lg/18px, o mesmo
     par citado como referência no pedido) e de peso 600 para 700 — mesma
     lógica documentada em REVISÃO ANTERIOR sobre "contraste peso título↔
     legenda em cards" (topo do arquivo), só que aplicada agora ao título
     do ITEM (não ao título do card). line-height permanece var(--lh-
     heading): 1,3 sobre 18px ainda dá respiro suficiente, sem precisar de
     ajuste. .preview-card__number replica este par 1:1 logo abaixo, pelo
     mesmo motivo já documentado ali ("mesma voz tipográfica do título do
     item ao lado"). */
  .preview-card__item-title {
    font-family: "Newsreader", var(--font-display);
    font-style: italic;
    font-weight: 700;
    font-size: var(--fs-body-lg);
    line-height: var(--lh-heading);
    color: var(--color-text-heading);
    margin: 0 0 0.25rem;
  }

  /* REVISÃO (letterman) — TAREFA 2: .preview-card__item-detail sobe de
     --fs-caption (14px) para --fs-small (15px) — um degrau acima, ainda
     abaixo de .preview-card__item-title (--fs-body-lg/18px), preservando a
     hierarquia título > detalhe do item. Peso sobe de 400 (herdado, sem
     declaração própria) para 500 — legível como "corpo com um pouco mais
     de presença", sem competir com o 700 do título logo acima. strong
     dentro do detalhe sobe de 600 para 700, mantendo a mesma distância
     relativa de peso que já tinha em relação ao texto ao redor (peso base
     +1 degrau em ambos). line-height permanece var(--lh-small): 1,5 sobre
     15px continua confortável, sem ficar apertado. */
  .preview-card__item-detail {
    font-size: var(--fs-small);
    font-weight: 500;
    line-height: var(--lh-small);
    color: var(--color-accent);
    margin: 0 0 0.25rem;
  }
  .preview-card__item-detail strong {
    font-weight: 700;
    color: var(--color-text-body);
  }

  /* Os três itens usam o mesmo tom — é uma lista sequencial, não uma
     categorização que precise de cores diferentes por item. */
  /* REVISÃO (letterman) — TAREFA 2 desta rodada, "big type" revisitado com
     referência nova (Heart Aerospace, frames analisados pelo coordenador).
     A rodada ANTERIOR (histórico abaixo, removido) tinha isolado "1"/"2"/"3"
     num chip circular com fonte mono 36px/800 — o usuário não gostou do
     resultado. Reavaliei este elemento contra os 4 padrões tipográficos que
     a referência realmente usa (manchete oversized sangrando a viewport;
     nome de produto em escala de marca d'água; parágrafo-manifesto bold
     grande; estatística embutida numa frase curta, no MESMO peso do resto
     da frase, nunca maior/isolada num círculo).

     Nenhum dos 3 primeiros padrões cabe aqui: não há manchete/nome de
     produto/parágrafo longo neste componente, só um numeral de 1 caractere.
     O 4º padrão é o único que descreve exatamente este tipo de numeral — e
     a lição mais explícita dele é justamente a OPOSTA da tentativa anterior:
     "as estatísticas NUNCA aparecem isoladas dentro de um círculo/chip...
     no mesmo peso bold da frase ao redor (não maiores que o resto da
     frase)". Este card não tem uma estatística de verdade (%, dado
     numérico) para embutir numa frase — é uma numeração sequencial de lista
     (1/2/3) — então não inventei uma frase nova (isso seria copy, fora do
     meu escopo); apliquei a PARTE tipográfica do padrão que se transfere sem
     reescrever texto: o número deixa de viver isolado num chip com fonte/
     cor/peso próprios e passa a se comportar como uma marca de lista que
     participa da MESMA voz tipográfica do título do item ao lado
     (.preview-card__item-title) — mesma família, mesmo peso, mesmo tamanho,
     só destacado por cor — em vez de competir com ele como um elemento
     gráfico à parte.
     font-family/font-weight/font-size/line-height abaixo replicam
     .preview-card__item-title 1:1 de propósito (ver essa regra logo acima)
     — é a mesma leitura "não maior que o resto da frase" do padrão 4,
     adaptada de "dentro de uma frase" para "ao lado de um título de mesma
     altura de linha", que é a estrutura real deste componente (chip
     fora do fluxo de texto, não span inline). Cor --color-text-link mantida
     do sistema anterior — ainda sinaliza "isto é um item ACIONÁVEL" (mesmo
     papel documentado antes), só que agora só a cor carrega essa
     diferenciação, não mais tamanho/peso/família — leitura de destaque por
     UM eixo, coerente com como o resto do sistema evita empilhar eixos de
     contraste sem necessidade (mesmo princípio já aplicado em "h2
     .text-highlight" acima). display/circle/chip removidos (ver regra de
     layout mais abaixo, junto a .preview-card__item) — nota para o
     layoutman: a numeração agora é só texto alinhado ao título ao lado,
     sem container próprio; se a lista ganhar respiro/alinhamento diferente
     do que o flex padrão entrega, é ponto de ajuste dele, não meu. */
  /* REVISÃO (letterman) — TAREFA 2 desta rodada: replica 1:1 o novo par de
     .preview-card__item-title (--fs-body/17px → --fs-body-lg/18px, peso 600
     → 700), pelo mesmo motivo já documentado acima ("mesma voz tipográfica
     do título do item ao lado, só destacado por cor") — se o item-title
     cresce, o número ao lado precisa crescer junto para continuar tendo a
     mesma altura de linha/presença visual, senão os dois desalinham. */
  .preview-card__number {
    flex: none;
    align-self: flex-start;
    color: var(--color-text-link); /* REVISÃO 5 — era --color-accent-active; mesma troca do .btn--secondary:hover acima (--color-accent-active virou tom de fundo de botão quase-branco, Categoria 2, não serve mais como texto) */
    font-family: var(--font-body);
    font-weight: 700;
    font-size: var(--fs-body-lg);
    line-height: var(--lh-heading);
  }
  /* REVISÃO 12 (letterman) — pedido do usuário: cor diferente por tema
     nestes números especificamente (item 2 do bloco "REVISÃO 12" no topo
     do arquivo). --color-accent-on-dark é o mesmo token já auditado pelo
     colorman para "azul de Ação sobre superfície que muda de tema" (mesmo
     usado por .btn--secondary/.next-step__link); sem chip/fundo próprio
     desde a revisão acima, esta sobrescrita agora só troca a cor do texto,
     não mais um par background+border. */
  [data-theme="dark"] .preview-card__number {
    color: var(--color-accent-on-dark);
  }

  /* REVISÃO (letterman) — font-style: italic REMOVIDO daqui e de todo o
     grupo "nota de apoio" do sistema (.preview-card__caption,
     .concepts__note, .sources__disclaimer, .pricing__note,
     .sources-block__text — mesmos 5 consumidores citados na REVISÃO 11
     original, item 2, preservada no topo do arquivo). Pedido do dono do
     produto: nenhum itálico/cursiva em lugar nenhum da nova direção
     tipográfica, não só nos destaques coloridos — itálico como "nota
     discreta" também está descartado. O sinal "isto é uma nota de apoio,
     não corpo/título" continua existindo sem itálico: --color-text-muted
     (mais claro que o corpo) + --fs-caption (menor que --fs-small/--fs-
     body) já formam um par de sinais NÃO-itálicos suficiente — cor +
     tamanho, os mesmos dois eixos que o researchdude confirmou serem o
     padrão de produtos de dado/SaaS técnico para hierarquia sem itálico.
     Nenhuma cor/tamanho novo introduzido; só a propriedade font-style foi
     removida das 5 regras. */
  /* REVISÃO (layoutman) — margin-top sobe de 1rem/16px para
     var(--space-5)/20px, para "fechar" o card com o mesmo respiro que o
     título usa para "abri-lo" (também var(--space-5) agora, ver regra de
     .preview-card__title acima) — as duas bordas do bloco de lista (título
     em cima, legenda embaixo) ficam com o mesmo peso de espaço, formando
     uma moldura simétrica ao redor de um conteúdo (os 3 itens) que agora
     tem ritmo interno assimétrico. É o mesmo princípio de "sistema, não
     valor solto" usado no resto do site: dois números (--space-5/--space-3)
     reaproveitados em vez de introduzir um terceiro valor de espaçamento
     só para a legenda. */
  /* REVISÃO (letterman) — TAREFA 2 desta rodada: mesmo degrau aplicado a
     .preview-card__item-detail acima (--fs-caption/14px → --fs-small/15px,
     peso 400 herdado → 500) — a legenda é a nota de apoio mais discreta do
     card e continua sendo o menor texto dele mesmo depois do aumento,
     preservando a hierarquia (título > item-title/número > item-detail >
     caption). line-height permanece var(--lh-small), ainda confortável em
     15px. */
  .preview-card__caption {
    color: var(--color-text-muted);
    font-size: var(--fs-small);
    font-weight: 500;
    line-height: var(--lh-small);
    margin-top: var(--space-5);
  }

  /* ---------- Seções (ritmo alternado, estilo editorial) ---------- */
  /* REVISÃO 3.2 — todas as seções migradas para --color-bg-page (agora
     #FFFFFF); a alternância de tom entre seções (steps/sources/waitlist
     em --color-bg-section-alt vs. concepts/pricing/faq em --color-bg-page)
     foi removida a pedido do usuário — fundo 100% branco e consistente em
     toda a página, não um ritmo de dois tons de branco/névoa. */
  /* REVISÃO (layoutman) — as seis declarações de background-color abaixo
     (uma por seção) foram removidas: eram todas var(--color-bg-page), o
     valor EXATO já pintado pelo body — pura redundância. Mesma lógica e
     mesmo raciocínio da remoção em .hero acima (ver nota lá): sem essas
     repinturas, a camada decorativa fixa "lava lamp" (fim do arquivo)
     consegue aparecer atrás das seções onde não há um card opaco por
     cima. Nenhum token/cor mudou — .steps/.concepts/.sources/.pricing/
     .waitlist/.faq continuam com o mesmo fundo visual de sempre onde a
     nova camada não estiver presente ou estiver coberta por um card. */

  /* ---------- Cabeçalhos de seção (reutilizado por steps, concepts, sources, pricing, waitlist, faq) ---------- */
  .section-title {
    margin: 0 0 0.5rem;
  }

  /* REVISÃO 11 (letterman) — peso 500, nível "lede" do sistema; ver
     bloco "REVISÃO 11" no topo do arquivo, item 1. */
  /* REVISÃO 13 (letterman) — h2/.section-title de seção agora é
     centralizado (ver regra global h2); .section-subtitle acompanha,
     senão o par lê como "título centralizado + legenda desalinhada por
     baixo". max-width sozinho só limita a largura da linha, não
     centraliza o bloco — daí o margin:0 auto junto com text-align:center.
     max-width também desceu de 60ch para 56ch nesta revisão: texto
     centralizado tem contorno irregular dos DOIS lados, o que dificulta
     achar o início da próxima linha mais do que num bloco alinhado à
     esquerda — por isso pede uma medida de linha um pouco mais curta.
     Ver bloco "REVISÃO 13" no topo do arquivo, item 3, para o raciocínio
     completo (inclui .mds__intro, que usa a mesma medida agora). */
  .section-subtitle {
    font-size: var(--fs-body-lg);
    font-weight: 500;
    line-height: var(--lh-body);
    color: var(--color-text-muted);
    max-width: 56ch;
    margin: 0 auto;
    text-align: center;
  }

  /* REVISÃO 11 (letterman) — .analise__intro nunca tinha ganhado regra
     própria (ficava só com o <p> base, peso 400/--fs-body) apesar de já
     ser citada nos comentários da REVISÃO 10 como parte do mesmo grupo
     de .section-subtitle/.next-step__text. Mesmo par tipográfico do
     resto do grupo "lede": --fs-body-lg/--lh-body/peso 500,
     --color-text-body (papel "frase de apoio corrida", não "legenda
     discreta" — por isso body, não muted). */
  /* REVISÃO 14 (letterman) — PEDIDO DO USUÁRIO ("checar as outras
     páginas"): achado ao revisar analise.html — .analise__intro fica
     dentro do mesmo <h1 class="section-title"> + <p> em .section-heading
     (centralizado globalmente, ver regra .section-heading) que
     .section-subtitle usa nas outras páginas, mas nunca recebeu o ajuste
     da REVISÃO 13. O texto HERDAVA text-align:center do ancestral
     .section-heading, então a última linha aparentava estar centralizada,
     mas o BLOCO (max-width:62ch, sem margin:auto) ficava encostado na
     borda esquerda do container de 640px — exatamente o bug que a
     REVISÃO 13 descreve para .section-subtitle/.mds__intro antes da
     correção. Mesmo conserto: margin-inline:auto para centralizar o
     bloco em si, e max-width descendo de 62ch para 56ch para igualar o
     resto do grupo "lede centralizada" (.section-subtitle/.mds__intro/
     .planos-teaser__text/.faq-teaser__text, todas em 56ch agora).
     text-align:center também fica explícito na regra (antes só herdado)
     por clareza/robustez, mesmo padrão das outras ledes do grupo. */
  .analise__intro {
    font-size: var(--fs-body-lg);
    font-weight: 500;
    line-height: var(--lh-body);
    color: var(--color-text-body);
    max-width: 56ch;
    margin-inline: auto;
    text-align: center;
  }

  /* ---------- Steps ---------- */
  .step-card {
    background-color: var(--color-surface);
    /* REVISÃO (colorman) — PEDIDO DO USUÁRIO: unificar a cor de todos os
       cards do site com a dos 4 cards da home (.preview-card/.beneficios__
       item/.processo__item/.mds__item). Era border 1px --color-border-
       strong + box-shadow var(--shadow-card-rest) (nota antiga da REVISÃO
       3.2 preservada acima só como histórico do "porquê da sombra");
       trocado para a MESMA fórmula "bordas invisíveis" já usada na home:
       border-color transparent (largura mantida, box model intacto) +
       --shadow-card-rest-borderless (o token dedicado que já existe e já
       tem alias correto em [data-theme="dark"] — nenhum token novo). */
    border: 1px solid transparent;
    box-shadow: var(--shadow-card-rest-borderless);
  }

  /* Os três passos usam o mesmo tom de marca — é uma sequência de um
     único fluxo, não categorias diferentes que precisem de cores próprias. */
  /* REVISÃO letterman — o número do chip estava em --fs-caption (14px),
     o menor token da escala, pra um elemento que é o ponto de entrada
     visual de cada passo (1, 2, 3). Sobe para --fs-h3 (24px), peso 700
     mantido. Dimensão do chip (ver width/height mais abaixo, junto ao
     grid de steps) ajustada de 28px para 44px pra não espremer o
     algarismo maior contra a borda — mesma proporção aproximada
     tamanho-da-fonte:tamanho-do-chip de antes (28/14 ≈ 2x; 44/24 ≈ 1.8x,
     levemente mais compacto porque um número maior precisa de menos
     "respiro" proporcional pra continuar legível). */
  .step-card__number {
    background-color: var(--color-brand-tint);
    color: var(--color-brand-dark); /* REVISÃO 5 — era --color-brand; --color-brand agora é o tom estrutural claro (Categoria 3, ~1.3:1 sobre fundos claros, sem obrigação de contraste como decorativo) e não serve mais como texto. --color-brand-dark é o token dedicado a texto sobre fundo claro nesta família: ~5.99:1 sobre --color-brand-tint */
    border: 1px solid var(--color-brand-tint-strong);
    font-family: var(--font-body);
    font-weight: 700;
    font-size: var(--fs-h3);
  }

  /* REVERTIDO (layoutman) — a REVISÃO anterior tinha recalibrado esta
     margem (0.75rem 0 0.5rem → var(--space-5) 0 var(--space-6)) para
     acomodar o h3 global quando ele chegou a 72px fixo. O letterman
     reverteu esse tamanho de volta a var(--fs-h3)/24px (era erro de
     digitação — o pedido real era h4, não h3), então a proporção antiga
     (12px de topo, 8px de base) volta a ser a calibrada certa para um
     título de 24px. */
  /* REVISÃO (letterman) — UNIFICAÇÃO DE TIPOGRAFIA DE CARDS: título divergia
     da família tipográfica que os 4 cards de referência da home usam para
     título de card (.beneficios__item-title/.processo__item-title/
     .mds__term — Newsreader itálico, peso 500, sobre a mesma cor/tamanho/
     tracking/line-height que este h3 já herdava da regra global "h1, h2,
     h3", inalterados). Antes só herdava Manrope não-itálico (var(--font-
     heading)) da regra global. Nenhum outro card da home escapa dessa
     família — não havia justificativa de conteúdo para .step-card ser
     exceção. font-size/color/line-height/letter-spacing continuam 100%
     herdados da regra global (--fs-h3/24px, var(--color-text-heading),
     var(--lh-heading), -0.005em) — só family/style mudam aqui, igual ao
     padrão dos 3 títulos de referência citados. Dark mode: par
     font-family:var(--font-display)+font-style:normal restaurado no bloco
     [data-theme="dark"] (ver seletor unificado lá), mesmo tratamento que
     os 5 títulos de referência já recebem no escuro. */
  .step-card__title {
    font-family: "Newsreader", var(--font-display);
    font-style: italic;
    font-weight: 500;
    margin: 0.75rem 0 0.5rem;
  }

  /* REVISÃO (letterman) — UNIFICAÇÃO DE TIPOGRAFIA DE CARDS: font-size
     divergia do corpo de texto que os 3 cards de grade de referência da
     home usam (.beneficios__item-text/.processo__item-text/.mds__definition
     — --fs-body-lg/18px, var(--lh-body)); este corpo estava em --fs-small
     (15px), um degrau abaixo, sem motivo de conteúdo (mesmo papel — texto
     de apoio de um item de card curto). line-height já era var(--lh-body),
     igual à referência, mantido. Cor não tocada (escopo do colorman). */
  .step-card__description {
    font-size: var(--fs-body-lg);
    line-height: var(--lh-body);
    color: var(--color-text-body);
    margin: 0 0 0.75rem;
  }

  .step-card__status {
    background-color: var(--color-warning-bg);
    color: var(--color-warning-text);
    border: 1px solid var(--color-warning-border);
    font-family: var(--font-body);
    font-weight: 600;
    font-size: var(--fs-caption);
  }

  /* ---------- Conceitos (SEO/AEO/GEO) ---------- */
  /* REVISÃO N (layoutman) — .concept-card tinha uma propriedade extra que
     nenhum outro card genérico do site (.step-card/.source-card/
     .plan-card) tem: border-top: 3px solid var(--color-brand). Era
     discreta na paleta azul antiga (Marinho escuro/dessaturado); com
     --color-brand agora um rosa vívido (#FF8FC5), a borda ficou muito
     mais chamativa e fez o card de conceito destoar visualmente dos
     outros três tipos, que usam todos a mesma "fórmula de card genérico"
     (background-color: --color-surface + border 1px --color-border-strong
     + o mesmo box-shadow) — a própria documentação do arquivo já afirmava
     que deveriam ser a mesma fórmula. Removida a border-top; .concept-card
     agora usa exatamente a mesma fórmula que .step-card/.source-card/
     .plan-card. Presença do rótulo .concept-card__acronym sem a borda
     acima: mantém peso 700 + caixa alta + tracking já existentes, que já
     dão hierarquia suficiente por si só (mesmo tratamento visual de
     .step-card__number, que nunca teve borda superior) — não foi
     necessário reforçar mais nada. */
  .concept-card {
    background-color: var(--color-surface);
    /* REVISÃO (colorman) — mesma unificação de cor de card do .step-card
       acima: bordas invisíveis + sombra dedicada, igual aos 4 cards da
       home. */
    border: 1px solid transparent;
    box-shadow: var(--shadow-card-rest-borderless);
  }

  /* REVISÃO 12 (letterman) — era --fs-eyebrow (13px) + tracking 0.04em;
     ver bloco "REVISÃO 12" no topo do arquivo, item 1.
     REVISÃO letterman (esta): --fs-h3 (24px) igualava o acrônimo ao <h3>
     do título do card logo abaixo — o rótulo estrutural (SEO/AEO/GEO)
     estava competindo em tamanho com o nome de verdade do conceito, em
     vez de introduzi-lo. Desce para --fs-caption (14px), o mesmo degrau
     já usado por rótulos estruturais irmãos (.badge, .step-card__status),
     e o tracking sobe de 0.02em para 0.04em pra bater com o mesmo
     tratamento uppercase+caption já padronizado nesses rótulos (ver
     .badge/.next-step__eyebrow, letter-spacing: 0.04em). */
  .concept-card__acronym {
    color: var(--color-brand-dark); /* REVISÃO 5 — era --color-brand; mesma troca do .step-card__number acima (--color-brand virou tom estrutural pálido, sem contraste de texto); ~6.52:1 sobre branco */
    font-family: var(--font-body);
    font-weight: 700;
    font-size: var(--fs-caption);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    margin: 0 0 0.5rem;
  }

  /* REVERTIDO (layoutman) — mesmo raciocínio de .step-card__title acima:
     o h3 global voltou a 24px (var(--fs-h3), erro de digitação
     revertido pelo letterman), então a margem-base volta ao valor
     calibrado para esse tamanho. */
  /* REVISÃO (letterman) — mesma unificação de tipografia de card aplicada
     em .step-card__title, acima: família Newsreader itálica peso 500,
     igualando .beneficios__item-title/.processo__item-title/.mds__term.
     size/color/line-height/tracking continuam herdados da regra global
     h1,h2,h3, inalterados. Dark mode restaurado no bloco [data-theme="dark"]
     unificado, mesmo tratamento dos títulos de referência. */
  .concept-card__title {
    font-family: "Newsreader", var(--font-display);
    font-style: italic;
    font-weight: 500;
    margin: 0 0 0.5rem;
  }

  /* REVISÃO (letterman) — mesma unificação de .step-card__description,
     acima: font-size --fs-small→--fs-body-lg, igualando o corpo dos 3
     cards de grade de referência da home. */
  .concept-card__description {
    font-size: var(--fs-body-lg);
    line-height: var(--lh-body);
    color: var(--color-text-body);
    margin: 0;
  }

  .concepts__note {
    /* REVISÃO 3.2 — era --color-bg-section-alt (fundo de seção alternado,
       agora aposentado); passou a usar --color-surface-alt. PEDIDO DO
       USUÁRIO (consistência claro/escuro) — --color-surface-alt e
       --color-surface tinham divergido de grupo entre os dois temas
       (ver nota em .aviso-analise); trocado para --color-surface, junto
       com os outros 4 membros deste grupo (.aviso-analise,
       .planos-teaser, .analise-form__summary, os 3 estados iniciais do
       fluxo de análise), pra todos baterem nos dois temas de novo. */
    background-color: var(--color-surface);
    border: 1px solid var(--color-border-strong);
    box-shadow: var(--shadow-card-rest); /* PEDIDO DO USUÁRIO — sistema de elevação novo */
    color: var(--color-text-muted);
    font-size: var(--fs-caption);
    line-height: var(--lh-small);
    /* font-style: italic removido — ver nota em .preview-card__caption acima. */
  }

  /* ---------- Fontes / como orientamos ---------- */
  .source-card {
    background-color: var(--color-surface);
    /* REVISÃO (colorman) — mesma unificação de cor de card do .step-card
       acima: bordas invisíveis + sombra dedicada, igual aos 4 cards da
       home. */
    border: 1px solid transparent;
    box-shadow: var(--shadow-card-rest-borderless);
  }

  /* REVERTIDO (layoutman) — mesmo raciocínio de .step-card__title/
     .concept-card__title acima: h3 global voltou a 24px, margem-base
     volta ao valor original calibrado para esse tamanho. */
  /* REVISÃO (letterman) — mesma unificação de tipografia de card aplicada
     em .step-card__title/.concept-card__title, acima: família Newsreader
     itálica peso 500. size/color/line-height/tracking herdados da regra
     global h1,h2,h3, inalterados. Dark mode restaurado no bloco
     [data-theme="dark"] unificado. */
  .source-card__title {
    font-family: "Newsreader", var(--font-display);
    font-style: italic;
    font-weight: 500;
    margin: 0 0 0.5rem;
  }

  /* REVISÃO (letterman) — mesma unificação de .step-card__description/
     .concept-card__description, acima: font-size --fs-small→--fs-body-lg. */
  .source-card__description {
    font-size: var(--fs-body-lg);
    line-height: var(--lh-body);
    color: var(--color-text-body);
    margin: 0 0 0.75rem;
  }

  /* REVISÃO 6 (colorman) — era --color-text-link / --color-text-link-hover
     (azul); redirecionado para a dupla neutra --color-text-body /
     --color-text-heading, mesma lógica "hover mais escuro" de sempre.
     Ganhou text-decoration underline sempre visível (não só no hover)
     como sinal não-colorido de "isto é clicável", complementando o peso
     600 já existente. Contraste: --color-text-body ~9,02:1 sobre branco;
     --color-text-heading ~17,30:1 sobre branco — ambos muito acima do
     mínimo 4,5:1. */
  .source-card__link {
    color: var(--color-text-body);
    text-decoration: underline;
    font-family: var(--font-body);
    font-weight: 600;
    font-size: var(--fs-small);
  }
  .source-card__link:hover,
  .source-card__link:focus-visible {
    color: var(--color-text-heading);
  }

  /* URL em fonte regular, não monoespaçada: exibir o link como se fosse
     um trecho de código reforça a leitura "técnica" que estamos evitando;
     como texto normal, ele fica legível sem soar "de desenvolvedor". */
  .source-card__url {
    color: var(--color-text-muted);
    font-family: var(--font-body);
    font-size: var(--fs-caption);
    word-break: break-all;
    margin-top: 0.5rem;
  }

  .sources__disclaimer {
    background-color: var(--color-surface);
    /* REVISÃO 3.2 — mesmo ajuste do .step-card (ver nota lá). */
    border: 1px solid var(--color-border-strong);
    color: var(--color-text-muted);
    font-size: var(--fs-caption);
    /* font-style: italic removido — ver nota em .preview-card__caption acima. */
    line-height: var(--lh-small);
  }

  /* ---------- Planos ---------- */
  /* REVISÃO N+1 (layoutman) — pedido do usuário: remover o badge "Indicado
     para mais de um site" (destacava só o card do meio de forma descolada
     do resto) e aplicar o MESMO efeito de hover (gradiente + borda) aos 3
     cards, não só ao .plan-card--featured — os 3 planos agora se comportam
     de forma idêntica, a única diferença entre eles é o conteúdo.
     .plan-card--featured continua no HTML (marca qual card é o
     recomendado, para fins semânticos), mas não recebe mais nenhuma regra
     própria de estilo — herda tudo de .plan-card. Borda do hover trocada
     de --color-brand (#5299C9, saturado) para --color-brand-light
     (#83B6D8, mesmo token já usado como versão suavizada da marca na
     borda do FAQ aberto) a pedido do usuário ("suavizar o tom de azul").

     REVISÃO N+3 (layoutman) — dois ajustes pedidos pelo usuário nesta
     rodada:
     1) "a caixa inteira fique com aparência azul": o gradiente antigo
        (linear-gradient 180deg, tint→--color-surface em 30%) só tingia o
        TOPO do card, o resto ficava branco. Trocado para um gradiente que
        cobre 100% da altura, ambos os stops dentro da própria família
        azul (--color-brand-tint → --color-brand-tint-strong) — a caixa
        inteira lê como azul, sem trecho branco.
     2) "efeito de cor e tamanho mais fluido": a técnica antiga trocava
        `background-image` diretamente no :hover — propriedade que NÃO
        anima suavemente entre dois gradientes distintos (troca abrupta,
        já documentado aqui antes). Substituído por um pseudo-elemento
        ::before dedicado ao gradiente, que transiciona por OPACITY (essa
        sim anima suavemente) — o azul agora esmaece gradualmente. "Efeito
        de tamanho": borda deixou de mudar de largura (1px→2px, salto não
        suavizável em todos os navegadores) — agora é sempre 2px, só a COR
        transiciona; e foi adicionado transform: translateY(-4px) no
        hover, a mesma curva de transição dos outros, para dar a sensação
        de elevação/"tamanho" que faltava, tudo com timing único (.3s
        ease) para ler como um efeito só, não vários saltos separados. */
  .plan-card {
    position: relative;
    z-index: 0;
    background-color: var(--color-surface);
    /* REVISÃO (colorman) — unificação de cor com os cards da home: cor da
       borda de repouso trocada para transparent (largura de 2px mantida —
       estrutural, fora do escopo de cor) e sombra trocada para o token
       dedicado --shadow-card-rest-borderless. O hover mantém seu
       tratamento próprio (gradiente azul + border-color var(--color-brand-
       light) + --shadow-card-hover, ver regras logo abaixo) — esse é um
       destaque semântico de CTA/plano recomendado, não a cor neutra de
       repouso do card, então não faz parte desta unificação. */
    border: 2px solid transparent;
    box-shadow: var(--shadow-card-rest-borderless);
    transition: border-color .4s ease, box-shadow .5s var(--ease-premium), transform .5s var(--ease-premium); /* PEDIDO DO USUÁRIO — timing harmonizado com a família de cards (ver "Elevação de cards"); era ease padrão .3s */
  }
  .plan-card::before {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: inherit;
    background-image: linear-gradient(180deg, var(--color-plan-card-hover-start) 0%, var(--color-plan-card-hover-end) 100%);
    opacity: 0;
    transition: opacity .3s ease;
    pointer-events: none;
  }
  .plan-card > * {
    position: relative;
    z-index: 1;
  }
  .plan-card:hover,
  /* CORREÇÃO — mesmo empate de especificidade de .step-card:hover acima
     (ver comentário completo lá): .plan-card também recebe .reveal-item/
     .is-visible via motion.js, e `.reveal-item.is-visible` cancelava o
     translateY(-6px) daqui assim que o card entrava na tela. Seletor extra
     com `.reveal-item` (especificidade 0,0,3,0) garante a vitória. */
  .plan-card.reveal-item:hover {
    border-color: var(--color-brand-light);
    box-shadow: var(--shadow-card-hover); /* PEDIDO DO USUÁRIO — era 0 8px 20px rgba(44,101,140,.14), trocado pela sombra "flutuante" da família de cards */
    transform: translateY(-6px); /* era -4px, harmonizado com o resto da família (-6px) */
  }
  .plan-card:hover::before {
    opacity: 1;
  }

  /* REVERTIDO A PEDIDO DO USUÁRIO — a regra de repouso própria do
     .plan-card--featured (borda + fundo tint, achado de consenso dos 3
     agentes de design numa rodada anterior) foi removida: o usuário viu o
     resultado e preferiu voltar ao estado da REVISÃO N+1 (layoutman) acima,
     onde os 3 .plan-card são visualmente idênticos em repouso e no :hover,
     sem nenhuma regra própria pro card recomendado. .plan-card--featured
     continua no HTML por motivo semântico (marca qual card é o
     recomendado), mas de novo não recebe estilo próprio. */

  /* CORREÇÃO DE CONSISTÊNCIA (auditoria letterman) — .plan-card__name é um
     h3, mesmo nível hierárquico de .step-card__title/.concept-card__title/
     .source-card__title, mas tinha um font-size fixo em 1.375rem em vez do
     token --fs-h3 compartilhado (que antes da REVISÃO 4 era 1.25rem) — os
     títulos de card de planos liam um degrau maior que os títulos de card
     de outras seções sem nenhum motivo de conteúdo. Corrigido para usar o
     mesmo var(--fs-h3) que todo outro h3 do site usa (herdado da regra
     global h1,h2,h3), restaurando "todo h3 igual entre si". */
  /* REVISÃO (letterman) — mesma unificação de tipografia de card aplicada
     em .step-card__title/.concept-card__title/.source-card__title:
     família Newsreader itálica peso 500, igualando os títulos de card de
     referência da home. font-size já era --fs-h3 (mesmo valor herdado por
     eles via global h1,h2,h3), mantido explícito aqui como já estava.
     Dark mode restaurado no bloco [data-theme="dark"] unificado. */
  /* CORREÇÃO (letterman) — PEDIDO DO USUÁRIO: aumentar font-size em 1,5x e
     font-weight em "0,75" na página de planos.
     font-size: var(--fs-h3) → calc(var(--fs-h3) * 1.5) — mantém o token
     como base (1.5rem/24px × 1.5 = 2.25rem/36px), em vez de um valor solto,
     seguindo o mesmo padrão de calc() sobre token já usado em outros pontos
     do arquivo (ex. .preview-card__title acima).
     font-weight: como a escala CSS varia em degraus de 100 (100-900),
     "aumentar 0,75" foi interpretado como subir ~3 degraus de 100: 500
     (peso atual) + 300 = 800 — o valor válido mais próximo, sem passar do
     teto da escala (900). Newsreader é variable font (mesma família já
     usada em .text-highlight/.mds__term), então 800 é um corte real, sem
     síntese de peso pelo navegador.
     line-height: adicionado explicitamente var(--lh-heading) (1.3) — o
     mesmo valor que este h3 já herdava por padrão da regra global "h1, h2,
     h3" (nada mudava visualmente antes desta correção). Tornado explícito
     porque o título ficou 50% maior E consideravelmente mais pesado (800):
     os 3 nomes de plano ("Essencial"/"Profissional"/"Portfólio") são
     palavras únicas que continuam cabendo numa linha só nos cards de
     planos (~280px+ de largura útil), então 1.3 já dá respiro vertical
     suficiente sem precisar afrouxar mais — evita depender de um "normal"
     de navegador não documentado se o CSS for reordenado no futuro. Se um
     nome de plano futuro for mais longo e quebrar em 2 linhas dentro do
     card, é sinal para revisar este valor de novo. */
  .plan-card__name {
    font-family: "Newsreader", var(--font-display);
    font-style: italic;
    font-weight: 800;
    font-size: calc(var(--fs-h3) * 1.5);
    line-height: var(--lh-heading);
    margin: 0 0 0.25rem;
  }

  .plan-card__audience {
    font-size: var(--fs-small);
    line-height: var(--lh-small);
    color: var(--color-text-muted);
    margin: 0 0 1rem;
  }

  .plan-card__price {
    margin: 0 0 1rem;
  }

  /* Número de destaque + legenda: contraste forte de tamanho, como as
     estatísticas grandes ("a partir de R$X") da referência Apple — o
     preço domina visualmente pelo --fs-price grande, não pelo peso
     mais pesado da faixa: Semibold (600) é intermediário, mais forte
     que o corpo mas abaixo do peso usado em h1, coerente com o padrão
     Apple de reservar o peso mais pesado para o título, não para
     números de destaque. Tracking mais negativo que antes porque
     --fs-price agora é um dos maiores elementos do sistema. */
  /* REVISÃO letterman — o preço, o dado mais importante da página de
     planos, usava --color-text-heading, a mesma cor neutra de qualquer
     título/texto de corpo comum — nada na página sinalizava "este é o
     número que importa". Troca para --color-brand-dark em vez de
     --color-accent: --color-accent (#31709B) é documentado no sistema
     como Categoria 2 ("Ação"), calibrado como FUNDO de botão com texto
     branco por cima (--color-text-on-accent) — seu contraste como cor de
     TEXTO direto sobre --color-surface/branco nunca foi auditado aqui.
     --color-brand-dark (#2C658C) já é o token usado e testado
     especificamente para texto sobre fundo claro (6,27:1 contra branco,
     5,48:1 contra --color-brand-tint — ver nota em :root), e é o mesmo
     tom estrutural/identidade já usado em .step-card__number,
     .concept-card__acronym e .next-step__eyebrow — o preço ganha
     destaque de cor sem inventar um uso novo e não testado do azul de
     CTA. Tamanho/peso mantidos (--fs-price já resolvido). */
  .plan-card__amount {
    font-family: var(--font-heading);
    font-weight: 600;
    font-size: var(--fs-price);
    letter-spacing: -0.02em;
    color: var(--color-brand-dark);
  }

  .plan-card__period {
    font-family: var(--font-body);
    font-weight: 500;
    font-size: var(--fs-caption);
    color: var(--color-text-muted);
    margin-left: 0.25rem;
  }

  .plan-card__feature {
    color: var(--color-text-body);
    font-size: var(--fs-small);
    line-height: var(--lh-small);
  }
  .plan-card__feature::before {
    content: "✓";
    color: var(--color-success);
    margin-right: 0.5em;
  }

  /* font-style: italic removido — ver nota em .preview-card__caption acima. */
  .pricing__note {
    color: var(--color-text-muted);
    font-size: var(--fs-caption);
    line-height: var(--lh-small);
    margin-top: 1rem;
  }

  /* ---------- Lista de espera ---------- */
  /* CTA final — mesma superfície-token que .site-footer (--color-ink-900).
     REVISÃO 9 (colorman) — REVERTE a REVISÃO 8: o painel volta a ser
     ESCURO (azul-marinho, #193243, "#5299C9 escurecido" pedido pelo
     usuário nesta rodada), não mais o rosa claro que a REVISÃO 8 tinha
     aplicado. Todo o texto dentro volta a ser CLARO sobre fundo ESCURO
     (arquitetura original da REVISÃO 7, agora na família azul/creme) —
     ver PARTE 7/8 do bloco "REVISÃO 9" acima de :root. */
  .waitlist__box {
    background-color: var(--color-ink-900);
    /* REVISÃO 9 (colorman) — volta a ser uma linha clara quase
       imperceptível sobre fundo escuro (arquitetura original da
       REVISÃO 7): RGB de --color-text-on-brand em vez do RGB de
       --color-text-heading que a REVISÃO 8 tinha usado pro cenário
       claro — mesma opacidade, papel puramente decorativo, sem piso de
       contraste obrigatório.
       REVISÃO 11 (colorman) — era rgba(250,244,234,0.12) (RGB decimal
       do creme #FAF4EA, hardcoded fora do token); trocado para o RGB de
       --color-text-on-brand atual (branco, #FFFFFF), pedido do usuário
       para eliminar o creme do sistema — ver bloco "REVISÃO 11" acima
       de :root. */
    border: 1px solid rgba(255, 255, 255, 0.12);
    box-shadow: none; /* bloco escuro chapado já se separa da página branca só pelo contraste de cor, como os cards pretos em destaque da referência Apple — decisão de elevação/layout preservada, fora do escopo desta rodada de cor */
    /* REVISÃO 9 (colorman) — sobrescrita local de --color-focus-ring
       RESTAURADA: o painel voltou a ser escuro, então o valor global
       (var(--color-text-link), #2C658C) volta a não alcançar 3:1 aqui
       (~2,12:1 contra --color-ink-900) — mesmo problema que a REVISÃO 5
       original já tinha resolvido, removido na REVISÃO 8 quando deixou
       de ser necessário, e necessário de novo agora. */
    --color-focus-ring: var(--color-accent-tint-on-dark);
  }

  /* REVISÃO 11 (letterman) — peso 500, nível "lede" do sistema; ver
     bloco "REVISÃO 11" no topo do arquivo, item 1. */
  .waitlist__text {
    font-size: var(--fs-body);
    font-weight: 500;
    line-height: var(--lh-body);
    /* REVISÃO 9 (colorman) — REVERTE a REVISÃO 8: volta a ser texto
       CLARO sobre fundo escuro. --color-text-on-brand-muted (nível
       "corpo"). REVISÃO 11 (colorman): rgba(255,255,255,0.82) — era
       rgba(250,244,234,0.82) (creme); mede 9,65:1 sobre o
       --color-ink-900 atual — ver bloco "REVISÃO 11" acima de :root. */
    color: var(--color-text-on-brand-muted);
    max-width: 65ch;
    margin: 0 0 1rem;
  }
  .waitlist__text:last-child {
    margin-bottom: 0;
  }

  /* ---------- FAQ ---------- */
  .faq-item {
    background-color: var(--color-surface);
    /* REVISÃO (colorman) — mesma unificação de cor de card do .step-card
       acima: bordas invisíveis + sombra dedicada, igual aos 4 cards da
       home. */
    border: 1px solid transparent;
    box-shadow: var(--shadow-card-rest-borderless);
  }
  .faq-item[open] {
    /* Estado semântico ("aberto"), não a cor neutra de repouso — mantido
       como acento visível de propósito, igual .achado-card--positivo. */
    border-color: var(--color-brand-light);
  }
  /* REVISÃO (letterman) — UNIFICAÇÃO DE TIPOGRAFIA DE CARDS: font-family
     divergia do título-de-item de referência mais próximo estruturalmente
     — .preview-card__item-title (item de lista dentro de um card: mesmo
     font-size --fs-body/17px, mesmo font-weight 600, mesma line-height
     var(--lh-heading), mesma cor var(--color-text-heading), já idênticos
     antes desta revisão — só family/style divergiam). Trocado de
     var(--font-body) não-itálico para "Newsreader" itálico, igualando
     1:1. Dark mode restaurado no bloco [data-theme="dark"] unificado. */
  .faq-item__question {
    font-family: "Newsreader", var(--font-display);
    font-style: italic;
    font-weight: 600;
    font-size: var(--fs-body);
    line-height: var(--lh-heading);
    color: var(--color-text-heading);
    cursor: pointer;
  }
  .faq-item__question:hover,
  .faq-item__question:focus-visible {
    /* REVISÃO 6 (colorman) — era --color-text-link (azul); redirecionado
       para --color-text-heading, o mesmo tom já usado no estado de
       repouso deste elemento (ver regra acima) — o feedback de hover
       passa a vir do cursor:pointer já existente. Optei por não adicionar
       sublinhado aqui (decisão de zona cinzenta, ver bloco "REVISÃO 6"
       acima de :root): é um <summary> inteiro, área de clique óbvia pelo
       contexto de FAQ, e sublinhar um título inteiro destoaria do resto
       do sistema (nenhum outro h3-like usa sublinhado). */
    color: var(--color-text-heading);
  }
  /* REVISÃO (letterman) — mesma unificação de font-size do corpo de card
     aplicada em .step-card__description/.concept-card__description/
     .source-card__description: --fs-small→--fs-body-lg, igualando o
     degrau de corpo de texto que os cards de grade de referência da home
     usam. line-height já era var(--lh-body), igual à referência, mantido.
     Cor não tocada (escopo do colorman). */
  .faq-item__answer {
    color: var(--color-text-muted);
    font-size: var(--fs-body-lg);
    line-height: var(--lh-body);
    margin-top: 0.75rem;
  }

  /* ================================================================
     Blocos novos do index.html (writerman) — REVISÃO 10 (colorman)
     Oito blocos chegaram sem nenhuma cor: .aviso-analise, .beneficios,
     .processo, .medido-detectado-sugerido, .sources-block,
     .planos-teaser, .faq-block, .cta-final (o formulário do hero já foi
     resolvido acima, junto de .hero-description/.hero-disclaimer).
     Espaçamento/grid ficam para o layoutman — aqui só fundo, texto e
     borda, reaproveitando tokens já existentes; nenhuma cor nova, exceto
     os 3 aliases --color-category-* definidos no :root (ver comentário
     lá) para o padrão medido/detectado/sugerido, pensado para ser
     reaproveitado por outras páginas depois.
     ================================================================ */

  /* ---------- Aviso da análise (transparência/limites) ----------
     Função equivalente a .concepts__note/.sources__disclaimer (nota de
     contexto importante), mas como seção de destaque própria logo após
     o hero — tratada como um painel levemente diferenciado da página em
     vez de texto solto, para não passar despercebida. Fundo
     --color-surface-alt (o mesmo taupe quase imperceptível já usado
     nessas notas), borda --color-border-strong (mesmo par usado em toda
     "caixa de nota" do sistema). Texto em --color-text-body (não muted):
     é a explicação central de "o que a análise garante e o que não
     garante", conteúdo importante demais para abaixar de intensidade.
     Contraste: --color-text-body (#211E1A) sobre --color-surface-alt
     (#F2ECE6) — o par mais claro já auditado no arquivo,
     --color-text-muted, mede 4,67:1 aqui; --color-text-body é ainda mais
     escuro, folga maior.
     PEDIDO DO USUÁRIO (consistência claro/escuro) — --color-surface-alt
     trocado por --color-surface. Este grupo de "painel neutro"
     (.aviso-analise, .concepts__note, .planos-teaser,
     .analise-form__summary, 3 estados iniciais do fluxo de análise)
     tinha divergido entre os temas depois de uma sobrescrita pontual só
     no escuro e só na Início; a correção é aplicar a MESMA cor aos 5
     membros do grupo, nos dois temas, sem sobrescritas locais — volta a
     ser literalmente a mesma regra .aviso-analise em toda página que a
     usa (Início e analise.html). Contraste só melhora (--color-text-body
     sobre branco puro é ainda mais alto que sobre o antigo #F2ECE6). */
  /* PEDIDO DO USUÁRIO — h2 de seção sempre FORA da caixa com fundo/borda,
     nunca dentro dela. .aviso-analise (a <section>) vira só um wrapper de
     layout; a "caixa" visual (fundo, borda, sombra, padding, raio) migrou
     inteira para .aviso-analise__box, um <div> novo que envolve só o
     texto — o h2 fica como irmão dele, fora da caixa. Mesmo padrão
     aplicado a .sources-block/.planos-teaser/.faq-teaser logo abaixo. */
  /* REVISAO (layoutman) - a migracao trouxe so padding-top/bottom pras
     4 caixas do grupo; faltava o padding HORIZONTAL, entao o texto/link
     colava direto na borda esquerda/direita (pior em 480px, onde nem
     vertical sobrava). Corrigido usando padding uniforme --space-7 nas 4
     caixas, caindo pra --space-6/--space-5 (vertical/horizontal) em
     480px - o mesmo par que .next-step--final ja usa pra um painel de
     peso equivalente, nao um valor novo. */
  /* PEDIDO DO USUÁRIO — remover a "caixa" (fundo/borda/sombra/raio) das
     4 notas de texto da Início (.aviso-analise/.sources-block/
     .planos-teaser/.faq-teaser), mantendo o texto. Importante: isto NÃO é
     o mesmo grupo dos cards de grade (.beneficios__item/.processo__item/
     .mds__item) — aquele grupo não muda em nada aqui, só estes 4 painéis
     únicos de nota central. .aviso-analise__box (e os outros 3 __box)
     viram wrappers sem estilo visual próprio: mantidos no HTML (ainda
     agrupam o texto e preservam o h2-fora-da-caixa que o pedido anterior
     já tinha estabelecido), mas sem background-color/border/box-shadow/
     border-radius/padding — o texto agora lê como conteúdo corrido da
     página, e o respiro antes dele passa a vir só do
     `margin-bottom` do h2 logo acima (ver `.aviso-analise > h2` etc.
     abaixo), igual a um <p> normal depois de um título em qualquer outra
     página. */
  /* Tipografia (letterman) — --fs-body/--lh-body, não --fs-caption dos
     disclaimers menores: colorman já tratou este texto como conteúdo
     central (--color-text-body, não muted), então o tamanho segue a
     mesma leitura. max-width em ch para manter a linha legível, mesma
     faixa já usada em outros blocos de texto corrido do sistema. Ver
     bloco "REVISÃO 9 (letterman)" no topo do arquivo. */
  /* REVISÃO 14 (letterman) — PEDIDO DO USUÁRIO: "centralizar os textos das
     caixas que acabaram de ser removidas". Com a caixa fora (ver "PEDIDO
     DO USUÁRIO — remover a 'caixa'" acima), o parágrafo ficou alinhado à
     esquerda por padrão de bloco, sob um h2 centralizado — o mesmo par
     "título centralizado + corpo desalinhado por baixo" que motivou a
     REVISÃO 13 em .section-subtitle/.mds__intro. Mesma correção, mesma
     técnica: text-align:center + margin-inline:auto (max-width sozinho só
     limita a largura da linha, não centraliza o bloco). max-width também
     desceu de 65ch para 56ch, igualando o resto do grupo "nota central/
     lede logo abaixo de um h2" — texto centralizado tem contorno
     irregular dos dois lados, então pede uma medida de linha um pouco
     mais curta que texto alinhado à esquerda (mesmo raciocínio da
     REVISÃO 13). As duas .aviso-analise__text consecutivas (dois
     parágrafos, ver "+" logo abaixo) recebem o mesmo tratamento — leem
     como um bloco central único, não dois textos soltos. Esta classe é
     compartilhada por index.html E analise.html (mesmo seletor, sem
     escopo por página) — a correção vale para as duas de graça, sem
     precisar de uma segunda regra. */
  /* REVISÃO 16 (letterman) — PEDIDO DO USUÁRIO: aumentar tamanho e peso do
     texto do painel "O que essa análise faz — e o que ela não garante" (o
     usuário via o painel mais fino/apagado que os vizinhos no screenshot).
     .aviso-analise__text tinha ficado de fora da REVISÃO 11 (que deu peso
     500 a .planos-teaser__text/.faq-teaser__text, o resto do grupo "painéis
     de mesmo peso editorial") — não por decisão deliberada, só um
     esquecimento na hora de escrever aquela regra, já que os 3 painéis são
     citados juntos nos comentários acima como equivalentes. Corrigido aqui
     igualando o trio inteiro, não só este texto:
       - font-weight: 400 → 500, igual a .planos-teaser__text/
         .faq-teaser__text (mesmo degrau "lede", não chega a bold/700, que
         competiria com os h2 dos 3 painéis).
       - font-size: --fs-body (1,0625rem/17px) → --fs-body-lg (1,125rem/
         18px) — um degrau acima na escala já existente em :root (mesmo
         token usado em .hero-description/.section-subtitle/.mds__intro
         para "lede" de seção), não um valor novo. Aplicado aos 3 painéis
         (.aviso-analise__text, .planos-teaser__text, .faq-teaser__text
         abaixo) para manter a equivalência tipográfica documentada entre
         eles — não faria sentido resolver a inconsistência do usuário
         criando uma nova entre os 3.
     max-width continua 56ch: é medida em ch (unidade relativa ao próprio
     font-size), então sobe junto com o texto sem ficar desproporcional;
     estas são seções de largura de página (não cards estreitos), então o
     texto maior/mais pesado não aperta o painel.

     .analise-estado__text (linha ~6530, "mesmo par que .aviso-analise__text"
     nos comentários) FICOU DE FORA desta mudança, deliberadamente — é um
     caso à parte apesar do par --fs-body/--lh-body/--color-text-body
     idêntico:
       1) Não é um painel estático "lede abaixo de h2" como os 3 acima; é o
          corpo explicativo de um card de status dinâmico, emparelhado com
          .analise-estado__title (peso 700, --fs-h3, ver nota extensa ~linha
          6480) — subir o peso do corpo para 500 encolheria o contraste de
          hierarquia entre título/corpo que aquele bloco calibrou de
          propósito (title mais pesado = "muda de estado", text mais leve =
          "explicação estável").
       2) O mesmo comentário cita explicitamente painéis mais ESTREITOS
          (url-invalida, falha-recuperavel etc.) como razão para não deixar
          o título crescer mais — o mesmo cuidado se aplica ao corpo: menos
          folga horizontal que os painéis de largura de página do trio
          acima, mais risco de quebra de linha ruim ao aumentar o tamanho.
       3) Cores de estado (--color-warning-text/--color-error-text/
          --color-success-text) foram calibradas por contraste WCAG contra
          --fs-body peso 400 especificamente (ver nota ~linha 6660) — mudar
          peso/tamanho aqui reabriria essa verificação de contraste sem
          necessidade, já que o pedido do usuário era sobre o painel da
          Início, não sobre os estados de análise. */
  .aviso-analise__text {
    color: var(--color-text-body);
    font-size: var(--fs-body-lg);
    font-weight: 500;
    line-height: var(--lh-body);
    max-width: 56ch;
    margin-inline: auto;
    text-align: center;
  }

  /* Layout (layoutman) — painel de destaque logo após o hero, largura
     cheia do container (mesmo alinhamento horizontal do resto do conteúdo
     da página) — não um "note" pequeno centralizado: colorman tratou este
     bloco como conteúdo central que "não pode passar despercebido", não
     uma ressalva de rodapé de seção. Padding vertical reduzido de
     --space-10 (o ritmo padrão, "invisível", entre duas seções sem fundo)
     para --space-7 — mesmo tipo de ajuste já usado em .next-step: uma
     caixa com borda visível pede menos respiro interno do que o espaço
     entre seções sem contorno algum, senão o painel fica desproporcional
     ao pouco texto que carrega. Raio --radius-md, o mesmo já usado nos
     cards/notas genéricos do site (.step-card/.concepts__note/etc). */
  .aviso-analise > h2 {
    margin-bottom: var(--space-4);
  }
  /* REVISÃO (layoutman) — h2 da home dobrou de tamanho (body.pagina-home
     h2, calc(var(--fs-h2) * 2), ~68-93px de altura de fonte contra
     ~34-46px antes) e ganhou peso 700 + scaleY — os --space-4 (16px) da
     regra acima, calibrados para o h2 no tamanho normal, liam como o
     título "grudando" na caixa (.aviso-analise__box) logo abaixo dele na
     home, sem transição. Subi para --space-6 (32px, dois degraus acima na
     escala existente) só aqui — este h2 não tem uma lede/parágrafo entre
     ele e a caixa (ao contrário de .medido-detectado-sugerido/etc., que
     têm .mds__intro no meio, ver blocos abaixo), então precisa do próprio
     respiro para separar visualmente título de conteúdo.
     IMPORTANTE — ".aviso-analise" também existe em analise.html (seção
     "aviso-analise-2-title"), que NÃO tem a classe "pagina-home" no
     <body> e por isso continua com o h2 global (--fs-h2, tamanho normal,
     sem dobrar) — esse h2 nunca precisou de mais respiro, então a regra
     acima (--space-4) continua valendo lá sem mudança nenhuma. Escopei
     este AJUSTE ADICIONAL com "body.pagina-home" na frente (maior
     especificidade, vence a regra acima só quando o <body> tem a classe)
     para valer só na Início, sem tocar analise.html — fora do escopo
     autorizado desta rodada. */
  body.pagina-home .aviso-analise > h2 {
    margin-bottom: var(--space-6);
  }
  .aviso-analise__text + .aviso-analise__text {
    margin-top: var(--space-4);
  }

  /* ---------- Benefícios ---------- */
  /* Lista simples, sem wrapper de card no HTML atual (se o layoutman
     decidir encapsular cada item numa caixa, os tokens de card já
     estabelecidos no sistema — --color-surface/--color-border-strong —
     são os que se aplicam). Aqui só o texto: o título (h3) herda a cor
     padrão do corpo (sem override, mesmo --color-text-heading/#211E1A
     que já vem do body); a descrição usa --color-text-body — mesmo papel
     de .step-card__description/.concept-card__description (texto de
     apoio de conteúdo central, não uma legenda discreta). */
  /* Tipografia (letterman) — mesmo par de .step-card__description/
     .concept-card__description (texto de apoio de item curto). */
  /* REVISÃO 18 (letterman) — PEDIDO DO USUÁRIO: "aumente o texto" do card,
     metade do pedido de reduzir a discrepância título↔corpo (ver
     raciocínio completo na regra "body.pagina-home h3" acima, item 1).
     font-size sobe de --fs-small (15px) para --fs-body-lg (18px) —
     reaproveitando um degrau já existente no sistema de tokens, não um
     valor solto. Com o título recuando de 72px para 48px (mesma rodada,
     ver acima) e o corpo subindo de 15px para 18px, o salto dentro do
     card cai de ~4,8x para ~2,7x — ainda uma hierarquia clara (título
     de card claramente maior que a descrição), mas dentro de uma faixa
     saudável, coerente com outros pares título/corpo do site (ex.
     .step-card__title/__description). Não usei --fs-body (17px, um
     degrau abaixo): 18px casa o corpo do card com o mesmo tamanho já
     usado em textos de apoio "lede" do site (.section-subtitle,
     .cta-final__text — ver essas regras), mantendo o card na mesma
     régua de leitura do resto da home em vez de um degrau exclusivo. */
  /* REVISÃO (letterman) — PEDIDO DO USUÁRIO: título preto total + azul do
     título movido pro corpo, mesmo raciocínio completo documentado junto a
     .preview-card__title/__item-detail acima (escopo só claro; overrides de
     [data-theme="dark"] mais abaixo mantêm o escuro intacto). */
  .beneficios__item-text {
    color: var(--color-accent);
    font-size: var(--fs-body-lg);
    line-height: var(--lh-body);
  }

  /* Layout (layoutman) — 4 itens de mesmo peso; encapsulados na MESMA
     fórmula de card genérico já usada em .step-card/.concept-card (fundo
     --color-surface, borda --color-border-strong, --radius-md, padding
     --space-6, texto centralizado) — colorman deixou a decisão de
     encaixotar em aberto (ver comentário dele acima), optei por caixa para
     não deixar 4 itens soltos boiando sem contorno num sistema onde todo
     outro grupo de itens comparáveis já ganha caixa. Grid de 4 colunas com
     largura de coluna capada em vez de esticar (mesma lógica já usada nos
     grids de 3 colunas — telas grandes ganham respiro, não colunas mais
     largas).

     REVISÃO (layoutman) — PEDIDO: h3 dos títulos de card (.beneficios__
     item-title/.processo__item-title, via "body.pagina-home h3") passou de
     1.5rem para calc(var(--fs-h3) * 3) = 72px fixo, Oswald 600, line-height
     1.3 herdado (~93,6px por linha) — ver histórico completo na regra
     "body.pagina-home h3" lá em cima. Isso quebrava o breakpoint antigo
     (860px → 2 colunas, 480px → 1 coluna): entre 861px e ~1260px o grid de 4
     colunas ainda tentava caber, e cada coluna (minmax(0,280px)) ia
     encolhendo junto com a tela — cheguei a medir coluna de ~190px de largura
     útil por volta de 900px de viewport. Nesse ponto o texto disponível
     dentro do card (coluna menos --space-6 de padding nos 2 lados) cai a
     ~126px, e títulos como "Acompanhamento" ou "Regras determinísticas"
     (uma única palavra de 14-16 letras em Oswald condensada a 72px) viravam
     uma torre de 5-6 linhas — não é o comprimento normal de wrap que o
     letterman já previu e aceitou (2-3 linhas), é um efeito colateral do
     RANGE ESTREITO entre breakpoints, não do tamanho da fonte em si.
     Não dá pra eliminar o wrap multi-linha (72px fixo não cabe numa linha em
     nenhuma largura de card razoável — mantive a fonte como está, não é
     meu escopo mexer nela) — mas dá pra garantir que a coluna NUNCA fique
     mais estreita que ~250px de largura antes de cair pra menos colunas,
     e que a transição de 2→1 coluna também não passe por uma faixa
     apertada equivalente perto do fim da faixa mobile. Troquei os
     breakpoints (860px/480px, herdados dos outros grids do site que não têm
     esse problema de fonte) por dois específicos deste grid, calculados
     contra --container-max/--container-pad atuais (1440px/40px):
       - ≥1181px: 4 colunas, cap subiu de 280px→300px (mais respiro pro
         título quebrar em menos linhas; column mínima medida no próprio
         breakpoint fica em ~251px, nunca abaixo disso).
       - 701-1180px: 2 colunas, cap 340px (mais largura por coluna já que
         são só 2 — column mínima medida no breakpoint de 701px fica em
         ~300px).
       - ≤700px: 1 coluna cheia (card usa a largura toda do container —
         título tem o máximo de espaço disponível, menos linhas de quebra).
     Gap subiu de --space-5 (20px) para --space-6 (32px): com cards mais
     altos (título ocupando 2-4x mais altura que antes), um respiro maior
     entre eles evita que a grade leia como "espremida" mesmo com cada card
     individualmente bem proporcionado. */
  /* REVISÃO (layoutman) — PEDIDO DO USUÁRIO: cards mais largos, sem
     nenhuma palavra cortada/hifenizada. 4 colunas de 300px cap (comentário
     acima) davam pouca largura de coluna (~250-300px) para títulos
     inteiros — a rota escolhida foi reduzir para 2 colunas (2x2 em vez de
     4x1), quase dobrando a largura útil de cada card (300px→560px de cap),
     em vez de só empurrar o cap um pouco pra cima dentro do mesmo grid de
     4 colunas (o container de 1440px não sobra espaço suficiente pra isso
     resolver o problema de verdade). minmax(0, 560px) encolhe sozinho em
     telas menores sem precisar de um breakpoint extra no meio (mesmo
     mecanismo já documentado nos comentários de breakpoint deste arquivo);
     só a faixa mobile (≤700px, ver media query abaixo) ainda precisa de
     regra própria, pra cair a 1 coluna cheia em vez de 2 colunas
     espremidas. */
  /* REVISÃO URGENTE (layoutman) — letterman tripliquou o h3 GLOBAL (que
     "body.pagina-home h3" já multiplicava por 2 em cima disso) e o
     resultado final ficou em calc(var(--fs-h3) * 6) = 144px fixo — maior
     que o próprio h1 do site (teto 64px) — sinalizado com urgência pra eu
     revisar antes da home ser considerada terminada (ver comentário
     grande junto à regra "body.pagina-home h3").
     Este grid tinha sido calibrado (2 colunas de 560px cap) para um h3 de
     48px (calc(--fs-h3)*2), a rodada anterior. A 144px, .beneficios__item-
     title herda a família "Newsreader" itálica (serifada, larga) — uma
     única palavra como "Acompanhamento" ou "Prioridade" não cabe inteira
     em NENHUMA largura de card razoável do site nesse tamanho; vai quebrar
     por sílaba via overflow-wrap:break-word não importa o que eu faça aqui
     (isso é escala tipográfica, fora do meu escopo mexer). O que dá pra
     controlar é dar ao título o MÁXIMO de largura disponível pra minimizar
     a quantidade de quebras, e não deixar dois desses títulos gigantes
     competindo lado a lado em colunas de 560px (que ficariam
     desproporcionalmente estreitas para o novo tamanho).
     Fix: 2 colunas → 1 coluna cheia (cards empilhados, um por linha),
     capada em 900px (mais que o dobro do cap anterior de 560px, dando ao
     título bem mais espaço horizontal pra quebrar em menos linhas) — mas
     ainda abaixo da largura do container inteiro (1360px úteis), porque o
     texto de apoio abaixo do título (--fs-body-lg/18px) fica ilegível numa
     linha de leitura tão longa. Gap entre cards subiu de --space-6/32px
     para --space-8/64px: cards empilhados verticalmente e MUITO mais altos
     agora (um título de 144px pode facilmente ocupar 300-500px de altura
     sozinho) precisam de bem mais respiro entre um e outro pra continuarem
     lendo como blocos distintos, não uma parede contínua de texto. */
  /* REVERTIDO (layoutman) — toda a cadeia de mudanças acima (4 colunas de
     280px → 4 de 300px → 2 de 560px → 1 coluna de 900px; gap --space-5 →
     --space-6 → --space-8; breakpoints 860px/480px → 1181px/701px) existia
     só para acomodar o h3 do título de card, que chegou a 144px fixo numa
     rodada anterior. O letterman reverteu esse tamanho (era erro de
     digitação, o pedido real era h4) — "body.pagina-home h3" volta a
     var(--fs-h3)/24px, o mesmo tamanho de quando este grid foi calibrado
     originalmente. Volta à fórmula original: 4 colunas capadas em 280px,
     gap --space-5/20px, com os breakpoints herdados dos outros grids do
     site (860px → 2 colunas, 480px → 1 coluna, ver media queries abaixo). */
  .beneficios__list,
  .processo__list {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 280px));
    justify-content: center;
    gap: var(--space-5);
  }
  @media (max-width: 860px) {
    .beneficios__list,
    .processo__list {
      grid-template-columns: repeat(2, minmax(0, 280px));
    }
  }
  @media (max-width: 480px) {
    .beneficios__list,
    .processo__list {
      grid-template-columns: 1fr;
    }
  }
  /* REVERSÃO (layoutman) — PEDIDO DO USUÁRIO: volta à fórmula de "card
     genérico" do site (fundo --color-surface, borda 1px
     --color-border-strong, --shadow-card-rest, padding var(--space-6) —
     mesma fórmula de .step-card/.concept-card/.source-card/.faq-item),
     substituindo o hairline de topo da rodada "remover cards". Diferença
     pedida desta vez: border-radius: 0 em vez do --radius-md que este card
     usava antes da remoção — cantos quadrados só nestes 4 cards da home,
     --radius-md continua arredondado normalmente no resto do site
     (.step-card/.concept-card/.source-card etc.). */
  /* REVERTIDO (layoutman) — o padding tinha subido de --space-6/32px para
     --space-8/64px verticais (--space-7/48px laterais) porque o título
     havia chegado a 144px fixo. Esse tamanho foi revertido pelo letterman
     (h3 volta a var(--fs-h3)/24px), então o padding volta ao valor
     uniforme original da fórmula de card genérico do site. */
  .beneficios__item {
    background-color: var(--color-surface);
    border: 1px solid transparent;  /* REVISÃO (colorman) — era var(--color-border-strong); pedido "bordas invisíveis", cor trocada p/ transparent mantendo a largura de 1px (box model intacto, sem "encolher" o card no grid) */
    box-shadow: var(--shadow-card-rest-borderless);  /* REVISÃO (colorman) — era var(--shadow-card-rest); ver justificativa completa junto à definição do token, nos blocos de tokens claro/escuro */
    border-radius: 0;
    padding: var(--space-6);
    text-align: center;
  }
  /* REVERTIDO (layoutman) — margin-bottom chegou a --space-7/48px ao longo
     da escalada do h3 (8px→16px→20px→48px, ver histórico anterior deste
     arquivo). Com o h3 de volta a 24px (var(--fs-h3), revertido pelo
     letterman) e o corpo do card mantendo --fs-body-lg/18px (mudança de
     texto independente, não relacionada ao h3, não revertida), a
     proporção original de 8px entre título e texto — a mesma usada nos
     títulos irmãos .step-card__title/.concept-card__title/
     .source-card__title, todos revertidos ao mesmo valor acima — volta a
     ser a calibrada certa. */
  /* PEDIDO DO DONO DO PRODUTO (via layoutman) — itálico + azul; raciocínio
     completo (por que --color-accent-on-dark, por que itálico é exceção
     pontual e não reversão da REVISÃO que baniu itálico de notas de apoio,
     por que não precisou reduzir font-size dado o card 300px→560px de cap)
     documentado junto a .preview-card__title, acima. Este h3 antes só
     herdava font-family/size/weight/tracking da regra global "h1, h2, h3"
     (Manrope 600, --fs-h3/24px) — agora ganha as duas propriedades extras
     aqui, sem tocar a regra global (que outros h3 do site fora da home
     continuam usando sem itálico/azul). */
  /* REVISÃO (letterman) — PEDIDO DO DONO DO PRODUTO: itálico removido,
     família trocada para "Newsreader" (serifada editorial, ver comentário
     completo junto a .preview-card__title, acima, e o <link> de fontes em
     index.html). Este título herda font-size de "body.pagina-home h3"
     (48px, calc(--fs-h3)*2) e antes herdava também font-family (Oswald,
     var(--font-display)) — a família precisa ser sobrescrita aqui porque
     "body.pagina-home h3" continua valendo para outros usos de h3 na home
     (ex. onde não faz sentido a serifada), então a troca fica local a este
     seletor de card, não na regra global. Peso 500: mantido igual ao que já
     vinha herdado de "body.pagina-home h3" (500) — na faixa de 48px (tier
     "display" da família, pesquisa researchdude), 500 é elegante o
     suficiente sem precisar de mais peso, mesma lógica já usada quando este
     título estava em Oswald 500. font-weight declarado aqui explicitamente
     (não só herdado) para não depender silenciosamente de uma regra
     distante caso ela mude no futuro. */
  /* REVISÃO (letterman) — mesmo pedido/raciocínio de .preview-card__title
     acima: título vira preto total (#000000), literal e só válido no
     claro — override em [data-theme="dark"] mais abaixo restaura
     var(--color-accent-on-dark) pro escuro. */
  /* REVISÃO (letterman) — mesmo pedido/raciocínio de .preview-card__title
     acima: Newsreader itálico + cor trocada com o H2 (var(--color-text-heading)),
     só no claro; override em [data-theme="dark"] mais abaixo restaura
     Oswald não-itálico + cor do escuro. */
  .beneficios__item-title {
    font-family: "Newsreader", var(--font-display);
    font-style: italic;
    font-weight: 500;
    color: var(--color-text-heading);
    margin-bottom: 0.5rem;
  }
  /* REVERTIDO (layoutman) — o degrau extra (--space-7/48px → --space-8/64px)
     existia só porque a grade de h3 abaixo tinha crescido; com o h3 de
     volta a var(--fs-h3)/24px, volta ao valor original. */
  .beneficios > h2 {
    margin-bottom: var(--space-7);
  }

  /* ---------- Como funciona, resumido ---------- */
  /* Mesma lógica de .beneficios acima — texto de apoio em
     --color-text-body. O link de saída ("Ver o passo a passo completo →")
     reaproveita o MESMO par já usado em .source-card__link/.next-step__link
     em todo o site: --color-text-body em repouso → --color-text-heading
     no hover/foco, com underline sempre visível como sinal não-colorido
     de link — em vez de introduzir o azul de Ação num link de saída
     secundário, mesma decisão editorial já tomada nesses dois outros
     casos. */
  /* Tipografia (letterman) — mesmo par de .beneficios__item-text acima. */
  /* REVISÃO 18 (letterman) — mesmo ajuste e mesmo motivo de
     .beneficios__item-text acima (ver raciocínio completo lá): font-size
     --fs-small (15px) → --fs-body-lg (18px), parte do reequilíbrio
     título↔corpo dentro do card junto com o h3 recuando de 72px→48px. */
  /* REVISÃO (letterman) — mesmo pedido/raciocínio de .beneficios__item-text
     acima: azul do título movido pro corpo, só no claro. */
  .processo__item-text {
    color: var(--color-accent);
    font-size: var(--fs-body-lg);
    line-height: var(--lh-body);
  }
  /* Tipografia (letterman) — mesmo tamanho de .source-card__link (link de
     saída secundário), reaproveitando o par já em uso nesse outro link. */
  .processo__link a {
    color: var(--color-text-body);
    text-decoration: underline;
    font-family: var(--font-body);
    font-weight: 600;
    font-size: var(--fs-small);
  }
  /* REVISÃO 11 (letterman) — mesmo par --color-accent-on-dark do
     .next-step__link acima (.processo__item também se apoia em
     --color-surface); ver bloco "REVISÃO 11" no topo do arquivo, item 3. */
  .processo__link a:hover,
  .processo__link a:focus-visible {
    color: var(--color-accent-on-dark);
  }

  /* Layout (layoutman) — mesma fórmula de card/grid de .beneficios acima:
     4 passos de mesmo peso visual, encapsulados na fórmula de card
     genérico do site (fundo --color-surface, borda --color-border-strong,
     --radius-md, padding --space-6, texto centralizado). .processo__list é
     um <ol> — reaproveita o mesmo ajuste já usado em .steps__list (zera
     list-style/padding-left do marcador nativo do navegador; o "1./2./3./4."
     já está escrito no próprio texto de cada título de passo, então não há
     numeração dupla). O link de saída ("Ver o passo a passo completo →")
     fica centralizado abaixo do grid — mesmo raciocínio de alinhamento já
     usado em .concepts__note/.sources__disclaimer/.pricing__note (nota/CTA
     secundário centralizado sob um grid centralizado, para não nascer
     alinhado à borda esquerda da seção enquanto o grid acima está
     centrado).

     REVERTIDO (layoutman) — este grid passou pela mesma cadeia de
     mudanças de .beneficios__list (280px→300px→560px cap 4→2→1 coluna,
     gap --space-5→--space-6→--space-8) por causa do h3 do título de card
     ter chegado a 144px fixo. O letterman reverteu esse tamanho (era erro
     de digitação, o pedido real era h4) — "body.pagina-home h3" volta a
     var(--fs-h3)/24px. A definição de grid (4 colunas, cap 280px, gap
     --space-5, breakpoints 860px/480px) já foi unificada com
     .beneficios__list acima, junto com a regra e as media queries de
     grid-template-columns — aqui só resta o reset de <ol> (list-style/
     padding-left), que .beneficios__list, sendo um <ul>, não precisa. */
  .processo__list {
    list-style: none;
    padding-left: 0;
  }
  /* REVERTIDO (layoutman) — mesmo raciocínio de .beneficios__item acima:
     o padding tinha subido para --space-8/64px verticais / --space-7/48px
     laterais por causa do h3 de 144px; revertido ao valor uniforme
     original agora que o h3 voltou a 24px. */
  .processo__item {
    background-color: var(--color-surface);
    border: 1px solid transparent;  /* REVISÃO (colorman) — era var(--color-border-strong); pedido "bordas invisíveis", cor trocada p/ transparent mantendo a largura de 1px (box model intacto, sem "encolher" o card no grid) */
    box-shadow: var(--shadow-card-rest-borderless);  /* REVISÃO (colorman) — era var(--shadow-card-rest); ver justificativa completa junto à definição do token, nos blocos de tokens claro/escuro */
    border-radius: 0;
    padding: var(--space-6);
    text-align: center;
  }
  .processo__item-title {
    font-family: "Newsreader", var(--font-display);
    font-style: italic;
    font-weight: 500;
    color: var(--color-text-heading);
    margin-bottom: 0.5rem;
  }
  /* REVERTIDO (layoutman) — mesmo raciocínio de .beneficios > h2 acima:
     volta ao valor original agora que o h3 da grade voltou a 24px. */
  .processo > h2 {
    margin-bottom: var(--space-7);
  }
  .processo__link {
    margin-top: var(--space-6);
    text-align: center;
  }

  /* ---------- Medido, detectado e sugerido ----------
     PRIMEIRA aparição deste padrão no site — tratada como a decisão de
     REFERÊNCIA para qualquer reuso futuro em outras páginas
     (--color-category-measured/-detected/-suggested, definidos no
     :root — ver comentário completo lá para o raciocínio e os
     contrastes calculados). Requisito de produto: as 3 categorias
     precisam ser diferenciáveis entre si sem usar as cores semânticas de
     sucesso/aviso/erro (não são "bom/atenção/erro", são 3 graus neutros
     de processamento da informação).
     Resolvido com um indicador de borda ESQUERDA (4px) em 3 tons de
     intensidade crescente da MESMA família neutra taupe já usada em todo
     o sistema (claro→escuro = bruto→decisão): --color-border-strong
     (Medido, 1º item) → --color-text-muted (Detectado, 2º item) →
     --color-text-heading (Sugerido, 3º item). Selecionado por
     :nth-child porque a ordem dos 3 <div> no HTML é fixa e semântica (a
     própria ordem "medido → detectado → sugerido" é conteúdo, não um
     detalhe de apresentação) — se esta seção algum dia precisar de
     reordenação livre, trocar por modificadores de classe é a evolução
     natural, mas não foi necessário aqui.
     Cada .mds__item mantém a mesma "fórmula de card genérico" do resto
     do site (fundo --color-surface, borda 1px --color-border-strong ao
     redor) — só a borda ESQUERDA muda de cor/espessura por categoria, o
     suficiente para diferenciar sem introduzir 3 fundos ou 3 famílias de
     cor concorrentes. Termo (dt) e definição (dd) usam os tons padrão de
     heading/body, os mesmos de qualquer outro card do site — a
     diferenciação vive no indicador, não no texto, para não arriscar
     contraste insuficiente com uma das 3 cores (--color-border-strong,
     em particular, só cruza o piso de UI de 3:1, não o de texto normal
     de 4,5:1) sendo usada como cor de texto. */
  /* Tipografia (letterman) — mesmo par de .section-subtitle (frase de
     apoio logo abaixo de um h2), --fs-body-lg/--lh-body. */
  /* REVISÃO 11 (letterman) — peso 500, nível "lede" do sistema; ver
     bloco "REVISÃO 11" no topo do arquivo, item 1. */
  /* REVISÃO 13 (letterman) — texto-lede logo abaixo do h2 (agora
     centralizado, ver regra global h2) ficava alinhado à esquerda por
     padrão de bloco; max-width sozinho não centraliza o BLOCO em si, só
     limita a largura da linha — precisa de margin-inline:auto junto com
     text-align:center para o parágrafo inteiro ficar centrado sob o
     título. max-width também desceu de 65ch para 56ch nesta revisão,
     igualando .section-subtitle: mesmo papel ("lede" logo abaixo de um
     h2), mesma medida de linha, e centralizado lê melhor um pouco mais
     estreito do que alinhado à esquerda — ver bloco "REVISÃO 13" no topo
     do arquivo, item 3. */
  .mds__intro {
    color: var(--color-text-body);
    font-size: var(--fs-body-lg);
    font-weight: 500;
    line-height: var(--lh-body);
    max-width: 56ch;
    margin-inline: auto;
    text-align: center;
  }
  /* Box/borda (layoutman) — estes 3 cards destoavam demais dos outros
     cards de grade da página (Clareza/Evidência/... e os 4 passos): eram
     os únicos com um indicador de borda ESQUERDA colorido, enquanto todo
     o resto do grid da Início usa borda-topo. Border-left virou
     border-top (mesma espessura/cor por categoria, só a posição do
     indicador muda) — decisão de caixa/borda do layoutman, não minha.
     O text-align do card (.mds__item logo abaixo) é uma decisão
     separada, revisada e CONFIRMADA por mim (letterman) na REVISÃO 13 —
     ver bloco "REVISÃO 13" no topo do arquivo, item 4.

     REVISÃO (colorman) — PEDIDO DO USUÁRIO: estes 3 cards ainda liam como
     "diferentes dos demais" mesmo depois do ajuste acima do layoutman.
     Raiz do problema: a borda-topo de 4px colorida por categoria era o
     ÚNICO card de grade do site com uma borda de espessura/cor diferente
     do resto do contorno — todo outro grupo (.step-card/.concept-card/
     .source-card/.plan-card/.beneficios__item/.processo__item) usa a
     MESMA "fórmula de card genérico" plana: 1px --color-border-strong
     nos 4 lados, sem nenhum acento colorido, mais --shadow-card-rest.
     Este é exatamente o mesmo diagnóstico já registrado (e já corrigido)
     em .concept-card logo acima ("bloco N (layoutman)": border-top de
     3px removida por destoar da fórmula genérica) — mesmo problema,
     mesma solução: removida a borda-topo de 4px e as 3 cores por
     categoria (--color-category-measured/-detected/-suggested, que
     seguem definidas no :root e continuam disponíveis pra reuso futuro,
     só não são mais consumidas aqui). .mds__item volta a usar a fórmula
     genérica idêntica aos outros cards da grade. A diferenciação entre
     Medido/Detectado/Sugerido não depende só de cor: os 3 rótulos (dt,
     "MEDIDO"/"DETECTADO"/"SUGERIDO") já são autoexplicativos, e o
     letterman já progressivamente diferencia peso/tracking de cada
     .mds__term (ver bloco dele logo abaixo) — a mesma estratégia que já
     bastou pra distinguir .concept-card__acronym sem borda colorida. Não
     usei --color-category-measured como cor de TEXTO em vez de borda
     porque esse token é só um alias de --color-border-strong (piso de
     3:1, "componente de UI") — aplicado a texto ficaria abaixo do piso
     de 4,5:1 de texto normal (ver nota do token no :root), então trocar
     "borda colorida" por "texto colorido" teria introduzido um problema
     de contraste novo em vez de resolver o de consistência visual. */
  /* REVERSÃO (layoutman) — caixa restaurada (fundo, borda nos 4 lados,
     sombra), consolidada na regra .mds__item mais abaixo, que também volta
     a ter padding de container — mas com border-radius: 0 em vez do
     --radius-md que este card usava antes da remoção (cantos quadrados só
     nestes 4 cards da home, pedido do dono do produto). */
  /* PEDIDO DO USUÁRIO — .mds__term voltou a ler como "rótulo de categoria"
     em vez de título de card (caixa alta + peso 700-800 variável por item
     + tracking), destoando de fonte/peso/caixa dos outros títulos de card
     da mesma página (.processo__item-title/.beneficios__item-title, que
     são apenas <h3> herdando a regra global h3 — peso 600, sem
     caixa-alta, tracking -0.005em). .mds__term agora replica exatamente
     essa regra global de h3 (mesmo papel estrutural, marcado como <dt>
     só por semântica de definição), e os 3 itens deixam de ter pesos/
     tracking diferentes entre si — mesmo tratamento tipográfico dos
     títulos de card em qualquer outro grid do site. */
  /* REVISÃO (letterman) — TAREFA 2, "big type" em index.html: .mds__term
     foi avaliado como candidato (ver nota completa junto a
     .preview-card__number, bem acima no arquivo) e DESCARTADO para
     tratamento oversized, de propósito, não por esquecimento.
     Pesquisa via researchdude: big type funciona bem em dados/números
     isolados; funciona mal em rótulos de categoria que servem de cabeçalho
     de card, como é o caso aqui — "Medido"/"Detectado"/"Sugerido" marcam
     QUE categoria de informação vem a seguir (mds__definition, o conteúdo
     real do card), não são eles mesmos o dado de destaque. Aumentar
     dramaticamente o rótulo inverteria a hierarquia (o cabeçalho pesando
     mais que o conteúdo que ele apresenta) e, por já estar em caixa alta,
     ficaria mais difícil de ler em escala grande (uppercase perde
     legibilidade conforme cresce — o oposto do numeral de
     .preview-card__number, que é minúsculo em contagem de caracteres e
     não sofre esse problema). Tamanho/peso/tracking permanecem como
     estavam (--fs-h3, já no teto razoável para um rótulo deste tipo,
     progressão de peso 600→700→800 entre os 3 itens documentada na
     REVISÃO 12 acima). */
  /* PEDIDO DO DONO DO PRODUTO (via layoutman) — itálico + azul, mesmo
     raciocínio completo documentado junto a .preview-card__title acima
     (por que --color-accent-on-dark em vez de --color-text-link/-brand-
     -dark, por que itálico aqui não reverte a REVISÃO que baniu itálico
     de "nota de apoio", por que não precisou reduzir --fs-h3 mesmo no
     card mais estreito dos 4, .mds__item a 440px de cap — "Medido"/
     "Detectado"/"Sugerido" são termos curtos, folga grande sobrando).
     .mds__term replica a regra global "h1, h2, h3" propositalmente (é um
     <dt>, não um h-tag) — troco color aqui junto com as outras
     propriedades já duplicadas, em vez de a global, pelo mesmo motivo:
     só estes títulos de card ganham o tratamento, não todo h3 do site. */
  /* REVISÃO (letterman) — PEDIDO DO DONO DO PRODUTO: itálico removido,
     família trocada de Manrope (var(--font-heading)) para "Newsreader" —
     mesmo raciocínio completo documentado junto a .preview-card__title,
     acima. .mds__term fica no tamanho --fs-h3 (24px sem dobra — diferente
     de .beneficios__item-title/.processo__item-title, que herdam
     calc(--fs-h3)*2 via "body.pagina-home h3"; .mds__term é <dt>, não
     <h3>, então nunca entrou nessa regra, ver nota histórica abaixo), no
     limite entre os tiers "texto" e "display" da própria família (pesquisa
     researchdude) — mantido no mesmo peso 600 que já usava (não era mais
     itálico só por causa do peso, era por font-style; peso 600 continua
     sendo o certo aqui, tanto pelo valor que já existia quanto pela faixa
     que a pesquisa recomenda para texto sub-24px: 500–600, nunca mais leve
     que isso). */
  /* REVISÃO (letterman) — mesmo pedido/raciocínio de .preview-card__title
     acima: preto total (#000000) literal, só no claro; override em
     [data-theme="dark"] mais abaixo restaura var(--color-accent-on-dark). */
  /* REVISÃO (letterman) — mesmo pedido/raciocínio de .preview-card__title
     acima: Newsreader itálico + cor trocada com o H2 (var(--color-text-heading)),
     só no claro; override em [data-theme="dark"] mais abaixo restaura
     Oswald não-itálico + cor do escuro. */
  /* CORREÇÃO (layoutman) — PEDIDO: letterman flagrou espaçamento
     título→corpo inconsistente entre os 3 grids de card irmãos desta
     página. .mds__term usava margin-bottom: var(--space-2) (8px) — valor
     antigo de quando este <dt> ainda era tratado como rótulo de categoria
     compacto (ver histórico acima); nunca foi revisto quando .mds__term
     passou a replicar a MESMA fórmula de título de card que
     .beneficios__item-title/.processo__item-title (mesma família, peso,
     tamanho-degrau, tracking — ver blocos acima), que usam margin-bottom:
     var(--space-5) (20px). Não há motivo estrutural pra divergir: os 3
     cards (.beneficios__item/.processo__item/.mds__item) já compartilham
     padding --space-6, e o reset "dl, dt, dd { margin: 0 }" (linha ~968)
     já zera a margem nativa do <dt> — este seletor já controlava 100% do
     respiro sozinho, igual aos outros dois títulos. --space-2 → --space-5,
     igualando a cadência título→corpo dos 3 grids irmãos. */
  .mds__term {
    color: var(--color-text-heading);
    font-family: "Newsreader", var(--font-display);
    font-style: italic;
    font-weight: 600;
    font-size: var(--fs-h3);
    letter-spacing: -0.005em;
    line-height: var(--lh-heading);
    margin: 0 0 var(--space-5);
  }
  /* Mesmo par de .step-card__description/.beneficios__item-text — mesma
     função (texto de apoio de um item), mesmo tratamento.
     REVISÃO (letterman) — azul do título (var(--color-accent)) movido pro
     corpo, mesmo pedido/raciocínio de .preview-card__item-detail acima; só
     no claro, override em [data-theme="dark"] mais abaixo restaura
     var(--color-text-body). */
  /* CORREÇÃO (letterman) — texto pequeno/inconsistente reportado pelo
     usuário: esta nota ("mesmo par de .step-card__description/
     .beneficios__item-text") ficou DESATUALIZADA quando a REVISÃO 18 (ver
     .beneficios__item-text/.processo__item-text acima) subiu o corpo dos
     outros cards da Início de --fs-small (15px) para --fs-body-lg (18px),
     como metade do reequilíbrio título↔corpo daquela rodada. Esta regra
     não foi incluída naquela revisão e ficou para trás no tamanho antigo
     — o único card de grade da Início cujo corpo ainda lê 15px, cercado
     por .beneficios__item/.processo__item a 18px, criando o efeito de
     "texto menor e mais apertado" que o usuário notou. --fs-small
     continua correto para .step-card__description/.concept-card__
     description (outras páginas, fora do escopo desta correção — não
     tocados). font-size sobe para --fs-body-lg, igualando os outros 2
     grids de card da mesma página; line-height (--lh-body) e color
     (var(--color-accent), tratado à parte pelo colorman) não mudam. */
  .mds__definition {
    color: var(--color-accent);
    font-size: var(--fs-body-lg);
    line-height: var(--lh-body);
  }

  /* Layout (layoutman) — 3 categorias comparáveis, mesma largura entre si,
     lado a lado em desktop, empilhadas em mobile (pedido explícito).
     Mesmo padrão de grid de 3 colunas já usado em .steps__list/
     .concepts__grid/.sources__grid (minmax(0, Npx) capado + justify-
     content:center + gap --space-5, colapsando para 1 coluna em 860px —
     mesmo breakpoint, não um valor novo). Fundo/borda/borda-topo por
     categoria já vêm do colorman (regras acima); aqui só raio, padding
     interno e alinhamento.
     REVISÃO 13 (letterman) — texto passa de "à esquerda" para
     centralizado, mesmo padrão de .beneficios__item/.processo__item.
     Revisei e CONFIRMEI: com border-left virando border-top (layoutman,
     ver nota acima), o card já não depende de margem esquerda livre para
     o indicador; e um termo curto em caixa alta + uma frase de definição
     perde pouco lendo centralizado, contra o ganho de consistência com
     os outros 2 grids da mesma página. Ver bloco "REVISÃO 13" no topo do
     arquivo, item 4, para o raciocínio completo. */
  /* REVISÃO (layoutman) — PEDIDO DO USUÁRIO: cards mais largos. Diferente
     de .beneficios__list/.processo__list (4 itens, foram de 4→2 colunas),
     aqui são só 3 itens — cair para 2 colunas deixaria um item órfão numa
     linha sozinho, pior do que o problema que estamos resolvendo. Mantive
     3 colunas e só levantei o cap (380px→440px, o teto que ainda cabe sem
     estourar o container de 1440px com 2 gaps de --space-5 entre as 3
     colunas), dando mais respiro real ao termo/definição de cada card. */
  .mds__list {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 440px));
    justify-content: center;
    gap: var(--space-5);
  }
  .mds__item {
    background-color: var(--color-surface);
    border: 1px solid transparent;  /* REVISÃO (colorman) — era var(--color-border-strong); pedido "bordas invisíveis", cor trocada p/ transparent mantendo a largura de 1px (box model intacto, sem "encolher" o card no grid) */
    box-shadow: var(--shadow-card-rest-borderless);  /* REVISÃO (colorman) — era var(--shadow-card-rest); ver justificativa completa junto à definição do token, nos blocos de tokens claro/escuro */
    border-radius: 0;
    padding: var(--space-6);
    text-align: center;
  }
  /* REVISÃO (layoutman) — era --space-3 (12px). Mesmo motivo do ajuste em
     .aviso-analise acima (h2 da home dobrou de tamanho/peso) — aqui o h2
     é seguido por .mds__intro (uma lede curta), não direto por uma caixa,
     então o respiro pode ficar um degrau menor que o de .aviso-analise
     (que vai direto pra caixa): --space-5 (20px). .mds__intro já tem seu
     próprio margin-bottom: var(--space-8) antes da grade de termos (ver
     abaixo) — o respiro maior fica nessa segunda transição, não aqui. */
  .medido-detectado-sugerido > h2 {
    margin-bottom: var(--space-5);
  }
  /* REVISÃO 15 (letterman) — aqui quem separa o h2 da lista de termos
     (.mds__term, tratado no mesmo degrau de tamanho de um h3, ver
     --fs-h3) não é o próprio h2 (margin pequena de propósito, o parágrafo
     .mds__intro vem logo abaixo dele) e sim este parágrafo — mesmo
     ajuste --space-7→--space-8 de .beneficios/.processo acima, pelo
     mesmo motivo. */
  .mds__intro {
    margin-bottom: var(--space-8);
  }
  @media (max-width: 860px) {
    .mds__list { grid-template-columns: 1fr; }
  }

  /* ---------- Fontes e transparência (versão condensada da home) ----------
     Mesmo papel e mesmo tratamento visual já usado em
     .sources__disclaimer (página "Como orientamos") para o texto
     equivalente: fundo --color-surface, borda --color-border-strong,
     texto --color-text-muted — reuso direto de uma decisão já validada,
     não uma escolha nova. */
  /* PEDIDO DO USUÁRIO — caixa removida (ver nota completa em
     .aviso-analise__box acima); .sources-block__box vira wrapper sem
     fundo/borda/sombra própria. */
  /* Tipografia (letterman) — mesmo par de .sources__disclaimer, o
     elemento equivalente que o colorman citou como referência de cor. */
  /* REVISÃO 11 (letterman) — itálico, nível "nota de apoio" do sistema
     (mesmo par de .sources__disclaimer, o elemento equivalente); ver
     bloco "REVISÃO 11" no topo do arquivo, item 2. */
  /* REVISÃO 14 (letterman) — mesma correção de .aviso-analise__text acima
     (título centralizado + corpo alinhado à esquerda por baixo, depois da
     caixa sair). max-width entra pela primeira vez aqui — o texto nunca
     tinha um limite de linha próprio, só herdava a largura cheia do
     painel — usando 64ch, o MESMO valor que .sources__disclaimer (o
     elemento equivalente, citado no comentário do colorman acima) já usa
     centralizado dentro da própria caixa (RODADA 3, mais abaixo no
     arquivo); reaproveitando a medida já validada, não inventando uma
     nova. */
  .sources-block__text {
    color: var(--color-text-muted);
    font-size: var(--fs-caption);
    /* font-style: italic removido — ver nota em .preview-card__caption acima. */
    line-height: var(--lh-small);
    max-width: 64ch;
    margin-inline: auto;
    text-align: center;
  }

  /* Layout (layoutman) — mesmo tratamento de painel de .aviso-analise
     acima (largura cheia do container, padding vertical --space-7,
     --radius-md) — os dois são painéis de mesmo peso editorial, mesma
     caixa. */
  /* REVISÃO (layoutman) — era --space-3 (12px), mesmo motivo do ajuste em
     .aviso-analise acima (h2 dobrou de tamanho/peso na home). Este h2 vai
     direto pra uma caixa (.sources-block__box, sem lede no meio, mesmo
     padrão de .aviso-analise) — mesmo valor usado lá: --space-6 (32px). */
  .sources-block > h2 {
    margin-bottom: var(--space-6);
  }

  /* ---------- Convite aos planos (teaser) ----------
     Painel neutro, mesma fórmula de .aviso-analise acima
     (--color-surface-alt + --color-border-strong) — o azul de Ação fica
     reservado para o CTA final de verdade (.cta-final, abaixo) e para o
     botão real em planos.html; aqui é um convite mais discreto ("planos
     a caminho"), não a chamada principal da página. Texto em
     --color-text-body; link "Ver os planos →" com o mesmo par de link
     neutro já usado em .processo__link/.source-card__link/.next-step__link
     (repouso --color-text-body → hover/foco --color-text-heading,
     underline permanente).
     PEDIDO DO USUÁRIO (consistência claro/escuro) — --color-surface-alt
     trocado por --color-surface, junto com os outros 4 membros do grupo
     "painel neutro" (ver nota completa em .aviso-analise). */
  /* PEDIDO DO USUÁRIO — caixa removida (ver nota completa em
     .aviso-analise__box acima); .planos-teaser__box vira wrapper sem
     fundo/borda/sombra própria. */
  /* Tipografia (letterman) — mesma fórmula de fundo/borda de
     .aviso-analise (nota do colorman); mesma equivalência tipográfica:
     --fs-body/--lh-body, os dois painéis com o mesmo peso editorial. */
  /* REVISÃO 11 (letterman) — peso 500, nível "lede" do sistema; ver
     bloco "REVISÃO 11" no topo do arquivo, item 1. */
  /* REVISÃO 14 (letterman) — PEDIDO DO USUÁRIO: mesma correção de
     .aviso-analise__text acima. .planos-teaser__text já pertencia ao
     grupo tipográfico "lede logo abaixo de um h2" desde a REVISÃO 11
     (citado nominalmente junto com .section-subtitle/.mds__intro/
     .waitlist__text), mas nunca tinha ganhado a centralização
     correspondente da REVISÃO 13 — ficava desalinhado por baixo do h2
     centralizado assim que a caixa saiu. max-width desce de 65ch para
     56ch, igualando o resto do grupo pelo mesmo motivo (linha centralizada
     pede medida um pouco mais curta que alinhada à esquerda). Ver nota
     abaixo sobre .planos-teaser__link, que passa a acompanhar como a
     mesma decisão de bloco único centralizado. */
  /* REVISÃO 16 (letterman) — font-size --fs-body → --fs-body-lg, mesmo
     ajuste de .aviso-analise__text acima, para manter os 3 painéis do
     grupo "mesmo peso editorial" equivalentes entre si (ver nota completa
     na REVISÃO 16 em .aviso-analise__text). font-weight já era 500 desde a
     REVISÃO 11, sem mudança aqui. */
  .planos-teaser__text {
    color: var(--color-text-body);
    font-size: var(--fs-body-lg);
    font-weight: 500;
    line-height: var(--lh-body);
    max-width: 56ch;
    margin-inline: auto;
    text-align: center;
  }
  .planos-teaser__link a {
    color: var(--color-text-body);
    text-decoration: underline;
    font-family: var(--font-body);
    font-weight: 600;
    font-size: var(--fs-small);
  }
  /* REVISÃO 11 (letterman) — mesmo par --color-accent-on-dark do
     .next-step__link acima (.planos-teaser também se apoia em
     --color-surface); ver bloco "REVISÃO 11" no topo do arquivo, item 3. */
  .planos-teaser__link a:hover,
  .planos-teaser__link a:focus-visible {
    color: var(--color-accent-on-dark);
  }

  /* Layout (layoutman) — mesmo tratamento de painel de .aviso-analise/
     .sources-block acima (largura cheia do container, padding vertical
     --space-7, --radius-md). Aqui é um bloco de texto corrido (parágrafo
     + link).
     REVISÃO 14 (letterman) — SUPERADO: o parágrafo abaixo estava alinhado
     à esquerda "por não haver um grid pra acompanhar" (raciocínio válido
     enquanto a caixa existia, funcionando como cartão autocontido). Com a
     caixa removida e o h2 acima centralizado, esquerda passou a ler como
     desalinhamento acidental, não decisão — mesmo diagnóstico da REVISÃO
     13 em .section-subtitle/.mds__intro. .planos-teaser__text ganhou
     text-align:center acima; o link "Ver os planos →" (parágrafo próprio
     logo abaixo) centraliza junto, formando h2 → parágrafo → link como um
     bloco único centrado — o mesmo padrão que .processo__link já usa
     (citado abaixo), só que agora por estar sob um h2 centralizado em vez
     de um grid. */
  .planos-teaser > h2 {
    margin-bottom: var(--space-3);
  }
  /* REVISÃO (layoutman) — mesmo motivo do ajuste em .aviso-analise acima
     (h2 dobrou de tamanho/peso na home). Vai direto pra caixa
     (.planos-teaser__box, sem lede no meio) — mesmo valor usado lá:
     --space-6 (32px).
     IMPORTANTE — ".planos-teaser" também existe em resultado.html (seção
     "resultadoConversao", oculta por padrão via [hidden]), que NÃO tem a
     classe "pagina-home" no <body> — continua com o h2 global, sem
     dobrar, então a regra acima (--space-3) permanece intacta lá. Este
     ajuste é escopado com "body.pagina-home" para valer só na Início. */
  body.pagina-home .planos-teaser > h2 {
    margin-bottom: var(--space-6);
  }
  .planos-teaser__text {
    margin-bottom: var(--space-3);
  }
  .planos-teaser__link {
    text-align: center;
  }

  /* ---------- Convite ao FAQ (teaser) ----------
     PEDIDO DO USUÁRIO — a seção de perguntas frequentes inteira saiu da
     Início (já existe uma aba dedicada, faq.html; duplicar o conteúdo
     virava manutenção dupla). No lugar, um convite simples — mesma
     "fórmula de painel neutro" de .aviso-analise/.sources-block/
     .planos-teaser (ver nota completa em .aviso-analise): fundo
     --color-surface, borda --color-border-strong, h2 fora da caixa. */
  /* PEDIDO DO USUÁRIO — caixa removida (ver nota completa em
     .aviso-analise__box acima); .faq-teaser__box vira wrapper sem
     fundo/borda/sombra/padding próprios. */
  /* REVISÃO 14 (letterman) — PEDIDO DO USUÁRIO: mesma correção de
     .aviso-analise__text/.planos-teaser__text acima (o par mais próximo:
     mesmo --fs-body/peso 500/max-width original de 65ch, mesmo papel de
     "convite-teaser" com link). text-align:center + margin-inline:auto,
     max-width descendo para 56ch, igualando o resto do grupo "lede
     centralizada logo abaixo de um h2". */
  /* REVISÃO 16 (letterman) — mesmo ajuste de .aviso-analise__text/
     .planos-teaser__text acima (ver nota completa na REVISÃO 16 em
     .aviso-analise__text): font-size --fs-body → --fs-body-lg. font-weight
     já era 500 desde a REVISÃO 11, sem mudança aqui. */
  .faq-teaser__text {
    color: var(--color-text-body);
    font-size: var(--fs-body-lg);
    font-weight: 500;
    line-height: var(--lh-body);
    max-width: 56ch;
    margin-inline: auto;
    text-align: center;
  }
  .faq-teaser__link a {
    color: var(--color-text-body);
    text-decoration: underline;
    font-family: var(--font-body);
    font-weight: 600;
    font-size: var(--fs-small);
  }
  .faq-teaser__link a:hover,
  .faq-teaser__link a:focus-visible {
    color: var(--color-accent-on-dark);
  }
  /* REVISÃO (layoutman) — era --space-3 (12px), mesmo motivo do ajuste em
     .aviso-analise acima. Vai direto pra caixa (.faq-teaser__box, sem lede
     no meio) — mesmo valor: --space-6 (32px). */
  .faq-teaser > h2 {
    margin-bottom: var(--space-6);
  }
  .faq-teaser__text {
    margin-bottom: var(--space-3);
  }
  /* REVISÃO 14 (letterman) — mesmo raciocínio de .planos-teaser__link
     acima: o link "Ver perguntas frequentes →" centraliza junto do
     parágrafo acima dele, formando h2 → parágrafo → link como bloco único
     centrado. */
  .faq-teaser__link {
    text-align: center;
  }

  /* ---------- Próximo passo (funil de conversão entre páginas) ----------
     REVISÃO 6 (letterman) — ver bloco "REVISÃO 6" no topo do arquivo
     para o raciocínio completo. Só tipografia (fonte/tamanho/peso/
     tracking/cor); espaçamento/padding/caixa ficam para o layoutman. */
  /* REVISÃO (letterman) — PEDIDO DO USUÁRIO: triplicar o tamanho de fonte
     de todo texto que hoje usa o MENOR token da escala tipográfica.
     --fs-eyebrow (0.8125rem/13px) é o menor dos 8 tokens de --fs-* no
     :root (eyebrow < caption < small < body < body-lg < h3 < h2/price <
     h1 — ver comentário "REVISÃO 4" junto aos tokens). Confirmei por
     grep quem REALMENTE renderiza nesse tamanho hoje (não só quem
     declara font-size: var(--fs-eyebrow) — .badge também declara isso,
     mas uma regra ".badge" mais tardia no arquivo, ~linha 9630
     [seção específica de badges de resultado.html: categoria/
     severidade/"Detectado"], redefine font-size para var(--fs-caption)
     com a mesma especificidade — por ordem de cascata essa é a que
     vence hoje, então .badge NÃO está de fato no menor degrau da escala
     e ficou fora desta rodada). Os dois consumidores reais e sem
     override posterior são este seletor (.next-step__eyebrow) e
     ".footer-nav__title/.footer-contact__title" logo abaixo.
     0.8125rem × 3 = 2.4375rem (39px) fixo.
     line-height ganha valor próprio (1.2, número puro) — antes este
     rótulo não declarava line-height (herdava o "normal" do navegador,
     ~1.2, adequado para um texto de 13px de uma palavra só). A 39px,
     deixar sem valor explícito arrisca inconsistência entre navegadores;
     1.2 é compacto o bastante para uma etiqueta curta (não é texto
     corrido) e consistente com --lh-tight/--lh-heading (1.2-1.3) já
     usados em títulos grandes do sistema.
     letter-spacing reduzido de 0.04em para 0.02em: 0.04em foi calibrado
     especificamente para texto pequeno em caixa alta (ver comentário
     original de .badge, "abaixo de ~12pt tracking positivo ajuda a
     legibilidade") — a 39px este rótulo sai da faixa "texto pequeno" e
     entra na mesma faixa de tamanho de .brand__wordmark-primary (24px)
     e headings do sistema, que usam tracking mais fechado (0.02em); um
     tracking desenhado para compensar baixa legibilidade em texto
     minúsculo, mantido sem ajuste num texto agora grande, ficaria
     aberto demais e sem função real. */
  .next-step__eyebrow {
    font-family: var(--font-body);
    font-weight: 600;
    font-size: calc(var(--fs-eyebrow) * 3);
    line-height: 1.2;
    text-transform: uppercase;
    letter-spacing: 0.02em;
    color: var(--color-brand-dark); /* REVISÃO 5 — era --color-brand; --color-brand agora é o tom estrutural pálido (Categoria 3), --color-brand-dark é o token dedicado a texto sobre fundo claro nesta família: ~6.52:1 sobre branco */
  }

  /* CORREÇÃO (letterman) — PEDIDO DO USUÁRIO: .next-step__text precisa usar
     a mesma font-family que os h2 do site usam. A regra global "h2 {}"
     (ver acima) define font-family: var(--font-display) (Oswald) para todo
     h2 do site, sem exceção por página — essa é a família de referência.
     Trocado de var(--font-body) (Inter/corpo) para var(--font-display),
     igualando 1:1. Peso (500) e tamanho (--fs-body-lg) mantidos
     intocados — só a família mudou, como pedido. Isto também exigiu remover
     ".next-step__text" da lista "body.pagina-home ... { font-family: Lora }"
     mais acima (ver nota lá): aquela regra tinha especificidade maior
     (1 classe extra) e continuaria vencendo esta troca só na home, onde
     o card "Quer entender mais" vive — sem a remoção, o usuário não veria
     nenhuma mudança na página em que reportou o problema. */
  .next-step__text {
    font-family: var(--font-display);
    font-weight: 500;
    font-size: var(--fs-body-lg);
    line-height: var(--lh-body);
    color: var(--color-text-heading);
    max-width: 68ch;
  }

  /* REVISÃO 6 (colorman) — mesma troca de .source-card__link acima:
     --color-text-link / --color-text-link-hover (azul) → dupla neutra
     --color-text-body / --color-text-heading, com underline sempre
     visível como sinal não-colorido de link. O link fica inline dentro
     de .next-step__text (--color-text-heading, peso 500/600) — o link em
     --color-text-body em repouso lê mais leve que o parágrafo ao redor,
     e escurece para --color-text-heading (igualando o parágrafo) no
     hover/foco; combinado com o peso 600/700 já mais pesado que o texto
     ao redor e o underline permanente, o link continua claramente
     diferenciável mesmo sem cor azul. */
  .next-step__link {
    color: var(--color-text-body);
    text-decoration: underline;
    font-weight: 600;
  }
  /* REVISÃO 11 (letterman) — PEDIDO DO USUÁRIO: link interno precisa mudar
     de cor no hover. A REVISÃO 6 (colorman) tinha trocado o azul de
     --color-text-link pela dupla neutra body→heading de propósito, "para
     não competir com o CTA de verdade" — pedido explícito desta rodada
     reverte esse ponto específico. Não uso --color-text-link/-hover (tokens
     FIXOS, calibrados só para fundo claro — ver nota "correção sistêmica"
     dentro de [data-theme="dark"] acima de :root); uso --color-accent-on-
     dark, o token já dedicado a "azul de Ação sobre --color-surface" (o
     mesmo fundo de .next-step), hoje também usado por .btn--secondary e
     pela borda de .next-step--final. O azul só aparece no hover — em
     repouso o link segue neutro — então continua sem competir com um CTA
     de fundo azul sólido. Ver bloco "REVISÃO 11" no topo do arquivo, item 3. */
  .next-step__link:hover,
  .next-step__link:focus-visible {
    color: var(--color-accent-on-dark);
  }

  /* Conversão final do funil (faq.html → lista-de-espera.html) — mesmo
     padrão de classes acima, com peso/cor um degrau mais assertivos por
     ser o CTA mais importante do site (ver bloco "REVISÃO 6" no topo). */
  .next-step--final .next-step__eyebrow {
    /* REVISÃO 6 (colorman) — era --color-text-link (azul); redirecionado
       para --color-text-heading (o extremo mais escuro dos neutros do
       sistema, ~17,3:1 sobre branco), não tratado como exceção. O eyebrow
       padrão (.next-step__eyebrow, regra acima) continua em
       --color-brand-dark (~6,52:1 sobre branco) — fora do escopo desta
       tarefa, não listado para troca. A relação "eyebrow final mais
       assertivo que o padrão" é preservada indo para o neutro mais
       escuro do sistema em vez de um cinza intermediário — ver bloco
       "REVISÃO 6" acima de :root para o raciocínio completo. */
    color: var(--color-text-heading);
  }
  .next-step--final .next-step__text {
    font-weight: 600;
  }
  .next-step--final .next-step__link {
    font-weight: 700;
  }

  /* ---------- Rodapé ---------- */
  /* REVISÃO 9 (colorman) — REVERTE a REVISÃO 8 (que tinha clareado o
     painel a pedido do usuário NAQUELE momento): pedido explícito desta
     rodada — "superfícies escuras... tom escuro coerente com a família
     azul, não mais rosa" — volta a ser um painel ESCURO azul-marinho
     (#193243). Isso vira de novo o eixo inteiro de "texto escuro sobre
     fundo claro" (REVISÃO 8) em "texto claro sobre fundo escuro"
     (arquitetura original da REVISÃO 7) — reauditado consumidor por
     consumidor abaixo, com os tokens --color-text-on-brand/-muted/-faint
     reativados (ver PARTE 8 do bloco "REVISÃO 9" acima de :root). */
  .site-footer {
    background-color: var(--color-ink-900);
    /* REVISÃO 9 (colorman) — cor BASE herdada por qualquer texto do
       rodapé sem regra própria; volta a --color-text-on-brand-muted
       (nível "corpo"). REVISÃO 11 (colorman): rgba(255,255,255,0.82) —
       era rgba(250,244,234,0.82) (creme); 9,65:1 sobre o
       --color-ink-900 atual. */
    color: var(--color-text-on-brand-muted);
    border-top: 1px solid var(--color-ink-800);
    /* REVISÃO 9 (colorman) — sobrescrita local de --color-focus-ring
       RESTAURADA: o painel voltou a ser escuro, --color-text-link
       (#2C658C) mede só ~2,12:1 aqui — abaixo do piso de 3:1. Mesmo
       padrão de --color-accent-tint-on-dark já usado em .waitlist__box. */
    --color-focus-ring: var(--color-accent-tint-on-dark);
  }
  /* REVISÃO (layoutman) — .site-footer .brand__mark e .site-footer
     .brand__name (regras de cor, colorman/letterman) removidas: o rodapé
     trocou <span class="brand__mark">+<span class="brand__name"> pela
     mesma <img class="brand__logo"> já usada no header (pedido do
     usuário, "unifica a marca" — ver as 7 páginas HTML). Confirmado via
     grep nas 7 páginas antes de remover: nenhum .brand__mark/.brand__name
     restou em nenhum HTML do site, então as duas regras ficaram
     definitivamente órfãs (a base .brand__mark de layout já tinha sido
     removida junto da reescrita do bloco "Header" acima). A logo em
     assets/logo.png já tem fundo próprio em pill rosa/magenta, então
     funciona sobre o rodapé claro sem nenhum ajuste de cor. */
  /* REVISÃO 9 (colorman) — REVERTE a REVISÃO 8: volta a texto claro
     (nível "faint", mais discreto) sobre fundo escuro. REVISÃO 11
     (colorman): 7,54:1 sobre o --color-ink-900 atual, branco no lugar
     do creme. */
  .footer-brand__description {
    color: var(--color-text-on-brand-faint);
    font-size: var(--fs-small);
    line-height: var(--lh-small);
    margin-top: 0.75rem;
    max-width: 40ch;
  }
  /* REVISÃO 9 (colorman) — REVERTE a REVISÃO 8: rótulo em caixa alta,
     nível "faint" (mais discreto), mesmo token de .footer-brand__description
     acima. REVISÃO 11 (colorman): 7,54:1 sobre o --color-ink-900 atual,
     branco no lugar do creme. */
  /* REVISÃO (letterman) — mesmo pedido/mecanismo documentado na regra
     ".next-step__eyebrow" acima: --fs-eyebrow é o menor token da escala
     e este é o segundo (e último) consumidor real dele sem override
     posterior (confirmado por grep, ver nota completa em
     .next-step__eyebrow). 0.8125rem × 3 = 2.4375rem (39px).
     line-height ganho explícito (1.2) pelo mesmo motivo: título curto
     de coluna do rodapé, sem valor próprio antes (herdava "normal" do
     navegador, ~13px OK sem declarar; 39px pede um valor explícito).
     letter-spacing reduzido de 0.04em para 0.02em: mesmo raciocínio do
     .next-step__eyebrow — tracking positivo de 0.04em existe para abrir
     texto pequeno em caixa alta; a 39px este título de coluna sai da
     faixa "texto pequeno" e um tracking desenhado pra compensar baixa
     legibilidade em fonte minúscula fica solto demais sem função.
     margin-bottom escalado de 0.75rem para 1.25rem (mesma proporção
     aproximada de crescimento do texto acima dele, ~1.6x, não 3x —
     um espaço em branco cresce de forma mais comedida que o próprio
     glifo para não abrir um vão vazio desproporcional entre o título
     (agora grande) e a lista de links abaixo dele); esse valor é o
     espaçamento PRÓPRIO deste elemento de texto (mesmo raciocínio já
     usado nas outras revisões desta rodada), não espaçamento do grid do
     rodapé — se a coluna como um todo precisar de mais respiro ao
     redor, é ajuste do layoutman. */
  /* CORREÇÃO (letterman) — PEDIDO DO USUÁRIO: títulos de coluna do rodapé
     ("Navegação"/"Contato") precisam usar Newsreader — a mesma família
     serifada de .text-highlight e dos títulos de card do site (ver bloco
     "UNIFICAÇÃO DE TIPOGRAFIA DE CARDS" acima). Troca só de font-family:
     var(--font-body) → "Newsreader", var(--font-display) (mesmo fallback
     não-serifado dos outros consumidores de Newsreader, caso a webfont não
     carregue). Peso/tamanho/caixa-alta/tracking não tocados — não foi pedido
     itálico aqui (diferente de .text-highlight/títulos de card), só a
     família. Newsreader precisa estar carregada via <link> do Google Fonts
     em toda página com rodapé — auditado/corrigido nesta mesma rodada, ver
     nota em cada <head> que não tinha o link. */
  .footer-nav__title,
  .footer-contact__title {
    color: var(--color-text-on-brand-faint);
    font-family: "Newsreader", var(--font-display);
    font-weight: 600;
    font-size: calc(var(--fs-eyebrow) * 3);
    line-height: 1.2;
    text-transform: uppercase;
    letter-spacing: 0.02em;
    margin: 0 0 1.25rem;
  }
  /* REVISÃO 9 (colorman) — REVERTE a REVISÃO 8: volta a texto claro
     nível "corpo" (--color-text-on-brand-muted, 0,82 de opacidade) em
     repouso. REVISÃO 11 (colorman): 9,65:1 sobre o --color-ink-900
     atual, branco no lugar do creme. Estado :hover/:focus-visible
     clareia pro tom cheio (--color-text-on-brand), mesmo padrão "hover
     intensifica" de sempre, agora em polaridade clara-sobre-escuro. */
  .footer-nav__link {
    color: var(--color-text-on-brand-muted);
    font-size: var(--fs-small);
    line-height: 2;
  }
  /* REVISÃO 9 (colorman) — REVERTE a REVISÃO 8: volta a --color-text-
     on-brand. REVISÃO 11 (colorman): token passou de creme (#FAF4EA)
     pra branco (#FFFFFF) — 11,55:1 sobre o --color-ink-900 atual
     (recalculado contra o hex real de hoje, #1E3C50; ver bloco
     "REVISÃO 11" acima de :root). */
  /* REVISÃO 11 (letterman) — PEDIDO DO USUÁRIO: mudança de cor no hover.
     Era só um clareamento quase imperceptível (rgba branco 0,82→1,0, "mesmo
     branco, mais forte", não uma cor nova). --color-ink-900 é um painel
     escuro FIXO nos dois temas, então uso --color-accent-tint-on-dark — o
     mesmo tom que .footer-contact__link/.waitlist__text já usam como
     "azul claro sobre fundo escuro fixo" no rodapé, 8,38:1 medido. Peso
     600 (era sem peso próprio, herdava 400 do <p> pai) soma um segundo
     sinal só no hover; ver bloco "REVISÃO 11" no topo do arquivo, item 3. */
  .footer-nav__link:hover,
  .footer-nav__link:focus-visible {
    color: var(--color-accent-tint-on-dark);
    font-weight: 600;
    text-decoration: underline;
  }
  /* Estado "página atual" no rodapé.
     REVISÃO 9 (colorman) — REVERTE a REVISÃO 8: --color-text-on-brand
     de novo (mesmo tom do :hover acima). REVISÃO 11 (colorman): 11,55:1
     sobre o --color-ink-900 atual, branco no lugar do creme. Peso 700 +
     sublinhado continuam sendo o sinal de "link ativo" junto com a
     cor. */
  .footer-nav__link[aria-current="page"] {
    color: var(--color-text-on-brand);
    font-weight: 700;
    text-decoration: underline;
  }
  /* REVISÃO 9 (colorman) — REVERTE a REVISÃO 8: mesmo raciocínio de
     .footer-brand__description acima (texto de apoio → nível "faint").
     REVISÃO 11 (colorman): 7,54:1 sobre o --color-ink-900 atual, branco
     no lugar do creme. */
  .footer-contact__text {
    color: var(--color-text-on-brand-faint);
    font-size: var(--fs-small);
    line-height: var(--lh-small);
    margin: 0 0 0.75rem;
  }
  /* REVISÃO 9 (colorman) — REVERTE a REVISÃO 8: mesmo par base/hover de
     .footer-nav__link (nível "corpo" em repouso). REVISÃO 11 (colorman):
     9,65:1 sobre o --color-ink-900 atual, branco no lugar do creme.
     Underline sempre visível preservado como sinal não-colorido de
     link. */
  .footer-contact__link {
    color: var(--color-text-on-brand-muted);
    text-decoration: underline;
    font-weight: 600;
    font-size: var(--fs-small);
  }
  /* REVISÃO 9 (colorman) — REVERTE a REVISÃO 8: mesma troca de
     .footer-nav__link:hover acima. REVISÃO 11 (colorman): 11,55:1 sobre
     o --color-ink-900 atual, branco cheio no lugar do creme cheio. */
  .footer-contact__link:hover,
  .footer-contact__link:focus-visible {
    color: var(--color-text-on-brand);
  }
  /* REVISÃO 9 (colorman) — REVERTE a REVISÃO 8: linha divisória clara
     quase imperceptível sobre fundo escuro de novo — RGB de
     --color-text-on-brand em vez do RGB de --color-text-heading que a
     REVISÃO 8 tinha usado pro cenário claro, mesma opacidade, mesma
     técnica de .waitlist__box (ver acima).
     REVISÃO 11 (colorman) — era rgba(250,244,234,0.16) (RGB decimal do
     creme #FAF4EA, hardcoded fora do token); trocado para o RGB de
     --color-text-on-brand atual (branco, #FFFFFF), pedido do usuário
     para eliminar o creme do sistema. */
  .site-footer__legal {
    border-top: 1px solid rgba(255, 255, 255, 0.16);
  }
  /* REVISÃO 9 (colorman) — REVERTE a REVISÃO 8: nível "faint" de novo.
     REVISÃO 11 (colorman): 7,54:1 sobre --color-ink-900 atual (branco no
     lugar do creme); testado também contra o pior caso hipotético,
     --color-ink-800 (usado só na borda/divisor, não como fundo de
     texto): 5,71:1, ainda ≥4,5:1 — ver bloco "REVISÃO 11" acima de
     :root. Apropriado para o papel de rodapé legal/copyright. */
  /* REVISÃO 15 (letterman) — PEDIDO DO USUÁRIO: ".hero-disclaimer" (aviso
     "a gente não promete posição/indexação/tráfego/vendas/menção em IA")
     saiu do fim do hero e virou ".legal-disclaimer" aqui no rodapé. Já
     era tratado como "nota discreta" no hero (--fs-caption + itálico +
     --color-text-muted, ver REVISÃO 11 antiga, removida junto com a regra
     .hero-disclaimer), mas o conteúdo em si é, por natureza, um aviso
     legal formal — exatamente o mesmo papel comunicativo de
     .legal-copyright logo abaixo ("Sem vínculo com Google, OpenAI...");
     as duas frases dizem, em essência, a mesma coisa: quem decide
     posição/indexação/tráfego é a plataforma, não a FirstPageAI. Mover
     para o bloco de rodapé legal (que já reúne privacidade + isenção de
     vínculo) é mais coerente com o sistema do que deixar o hero — uma
     seção de conversão/primeira impressão — carregando ressalva legal, e
     cumpre o pedido de deixar isso "mais discreto": rodapé é,
     estruturalmente, o lugar menos proeminente da página. Reaproveita o
     MESMO par de estilo de .legal-note/.legal-copyright (mesmo papel,
     mesmo nível de contraste já auditado — ver bloco "REVISÃO 11" acima
     de :root), sem cor/tamanho novos. */
  .legal-note,
  .legal-disclaimer,
  .legal-copyright,
  .legal-links {
    color: var(--color-text-on-brand-faint);
    font-size: var(--fs-caption);
    line-height: var(--lh-small);
  }
  .legal-note,
  .legal-disclaimer,
  .legal-links {
    margin: 0 0 0.5rem;
  }
  /* .legal-links (rodapé de todas as páginas) — os 6 links para as
     páginas legais/institucionais (termos, privacidade, cookies,
     segurança, contato, ajuda). Um degrau acima de --color-text-on-
     brand-faint (mesmo nível "body" já usado em .footer-nav__link) para
     o link se distinguir do texto de apoio ao redor, já que aqui o
     texto INTEIRO é clicável, não uma frase com um link solto no meio. */
  .legal-links a {
    color: var(--color-text-on-brand-muted);
    text-decoration: underline;
  }
  .legal-links a:hover,
  .legal-links a:focus-visible {
    color: var(--color-text-on-brand);
  }

  /* ---------- Aviso de demonstração ---------- */
  /* Usa a mesma cor de "pré-lançamento/aviso" do badge do hero e do status
     dos passos (--color-warning-*) — é o mesmo papel semântico (isto ainda
     não funciona de verdade), então reaproveita a mesma cor de acento em
     vez de introduzir uma terceira. Contraste texto/fundo: ~5:1 (AA). */
  .demo-notice {
    background-color: var(--color-warning-bg);
    color: var(--color-warning-text);
    border-top: 1px solid var(--color-warning-border);
  }
  /* REVISÃO 8 (letterman) — peso 400 (padrão herdado do body) destoava do
     próprio sistema: todo outro texto de papel "aviso" (.badge--prelaunch,
     .step-card__status) já usa 600. Como aqui é uma frase corrida inteira
     (não um rótulo curto em caixa alta), segui o precedente de
     .next-step__text em vez de copiar o 600 dos rótulos: peso 500, "um
     grau a mais de assertividade que corpo neutro" sem pesar a frase
     toda. Cor/fundo (já semânticos, --color-warning-text/--color-warning-bg
     herdados de .demo-notice) não tocados. */
  .demo-notice__text {
    font-size: var(--fs-caption);
    font-weight: 500;
    line-height: var(--lh-small);
    text-align: center;
  }

  /* ================================================================
     LAYOUT — FrontPageAI
     Espaçamento, grid/flex, containers e responsividade.
     Aplicado por layoutman. Revisão de direção motivada pelo diretor do
     projeto: a versão anterior seguia densidade tipo "SaaS editorial"
     (header fino, cartões finos e compactos, raio pequeno, bordas finas
     sem sombra pesada) — bom pra um produto técnico denso, mas errado
     pra vibe ACESSÍVEL E ACOLHEDORA que colorman e letterman já
     estabeleceram (referência Notion/Duolingo, mais perto do Notion).
     Duas mudanças concretas nessa direção:
       1) Raio um degrau maior em cards/superfícies (--radius-sm/md/lg),
          sem virar "pill" nem lúdico — cantos moderados tipo Notion, não
          arredondamento óbvio. Botões deixam de ser pill (999px) e
          passam a "rounded-rect" (--radius-lg), reforçando esse mesmo
          vocabulário de forma; badges/status continuam pill de propósito
          (são rótulos pequenos, pill é o padrão pra esse tipo de chip).
       2) Mais respiro interno nos blocos que hoje liam como "memorando
          institucional" por causa do padding apertado: os cartões de
          step/concept/source, os blocos de aviso (concepts__note,
          sources__disclaimer) e os itens do preview-card ganharam mais
          espaço interno. O ritmo vertical ENTRE seções já era generoso
          e continua o mesmo — a mudança é de respiro DENTRO de cada
          bloco.
     Os grids de 3 colunas (steps, concepts, sources, pricing) e os
     breakpoints (900/860/720/480/920px) não mudam de estrutura, só de
     espaçamento. Não altera cor, tipografia ou texto — só arranjo espacial.

     ----------------------------------------------------------------
     REVISÃO 2 — resolução de projeto 1920×1080 + referência de layout
     Apple Store (br). Motivada pelo diretor do projeto após feedback do
     usuário final: em telas grandes, --container-max: 1200px deixava o
     conteúdo "perdido" no centro, com faixas enormes de espaço vazio
     lateral não usadas com intenção.
     Decisões, e por quê:
       1) --container-max sobe de 1200px → 1440px como base, e ganha um
          segundo salto (1600px) só a partir de 1440px de viewport. Isso
          segue o padrão observado na Apple Store: nunca uma coluna
          estreita tipo blog, mas também nunca o conteúdo colado nas
          bordas — cresce o container, mas deixa margens laterais
          generosas mesmo em 1920px (1920 - 1600 = 320px de sobra,
          ~160px de cada lado fora do container, além do padding interno).
       2) --container-pad sobe de 32px → 40px na base e para 56px a
          partir de 1440px — reforça a margem lateral "nunca colado na
          borda" também dentro do próprio container.
       3) NÃO aumentamos o número de colunas dos grids (.steps__list,
          .concepts__grid, .sources__grid, .pricing__grid) — continuam 3.
          Isso é o ponto mais explícito do padrão Apple: telas maiores
          não viram mais colunas, viram mais respiro. Por isso, a partir
          de 1440px, o gap desses grids sobe de --space-5 (20px) para
          --space-7 (48px) e o padding interno dos cards sobe de
          --space-6 (32px) para --space-7 (48px).
       4) O hero ganha mais respiro vertical (padding-top/bottom) e mais
          gap entre as duas colunas (texto/preview-card) a partir de
          1440px — ecoa o "hero curto, com muito espaço antes de
          qualquer outro elemento" da Apple, mas mantém a estrutura de
          2 colunas já existente (texto + visual), que já reflete bem
          esse padrão.
       5) O ritmo vertical entre seções (--space-10) também cresce um
          degrau (128px → 160px) a partir de 1440px, coerente com "poucos
          elementos por tela cheia, respiro > densidade".
       6) Header, nav e footer usam --container-max automaticamente (já
          centralizavam nele), então crescem junto sem precisar de regras
          novas — o header continua fino/compacto, só ganha mais largura
          útil.
       7) Raios (--radius-sm/md/lg) não mudaram — já estavam na faixa que
          a pesquisa apontou como padrão Apple (~12–18px).
     Nenhum valor aqui é "o valor oficial da Apple" — a pesquisa não
     confirmou pixels exatos do CSS real da apple.com/br/store; os números
     usados são uma extrapolação direcional do padrão observado (full-bleed
     para visual grande, container amplo pro resto, poucas colunas com
     mais respiro), aplicada à escala de espaçamento que já existia neste
     arquivo. Cor, tipografia e texto continuam intocados.
     ----------------------------------------------------------------
     REVISÃO 3 — referência visual REAL da Apple Store (print de
     apple.com/br/store, não mais só pesquisa textual). Motivada pelo
     diretor do projeto: a REVISÃO 2 acima foi feita "às cegas" (sem ver
     a página de verdade), então os ajustes foram genéricos (container
     maior, mais respiro). Com o print em mãos, três coisas ficaram
     claras que a REVISÃO 2 não capturava:
       1) O raio de canto da Apple é BEM mais generoso, proporcionalmente,
          do que os 14/20px que tínhamos — em cards pequenos e grandes o
          canto lê como um raio "grande" quase constante, não escalando
          muito com o tamanho do card. --radius-md sobe pra 18px,
          --radius-lg pra 24px.
       2) A Apple usa PRATICAMENTE NENHUMA sombra — a separação entre
          card e fundo vem do contraste de cor (fundo cinza-claro da
          página vs. card branco/preto), não de elevação. Nossos
          box-shadow de preview-card/plan-card--featured/waitlist__box
          e do hover do botão primário eram todos pesados demais
          perto disso — foram reduzidos abaixo, nas respectivas regras
          de componente (mesmo rgba/cor, só menos blur/espalhamento).
       3) O ritmo vertical entre seções na Apple é generoso mas NÃO do
          tamanho que tínhamos — a página empilha bastante conteúdo
          (fileira de categorias logo após o header, várias fileiras de
          cards uma embaixo da outra) com respiro moderado entre elas,
          não o respiro "hero de landing page" que --space-10 em
          128/160px estava dando. --space-10 desce pra 96px na base e
          128px em telas grandes (era 128/160px) — ainda claramente
          maior que o espaçamento interno dos cards, só não tão solto.
     O que NÃO mudou por não ter base na imagem real: os grids continuam
     3 colunas simétricas (steps/concepts/sources/pricing) — são 3 itens
     de peso semanticamente igual, e forçar uma coluna maior sem motivo
     de conteúdo seria assimetria de fachada, não assimetria funcional
     como a da Apple (lá, o primeiro card de cada fileira é sempre o
     item de maior destaque/novidade real, não um acidente de grid).
     Container/padding (1440/1600px, 40/56px) também ficaram como
     estavam — a imagem não contradiz esses valores, só confirma que
     "conteúdo nunca colado na borda" já estava certo.
     ----------------------------------------------------------------
     RODADA 2 — segunda comparação crítica com o mesmo print, depois da
     REVISÃO 3 já aplicada. Pergunta orientadora: o que ainda está longe
     do print que a REVISÃO 3 (raio, sombra, --space-10) não capturou? A
     resposta mudou justamente o ponto que a REVISÃO 3 tinha decidido NÃO
     mexer — a proporção dos cards nos grids de 3 colunas:
       1) Largura de card. Com --container-max em até 1600px e os grids de
          steps/concepts/sources/pricing usando repeat(3, 1fr), cada card
          chegava a ~490-500px de largura em telas grandes — um card com
          só um título de 1 linha e 2-3 linhas de descrição, boiando num
          card enorme e majoritariamente vazio. No print, os cards de
          feature/produto da Apple (linha "As novidades", "A ajuda está
          aqui", "Na Apple Store") mantêm largura contida — algo entre
          ~260px (cards pequenos de ícone) e ~380px (cards de produto) —
          MESMO em telas largas; quem cresce em telas grandes não é o
          card, é o número de cards visíveis na fileira (com corte/scroll
          na borda direita, indicando carrossel). Sem implementar
          carrossel (fora do escopo desta rodada — mudaria a estrutura
          HTML/JS, não só o CSS de layout), a correção equivalente em CSS
          é capar a largura de cada card com minmax() em vez de deixar o
          grid esticar em 1fr: .steps__list/.concepts__grid/.sources__grid
          passam a repeat(3, minmax(0, 380px)) com justify-content:
          flex-start (fileira ancorada à esquerda, no mesmo início
          horizontal do título de seção acima — os cards da Apple também
          começam sob o título, não centralizados); .pricing__grid passa a
          repeat(3, minmax(0, 340px)) com justify-content:center (uma
          tabela de 3 planos é um bloco de comparação autocontido, não uma
          fileira editorial sob um título — ver comentário junto à regra).
       2) Gap em telas grandes. A REVISÃO 3 (bloco @media min-width:1440px)
          tinha aumentado o gap desses 4 grids de --space-5 (20px) para
          --space-6 (32px) "porque telas grandes merecem mais respiro" —
          um raciocínio genérico da REVISÃO 2, nunca corrigido pela
          REVISÃO 3. O print mostra o oposto: o gap ENTRE cards de uma
          mesma fileira é compacto e não cresce com a tela — quem cresce é
          o espaço ENTRE seções (--space-10) e o número de cards visíveis,
          não o gap interno da fileira. Essa bump de gap foi removida; os
          4 grids agora usam --space-5 (20px) fixo em qualquer largura.
     Isso confirma, em retrospecto, que a REVISÃO 3 acertou ao não tocar
     no NÚMERO de colunas (3 itens = 3 colunas, sem forçar 4ª coluna vazia
     nem virar coluna única) — o problema nunca foi quantas colunas, foi a
     largura que cada coluna estava assumindo dentro de um container muito
     mais largo do que o conteúdo de cada card pedia.
     ----------------------------------------------------------------
     RODADA 3 — ajuste fino final, depois da correção de largura de card
     da RODADA 2. Comparação já bem mais próxima do print; os ajustes
     aqui são pequenos:
       1) .concepts__note e .sources__disclaimer (os avisos "isto não
          garante resultado" abaixo de cada grid) tinham max-width em
          78-80ch — dimensionado pra um grid que naquele momento ocupava
          o container inteiro (até ~1500px de conteúdo útil). Com o grid
          acima agora capado (3 cards de 380px + 2 gaps de 20px ≈ 1180px
          no máximo), a nota em 78-80ch (~880-900px) ficava larga o
          bastante para ler como um elemento solto, descolado da largura
          real do grid acima dela. Reduzido para 62ch/64ch — ainda um
          bloco de texto confortável para leitura, mas lendo como legenda
          de rodapé do grid, não como uma faixa própria.
       2) Conferido novamente e mantido sem alteração: raio (--radius-md/
          lg), ausência de sombra pesada, --space-10 (96/128px), altura do
          header (48px) e gap da nav (--space-6) — todos já estão dentro
          da faixa que o print sustenta, nenhum deles precisou de correção
          nesta rodada.
     Com isso, o processo de 3 rodadas de comparação com a referência real
     está concluído.
     ----------------------------------------------------------------
     REVISÃO 4 — .next-step (bloco de transição de funil entre páginas)
     writerman escreveu a copy e letterman já definiu a tipografia deste
     componente (ver "Próximo passo" mais acima na seção de componentes, e
     REVISÃO 6 no bloco TIPOGRAFIA no topo do arquivo) — o bloco chegou
     sem NENHUM CSS de espaçamento/caixa. <aside class="next-step"> é
     filho direto de <main>, irmão da última <section> em 6 das 7 páginas
     (todas exceto lista-de-espera.html), não um <section> em si — por
     isso não herdava nada da regra "main > section" (max-width/margin/
     padding) nem das regras full-bleed de .steps/.concepts/.sources/
     .pricing/.waitlist/.faq; renderizava colado à margem esquerda da
     página, largura descontrolada, sem respiro próprio.
     Decisões:
       1) CAIXA PRÓPRIA, não um "note/disclaimer": ao contrário de
          .concepts__note/.sources__disclaimer (fundo --color-surface-alt,
          --radius-md, papel de ressalva/aviso de rodapé de seção),
          .next-step tem um papel de CONVITE A AVANÇAR — mais perto de um
          card de conteúdo do que de uma nota. Reaproveitei a mesma
          fórmula de "card genérico" já usada em .step-card/.concept-card/
          .source-card/.faq-item (background: --color-surface, border:
          1px solid --color-border-strong, a mesma sombra
          rgba(16,27,43,0.06) já usada em todos esses cards — nenhum
          valor novo), mas com --radius-lg (24px) em vez de --radius-md
          (18px): o mesmo raio já reservado no sistema para blocos mais
          "de destaque/CTA" (preview-card, plan-card, waitlist__box,
          botões), não para notas de rodapé de seção. Isso dá ao bloco
          uma identidade visual reconhecível e consistente nas 6 páginas
          ("isto é sempre o convite pra continuar"), sem inventar nenhum
          token de cor ou sombra novo.
       2) LARGURA/ALINHAMENTO: em vez de ocupar a largura cheia do
          container (que deixaria uma frase + link boiando sozinha num
          espaço muito maior do que ela precisa — o mesmo problema que o
          grid de cards já resolveu na RODADA 2 acima, capando a largura
          em vez de esticar), o bloco usa
          width: min(760px, 100% - 2 * var(--container-pad)), centralizado
          com margin-inline:auto. 760px reaproveita o mesmo valor já usado
          em .faq__list (o acordeão de perguntas) — em faq.html isso
          também alinha visualmente o .next-step--final exatamente sob a
          largura do acordeão logo acima dele, sem coincidência. Calcular
          a largura em função de --container-pad garante respiro lateral
          em qualquer tamanho de tela sem precisar de uma media query só
          pra isso (--container-pad já cai para --container-pad-mobile em
          480px, então o cálculo acompanha sozinho). O texto interno
          permanece alinhado à esquerda dentro da caixa centralizada —
          letterman não definiu text-align nas regras de tipografia deste
          componente, e não é minha decisão mexer nisso: eyebrow e frase
          leem como texto corrido normal dentro de uma caixa centralizada
          na página, sem tocar na decisão de alinhamento de texto.
       3) ESPAÇAMENTO ACIMA/ABAIXO: cada página já tem --space-10 (ou a
          versão reduzida por breakpoint) de padding-bottom na última
          section antes do .next-step — isso cria ritmo ENTRE seções, mas
          não distinguia ".next-step é um elemento à parte" de "mais um
          parágrafo da seção anterior". Adicionei margin-top/bottom
          própria (var(--space-7) na base, reduzindo para --space-6 em
          900px e --space-5 em 480px — os mesmos três degraus já usados
          na redução de --space-10 no restante do arquivo, não uma escala
          nova) para o bloco ganhar uma "batida" extra de respiro acima E
          abaixo, suficiente pra ler como fechamento de página antes do
          rodapé, sem duplicar o tamanho do espaçamento entre seções.
       4) .next-step--final (só em faq.html, a conversão mais importante
          do funil): reforço no CONTAINER que ecoa o mesmo tratamento já
          usado em .plan-card--featured para o plano recomendado — borda
          de 2px na cor de Ação (var(--color-accent), a mesma reservada
          pra CTA em todo o sistema) em vez da borda neutra padrão dos
          outros 5 blocos, padding um degrau acima (--space-7 em vez de
          --space-6) e uma sombra com leve tom de Ação
          (rgba(59, 111, 209, 0.10) — mesma estrutura de blur/espalhamento
          de .plan-card--featured, 4px/12px, só trocando o rgb pelo tom de
          Ação já usado em .btn--primary:hover, em vez do rgb de Marinho;
          nenhum valor novo criado, só recombinação de dois já
          existentes). Raio, largura e posição continuam idênticos ao
          padrão comum às outras 5 páginas — o reforço é só "este é o
          mais importante", não um componente à parte.
     ----------------------------------------------------------------
     ================================================================ */
  :root {
    --space-1: 4px;
    --space-2: 8px;
    --space-3: 12px;
    --space-4: 16px;
    --space-5: 20px;
    --space-6: 32px;
    --space-7: 48px;
    --space-8: 64px;
    --space-9: 96px;
    --space-10: 96px;   /* era 128px — ritmo mais denso, mais perto do empilhamento real da Apple Store; ver REVISÃO 3 */
    --container-max: 1440px;   /* era 1200px — resolução de projeto agora é 1920x1080; ver REVISÃO 2 acima */
    --container-pad: 40px;     /* era 32px — margem lateral um pouco mais generosa na base */
    --container-pad-mobile: 20px;
    --radius-sm: 10px;   /* era 8px — leve aumento, cantos moderados tipo Notion */
    --radius-md: 18px;   /* era 14px — cards principais (steps/concepts/sources); ver REVISÃO 3, raio mais generoso na referência real */
    --radius-lg: 24px;   /* era 20px — preview-card, plan-card, waitlist__box, botões; ver REVISÃO 3 */
    --radius-pill: 999px; /* badges/status/número circular — chip continua pill de propósito */

    /* Sistema de elevação (pedido do usuário — visual "clean, dinâmico,
       high-end" para as caixas do site). --ease-premium é uma curva
       ease-out-expo: parte rápido, desacelera suave no fim — a sensação
       de "assentar" em vez de simplesmente parar, usada em toda
       transição de lift/sombra abaixo. --shadow-card-rest é quase
       imperceptível (a caixa já se separa pela borda); --shadow-card-
       hover é a sombra "flutuante" de quando o card levanta no hover —
       ampla, difusa e deslocada pra baixo (grande blur, spread
       negativo), não um contorno duro. No escuro, sombra preta sobre
       fundo quase preto não se vê — por isso a versão escura (ver
       sobrescrita em :root[data-theme="dark"]) troca o "contact shadow"
       por um leve halo de luz (1px de rgba branco baixíssima opacidade,
       primeira camada de --shadow-card-hover lá) somado a uma sombra bem
       mais larga/opaca só pra dar profundidade: o brilho é o que
       comunica "isto subiu", não a sombra em si. */
    --ease-premium: cubic-bezier(0.16, 1, 0.3, 1);
    --shadow-card-rest: 0 1px 3px rgba(33, 30, 26, .08), 0 1px 2px rgba(33, 30, 26, .05);
    --shadow-card-hover: 0 28px 56px -20px rgba(33, 30, 26, 0.20), 0 8px 20px -10px rgba(33, 30, 26, 0.12);
    --shadow-card-rest-borderless: 0 1px 3px rgba(33, 30, 26, .14), 0 3px 8px rgba(33, 30, 26, .10);  /* NOVO (colorman) — pedido "bordas invisíveis" nos 4 cards exclusivos da home (.preview-card/.beneficios__item/.processo__item/.mds__item): a borda virou border-color: transparent, mas no tema claro --color-surface e --color-bg-page são o MESMO branco (#FFFFFF), então --shadow-card-rest sozinha (desenhada pra ser "quase imperceptível" contando com o apoio de uma borda, ver nota logo acima) não separa mais o card do fundo — ficaria efetivamente invisível em repouso. Reforcei alpha (.08→.14 na 1ª camada) e blur/alcance (2px→8px, .05→.10 na 2ª) mantendo a MESMA cor-base (rgba 33,30,26) e a estética em 2 camadas do sistema, sem virar sombra "pesada" — valores calibrados contra convenções de mercado (Material Design elevação 1 usa .12/.24; escolhi ficar mais leve que isso, mais perto do padrão "soft diffuse" comum em SaaS clean). Token dedicado (não sobrescrevi --shadow-card-rest direto) porque esse token também é consumido por .step-card/.concept-card/.source-card/.faq-item e por 5 painéis de nota — todos fora de escopo deste pedido e todos MANTENDO borda visível, então não podem herdar uma sombra pensada pra funcionar sem borda. Ver override em :root[data-theme="dark"]: no escuro este token vira alias de --shadow-card-rest normal, sem reforço — --color-surface (dark) já difere de --color-bg-page (dark) em tom, então a separação natural de brilho entre os dois já é suficiente ali; reforçar a sombra também no escuro seria um ajuste sem necessidade real. */
    --header-height: 56px;   /* REVISÃO (layoutman) — volta a 56px (era 48px, que por sua vez tinha vindo de 56px na REVISÃO 3): a logo cresce de 28px para 36px nesta rodada (pedido do usuário, "logo maior" + saiu do centro para o canto esquerdo), então o header precisa de mais altura de sobra para não espremer o novo tamanho; 36px de logo + padding vertical do header (--space-3, 12px de cada lado) fecha em ~60px de conteúdo real, então 56px passa a ser só o piso mínimo, não o valor exato renderizado. */
  }

  /* ---------- Elevação de cards (hover) ----------
     PEDIDO DO USUÁRIO — visual "clean, dinâmico, high-end" para as
     caixas do site: liberdade criativa total, ajustável depois.
     Aplica-se só à família de "cards de grade" — unidades que aparecem
     repetidas lado a lado, lidas como itens escaneáveis de uma coleção
     (.step-card, .concept-card, .source-card, .beneficios__item,
     .processo__item, .mds__item, .preview-card, .faq-item). NÃO se
     aplica aos "painéis de nota" de instância única (.aviso-analise,
     .concepts__note, .sources-block,
     .planos-teaser, .analise-form__summary, os 3 estados do fluxo de
     análise, .next-step) — esses ganharam só a sombra de repouso nova
     (ver cada regra), sem hover-lift: não fazem parte de uma grade
     comparável entre si, e não são clicáveis por inteiro, então levantar
     no hover sugeriria uma interação que não existe. .plan-card já tinha
     seu próprio hover (borda + gradiente); harmonizado à parte, mais
     abaixo, com a mesma curva/timing.

     No hover: o card sobe (translateY), a sombra de contato vira a
     sombra "flutuante" ampla (--shadow-card-hover) e o fundo clareia um
     tom (--color-surface → --color-surface-alt) — o mesmo par de tokens
     que já existe no sistema, reaproveitado como "estado de destaque" em
     vez de token órfão. Timing --ease-premium (ease-out-expo) em vez de
     ease padrão: assenta em vez de simplesmente desacelerar. Cards com
     <details>/<summary> (.faq-item) recebem o mesmo tratamento no
     elemento inteiro, não só no resumo — o clique continua restrito ao
     <summary>, o hover-lift é só feedback visual.
     REVISÃO (layoutman) — a família descrita acima citava também
     .faq-block__item; a seção .faq-block (accordion completo de FAQ na
     Início) foi removida (duplicava faq.html) e virou o painel-teaser
     .faq-teaser, que não é card de grade — não faz parte deste grupo.
     Selector list abaixo já refletia isso; só a prosa estava
     desatualizada.

     REVISÃO (layoutman) — PEDIDO DO USUÁRIO: reexaminei especificamente
     se .aviso-analise__box/.sources-block__box/.planos-teaser__box/
     .faq-teaser__box/.analise-form__summary deveriam "ter a mesma
     aparência dos cards" (ex. .step-card). Conferido campo a campo: os 5
     painéis JÁ usam a fórmula de caixa idêntica à da família de cards —
     mesmo background-color (--color-surface), mesma borda (1px
     --color-border-strong), mesma sombra de repouso (--shadow-card-rest)
     e mesmo raio (--radius-md); o padding é --space-7 (caindo pra
     --space-6/--space-5 em 480px) em vez do --space-6 fixo dos cards,
     mas isso é proporcional, não "desalinhado" — são painéis únicos de
     largura cheia do container, não células estreitas de grade, então
     pedem mais respiro interno pra não ficar desproporcional ao pouco
     texto (mesmo raciocínio já usado pra .next-step--final). Ou seja: a
     "aparência de caixa" já está resolvida: MANTIDA sem alteração.
     O único eixo que realmente diferencia estes 5 painéis da família de
     card de grade é o hover-lift (transform + troca de sombra/fundo)
     definido no bloco logo abaixo — e essa exclusão é intencional, não
     um esquecimento: reavaliei e CONFIRMO a decisão. Nenhum dos 5 é um
     item repetido lado a lado numa grade escaneável (são blocos únicos,
     um por página/seção) e nenhum é clicável como unidade — dois deles
     (.planos-teaser__box/.faq-teaser__box) até contêm um link inline,
     mas o link é uma frase pequena dentro do texto, não a caixa
     inteira; fazer a caixa inteira "subir" no hover sugeriria que ela
     inteira é clicável, o que não é verdade e confundiria mais do que
     ajudaria. Resultado: mesma linguagem visual de card (já garantida
     acima), sem o affordance de clique que esses painéis não têm.

     REVISÃO (layoutman) — PEDIDO DO USUÁRIO: a decisão acima ("mesma
     aparência de card, MANTIDA sem alteração") foi revertida para os 4
     painéis da Início (.aviso-analise__box/.sources-block__box/
     .planos-teaser__box/.faq-teaser__box) — pedido explícito de tirar a
     caixa (fundo/borda/sombra/raio) mantendo o texto solto, sem confundir
     com os cards de grade de verdade (.beneficios__item/.processo__item/
     .mds__item etc., que continuavam exatamente como estavam, hover-lift
     incluso). .analise-form__summary (analise.html) NÃO foi pedido e
     continua com a fórmula de caixa de painel neutro descrita acima —
     fora do escopo deste pedido.

     REVISÃO (layoutman) — PEDIDO DO USUÁRIO (rodada "remover cards"): a
     caixa tinha saído de .beneficios__item/.processo__item/.mds__item/
     .preview-card, substituída por um hairline de topo, e os 4 tinham sido
     removidos das 3 listas de seletor abaixo (sem caixa, hover-lift não
     fazia sentido).

     REVERSÃO (layoutman) — PEDIDO DO USUÁRIO: a caixa voltou para os 4
     (ver as regras de cada um, mais acima no arquivo — fundo/borda/sombra
     restaurados, com border-radius: 0 em vez do raio que usavam antes,
     pedido de cantos quadrados só para eles). Com a caixa de volta, o
     hover-lift volta a fazer sentido pelo mesmo motivo que fazia antes da
     rodada "remover cards" — os 4 voltam para as 3 listas de seletor
     abaixo, mesmo tratamento de .step-card/.concept-card/.source-card/
     .faq-item (a sombra --shadow-card-hover e a troca de fundo funcionam
     igual com cantos retos; nada no hover reintroduz raio). */
  .step-card,
  .concept-card,
  .source-card,
  .faq-item,
  .beneficios__item,
  .processo__item,
  .mds__item,
  .preview-card {
    transition: transform .5s var(--ease-premium), box-shadow .5s var(--ease-premium), background-color .4s ease, border-color .4s ease;
    will-change: transform;
  }
  @media (hover: hover) and (pointer: fine) {
    .step-card:hover,
    .concept-card:hover,
    .source-card:hover,
    .faq-item:hover,
    .beneficios__item:hover,
    .processo__item:hover,
    .mds__item:hover,
    .preview-card:hover,
    /* CORREÇÃO — motion do hover quebrado: todo card visível na tela já
       tem `.reveal-item.is-visible` (duas classes, especificidade 0,0,2,0)
       aplicando `transform: translateY(0)`. A regra de :hover acima tem a
       MESMA especificidade (uma classe + uma pseudo-classe = 0,0,2,0
       também) e vem ANTES dela no arquivo — então `.reveal-item.is-visible`
       vencia o empate e cancelava por completo o translateY(-6px) do
       hover: o card parava de levantar (só o painel "-more" continuava
       aparecendo), lendo como um efeito incompleto/quebrado. Repetindo os
       mesmos seletores com `.reveal-item` incluído (três seletores simples
       = especificidade 0,0,3,0) garante que o hover sempre vença esse
       empate, não importa a ordem no arquivo — sem tocar na regra de
       entrada nem reabrir o outro conflito de `transition` já corrigido
       acima em `.reveal-item`. */
    .step-card.reveal-item:hover,
    .concept-card.reveal-item:hover,
    .source-card.reveal-item:hover,
    .faq-item.reveal-item:hover,
    .beneficios__item.reveal-item:hover,
    .processo__item.reveal-item:hover,
    .mds__item.reveal-item:hover,
    .preview-card.reveal-item:hover {
      transform: translateY(-6px);
      box-shadow: var(--shadow-card-hover);
      /* REVISÃO (colorman) — PEDIDO DO USUÁRIO: unificar a cor de hover de
         TODOS os cards com a dos 4 cards da home. Era --color-card-hover-
         tint (azulado) aqui, com uma regra logo abaixo revertendo só para
         os 4 cards da home de volta a --color-surface (sem tint). Essa
         segunda regra foi removida — agora os 8 seletores acima já
         herdam --color-surface direto, sem precisar de override, e nenhum
         card do site tinge de azul no hover. */
      background-color: var(--color-surface);
    }
  }
  @media (prefers-reduced-motion: reduce) {
    .step-card, .concept-card, .source-card, .faq-item,
    .beneficios__item, .processo__item, .mds__item, .preview-card {
      transition: box-shadow .3s ease, background-color .3s ease;
    }
    .step-card:hover, .concept-card:hover, .source-card:hover,
    .faq-item:hover, .beneficios__item:hover, .processo__item:hover,
    .mds__item:hover, .preview-card:hover {
      transform: none;
    }
  }

  /* ---------- Texto extra: sempre visível ----------
     REVERSÃO (layoutman) — PEDIDO DO USUÁRIO, no mesmo fôlego em que os 4
     cards ganharam largura maior: descartar de vez o efeito de "saiba
     mais" escondido atrás de hover/clique (a versão de overlay que eu
     tinha acabado de restaurar, ver histórico logo acima removido). Todo o
     conteúdo do card deve aparecer de uma vez, sem interação nenhuma —
     .beneficios__item-more/.processo__item-more/.mds__item-more voltam a
     ser um bloco comum em fluxo normal, sempre visível, dentro do card com
     caixa (fundo/borda/sombra/cantos retos, ver .beneficios__item/
     .processo__item/.mds__item acima). Isso elimina de novo a necessidade
     do card-expand.js (o <script> saiu de index.html outra vez) e do
     mecanismo de hover-delay/.is-expanded. .beneficios__item-more-inner
     deixa de imitar uma caixa própria (não é mais um painel flutuante
     ancorado por position:absolute) — reduzido a um wrapper neutro, sem
     fundo/borda/sombra/raio próprios, já que o card pai é que fornece a
     caixa agora. */
  .beneficios__item-more,
  .processo__item-more,
  .mds__item-more {
    margin-top: var(--space-3);
  }
  .beneficios__item-more-text,
  .processo__item-more-text,
  .mds__item-more-text {
    color: var(--color-text-body);
    font-size: var(--fs-small);
    line-height: var(--lh-body);
    margin: 0;
  }

  /* Entrada ao rolar a página — motion.js adiciona ".reveal-item" nos
     mesmos cards do hover acima e observa cada um via
     IntersectionObserver; ".is-visible" é ligada/desligada a cada
     entrada/saída da viewport (PEDIDO DO USUÁRIO — decisão anterior era
     animar só na primeira vez; revertida, ver comentário em motion.js).
     transition-delay é calculado em JS por grupo (cards do mesmo
     grid/lista escalonam entre si; grupos diferentes começam do zero),
     dando o efeito de "chegada em cascata" sem exigir uma regra por
     card no CSS. Sem JS ou com JS falhando, os elementos começam OPACOS (a
     classe .reveal-item só é aplicada via JS, então html sem JS nunca
     esconde conteúdo — degrada bem). */
  /* CORREÇÃO — motion dos cards quebrado: .reveal-item é aplicada via JS a
     TODOS os mesmos cards que .step-card/.concept-card/.../.plan-card (ver
     seletores acima e a regra própria de .plan-card mais acima no
     arquivo), e ambas as regras declaram a propriedade `transition` como
     shorthand. Com especificidade igual (uma classe cada), o CSS não
     mescla as duas listas — a que vem DEPOIS no arquivo vence por
     completo. Como `.reveal-item` vinha depois, ela apagava inteiramente
     a transição de hover dos cards: box-shadow/background-color/
     border-color paravam de animar (mudança instantânea, sem suavização)
     e o transform do hover passava a usar a duração da entrada (.7s) em
     vez dos .5s calibrados para o "lift" do hover. Corrigido reunindo
     TODAS as propriedades num único `transition` aqui (já que esta é a
     regra que efetivamente vence), preservando os tempos originais de
     cada uma — nada foi inventado, só a lista deixou de se perder. */
  .reveal-item {
    opacity: 0;
    transform: translateY(28px);
    transition: opacity .7s var(--ease-premium), transform .5s var(--ease-premium), box-shadow .5s var(--ease-premium), background-color .4s ease, border-color .4s ease;
  }
  .reveal-item.is-visible {
    opacity: 1;
    transform: translateY(0);
  }
  @media (prefers-reduced-motion: reduce) {
    .reveal-item {
      opacity: 1;
      transform: none;
      /* Sem `transition: none` aqui de propósito — essa declaração venceria
         de novo pelo mesmo motivo acima e apagaria a transição reduzida
         (box-shadow/background-color .3s) que a regra dos cards já define
         para este mesmo media query, a única forma de feedback de hover
         mantida quando o usuário pede menos movimento (não zero). opacity
         e transform já ficam estáticos nos valores finais acima, então não
         há nada pra animar neles de qualquer forma. */
    }
  }

  /* Cada <section> centraliza e limita o próprio conteúdo (não há um
     wrapper .wrap extra no HTML — o section-heading e o grid/box de
     cada seção são filhos diretos da section). */
  main > section {
    max-width: var(--container-max);
    margin: 0 auto;
    padding: var(--space-10) var(--container-pad);
  }
  /* Seções com fundo alternado (steps, sources, waitlist) precisam do
     fundo esticando full-bleed por trás do conteúdo centralizado. */
  .steps, .concepts, .sources, .pricing, .waitlist, .faq {
    max-width: none;
    padding: 0;
  }
  .steps > *, .concepts > *, .sources > *, .pricing > *, .waitlist > *, .faq > * {
    max-width: var(--container-max);
    margin-left: auto;
    margin-right: auto;
    padding-left: var(--container-pad);
    padding-right: var(--container-pad);
  }
  .steps, .concepts, .sources, .pricing, .waitlist, .faq {
    padding-top: var(--space-10);
    padding-bottom: var(--space-10);
  }
  /* REVERTIDO A PEDIDO DO USUÁRIO — duas rodadas de experimento nesta
     faixa (bege sólido, depois bege translúcido + blur, depois uma
     animação de água/plasma escopada por seção com canvas próprio em
     agua-fundo.js) foram todas reprovadas. .processo e
     .medido-detectado-sugerido voltaram a ser seções comuns, sem
     tratamento de fundo especial — mesmo grupo/comportamento de
     .beneficios (herdam só a regra genérica `main > section` acima:
     max-width/margin/padding padrão, fundo igual ao resto da página). */
  /* Seções de transição/teaser (ponte para planos.html e faq.html) usam
     um degrau a menos de respiro vertical que as seções de conteúdo
     principal (--space-9 vs. --space-10) — menos peso visual em seções
     que só encaminham para outra página, mais peso nas que carregam
     conteúdo de fato. */
  .planos-teaser, .faq-teaser {
    padding-top: var(--space-9);
    padding-bottom: var(--space-9);
  }

  /* Centralização das seções de conteúdo (steps/concepts/sources/pricing/
     waitlist/faq) — pedido explícito do usuário a partir do print de "Como
     orientamos". O hero NÃO usa .section-heading (usa .hero__content), então
     esta regra não o afeta e ele permanece alinhado à esquerda como estava. */
  /* REVISÃO 15 (letterman) — PEDIDO DO USUÁRIO: mais respiro entre o h2 e
     o conteúdo abaixo (na maioria das páginas, uma grade de h3), agora
     que o h3 também cresceu (ver --fs-h3 no :root). Mesmo ajuste de
     degrau usado em .beneficios/.processo/.mds__intro no index.html
     (--space-7/48px → --space-8/64px) — este wrapper é o equivalente
     compartilhado por steps/concepts/sources/pricing/waitlist/faq, então
     um único ajuste aqui cobre todas essas páginas de uma vez. */
  .section-heading {
    max-width: 640px;
    margin: 0 auto var(--space-8);
    text-align: center;
  }

  @media (max-width: 900px) {
    :root { --space-10: var(--space-8); }
    main > section,
    .steps, .concepts, .sources, .pricing, .waitlist, .faq {
      padding-top: var(--space-8);
      padding-bottom: var(--space-8);
    }
    /* LAYOUTMAN: mantém o degrau a menos das seções de transição também
       neste breakpoint (conteúdo cai para --space-8/64px, teaser cai
       um degrau abaixo, --space-7/48px). */
    .planos-teaser, .faq-teaser {
      padding-top: var(--space-7);
      padding-bottom: var(--space-7);
    }
  }
  @media (max-width: 480px) {
    :root { --container-pad: var(--container-pad-mobile); }
    main > section,
    .steps, .concepts, .sources, .pricing, .waitlist, .faq {
      padding-top: var(--space-7);
      padding-bottom: var(--space-7);
    }
    /* LAYOUTMAN: mesmo raciocínio — conteúdo em --space-7/48px, teaser
       um degrau abaixo, --space-6/32px. */
    .planos-teaser, .faq-teaser {
      padding-top: var(--space-6);
      padding-bottom: var(--space-6);
    }
    /* REVISÃO 15 (letterman) — sobe um degrau junto com a regra base
       acima (--space-6/32px → --space-7/48px), preservando a mesma
       redução proporcional que já existia para telas pequenas. */
    .section-heading { margin-bottom: var(--space-7); }
  }

  /* ---------- Telas grandes (referência de projeto: 1920×1080) ----------
     Ver REVISÃO 2 no comentário do bloco LAYOUT acima. Container e padding
     crescem mais um degrau; grids continuam com 3 colunas (padrão Apple:
     mais respiro, não mais colunas) — só gap e padding interno aumentam. */
  @media (min-width: 1440px) {
    :root {
      --container-max: 1600px;
      --container-pad: 56px;
      --space-10: 128px; /* era 160px — ver REVISÃO 3, ritmo mais denso mesmo em telas grandes */
    }
    /* REVISÃO 3: gap e padding internos recuados de --space-7 (48px) para
       --space-6 (32px) — na referência real, cards em telas grandes ganham
       mais RESPIRO ENTRE FILEIRAS/seções, não necessariamente cards
       individuais muito mais "estufados" por dentro.
       RODADA 2: a bump de gap para --space-6 nos 4 grids de 3 colunas foi
       REMOVIDA aqui — com a largura do card agora capada (ver .steps__list/
       .concepts__grid/.sources__grid/.pricing__grid abaixo), aumentar o gap
       em telas grandes ia contra o que o print mostra: a Apple mantém o
       espaçamento ENTRE cards de uma mesma fileira compacto e constante,
       mesmo em telas largas — quem cresce é o respiro entre seções
       (--space-10), não o gap dentro do grid. O gap desses 4 grids agora
       fica fixo em --space-5 (20px) em qualquer largura de tela. */
    .step-card,
    .concept-card,
    .source-card {
      padding: var(--space-6);
    }
    .plan-card {
      padding: var(--space-7) var(--space-6) var(--space-6);
    }
  }

  /* ---------- Header (logo à esquerda, nav centralizado, CTA à direita) ----------
     REVISÃO (layoutman) — pedido desta rodada: a logo se desloca mais para
     a esquerda para que os itens de navegação fiquem CENTRALIZADOS no
     header, em vez de deslocados para a direita para compensar o espaço da
     logo. O layout anterior (flexbox + .brand com margin-right:auto)
     empurrava nav+CTA como um bloco colado à direita — o nav não ficava no
     centro geométrico do header, só "encostado" no CTA. Trocado por um
     grid de 3 colunas (1fr auto 1fr): a coluna do meio tem largura
     "auto" (do próprio conteúdo do nav) e fica sempre centralizada em
     relação ao header inteiro, não em relação ao espaço sobrando à direita
     da logo; a logo ocupa a coluna 1 (justify-self:start, ou seja, o mais
     à esquerda possível) e o CTA ocupa a coluna 3 (justify-self:end).
     Colunas atribuídas explicitamente (grid-column) em vez de depender de
     auto-placement, porque .site-nav some em telas ≤860px (display:none)
     — sem atribuição explícita, o CTA "subiria" para a coluna do meio e
     pareceria centralizado sozinho no mobile, o que não é o objetivo (o
     objetivo é logo à esquerda + CTA à direita, sem nav). Nenhuma
     cor/opacidade/estado de .site-nav__link foi tocada — só a estrutura
     espacial mudou. Comportamento responsivo preservado: nav some abaixo
     de 860px, só o CTA + logo continuam. */
  .site-header {
    position: sticky;
    top: 0;
    z-index: 50;
  }
  .site-header__inner {
    position: relative;
    z-index: 1;
    max-width: var(--container-max);
    margin: 0 auto;
    padding: var(--space-3) var(--container-pad);
    min-height: var(--header-height);
    display: grid;
    grid-template-columns: 1fr auto 1fr;
    align-items: center;
    column-gap: var(--space-6);
  }
  .brand {
    display: inline-flex;
    align-items: center;
    gap: var(--space-2);
    /* REVISÃO (layoutman) — header estático: margin-right:auto (que
       ancorava a logo à esquerda dentro de um layout flex) e a transição
       de transform (usada só pela animação de "header ocioso", removida
       nesta rodada) saíram daqui. Posicionamento agora vem do grid de 3
       colunas em .site-header__inner logo abaixo — ver nota lá. */
    grid-column: 1;
    justify-self: start;
  }
  .site-nav {
    display: flex;
    align-items: center;
    grid-column: 2;
    justify-self: center; /* REVISÃO (layoutman) — nav centralizado no header, ver nota em .site-header__inner */
  }
  .btn--nav {
    grid-column: 3;
    justify-self: end; /* REVISÃO (layoutman) — coluna explícita: garante que o CTA fique à direita mesmo em mobile, quando .site-nav (coluna 2) some e sai do fluxo do grid */
  }
  .site-nav__list {
    display: flex;
    align-items: center;
    gap: var(--space-6); /* era --space-5 (20px) — REVISÃO 3: na referência real os itens de nav são bem pequenos mas com bastante espaço entre si */
  }
  .skip-link {
    position: absolute;
    left: var(--space-3);
    top: -48px;
    padding: var(--space-2) var(--space-4);
    border-radius: var(--radius-sm);
    z-index: 100;
    transition: top .15s ease;
  }
  .skip-link:focus {
    top: var(--space-3);
  }
  /* REVISÃO (layoutman) — pedido do usuário: menu mobile (hamburger). A
     regra antiga era só ".site-nav { display: none; }" — a nav horizontal
     inteira desaparecia ≤860px, sem substituto. Agora: o botão
     .nav-toggle (definido acima, junto de .theme-toggle) aparece nesta
     faixa e .site-nav vira o container de um painel vertical
     (.site-nav__list) que fica oculto por padrão e é mostrado quando o
     JS (nav-mobile.js) adiciona a classe .is-open em <nav id="siteNav">
     — o mesmo padrão de "JS só alterna uma classe/atributo, CSS cuida da
     aparência" já usado em .theme-toggle/[data-theme].
     .site-nav ganha grid-column: 1 / -1 (ocupa a linha inteira do grid
     de 3 colunas de .site-header__inner) só para servir de bloco de
     100% de largura ancorando o painel abaixo — como o painel em si é
     position:absolute e a nav fechada não tem conteúdo visível (a lista
     é display:none), isso não empurra nem sobrepõe .brand/.nav-toggle/
     .btn--nav, que continuam nas colunas 1/2/3 normalmente.
     Cores do painel: --color-header-bg + backdrop-filter (o MESMO fundo
     translúcido com blur que .site-header já usa em si mesmo, ver regra
     ~linha 3140) e --color-border-strong como linha divisória — nenhuma
     cor nova. Elevação: --shadow-card-hover, o token de sombra
     "flutuante" já usado nos cards do site (ver .preview-card etc.),
     apropriado aqui porque o painel também é um elemento solto pairando
     sobre o conteúdo da página.
     Área de toque: min-height 44px (mínimo recomendado de touch target)
     via padding var(--space-4) vertical / var(--container-pad-mobile)
     horizontal — mesma régua --space-* usada no resto do arquivo, sem
     valor solto. */
  @media (max-width: 860px) {
    .nav-toggle { display: inline-flex; }

    .site-nav {
      display: block;
      grid-column: 1 / -1;
      grid-row: 1;
      justify-self: stretch;
    }

    .site-nav__list {
      display: none;
      position: absolute;
      top: 100%;
      left: 0;
      right: 0;
      flex-direction: column;
      align-items: stretch;
      gap: 0;
      margin: 0;
      padding: var(--space-2) 0;
      background-color: var(--color-header-bg);
      backdrop-filter: blur(12px);
      -webkit-backdrop-filter: blur(12px);
      border-top: 1px solid var(--color-border-strong);
      box-shadow: var(--shadow-card-hover);
      z-index: 40;
    }

    .site-nav.is-open .site-nav__list {
      display: flex;
      animation: nav-panel-in .2s ease;
    }

    .site-nav__list li {
      width: 100%;
    }

    .site-nav__link {
      display: block;
      box-sizing: border-box;
      width: 100%;
      min-height: 44px;
      padding: var(--space-4) var(--container-pad-mobile);
      opacity: 1; /* no painel empilhado o link já é 100% legível por
                     padrão — os estados de opacidade .72/1 fazem sentido
                     lado a lado no header horizontal, não aqui */
    }

    .site-nav__link[aria-current="page"],
    .site-nav__link:hover,
    .site-nav__link:focus-visible {
      background-color: var(--color-card-hover-tint);
    }

    @keyframes nav-panel-in {
      from { opacity: 0; transform: translateY(-6px); }
      to { opacity: 1; transform: translateY(0); }
    }
  }
  @media (max-width: 860px) and (prefers-reduced-motion: reduce) {
    .site-nav.is-open .site-nav__list {
      animation: none;
    }
  }
  @media (max-width: 480px) {
    .site-header__inner { padding: var(--space-2) var(--container-pad-mobile); gap: var(--space-3); }
    /* REVISÃO (letterman) — substitui a antiga .brand__logo { height: 28px }
       (28/36 ≈ 0,78 de escala em relação ao tamanho desktop da imagem).
       Aplico a mesma proporção ao wordmark de texto, reaproveitando tokens
       já existentes em vez de valores soltos: --fs-body (17px) ≈ 0,78 ×
       --fs-h3 (22px, tamanho desktop do primary) e --fs-h3 (22px) ≈ 0,79 ×
       1.75rem/28px (tamanho desktop do accent) — a mesma relação de escala,
       sem inventar rem novo. */
    .brand__wordmark-primary { font-size: var(--fs-body); }
    .brand__wordmark-accent { font-size: var(--fs-h3); }
  }

  /* ---------- Header "ocioso" — REMOVIDO (layoutman) ----------
     Pedido do usuário nesta rodada: o header não pode mais se mover/animar
     junto do scroll da página — deve ficar estático. O comportamento
     anterior (nav some após 4s parado + logo desliza até o centro,
     acionado por .nav-idle/--logo-shift, orquestrado em theme.js) foi
     removido por completo: a regra .transition em .brand/.site-nav__list
     abaixo também foi removida (nada mais anima nelas), e a lógica
     correspondente em theme.js (idleTimer, showNav/hideNav, listeners de
     mousemove/touchstart/keydown/focusin, cálculo de logoCenterShift) foi
     apagada. O header agora só faz uma coisa em relação ao scroll:
     permanece fixo no topo via position:sticky (ver regra .site-header
     acima) — nunca translada, nunca esconde nav, nunca recentraliza a
     logo. --header-scroll/.is-scrolled deixaram de ter qualquer
     consumidor (não pintam mais nada desde a revisão anterior do header, e
     agora também não acionam mais nenhum comportamento) — mantidos como
     no-op em theme.js só para não quebrar nada que dependa deles no
     futuro, mas sem efeito visual algum hoje. */

  /* ---------- Botão de tema (sol/lua) — canto inferior esquerdo do viewport ----------
     REVISÃO (layoutman) — sai do grid/fluxo do header (onde ficava no canto
     superior esquerdo) e vira um elemento fixo, ancorado no canto INFERIOR
     esquerdo da tela em qualquer altura de scroll. A mecânica do ícone
     (crossfade + rotação sol/lua, currentColor) NÃO foi tocada — ver regras
     .theme-toggle/.theme-toggle__icon* acima de :root; só posição e cor
     mudam aqui, na segunda declaração do mesmo seletor (mesmo padrão já
     usado no arquivo para outros componentes, ex. .btn: uma regra de
     aparência perto de :root, uma regra de posição/espaçamento aqui no
     bloco de LAYOUT). Cor: como o botão sai do fluxo do header, deixa de
     herdar currentColor de .site-header (que muda entre transparente e
     .is-scrolled) — passa a usar var(--color-text-heading), o token de
     texto de maior contraste já calibrado nos dois temas pelo colorman, em
     vez de inventar uma cor nova. bottom: 56px é a altura reservada pelo
     .demo-notice fixo (ver body{padding-bottom:56px} mais abaixo) + um
     respiro de --space-3, para o botão nunca ficar atrás/colado nele. */
  .theme-toggle {
    position: fixed;
    left: var(--space-4);
    bottom: calc(56px + var(--space-3));
    z-index: 70;
    color: var(--color-text-heading);
  }

  /* ---------- Botões ---------- */
  .btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 10px 20px;
    border-radius: var(--radius-lg);
    transition: background-color .15s ease, border-color .15s ease, color .15s ease, box-shadow .15s ease;
  }
  .btn--plan { width: 100%; margin-top: var(--space-5); }

  /* ---------- Badges ---------- */
  .badge {
    display: inline-flex;
    align-items: center;
    padding: 5px 12px;
    border-radius: var(--radius-pill);
  }

  /* ---------- Hero (duas colunas: texto à esquerda, cartão-visual à direita) ---------- */
  /* NOTA (layoutman) — TAREFA 2 desta rodada: avaliei aplicar o padrão de
     "texto gigante em baixa opacidade como camada de fundo atrás de uma
     imagem" (referência Heart Aerospace, frames com "ES-19"/"ES-10" em
     watermark atrás da foto do avião, legendas técnicas pequenas por
     cima) em algum lugar de index.html. Decidi NÃO aplicar em lugar
     nenhum da página, por um motivo estrutural, não de gosto: o padrão
     depende de uma IMAGEM/objeto com silhueta e espaço negativo ao redor
     — é o recorte do avião que revela a palavra fantasma nos vãos ao
     redor dele. index.html não tem nenhuma imagem/foto de produto; o
     único elemento visual candidato é o .preview-card do hero, que é um
     cartão retangular opaco preenchendo toda a coluna de .hero__figure
     (não um objeto com silhueta) — colocar uma palavra gigante atrás dele
     só apareceria numa margem estreita ao redor do cartão, sem o efeito
     de profundidade da referência. As outras seções são blocos de texto
     corrido (aviso-analise, sources-block, mds, planos-teaser,
     faq-teaser) — aplicar o padrão atrás de texto, sem imagem, viraria
     ruído decorativo competindo com o próprio texto pela atenção, além de
     duplicar o papel que a camada decorativa fixa "lava lamp" (ver nota
     da REVISÃO 3.2 acima, seção de fundos) já cumpre como elemento
     ambiente de fundo da página. Não force o encaixe: sem uma imagem/
     objeto real para servir de "moldura" ao texto fantasma, o efeito não
     tem onde morar aqui sem virar decoração descolada do conteúdo. */
  .hero {
    padding-top: var(--space-8);
    padding-bottom: var(--space-9);
    display: grid;
    grid-template-columns: 1.05fr 0.95fr;
    gap: var(--space-8);
    align-items: center;
  }
  @media (max-width: 920px) {
    .hero { grid-template-columns: 1fr; gap: var(--space-6); }
  }
  @media (min-width: 1440px) {
    .hero {
      padding-top: var(--space-9);
      padding-bottom: var(--space-10);
      gap: var(--space-9);
    }
  }
  /* NOVO (layoutman) — PEDIDO DO USUÁRIO: card mais "dinâmico" ao lado da
     hero. Até aqui .hero tinha align-items:center, o que cravava o
     .preview-card exatamente no meio vertical da coluna de texto (badge +
     h1 + description + form + ações) — resultado correto mas
     perfeitamente simétrico, sem nenhuma tensão visual entre as duas
     colunas. Só em telas ≥921px (onde o grid já é 2 colunas — abaixo
     disso .hero vira 1fr e as colunas empilham, então este ajuste não deve
     valer lá, um deslocamento vertical não faz sentido/pode colidir com o
     conteúdo empilhado acima dele) subo o cartão alguns pixels em relação
     ao centro geométrico, com um leve deslocamento negativo. O efeito:
     o topo do card fica mais próximo da badge/h1 (o início do bloco de
     texto) em vez de alinhado ao centro exato, lendo como duas colunas
     que respiram junto em vez de espelhadas simetricamente — assimetria
     leve e intencional, não um desalinhamento acidental. Valor contido
     (var(--space-5), 20px) para não descolar visualmente o card do resto
     da centralização vertical em telas médias (920–1439px), onde a coluna
     de texto é relativamente mais curta. */
  @media (min-width: 921px) {
    .hero__figure {
      margin-top: calc(-1 * var(--space-5));
    }
  }
  .hero-actions {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-3);
  }

  /* NOTA (layoutman) — .preview-card__list é um <ol>, mas os itens já
     mostram sua própria numeração via .preview-card__number (o número/
     percentual, ex. "55%"); sem este reset o navegador soma a numeração
     ordinal nativa (1. 2. 3.) à esquerda de cada item, duplicando a
     marcação. Mesmo padrão já usado em .processo__list (ver nota lá) —
     list-style:none tira o marcador nativo, padding-left:0 remove o
     recuo que esse marcador reservava, para o texto de cada item
     continuar alinhado à borda do card exatamente como hoje (o
     alinhamento real do número+título vem do flex/gap de
     .preview-card__item abaixo, não deste reset). */
  .preview-card__list {
    list-style: none;
    padding-left: 0;
  }
  .preview-card__item {
    display: flex;
    /* REVISÃO (layoutman) — era var(--space-4)/16px, dimensionado para o
       chip circular de 64px que existia antes (16px de respiro fazia
       sentido ao lado de um bloco largo e opaco). Com o chip removido
       (ver nota do letterman abaixo) o número virou um único algarismo em
       --fs-body — mesma largura visual de uma letra do título ao lado.
       16px entre um caractere estreito e o texto lê como um recuo largo
       demais, quase separando o número do título em duas colunas
       desconectadas, quando a intenção agora é o oposto: número e título
       lendo como uma unidade ("1  Título"), diferenciados só por cor.
       var(--space-3)/12px aproxima a leitura de uma marcação de lista
       (numeral + rótulo) sem grudar os dois nem reintroduzir a separação
       generosa herdada do layout antigo. */
    /* REVISÃO (layoutman) — copy nova do writerman trocou "1/2/3" por
       percentuais de comprimento bem desigual (96,55% / 5,7% / 41%, de 3 a
       6 caracteres) e os títulos cresceram para frases de 2-3 linhas. A
       leitura "número+título como uma unidade curta" que justificava 12px
       não se sustenta mais — não é mais um algarismo isolado ao lado de um
       título de 3-4 palavras, é um dado de largura variável ao lado de uma
       frase inteira. Subo para var(--space-4)/16px: com a coluna do número
       agora larga o bastante para caber "96,55%" (ver min-width abaixo), um
       gap maior evita que o percentual mais longo pareça colado no início
       do título mais próximo, e separa com mais clareza as duas "colunas"
       (dado numérico vs. corpo de texto) que a lista realmente tem agora. */
    gap: var(--space-4);
    /* REVISÃO (layoutman) — PEDIDO DO USUÁRIO: ritmo "mais dinâmico" entre
       os 3 itens. Era padding: var(--space-4) 0 (16px em cima E embaixo,
       simétrico) — cada item abria e fechava com exatamente o mesmo
       respiro, o que lê como uma grade mecânica repetida 3x, sem nenhuma
       variação de peso. Troco para var(--space-5) 0 var(--space-3)
       (20px em cima / 12px embaixo): cada item agora "abre" com mais ar —
       o número+título começam com respiro generoso, ecoando o espaço que
       o título do card ganhou acima dele — e "fecha" mais compacto, puxando
       o corpo do item (.preview-card__item-detail) para perto do hairline
       que já sinaliza o fim daquele item. O espaço total ao redor de cada
       divisor (12px do item de cima + 1px de borda + 20px do item de baixo
       = 33px) fica bem próximo do total anterior (16+1+16=33px) — não é
       "mais apertado" nem "mais solto" no agregado, só redistribuído de
       forma assimétrica e intencional, sem reduzir a separação real entre
       itens nem prejudicar legibilidade. */
    /* REVISÃO (layoutman) — padding-bottom sobe de var(--space-3)/12px para
       var(--space-4)/16px. Motivo: letterman acabou de aumentar o texto
       interno do card (.preview-card__item-title/.preview-card__number de
       17px/600 para 18px/700; .preview-card__item-detail de 14px/400 para
       15px/500) sem tocar em espaçamento. O corpo do item (item-detail,
       agora mais pesado visualmente) ficava a só 12px do hairline que separa
       os itens — com o novo peso/tamanho isso começava a ler como "colado"
       na linha, não mais como respiro intencional. 16px resolve isso e
       mantém a assimetria proposital do ritmo (abertura --space-5/20px >
       fechamento --space-4/16px), só menos apertada que antes. Restante do
       card (padding externo, gap horizontal do item, margem do título/
       legenda) já tinha folga suficiente para o novo tamanho de fonte —
       nenhum outro valor precisou mudar. */
    padding: var(--space-5) 0 var(--space-4);
    border-bottom: 1px solid var(--color-border);
  }
  .preview-card__item:last-child { border-bottom: none; }
  /* REVISÃO (layoutman) — sem largura própria, cada .preview-card__number
     ocupava só o espaço do seu próprio texto (largura de conteúdo padrão
     de flex-item), então "96,55%" (6 caracteres) empurrava o título do 1º
     item bem mais para a direita do que "41%" (3 caracteres) empurra o do
     3º — os três .preview-card__item-title começavam em posições
     horizontais diferentes, o que lê como desalinhamento, não como uma
     lista organizada. min-width fixa uma coluna única, dimensionada para
     caber o maior valor real ("96,55%") sem quebrar linha, para os três
     títulos começarem sempre na mesma posição horizontal — mesmo racional
     de alinhar uma coluna de dado numérico ao lado de texto que qualquer
     tabela/lista de estatísticas usa. Uso ch (não px/rem) de propósito:
     escala junto com --fs-body se o letterman ajustar o tamanho do
     numeral depois, sem precisar de outro ajuste manual aqui. */
  .preview-card__number {
    min-width: 5ch;
  }
  /* REVISÃO (layoutman) — .preview-card__item-body nunca teve regra própria;
     como filho flex sem flex-basis/min-width explícitos ele já se
     comportava efetivamente como "resto do espaço disponível" (único item
     que encolhe, já que .preview-card__number é flex:none), mas isso ficava
     implícito no comportamento padrão do flexbox. Com os títulos agora bem
     mais longos (frases de 2-3 linhas, ex. "das páginas usam JSON-LD, o
     formato de dado estruturado recomendado pelo Google"), deixo explícito:
     flex:1 para ocupar o espaço restante ao lado da coluna fixa do número, e
     min-width:0 para permitir que o texto quebre linha normalmente dentro
     desse espaço em vez de forçar o item a crescer além do card (o "flex
     item shrink bug" clássico, onde o tamanho mínimo automático de um filho
     flex com texto longo pode empurrar irmãos/estourar o container). */
  .preview-card__item-body {
    flex: 1;
    min-width: 0;
  }
  /* REVISÃO (letterman) — TAREFA 2 desta rodada: chip circular (width/
     height/border-radius/display:flex de centralização) removido — ver
     nota completa junto à regra de aparência de .preview-card__number,
     acima de :root, sobre por que a numeração deixou de viver isolada num
     círculo (padrão 4 da referência Heart Aerospace: números embutidos na
     mesma voz tipográfica ao redor, nunca isolados em chip). flex:none +
     align-self:flex-start (regra de aparência acima) bastam para o número
     ficar alinhado ao topo do título ao lado, sem esticar para a altura
     do item inteiro (comportamento padrão de flex-child em bloco). Nota
     para o layoutman: espaçamento entre o número e o corpo de texto vem
     do gap de .preview-card__item acima — ajustado por ele nesta mesma
     rodada (era var(--space-4), generoso demais para a nova proporção). */

  /* ---------- Grids compactos de cartões (steps, concepts, sources) ----------
     Colunas simétricas mantidas (o conteúdo real são 3 itens equivalentes em
     cada seção — não 2 blocos assimétricos de texto+visual como na referência),
     mas o "espírito" da referência (cartões finos, densos, com respiro generoso
     ao redor) é aplicado via padding interno mais compacto + gap generoso. */
  /* RODADA 2/3: colunas deixam de esticar para preencher o container inteiro
     (repeat(3, 1fr) fazia cada card chegar a ~500px de largura em telas
     grandes, com 2-3 linhas de texto boiando num card enorme e vazio — bem
     longe da referência real, onde os cards de feature/produto da Apple
     mantêm largura contida (~300-380px) mesmo em viewports largas, e a
     fileira fica ancorada à esquerda, sob o título da seção, em vez de
     esticar/centralizar como bloco). minmax(0, 380px) capa a largura de
     cada card e justify-content:flex-start mantém a fileira alinhada à
     esquerda, no mesmo início horizontal do title/subtitle acima — o
     espaço sobrando à direita em telas muito largas é intencional (é o
     mesmo espaço que a Apple resolve com carrossel; aqui, sem carrossel,
     vira respiro lateral, o que ainda é mais fiel à densidade real do que
     esticar os cards). */
  /* REVERTIDO (layoutman) — a REVISÃO anterior tinha subido o cap de
     coluna (380px→440px) e o gap (--space-5/20px→--space-6/32px) porque o
     letterman havia triplicado o h3 global (24px→72px). Esse tamanho foi
     revertido (era erro de digitação, o pedido real era h4) — h3 volta a
     var(--fs-h3)/24px, então cap e gap voltam aos valores calibrados para
     esse tamanho normal. */
  .steps__list,
  .concepts__grid,
  .sources__grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 380px));
    justify-content: center; /* era flex-start — fileira agora centralizada sob o título centralizado, em vez de ancorada à esquerda */
    gap: var(--space-5);
  }

  /* .steps__list é um <ol>: display:grid no pai não remove o ::marker nativo
     do navegador, então os números "1." "2." "3." continuavam aparecendo
     soltos à esquerda de cada <li>, fora da área centralizada e duplicando
     o badge circular (.step-card__number) que já existe dentro do card.
     IMPORTANTE: só zeramos list-style e padding-left (que é o que gera o
     recuo do marcador). NÃO definir margin-left aqui — a regra
     ".steps > *" (acima, bloco de centralização de seção) já define
     margin-left/right: auto para centralizar este <ol> como bloco dentro
     da seção; com a mesma especificidade (uma classe cada), um
     "margin-left: 0" nesta regra, por vir depois no CSS, vencia o
     "margin-left: auto" e descentralizava a fileira inteira para a
     esquerda (foi exatamente o bug reportado). */
  .steps__list {
    list-style: none;
    padding-left: 0;
  }
  /* REVERTIDO (layoutman) — o breakpoint tinha subido de 860px→1180px e o
     gap mobile de --space-4/16px→--space-5/20px por causa do h3 global
     fixo em 72px, que estreitava demais a coluna de 3 antes do flip. Esse
     tamanho foi revertido pelo letterman (h3 volta a 24px), então o
     breakpoint e o gap voltam aos valores originais. */
  @media (max-width: 860px) {
    .steps__list,
    .concepts__grid,
    .sources__grid {
      grid-template-columns: 1fr;
      justify-content: stretch;
      gap: var(--space-4);
    }
  }

  /* REVERTIDO (layoutman) — o padding tinha subido de --space-6/32px fixo
     para --space-7/48px verticais / --space-6/32px laterais por causa do
     h3 global fixo em 72px (título ocupando 2-3 linhas). Esse tamanho foi
     revertido pelo letterman (h3 volta a var(--fs-h3)/24px), então o
     padding volta ao valor uniforme original, igual ao resto da família
     de cards genéricos do site. */
  .step-card,
  .concept-card,
  .source-card {
    /* REVISÃO (layoutman) — PEDIDO DO USUÁRIO: .processo__item passa a ser
       a referência canônica definitiva de "caixa de card" para o site
       inteiro (não mais restrita aos 4 cards da home). Era --radius-md
       (18px); .processo__item usa border-radius: 0 (cantos retos), então
       estes 3 cards de grade genéricos passam a usar o mesmo valor.
       padding já era var(--space-6), idêntico à referência — sem mudança. */
    border-radius: 0;
    padding: var(--space-6);
    text-align: center; /* pedido de centralização — número/eyebrow, título e descrição do card ficam centrados; elementos inline (número, link) seguem o alinhamento do texto automaticamente */
  }

  .step-card__number {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px; /* REVISÃO letterman — era 28px; ajustado junto com o font-size (14px → --fs-h3/24px) pra não espremer o algarismo contra a borda do chip */
    height: 44px;
    border-radius: var(--radius-sm);
  }
  .step-card__status {
    display: inline-block;
    margin-top: var(--space-4);
    padding: 4px 12px;
    border-radius: var(--radius-pill);
  }

  /* Blocos de aviso (concepts__note, sources__disclaimer): antes tinham
     padding contido demais pra blocos que carregam um aviso importante
     de "isto não garante resultado" — mais espaço interno + raio igual
     aos cards ao redor evita que pareçam nota de rodapé apertada.
     RODADA 3: max-width recuado de 78-80ch para ~62ch — com o grid acima
     agora capado (3 cards de até 380px + 2 gaps ≈ 1180px de largura real
     em telas grandes), a nota em 78-80ch (~880-900px numa fonte de 13px)
     ainda ficava sensivelmente mais estreita que o grid, mas ainda assim
     desalinhada/discrepante o bastante pra parecer um elemento solto; um
     valor mais contido lê como "legenda de rodapé do bloco", papel que ela
     de fato cumpre, sem tentar ocupar a largura toda do grid acima. */
  .concepts__note {
    margin: var(--space-7) auto 0;
    padding: var(--space-5) var(--space-6);
    border-radius: var(--radius-md);
    max-width: 62ch;
    text-align: center;
  }

  .sources__disclaimer {
    margin: var(--space-6) auto 0;
    padding: var(--space-5) var(--space-6);
    border-radius: var(--radius-md);
    max-width: 64ch;
    text-align: center;
  }

  /* ---------- Planos ----------
     RODADA 2: mesma lógica das colunas de steps/concepts/sources — cards
     deixam de esticar até preencher o container (repeat(3,1fr) num
     container de até 1600px fazia cada plano passar de 500px de largura,
     desproporcional para um cartão de preço). Diferença de tratamento:
     aqui o grupo fica CENTRALIZADO (justify-content:center), não ancorado
     à esquerda como os grids editoriais — uma tabela de 3 planos é lida
     como um bloco de comparação autocontido, não como uma fileira sob um
     título de seção que puxa o olhar para a esquerda; e o card featured
     (plan-card--featured) já é o elemento de maior peso visual do trio,
     então mantê-lo centralizado no conjunto reforça essa hierarquia em
     vez de empurrá-lo para o meio do espaço vazio à direita. */
  .pricing__grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 340px));
    justify-content: center;
    gap: var(--space-5);
    align-items: stretch;
  }
  @media (max-width: 860px) {
    .pricing__grid { grid-template-columns: 1fr; justify-content: stretch; gap: var(--space-4); }
  }
  .plan-card {
    display: flex;
    flex-direction: column;
    align-items: center; /* centraliza badge/nome/preço/lista de features/botão como bloco */
    /* REVISÃO (layoutman) — PEDIDO DO USUÁRIO: igualando à referência
       canônica .processo__item (border-radius: 0). Era --radius-lg (24px).
       A borda de 2px transparent (destaque semântico do plano recomendado)
       não muda — só o raio, que não tem papel semântico aqui. */
    border-radius: 0;
    padding: var(--space-7) var(--space-6) var(--space-6);
    text-align: center;
  }
  /* REVISÃO N+3 (layoutman) — o hover de .plan-card ganhou de volta um
     transform: translateY(-4px) (pedido do usuário, efeito "mais
     fluido"). Em ≤860px o grid empilha em 1 coluna e é a faixa de tela
     onde toque predomina sobre mouse — telas de toque não têm hover
     persistente da mesma forma (o "hover" pode ficar "preso" após um
     toque em vez de sumir ao afastar o dedo), então a elevação fica
     neutralizada nessa faixa (ver @media abaixo), mesmo raciocínio já
     aplicado aqui antes. */
  @media (max-width: 860px) {
    /* .plan-card.reveal-item:hover incluído aqui pelo mesmo motivo do
       comentário "CORREÇÃO" em .plan-card:hover acima — sem ele, essa
       neutralização de transform perderia para a regra de hover mais
       específica (0,0,3,0) que ganhou de .reveal-item.is-visible, e o
       card voltaria a levantar em telas de toque. */
    .plan-card:hover, .plan-card.reveal-item:hover { transform: none; }
  }
  /* REVISÃO N+1 (layoutman) — o badge "Indicado para mais de um site" e o
     placeholder .plan-card__badge-slot que compensava a altura dele nos
     outros 2 cards foram removidos a pedido do usuário; sem badge em
     nenhum card, os 3 já nascem alinhados (mesma caixa via
     align-items:stretch em .pricing__grid), sem precisar de nenhum spacer. */
  .plan-card__features {
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
    flex: 1;
    margin-bottom: var(--space-4);
  }
  .pricing__note {
    text-align: center;
    margin-top: var(--space-6);
  }

  /* Nota abaixo dos 3 passos de como-funciona.html — mesma fórmula de
     .pricing__note (texto discreto, centralizado), mas com um link real
     dentro (por isso não fica em itálico como .pricing__note: o link
     precisa de sublinhado próprio para se destacar do texto ao redor). */
  .steps__note {
    text-align: center;
    color: var(--color-text-muted);
    font-size: var(--fs-caption);
    line-height: var(--lh-small);
    margin-top: var(--space-6);
  }
  .steps__note a {
    color: var(--color-text-link);
    text-decoration: underline;
  }
  .steps__note a:hover,
  .steps__note a:focus-visible {
    color: var(--color-text-link-hover);
  }

  /* ---------- Lista de espera — bloco de CTA isolado e centralizado,
     com bastante padding, ecoando o "CTA final" de destaque da referência ---------- */
  .waitlist__box {
    border-radius: var(--radius-lg);
    padding: var(--space-8) var(--space-7);
    max-width: 720px;
    margin: 0 auto;
    text-align: center;
  }
  .waitlist__text {
    margin-left: auto;
    margin-right: auto;
  }
  @media (max-width: 480px) {
    .waitlist__box { padding: var(--space-6) var(--space-5); }
  }

  /* ---------- FAQ ---------- */
  .faq__list {
    display: flex;
    flex-direction: column;
    gap: var(--space-4);
    max-width: 760px;
    margin: 0 auto; /* bloco do acordeão centralizado na seção, junto do título — texto de pergunta/resposta permanece alinhado à esquerda dentro de cada item por legibilidade (parágrafos longos centralizados prejudicam leitura em accordion) */
  }
  .faq-item {
    /* REVISÃO (layoutman) — PEDIDO DO USUÁRIO: igualando à referência
       canônica .processo__item (border-radius: 0). Era --radius-md (18px).
       padding segue --space-5/--space-6 (assimétrico, calibrado pro
       acordeão) — não é o alvo desta correção, mantido. */
    border-radius: 0;
    padding: var(--space-5) var(--space-6);
  }
  .faq-item__question {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--space-4);
    list-style: none;
  }
  .faq-item__question::-webkit-details-marker { display: none; }
  .faq-item__question::after {
    content: "+";
    flex: none;
    font-size: 1.25rem;
    color: var(--color-text-muted);
    transition: transform .15s ease;
  }
  .faq-item[open] .faq-item__question::after {
    transform: rotate(45deg);
  }

  /* ---------- Próximo passo (funil de conversão entre páginas) ----------
     Ver REVISÃO 4 no comentário do bloco LAYOUT acima para o raciocínio
     completo. Só espaçamento/caixa/largura/responsividade aqui — cor e
     tipografia já foram decididas por colorman/letterman (ver regras
     .next-step__eyebrow/__text/__link na seção de componentes acima). */
  /* REVISÃO (layoutman) — letterman tripliquou .next-step__eyebrow (13px
     → 39px, calc(var(--fs-eyebrow)*3)) sem mexer em layout/caixa,
     sinalizando explicitamente o padding deste painel pra revisão. Padding
     subiu de --space-6/32px para --space-7/48px (mesmo valor que
     .next-step--final, o painel "reforçado", já usava) — o eyebrow bem
     maior precisa de mais respiro até a borda do painel pra não ficar
     apertado; deixa .next-step e .next-step--final com a mesma escala de
     padding em repouso, só diferindo na borda/sombra que já os distingue. */
  .next-step {
    background-color: var(--color-surface);
    /* REVISÃO (colorman) — auditoria de cor: .next-step tinha ficado para trás
       da unificação "bordas invisíveis" aplicada a todos os outros cards do
       site (.processo__item e os demais — ver blocos "REVISÃO (colorman)"
       irmãos ao longo do arquivo). Ainda usava border 1px --color-border-strong
       sólida + --shadow-card-rest (a sombra mais fraca, pré-unificação) em vez
       da mesma fórmula que .processo__item/.beneficios__item/.mds__item/
       .preview-card/.step-card/.concept-card/.source-card/.plan-card/.faq-item/
       .achado-card já usam: border-color transparent (largura mantida, box
       model intacto) + --shadow-card-rest-borderless. Corrigido para bater
       exatamente com a referência --color-surface/border transparent/
       shadow-card-rest-borderless. .next-step--final continua com sua borda
       2px --color-accent-on-dark própria por cima (destaque semântico de CTA
       mais importante do funil), fora do escopo desta unificação. */
    border: 1px solid transparent;
    box-shadow: var(--shadow-card-rest-borderless);
    /* REVISÃO (layoutman) — PEDIDO DO USUÁRIO: igualando à referência
       canônica .processo__item (border-radius: 0). Era --radius-lg (24px). */
    border-radius: 0;
    width: min(760px, 100% - 2 * var(--container-pad));
    margin: var(--space-7) auto;
    padding: var(--space-7);
  }
  .next-step__eyebrow {
    margin: 0 0 var(--space-2);
  }
  @media (max-width: 900px) {
    .next-step { margin-top: var(--space-6); margin-bottom: var(--space-6); }
  }
  @media (max-width: 480px) {
    .next-step {
      margin-top: var(--space-5);
      margin-bottom: var(--space-5);
      padding: var(--space-5) var(--space-4);
    }
  }

  /* Conversão final do funil (faq.html) — mesma caixa acima, com reforço
     visual no CONTAINER equivalente ao já usado em .plan-card--featured
     para o plano recomendado (borda 2px na cor de Ação + padding um
     degrau maior + sombra com leve tom de Ação, em vez da sombra neutra
     dos outros 5 blocos) — mesma largura/posição/raio, só um degrau a
     mais de peso visual no CTA mais importante do site. */
  .next-step--final {
    border: 2px solid var(--color-accent-on-dark); /* era var(--color-accent) direto — REVISÃO 9 (colorman): --color-accent é o azul ESCURO sólido do CTA, 5,32:1 sobre branco. .next-step se apoia em --color-surface (muda de tema), então a borda agora usa o token dedicado --color-accent-on-dark em vez do --color-accent fixo */
    padding: var(--space-7);
    box-shadow: 0 4px 12px rgba(44, 101, 140, 0.10); /* REVISÃO 9 (colorman) — RGB decimal atualizado pro novo --color-text-link/--color-accent (44,101,140 = #2C658C; era 179,0,86 = #B30056, rosa da REVISÃO 7) */
  }
  @media (max-width: 480px) {
    .next-step--final { padding: var(--space-6) var(--space-5); }
  }

  /* ---------- Rodapé (denso, em colunas, links compactos) ---------- */
  .site-footer {
    padding: var(--space-7) 0 var(--space-6);
  }
  .site-footer__grid {
    max-width: var(--container-max);
    margin: 0 auto;
    padding: 0 var(--container-pad) var(--space-6);
    display: grid;
    grid-template-columns: 1.4fr 1fr 1fr;
    gap: var(--space-6);
  }
  /* REVISÃO (layoutman) — .footer-nav__title/.footer-contact__title
     tripilicaram (13px → 39px, calc(var(--fs-eyebrow)*3)). Em desktop as 3
     colunas ficam lado a lado (o gap de --space-6/32px é horizontal, entre
     colunas — não precisa mudar). Abaixo de 720px as colunas EMPILHAM
     (mesmo gap vira vertical): um título de coluna de 39px logo depois da
     lista de links da coluna anterior, com só 20px de vão, ficava
     apertado. Subiu para --space-7/48px — respiro proporcional ao título
     bem maior, sem depender só do margin-bottom próprio do título (que é
     espaçamento DELE para o conteúdo abaixo, não da coluna anterior para
     ele). */
  @media (max-width: 720px) {
    .site-footer__grid { grid-template-columns: 1fr; gap: var(--space-7); }
  }
  .footer-nav__list {
    display: flex;
    flex-direction: column;
    gap: 2px;
  }
  .site-footer__legal {
    max-width: var(--container-max);
    margin: 0 auto;
    padding: var(--space-4) var(--container-pad) 0;
  }
  @media (max-width: 480px) {
    .site-footer__grid { padding-left: var(--container-pad-mobile); padding-right: var(--container-pad-mobile); }
    .site-footer__legal { padding-left: var(--container-pad-mobile); padding-right: var(--container-pad-mobile); }
  }

  /* ---------- Aviso de demonstração ---------- */
  .demo-notice {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: 60;
    padding: var(--space-3) var(--container-pad);
  }
  .demo-notice__text {
    max-width: var(--container-max);
    margin: 0 auto;
  }
  body {
    padding-bottom: 56px; /* espaço para o aviso fixo não cobrir o rodapé */
  }

  /* ================================================================
     ---------- Camada decorativa "lava lamp" — REMOVIDA (layoutman) ----------
     Pedido do usuário nesta rodada: o fundo da página deve ser UMA cor só,
     sólida (branco, --color-bg-page/--color-surface, já definidos pelo
     colorman) — sem nenhuma camada/gradiente/animação por cima. A camada
     fixa de 4 blobs animados (introduzida em revisão anterior, ver
     histórico de decisões no changelog do projeto fora deste arquivo)
     contrariava exatamente isso: mesmo com pointer-events:none e baixo
     z-index, ela pintava formas coloridas em movimento constante por trás
     de todo o conteúdo, o oposto de "fundo sólido". Removida por completo:
     as regras .lava-lamp / .lava-lamp__blob (todas) / @keyframes lava-drift
     e lava-morph saíram deste arquivo, e a marcação <div class="lava-lamp">
     (4 <span> de blob) foi removida do <body> das 7 páginas HTML. O fundo
     da página volta a ser só body { background-color: var(--color-bg-page) }
     (ver regra logo acima do bloco de tipografia/paleta), sem nenhuma
     camada extra desenhando por cima. */
  /* BUG CRÍTICO CORRIGIDO AQUI (colorman) — o parágrafo acima continha,
     sem querer, a sequência literal "blob" + asterisco + barra +
     "@keyframes": um caractere "*" seguido imediatamente de "/" DENTRO
     do texto do comentário. Em CSS a sequência asterisco-barra fecha
     QUALQUER comentário, mesmo em pleno meio de uma frase — não existe
     "escape" dentro de comentário CSS. Isso fechava este bloco de
     comentário ~5 linhas mais cedo do que o fechamento visível no final
     do parágrafo, e tudo que vinha depois (incluindo aquele fechamento
     de verdade, os próximos 3 comentários explicativos do formulário de análise, e o
     início da regra .analise-form__input logo abaixo) passava a ser
     tratado como CSS de verdade — texto solto, inválido — em vez de
     comentário/regra. Resultado prático: o parser do navegador consumia
     tudo isso como um único "seletor" corrompido até encontrar a próxima
     "{" (a da própria regra .analise-form__input original, com
     background-color/border/color), descartava a regra inteira por ser
     inválida, e RETOMAVA a análise normalmente depois do "}" dela — por
     isso só essa regra específica "sumia" (fundo/borda/cor do campo de
     URL, herdando o branco/preto padrão do navegador em vez do tema),
     enquanto todo o resto do arquivo (inclusive a segunda regra
     .analise-form__input do layoutman, ~470 linhas abaixo, e os próprios
     comentários "engolidos" no meio do caminho) continuava e parecia
     perfeitamente normal — daí o bug ler como "a regra está aqui, é
     válida, mas o navegador ignora", sem nenhum indício visível na
     regra em si. Correção: espaço inserido entre "*" e "/" no texto do
     parágrafo acima, quebrando a sequência acidental. Ver também a
     consolidação de .analise-form__input abaixo (perto do bloco do
     layoutman), feita como segunda camada de segurança independente
     desta correção. */

  /* ================================================================
     ---------- Página de análise (/analise.html, writerman) ----------
     REVISÃO 1 (colorman) — página nova com 12 blocos de estado
     (.analise-estado + modificador BEM) mais o formulário inicial.
     Nenhuma cor nova: tudo reaproveitado dos tokens já definidos no
     :root (ver blocos "REVISÃO 9"/"REVISÃO 10" acima). .aviso-analise
     no fim da página já está resolvido (mesma classe do index.html,
     nenhuma mudança necessária aqui).
     ================================================================ */

  /* ---------- Formulário inicial (#analise-url) ----------
     MESMO tratamento de .hero-form__input (index.html, ver bloco
     "REVISÃO 10 (colorman)" acima) — pedido explícito da tarefa, para o
     campo de URL ler como o MESMO componente nas duas páginas: fundo
     --color-surface, borda --color-border-strong (~3,18:1 sobre branco,
     cruza o piso de 3:1 de componente de UI — página e campo são o
     mesmo branco, a borda "fraca" sozinha não separaria visualmente).
     Foco reforça a borda com --color-focus-ring (alias de
     --color-text-link, #2C658C) além do outline global. Estado inválido
     (só depois de o usuário digitar algo, :not(:placeholder-shown), pra
     não pintar de vermelho um campo obrigatório ainda intocado) usa
     --color-error (#B3453D, ~5,48:1 sobre branco) — o único papel
     semântico do sistema pra "isto está errado". */
  /* Tipografia (letterman) — MESMO par de .hero-form__input (ver bloco
     "REVISÃO 9 (letterman)" no topo do arquivo para o raciocínio
     completo): --fs-body (17px, não --fs-small — campo DIGITADO precisa
     de tamanho confortável de leitura/edição e ≥16px evita o zoom
     automático de formulário no iOS), peso 400 (texto de entrada neutro,
     o botão "Iniciar análise gratuita" ao lado é que carrega peso 600 de
     ação), letter-spacing 0. Placeholder herda a mesma família/peso — URL
     de exemplo não leva tratamento "técnico" (mono/itálico), mesmo
     raciocínio já documentado para .source-card__url e .hero-form__input.

     CONSOLIDAÇÃO (colorman) — a regra de fato (background-color/border/
     color/tipografia + os sub-seletores ::placeholder/:focus-visible/
     :invalid) foi MOVIDA daqui para perto do bloco .analise-form__input
     do layoutman (width/padding/border-radius), mais abaixo neste
     arquivo, formando uma ÚNICA regra base para a classe em vez de duas
     em pontos distantes do arquivo. Isso não muda nenhum valor — é só
     consolidação de local, feita como segunda camada de segurança
     independente do bug real já corrigido acima (comentário fechado
     cedo demais por um asterisco+barra acidental, que derrubava
     esta regra inteira por engolir seu seletor). O raciocínio de cor
     acima (contraste borda/campo, foco, estado inválido) continua
     valendo integralmente para a regra consolidada — só o código-fonte
     mudou de linha. */

  /* Painel "o que vai acontecer a partir daqui" — conteúdo informativo,
     não é alerta nem erro. MESMA fórmula já usada por .aviso-analise
     acima, reaproveitada aqui pelo mesmo motivo: página e painel
     branco/quase-branco lado a lado precisam de borda visível pra se
     separar. PEDIDO DO USUÁRIO (consistência claro/escuro) —
     --color-surface-alt trocado por --color-surface, junto com os
     outros 4 membros do grupo "painel neutro" (ver nota completa em
     .aviso-analise). */
  .analise-form__summary {
    background-color: var(--color-surface);
    border: 1px solid var(--color-border-strong);
    box-shadow: var(--shadow-card-rest); /* PEDIDO DO USUÁRIO — sistema de elevação novo */
  }

  /* Checkbox de consentimento — estado marcado/desmarcado precisa ser
     visualmente claro. accent-color tinge o controle NATIVO (fundo do
     quadrado quando marcado + o próprio "check") com --color-accent
     (#31709B), o mesmo azul de .btn--primary — quando marcado, o
     checkbox lê como "a mesma cor de ação do site", não um cinza de
     sistema operacional genérico. Suporte amplo (Chromium/Firefox/
     Safari modernos) sem precisar de appearance:none + SVG customizado,
     que envolveria decisões de forma/tamanho fora do escopo de cor.
     Estado desmarcado já é visível nativamente (contorno do navegador)
     em todos os browsers-alvo; nenhum ajuste adicional necessário só
     por cor. */
  .analise-form__checkbox input[type="checkbox"] {
    accent-color: var(--color-accent);
  }

  /* Tipografia (letterman) — texto do consentimento precisa ser legível
     mas claramente menor/mais discreto que o campo de URL logo acima
     (--fs-body/400, ver regra de .analise-form__input): --fs-small
     (15px, o mesmo degrau de "texto de apoio" já usado em
     .step-card__description/.mds__definition) + --lh-body. Cor
     --color-text-body (não muted): é um consentimento obrigatório para
     prosseguir, não uma nota decorativa — mesmo raciocínio já aplicado a
     .aviso-analise__text ("conteúdo central, não nota discreta"); abaixar
     para muted (que já ficou reservado no sistema para dica/legenda
     verdadeiramente secundária, ex. .hero-form__label) desapareceria um
     texto que trava o envio do formulário se ignorado.
     Links "Termos de Uso"/"Política de Privacidade" dentro da frase —
     MESMO par já usado em todo link de ação inline do sistema
     (.processo__link a / .planos-teaser__link a / .footer-contact__link):
     --color-text-body + underline permanente + peso 600 (mais pesado que
     o texto ao redor, pra se diferenciar como link sem introduzir cor
     saturada nova — decisão editorial já estabelecida na paleta "Cinza
     Editorial" do colorman), :hover/:focus-visible escurece para
     --color-text-heading. */
  .analise-form__checkbox {
    color: var(--color-text-body);
    font-family: var(--font-body);
    font-weight: 400;
    font-size: var(--fs-small);
    line-height: var(--lh-body);
  }
  .analise-form__checkbox a {
    color: var(--color-text-body);
    font-weight: 600;
    text-decoration: underline;
  }
  .analise-form__checkbox a:hover,
  .analise-form__checkbox a:focus-visible {
    color: var(--color-text-heading);
  }

  /* ---------- Título/corpo dos 12 estados (letterman) ----------
     Regra ÚNICA para .analise-estado__title/__text, compartilhada pelos
     12 blocos — é o próprio pedido da tarefa: nenhum dos 12 estados pode
     ler como tipograficamente "mais importante" que os outros, a
     gravidade já está toda no fundo/borda que o colorman escalonou em 3
     níveis (ver bloco logo abaixo). Aqui só um tratamento único de
     tamanho/peso pros 12.

     .analise-estado__title precisa funcionar como MANCHETE DE STATUS —
     a pessoa está checando "o que está acontecendo agora", não lendo um
     h2 de conteúdo com calma. Por isso NÃO reaproveitei h2 (--fs-h2,
     28–41px, pensado pra abrir uma seção inteira da página — pesado
     demais aqui, e competiria com o "Sua análise gratuita" acima) nem o
     tratamento padrão de título de card do sistema (h3 herdado, peso
     600, ex. .step-card__title) — este título precisa se destacar mais
     rápido que um título de card comum, porque é a ÚNICA linha que muda
     de estado pra estado numa página que a pessoa pode estar olhando
     repetidamente (ela já sabe o que o card significa; só quer saber SE
     mudou). Uso --fs-h3 (1,375rem — mesmo degrau de tamanho de card já
     em uso, não introduz um tamanho novo) mas com peso 700 (um degrau
     acima do 600 padrão de h3/.step-card__title — o mesmo salto que
     diferencia h1/700 de h2-h3/600 no resto do sistema), pra ganhar peso
     de "manchete" sem precisar crescer de tamanho e desequilibrar os
     painéis mais estreitos (url-invalida, falha-recuperavel etc.).
     Cor --color-text-heading (o mesmo token que h1/h2/h3 usam
     globalmente — hoje idêntico a --color-text-body na paleta atual,
     mas semanticamente correto: é o título, deveria seguir o token de
     título mesmo que os dois valores coincidam agora).

     .analise-estado__text é o corpo explicativo — mesmo par já usado em
     conteúdo central do sistema (.aviso-analise__text/.hero-description):
     --fs-body/--lh-body, --color-text-body, peso 400. NÃO usei --fs-small
     (o tamanho de texto de apoio de card, ex. .step-card__description)
     porque aqui o texto às vezes é a ÚNICA explicação disponível pra
     pessoa entender o que fazer a seguir (ex. "Confira se o endereço
     está completo...") — mesmo status de "conteúdo central, não nota
     decorativa" que .aviso-analise__text já recebeu.

     .analise-estado__status-icon (emoji ⏳/🔎/✅ dos 3 estados de
     progresso/sucesso) — line-height 1 pra não herdar o leading de texto
     corrido (que abriria um respiro vertical estranho num glifo isolado)
     e um tamanho maior que o próprio título (--fs-h1, a única vez que
     reaproveito esse token fora de h1/.text-highlight) pra funcionar como
     ícone de status visível de relance, não como texto lido. Cor não
     definida aqui — emoji carregam cor própria, currentColor não se
     aplica. */
  .analise-estado__title {
    font-family: var(--font-heading);
    font-weight: 700;
    font-size: var(--fs-h3);
    line-height: var(--lh-heading);
    letter-spacing: -0.005em;
    color: var(--color-text-heading);
    margin: 0 0 0.5rem;
  }
  .analise-estado__text {
    font-family: var(--font-body);
    font-weight: 400;
    font-size: var(--fs-body);
    line-height: var(--lh-body);
    color: var(--color-text-body);
    margin: 0;
  }
  .analise-estado__status-icon {
    font-size: var(--fs-h1);
    line-height: 1;
    margin: 0 0 0.5rem;
  }

  /* ---------- Estados de erro/bloqueio — gradação de severidade ----------
     Os 8 estados de ".analise-estado" que comunicam "algo impede
     continuar" NÃO recebem tratamento uniforme — proporcional ao que
     cada um pede da pessoa. Reaproveitados só tokens semânticos já
     existentes no :root, nenhuma cor nova. Texto (título/corpo) dentro
     de qualquer um dos painéis herda --color-text-body (#211E1A,
     16,59:1 sobre branco) — contraste garantido sobre qualquer um dos
     fundos abaixo, todos mais claros que --color-surface-alt (o par
     mais apertado já auditado no arquivo contra texto escuro, ≥4,67:1).
     A cor de texto específica de cada elemento continua decisão do
     letterman/HTML; aqui só fundo e borda do painel mudam.

     NÍVEL 1 — correção simples do próprio usuário, nada quebrado no
     sistema (url-invalida, consentimento-ausente, antibot pendente): a
     pessoa só precisa ajustar um campo ou completar uma verificação —
     não é uma falha do serviço, é um passo faltando. Painel NEUTRO,
     mesma fórmula de .aviso-analise/.analise-form__summary acima:
     --color-surface-alt (#F2ECE6) + --color-border-strong (#9C8E82,
     ~3,18:1 sobre branco). Nenhum token de warning/error entra aqui de
     propósito — soaria desproporcional para "esqueceu de marcar uma
     caixinha".

     NÍVEL 2 — falha real, porém recuperável/temporária, com um caminho
     de retomada imediato dentro do próprio fluxo (falha-recuperavel,
     timeout): --color-warning-bg (#FBEEDA) + --color-warning-border
     (#EAD1A0) — mesmo par já usado em .badge--prelaunch/
     .step-card__status. Comunica "algo não saiu como esperado dessa
     vez", sem soar definitivo.

     NÍVEL 3 — bloqueio ou falha sem caminho de retomada simples dentro
     do próprio fluxo (falha-definitiva, dominio-bloqueado,
     limite-atingido): --color-error-bg (#FBEAE8) + --color-error-border
     (#EFC7C2). Reservado só para quando a análise realmente não vai
     adiante agora — deixaria de ser um sinal proporcional se os outros
     5 estados de "problema" também usassem error.

     Em todos os 3 níveis, o preenchimento SÓLIDO do painel (área
     inteira, não a borda isolada) é o que separa visualmente do fundo
     branco da página — mesmo raciocínio já usado em .step-card__status/
     .badge--prelaunch: a borda reforça a aresta, mas não é o único
     sinal, então nenhum destes pares depende de a borda sozinha cruzar
     3:1 (ela não cruza — mesma situação já aceita nos dois consumidores
     citados).
     PEDIDO DO USUÁRIO (consistência claro/escuro) — --color-surface-alt
     trocado por --color-surface, junto com os outros 2 membros do grupo
     "painel neutro" (ver nota completa em .aviso-analise). */
  .analise-estado--url-invalida,
  .analise-estado--consentimento-ausente,
  .analise-estado--antibot,
  .analise-estado--sem-token {
    /* .analise-estado--sem-token (resultado.html) — mesmo nível: não é uma
       falha do serviço, é um link sem os dados necessários (token
       ausente). Reaproveita a fórmula "nível 1" acima, sem cor nova. */
    background-color: var(--color-surface);
    border: 1px solid var(--color-border-strong);
    box-shadow: var(--shadow-card-rest); /* PEDIDO DO USUÁRIO — sistema de elevação novo */
  }

  .analise-estado--falha-recuperavel,
  .analise-estado--timeout,
  .analise-estado--falha-resultado {
    /* .analise-estado--falha-resultado (resultado.html) — falha ao buscar
       o resultado, com botão de tentar de novo: mesmo nível 2 (recuperável)
       de falha-recuperavel/timeout em analise.html. */
    background-color: var(--color-warning-bg);
    border: 1px solid var(--color-warning-border);
  }

  .analise-estado--falha-definitiva,
  .analise-estado--dominio-bloqueado,
  .analise-estado--limite-atingido,
  .analise-estado--expirada,
  .analise-estado--analise-falhou {
    /* .analise-estado--expirada/--analise-falhou (resultado.html) — token
       expirado/inválido ou análise que não terminou: sem caminho de
       retomada dentro do próprio link, mesmo nível 3 dos 3 estados de
       analise.html. */
    background-color: var(--color-error-bg);
    border: 1px solid var(--color-error-border);
  }

  /* REVISÃO 2 (colorman) — CORREÇÃO DE CONTRASTE (achado do letterman).
     --color-warning-bg/--color-error-bg/--color-success-bg são LITERAIS
     fixos (não redeclarados dentro de [data-theme="dark"], igual
     --color-warning-border/-border dos outros dois — ver bloco :root
     acima, nenhum dos 6 tokens de -bg/-border tem sobrescrita dark).
     Mas .analise-estado__title/__text (regra única compartilhada pelos
     12 estados, ver bloco logo acima) usam --color-text-heading/-body,
     que SÃO redeclarados dentro de [data-theme="dark"] (viram
     #FFFFFF/rgba(255,255,255,.82), ver PARTE 1 da REVISÃO 9 do :root
     dark) — pensados pra funcionar sobre os fundos que TAMBÉM mudam de
     tema (--color-surface/--color-surface-alt/--color-bg-page). Nos 6
     estados que sentam sobre --color-warning-bg/--color-error-bg/
     --color-success-bg (fundos que NÃO mudam), herdar --color-text-
     heading/-body produzia texto quase branco sobre um fundo pastel
     claro no modo escuro — contraste quebrado (~1,1:1, muito abaixo do
     piso de 4,5:1).
     .demo-notice/.badge--prelaunch/.step-card__status já resolviam
     exatamente esse problema pro caso warning usando um token de texto
     DEDICADO (--color-warning-text, #8A5A1F — fixo, não redeclarado em
     dark, calibrado especificamente contra --color-warning-bg) em vez
     do par heading/body. Os 6 estados abaixo nunca tinham herdado esse
     padrão porque a regra de título/corpo dos 12 estados é uma regra
     ÚNICA (pedido do letterman, ver bloco acima) — faltava a
     sobrescrita local de cor pros 2 grupos que sentam sobre fundo
     colorido fixo. Segui o MESMO padrão já validado pro warning, sem
     inventar abordagem nova: adicionei --color-error-text (#B3453D,
     mesmo valor de --color-error, já o papel "isto está errado" do
     sistema — ver :root) e --color-success-text (#2C7550, NOVO —
     --color-success em si, #2F7D52, mede só 4,41:1 sobre
     --color-success-bg, abaixo do piso de 4,5:1 pro corpo em peso 400;
     escurecido levemente mantendo o mesmo matiz/família até cruzar o
     piso com folga) e apliquei os 3 tokens de texto (dedicados,
     também fixos/não redeclarados em dark, mesma lógica do warning) só
     nestes 6 blocos — os outros 6 estados (neutro/progresso, que
     sentam sobre fundos QUE mudam de tema) continuam com o par
     heading/body padrão, sem alteração.
     Contraste calculado (idêntico nos dois temas — nem o par texto nem
     o fundo mudam com [data-theme="dark"]):
       --color-warning-text (#8A5A1F) sobre --color-warning-bg
       (#FBEEDA): ~5,15:1 — cruza 4,5:1 (texto normal) e 3:1 (texto
       grande) com folga. Token já existia, só passou a ser CONSUMIDO
       aqui — nenhum valor novo.
       --color-error-text (#B3453D) sobre --color-error-bg (#FBEAE8):
       ~4,70:1 — cruza 4,5:1 e 3:1.
       --color-success-text (#2C7550) sobre --color-success-bg
       (#EAF3E2): ~4,89:1 — cruza 4,5:1 e 3:1.
     Todos os 3 pares medidos contra o MESMO fundo que .analise-estado__
     title (peso 700, --fs-h3≈22px, "texto grande" pelo critério WCAG)
     e .analise-estado__text (peso 400, --fs-body, "texto normal") de
     fato usam — não uma aproximação. */
  .analise-estado--falha-recuperavel .analise-estado__title,
  .analise-estado--falha-recuperavel .analise-estado__text,
  .analise-estado--timeout .analise-estado__title,
  .analise-estado--timeout .analise-estado__text,
  .analise-estado--falha-resultado .analise-estado__title,
  .analise-estado--falha-resultado .analise-estado__text {
    color: var(--color-warning-text);
  }

  .analise-estado--falha-definitiva .analise-estado__title,
  .analise-estado--falha-definitiva .analise-estado__text,
  .analise-estado--dominio-bloqueado .analise-estado__title,
  .analise-estado--dominio-bloqueado .analise-estado__text,
  .analise-estado--limite-atingido .analise-estado__title,
  .analise-estado--limite-atingido .analise-estado__text,
  .analise-estado--expirada .analise-estado__title,
  .analise-estado--expirada .analise-estado__text,
  .analise-estado--analise-falhou .analise-estado__title,
  .analise-estado--analise-falhou .analise-estado__text {
    color: var(--color-error-text);
  }

  /* ---------- Estados de progresso (espera, não erro) ----------
     na-fila/analisando não são problema nem sucesso — tratamento NEUTRO,
     mais discreto até do que o Nível 1 acima (que já sinaliza "ajuste
     algo"): fundo --color-surface (branco, igual à própria página) +
     borda --color-border (#D8CCC0), a borda "fraca"/decorativa padrão
     do sistema, sem obrigação de 3:1 — aqui a borda é só uma separação
     sutil, não um sinal de estado que precise se destacar. Nenhuma cor
     de warning/error/success entra em progresso. */
  .analise-estado--na-fila,
  .analise-estado--analisando,
  .analise-estado--carregando-resultado,
  .analise-estado--ainda-processando {
    /* --carregando-resultado/--ainda-processando (resultado.html) — mesmo
       tratamento neutro de espera dos dois estados de analise.html. */
    background-color: var(--color-surface);
    border: 1px solid var(--color-border);
  }

  /* ---------- Estado de sucesso ---------- */
  /* --color-success-bg (#EAF3E2) + --color-success-border (#C9DFC0),
     par semântico já existente no :root, mesmo raciocínio de
     preenchimento sólido dos níveis de erro acima. */
  .analise-estado--concluida {
    background-color: var(--color-success-bg);
    border: 1px solid var(--color-success-border);
  }

  /* REVISÃO 2 (colorman) — mesma correção de contraste dark-mode dos
     dois grupos acima, ver comentário completo junto a
     .analise-estado--falha-recuperavel/--timeout. --color-success-text
     (#2C7550) sobre --color-success-bg (#EAF3E2): ~4,89:1, fixo nos
     dois temas. */
  .analise-estado--concluida .analise-estado__title,
  .analise-estado--concluida .analise-estado__text {
    color: var(--color-success-text);
  }

  /* ================================================================
     ---------- Página de análise — layout dos 12 estados (layoutman) ----------
     Cor (colorman) e tipografia (letterman) já resolvidas nos blocos
     acima; aqui só largura, espaçamento vertical, caixa dos painéis e
     responsividade. Só UM dos 12 blocos fica visível por vez (controle
     via "hidden" no JS que vem depois) — cada regra abaixo trata cada
     ".analise-estado--*" como se fosse a única seção da página naquele
     momento, porque na prática sempre vai ser.

     LARGURA — .analise (a <section>) é filha direta de <main> e já
     herda a regra genérica "main > section" (max-width: var(--container-
     max), hoje 1440/1600px): correta para a SEÇÃO, larga demais para um
     formulário de um campo só ou um painel de status de poucas linhas
     lerem como bloco de leitura único. Em vez de inventar um valor novo,
     usei o mesmo max-width literal que .waitlist__box já usa (720px) —
     .analise-estado é, na prática, o mesmo tipo de "painel de CTA/status
     isolado e centralizado" que .waitlist__box resolve em outras
     páginas; largura idêntica mantém a mesma proporção de coluna de
     leitura entre as páginas do site. (760px de .next-step é a mesma
     família de valor — 720px fica perto dessa faixa já estabelecida, não
     é um número novo. REVISÃO (layoutman) — a referência original citava
     também os 800px de .faq-block, seção removida da Início; tirei a
     menção porque hoje não existe mais nenhum .faq-block no arquivo pra
     conferir o valor contra.) */
  .analise-estado {
    max-width: 720px;
    margin: 0 auto;
  }

  /* CAIXA DOS PAINÉIS — os 11 estados de status/erro/sucesso (todos
     menos --inicial) recebem a mesma caixa: padding generoso + raio
     grande, mesma fórmula de .waitlist__box (--space-8/--space-7,
     --radius-lg) — é o padrão do sistema pra "painel de destaque
     centralizado", e aqui a caixa também carrega o fundo/borda
     semânticos que o colorman escalonou em 3 níveis (ver bloco acima).
     --inicial fica de fora de propósito: não é um painel colorido, é o
     formulário direto sobre o fundo da própria página (colorman não deu
     fundo/borda a --inicial), então não ganha a mesma caixa.
     text-align: center porque cada um dos 11 é ícone/título/texto/
     botão(ões) empilhados e centralizados verticalmente dentro do
     painel (pedido da tarefa) — mesmo padrão já usado em .waitlist__box/
     .cta-final/.section-heading para "bloco único centralizado", não
     texto corrido alinhado à esquerda. */
  .analise-estado:not(.analise-estado--inicial) {
    padding: var(--space-8) var(--space-7);
    border-radius: var(--radius-lg);
    text-align: center;
  }

  /* Espaço entre o corpo do texto (__text) e o(s) botão(ões) de ação —
     generoso o bastante pra não ler como "botão colado no parágrafo"
     (pedido explícito da tarefa: "respiro generoso, não deve parecer
     apertada"). Cobre tanto os 9 estados com 1 única ação (o botão/link
     é irmão direto de __text) quanto os 2 com 2 ações
     (falha-definitiva, limite-atingido, que embrulham as duas em
     .analise-estado__acoes). */
  .analise-estado__text + .btn,
  .analise-estado__text + .analise-estado__acoes {
    margin-top: var(--space-6);
  }

  /* Os 2 estados com 2 ações no mesmo painel: lado a lado em telas
     normais (nenhum dos dois botões ocupa a largura toda — "voltar pro
     início" e a ação principal têm peso parecido, então lado a lado lê
     melhor que empilhado por padrão), empilhados de largura cheia a
     partir de 480px — mesma faixa mobile já usada em .hero-form__row/
     .next-step — pra não apertar dois botões de texto longo lado a lado
     numa tela estreita. */
  .analise-estado__acoes {
    display: flex;
    justify-content: center;
    gap: var(--space-3);
  }

  @media (max-width: 480px) {
    .analise-estado:not(.analise-estado--inicial) {
      padding: var(--space-6) var(--space-5);
    }
    .analise-estado__acoes {
      flex-direction: column;
      align-items: stretch;
    }
  }

  /* ================================================================
     ---------- Página de resultado (resultado.html) ----------
     Conteúdo real do resultado da demonstração gratuita, populado por
     resultado.js só a partir dos campos confirmados no contrato
     (docs/API_CONTRACT_FRONTEND.md): scannedUrl, priorities[], positive-
     Signals[], limitation, expiresAt. Nenhuma cor nova — só reaproveito
     tokens e a fórmula de card genérico já usada em .step-card/
     .concept-card (fundo --color-surface, borda --color-border-strong,
     --radius-md, --shadow-card-rest) e o par de texto de
     .step-card__description (.achado-card__texto). */
  /* :not([hidden]) — sem isso, o display:flex abaixo (regra de autor)
     sobrescreveria o display:none padrão do navegador para [hidden]
     (regra de user-agent, sempre perdedora contra CSS de autor mesmo com
     especificidade igual). Mesmo cuidado não foi necessário em
     .analise-form porque ali quem recebe o atributo "hidden" é sempre um
     ancestral (.analise-estado), nunca o próprio elemento com display
     customizado. */
  .resultado-conteudo:not([hidden]) {
    display: flex;
    flex-direction: column;
    gap: var(--space-8);
  }
  .resultado__url {
    text-align: center;
    color: var(--color-text-muted);
    font-size: var(--fs-small);
    word-break: break-word;
  }
  .resultado__grupo-title {
    margin: 0 0 0.25rem;
  }
  .resultado__grupo-intro {
    color: var(--color-text-muted);
    font-size: var(--fs-small);
    line-height: var(--lh-body);
    margin: 0 0 var(--space-5);
  }
  .resultado__limitacao-text {
    color: var(--color-text-body);
    font-size: var(--fs-body);
    line-height: var(--lh-body);
    max-width: 68ch;
  }
  .resultado__expiracao {
    text-align: center;
    color: var(--color-text-muted);
    font-size: var(--fs-caption);
  }

  /* Grade de achados — mesma lógica de largura de coluna capada (não
     esticar) já usada em .beneficios__list/.steps__list: 1 coluna em
     telas estreitas, 2 a partir de 640px. Cards de prioridade/positivo
     variam em tamanho de texto, então grid (não flex) evita que um card
     mais curto herde a altura do vizinho mais longo de forma esquisita
     — align-items:start deixa cada um com a própria altura. */
  .achado-lista {
    display: grid;
    grid-template-columns: 1fr;
    align-items: start;
    gap: var(--space-5);
  }
  @media (min-width: 640px) {
    .achado-lista {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  .achado-card {
    background-color: var(--color-surface);
    /* REVISÃO (colorman) — mesma unificação de cor de card do .step-card:
       bordas invisíveis + sombra dedicada, igual aos 4 cards da home. */
    border: 1px solid transparent;
    /* REVISÃO (layoutman) — PEDIDO DO USUÁRIO: igualando à referência
       canônica .processo__item (border-radius: 0). Era --radius-md (18px). */
    border-radius: 0;
    box-shadow: var(--shadow-card-rest-borderless);
    padding: var(--space-6);
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
  }
  /* Card de ponto positivo usa a mesma borda semântica de sucesso já
     estabelecida (--color-success-border), em vez de inventar um verde
     novo — mesmo par de .analise-estado--concluida. */
  .achado-card--positivo {
    border-color: var(--color-success-border);
  }
  .achado-card__badges {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2);
  }
  /* REVISÃO (letterman) — mesma unificação de tipografia de card aplicada
     em .step-card__title/.concept-card__title/.source-card__title/
     .plan-card__name: família Newsreader itálica peso 500, igualando os
     títulos de card de referência da home (é um <h3>, ver resultado.js —
     herdava Manrope não-itálico da regra global h1,h2,h3 antes). size/
     color/line-height/tracking continuam herdados da regra global,
     inalterados. Dark mode restaurado no bloco [data-theme="dark"]
     unificado. */
  .achado-card__title {
    font-family: "Newsreader", var(--font-display);
    font-style: italic;
    font-weight: 500;
    margin: 0;
  }
  /* REVISÃO (letterman) — mesma unificação de font-size do corpo de card
     aplicada em .step-card__description e demais: --fs-small→--fs-body-lg. */
  .achado-card__texto {
    font-size: var(--fs-body-lg);
    line-height: var(--lh-body);
    color: var(--color-text-body);
    margin: 0;
  }

  /* Badges — pill pequeno de rótulo (categoria/severidade/"Detectado"/
     "Ponto positivo"), --radius-pill já reservado no :root exatamente
     para "badges/status". Tons reaproveitam os mesmos 3 pares semânticos
     de .analise-estado (error/warning/neutro) mais --color-category-
     detected (o token já reservado desde a REVISÃO 10 do colorman para
     o indicador neutro de "Detectado", ver bloco grande acima de :root)
     e --color-success-*, sem nenhum hex novo. */
  .badge {
    display: inline-flex;
    align-items: center;
    padding: 0.25rem var(--space-3);
    border-radius: var(--radius-pill);
    border: 1px solid transparent;
    font-size: var(--fs-caption);
    font-weight: 600;
    line-height: 1.2;
    white-space: nowrap;
  }
  .badge--categoria {
    background-color: var(--color-surface-alt);
    border-color: var(--color-border-strong);
    color: var(--color-text-muted);
  }
  .badge--detectado {
    background-color: transparent;
    border-color: var(--color-category-detected);
    color: var(--color-category-detected);
  }
  .badge--positivo {
    background-color: var(--color-success-bg);
    border-color: var(--color-success-border);
    color: var(--color-success-text);
  }
  .badge--severidade-critica {
    background-color: var(--color-error-bg);
    border-color: var(--color-error-border);
    color: var(--color-error-text);
  }
  .badge--severidade-media {
    background-color: var(--color-warning-bg);
    border-color: var(--color-warning-border);
    color: var(--color-warning-text);
  }
  .badge--severidade-neutra {
    background-color: var(--color-surface-alt);
    border-color: var(--color-border-strong);
    color: var(--color-text-muted);
  }

  /* ================================================================
     ---------- Páginas legais (termos/privacidade/cookies/segurança) ----------
     Texto corrido longo — o único tipo de conteúdo do site que precisa
     ler como documento, não como bloco centralizado de marketing. Por
     isso .legal-page desliga o text-align:center que h2 herda
     globalmente (ver regra base "h2 { text-align:center }") e usa uma
     largura de leitura mais estreita que --container-max (mesma medida
     de --color-text-body/.resultado__limitacao-text, ~68-72 caracteres
     por linha). Nenhuma cor nova: reaproveita --color-text-body/-muted/
     -link já usados no resto do site. */
  .legal-page {
    max-width: 72ch;
    margin: 0 auto;
    text-align: left;
  }
  .legal-page h1 {
    text-align: left;
  }
  .legal-page__intro {
    color: var(--color-text-muted);
    font-size: var(--fs-small);
    margin: var(--space-2) 0 0;
  }
  /* Aviso de rascunho — mesma fórmula "nível 1" (neutro) já usada em
     .analise-estado--url-invalida/--sem-token: não é um erro, é um aviso
     de status do próprio conteúdo (pendente de revisão jurídica). */
  .legal-page__aviso {
    background-color: var(--color-surface);
    border: 1px solid var(--color-border-strong);
    box-shadow: var(--shadow-card-rest);
    border-radius: var(--radius-lg);
    padding: var(--space-5) var(--space-6);
    margin: var(--space-7) 0;
  }
  .legal-page__aviso p {
    margin: 0;
    font-size: var(--fs-small);
    line-height: var(--lh-body);
    color: var(--color-text-body);
  }
  .legal-page__aviso p + p {
    margin-top: var(--space-3);
  }
  .legal-page h2 {
    text-align: left;
    font-size: var(--fs-h3);
    margin: var(--space-7) 0 var(--space-3);
  }
  .legal-page h3 {
    margin: var(--space-5) 0 var(--space-2);
  }
  .legal-page p {
    margin: 0 0 var(--space-4);
  }
  .legal-page__meta {
    color: var(--color-text-muted);
    font-size: var(--fs-caption);
  }
  .legal-page ul.legal-page__list {
    list-style: disc;
    padding-left: 1.25em;
    display: flex;
    flex-direction: column;
    gap: var(--space-2);
    margin: 0 0 var(--space-4);
  }
  .legal-page a {
    color: var(--color-text-link);
    text-decoration: underline;
  }
  .legal-page a:hover,
  .legal-page a:focus-visible {
    color: var(--color-text-link-hover);
  }
  .legal-page__cross-links {
    margin-top: var(--space-8);
    padding-top: var(--space-6);
    border-top: 1px solid var(--color-border);
  }
  .legal-page__cross-links p {
    margin: 0 0 var(--space-2);
    font-weight: 600;
  }
  .legal-page__cross-links ul {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2) var(--space-5);
  }

  /* ---------- Formulário inicial (.analise-estado--inicial) ----------
     Pilha vertical de formulário, não um grid: label > campo de URL >
     dica > painel "o que vai acontecer a partir daqui" > checkbox de
     consentimento > widget Turnstile > botão. display:flex column com
     gap fixo entre os grupos de topo em vez de margins soltos — mesma
     estratégia que .hero-form já usa (flex + gap), só que aqui o gap é
     bem maior (--space-6, não --space-2 do hero-form) porque este
     formulário carrega bem mais elementos/peso visual por grupo, não é
     uma barra de busca compacta de um campo + botão lado a lado.
     align-items: stretch (o padrão de flex-column) deixa todos os
     grupos — incluindo o botão final — na largura cheia dos 720px do
     formulário: o campo de URL já é full-width por necessidade (área de
     toque/leitura), e o botão "Iniciar análise gratuita" full-width
     alinhado embaixo dele reforça que é A ação única desta tela, em vez
     de um botão de largura própria "flutuando" à esquerda. */
  .analise-form {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: var(--space-6);
  }
  .analise-form__group {
    display: flex;
    flex-direction: column;
    gap: var(--space-2);
  }

  /* PEDIDO DO USUÁRIO — campo de URL é o elemento mais importante da
     página (é o ÚNICO propósito da tela: "cole a URL aqui"), mas nunca
     tinha ganhado padding/raio próprios porque .hero-form__input só os
     recebe dentro de .hero-form__row (lado a lado com o botão, ver
     bloco "REVISÃO 9 (layoutman)" acima) — aqui, sozinho dentro de
     .analise-form__group, ele ficava com a caixa "crua" do <input>
     nativo do navegador. width:100% explícito: o campo não tem um
     flex:1 puxando a largura (não há botão ao lado aqui), então deixo a
     largura cheia explícita em vez de depender só do align-items:stretch
     herdado de .analise-form/.analise-form__group.

     REVISÃO (layoutman) — PEDIDO DO USUÁRIO: borda do campo "estranha".
     Raiz do problema, achada por inspeção geométrica das regras (medidas
     reais do campo: ~48px de altura total — 10px de padding vertical em
     cada lado + line-height do --fs-body + 1px de borda em cima e
     embaixo — contra 24px de raio, ou seja raio ≈ altura/2): este campo
     tinha herdado --radius-lg (24px) do MESMO valor literal de
     .hero-form__input, mas essa herança
     ignorava POR QUE .hero-form__input usa --radius-lg — o comentário
     original (bloco "Formulário do hero — estrutura/espaçamento" acima)
     é explícito: "para os dois lerem como uma única barra de busca
     coesa" — ou seja, o raio de 24px só faz sentido correndo ao lado de
     um botão do MESMO raio, os dois formando uma cápsula contínua
     (.hero-form__row, campo + botão lado a lado o tempo todo, exceto
     em 480px). Em analise.html isso nunca é verdade: o botão "Iniciar
     análise gratuita" é full-width, numa linha SEPARADA, abaixo do
     campo — não há par formando cápsula em NENHUMA largura de tela.
     Sozinho, raio ≈ altura/2 vira duas pontas em semicírculo cheio —
     um campo em formato de cápsula/pill plantado sozinho — e
     imediatamente acima de .analise-form__summary,
     um painel de --radius-md (18px), nitidamente mais "de caixa". É essa
     mistura cápsula-solta + caixa-quadrada empilhadas que lê como
     "borda estranha", não um bug de foco/inválido/overflow (checados:
     :focus-visible e :invalid só trocam border-color, box-sizing:
     border-box já evita qualquer estouro de largura). Correção: raio
     desce para --radius-md, o mesmo já usado por .analise-form__summary
     logo abaixo e por toda a família de caixas/cards da página — o
     campo passa a ler como o mesmo "vocabulário de caixa" do resto do
     formulário em vez de um componente de outra família visual. Cor/
     padding/demais propriedades continuam intactas (fora do escopo
     desta correção).

     CONSOLIDAÇÃO (colorman) — background-color/border/color/tipografia
     (inclusive ::placeholder/:focus-visible/:invalid) trazidos pra cá
     do bloco "Formulário inicial (#analise-url)" mais acima no arquivo,
     onde viviam numa regra .analise-form__input SEPARADA da de
     width/padding/border-radius abaixo. Ver comentário grande logo
     acima daquele bloco original pro bug real (fechamento acidental de
     comentário por causa de um asterisco seguido de barra dentro do
     texto, ~470 linhas antes daqui, que fazia o navegador descartar aquela regra inteira como
     seletor inválido). Independente do bug já corrigido na raiz, manter
     DUAS regras com o exato mesmo seletor .analise-form__input em
     pontos distantes do arquivo era frágil por si só — juntar tudo numa
     única regra elimina esse risco de vez. Nenhum valor mudou, só o
     local. */
  .analise-form__input {
    background-color: var(--color-surface);
    border: 1px solid var(--color-border-strong);
    color: var(--color-text-body);
    font-family: var(--font-body);
    font-weight: 400;
    font-size: var(--fs-body);
    letter-spacing: 0;
    width: 100%;
    padding: 10px 20px;
    border-radius: var(--radius-md);
  }
  .analise-form__input::placeholder {
    color: var(--color-text-muted);
    font-family: var(--font-body);
    font-weight: 400;
    font-style: normal;
  }
  .analise-form__input:focus-visible {
    border-color: var(--color-focus-ring);
  }
  .analise-form__input:not(:placeholder-shown):invalid {
    border-color: var(--color-error);
  }

  /* Painel "o que vai acontecer a partir daqui" — PEDIDO DO USUÁRIO
     ("mesma aparência dos outros cards"). Investigando: este painel não
     é um item repetido de grade (não tem irmãos .analise-form__summary
     lado a lado) nem é clicável/hoverável como unidade — é conteúdo
     estático informativo dentro do formulário, exatamente a mesma
     categoria de .aviso-analise__box/.sources-block__box/
     .planos-teaser__box/.faq-teaser__box (painel neutro de nota central),
     não a família de "card de grade" com hover-lift
     (.step-card/.processo__item/.mds__item/etc., ver bloco "Elevação de
     cards (hover)" mais abaixo) — por isso não ganha transform/box-shadow
     de hover, só o alinhamento de padding com aquele outro grupo.
     Padding igualado à MESMA fórmula que os 4 painéis acima já usam
     (--space-7, caindo pra --space-6/--space-5 em 480px) em vez do
     --space-5/--space-6 assimétrico que só este painel ainda tinha —
     era a divergência real: mesmo fundo/borda/sombra dos outros 4, mas
     padding menor e "torto" (vertical menor que horizontal), o que lia
     como uma caixa mais apertada/menos cuidada ao lado delas. Lista
     numerada mantém gap entre itens (--space-2) — já é o mesmo tratamento
     de "ritmo consistente, não espaçamento default do navegador" usado
     no resto do arquivo, não precisava mudar. */
  .analise-form__summary {
    padding: var(--space-7);
    border-radius: var(--radius-md);
  }
  @media (max-width: 480px) {
    .analise-form__summary { padding: var(--space-6) var(--space-5); }
  }
  /* REVISÃO (letterman) — handoff do colorman (ver comentário dele junto
     a .text-highlight/.text-highlight--accent, acima): este título vinha
     como <p> puro (peso 400, --fs-body, herdado do body), abaixo do piso
     "texto grande" do WCAG (≥24px regular ou ≥18,66px em peso 700/bold —
     mesmo piso já documentado em .analise-estado__title, bloco "PARTE 4"
     da paleta), por isso --color-highlight não podia ser aplicado nele
     sem furar 3:1.
     Decisão: sim, ganha tratamento de título, não fica como legenda
     discreta — este é o cabeçalho de uma lista numerada de 4 passos
     dentro do formulário, o mesmo PAPEL estrutural que .analise-estado__
     title já cumpre nos 12 estados da página (título de um bloco
     informativo dentro do mesmo fluxo de análise), só que estático em vez
     de condicional. Reaproveito a MESMA fórmula de .analise-estado__title
     em vez de inventar uma nova: --font-heading, peso 700, --fs-h3 (22px),
     --lh-heading, letter-spacing -0.005em, --color-text-heading. Isso
     resolve os dois lados do pedido: (1) o título passa a se comportar
     como título de fato — maior e mais pesado que os 4 itens de corpo
     logo abaixo dele — e (2) 22px em peso 700 cruza o piso "texto grande"
     (18,66px), então --color-highlight já fica disponível pra um futuro
     passe do colorman, se ele decidir que alguma frase aqui merece a
     mesma ressalva editorial de "não guardamos"/"não garante" acima.
     NOTA PARA O COLORMAN — não apliquei nenhum destaque de cor aqui, é
     decisão dele; mas se for aplicar, a frase mais candidata a
     ganhar .text-highlight é "fila de processamento" ou "achados e
     prioridades" no item 1/3 da lista abaixo (--color-text-heading), não
     o título em si (o título inteiro já é o "rótulo" da lista, destacar
     uma palavra dele criaria uma segunda hierarquia dentro da mesma
     linha). Só uma sugestão, sem alterar nada de cor. */
  .analise-form__summary-title {
    font-family: var(--font-heading);
    font-weight: 700;
    font-size: var(--fs-h3);
    line-height: var(--lh-heading);
    letter-spacing: -0.005em;
    color: var(--color-text-heading);
    margin: 0 0 var(--space-3);
  }
  .analise-form__summary-list {
    margin: 0;
    padding-left: 1.25em;
    display: flex;
    flex-direction: column;
    gap: var(--space-2);
  }

  /* Checkbox de consentimento — input e texto lado a lado, alinhados
     pelo topo (não centralizados no eixo vertical): o texto tem dois
     links e quebra em 2+ linhas em telas estreitas, então alinhar pelo
     topo mantém o quadrado do checkbox "ancorado" na primeira linha em
     vez de flutuar no meio do bloco de texto quando ele quebra. Tamanho
     do quadrado (20px) fixo em vez do tamanho nativo do navegador
     (normalmente ~13px, pequeno demais como alvo de toque pra um aceite
     obrigatório) — mesma lógica de área de toque generosa do resto do
     formulário. */
  .analise-form__checkbox {
    display: flex;
    align-items: flex-start;
    gap: var(--space-3);
  }
  .analise-form__checkbox input[type="checkbox"] {
    flex: none;
    width: 20px;
    height: 20px;
    margin-top: 2px;
  }

  /* Widget Turnstile — o componente real do Cloudflare renderiza como
     um iframe de ~300×65px (tamanho "normal" padrão, sem
     data-size="flexible" no HTML). Não é possível testar o widget
     renderizando aqui, então reservo o espaço mínimo compatível
     (min-height 65px) pra evitar que o resto do formulário "pule" de
     posição quando o script do Cloudflare terminar de carregar e
     desenhar o iframe por cima da div vazia. Alinhado à esquerda (mesmo
     eixo do resto da pilha), não centralizado — ele é mais um campo do
     formulário, não um elemento de destaque isolado. */
  .analise-form__turnstile {
    display: flex;
    align-items: center;
    min-height: 65px;
  }

  @media (max-width: 480px) {
    .analise-form {
      gap: var(--space-5);
    }
  }
