/* ==========================================================================
   Site institucional do Renave Total — folha PRÓPRIA (frente `site-institucional`).

   🔴 ESTA FOLHA VIVE FORA DO VITE, em `public/site-assets/`, e é isso que torna IMPOSSÍVEL — não
   improvável — a colisão com o CSS do painel. As duas nunca carregam no mesmo documento: a página
   do site é standalone e não usa `@vite`. Consequência prática: `npm run build` NÃO alcança este
   arquivo (é o que o deploy precisa saber) e nada daqui vaza para o sistema.

   🔴 NADA DE TERCEIROS: sem Bootstrap, sem jQuery, sem Google Fonts. O tema BeSmart dos exemplos
   serviu de REFERÊNCIA VISUAL e não foi copiado — a licença dele é por produto final e não há
   confirmação de que cubra o Renave Total. Pilha de fonte nativa: zero requisição, zero licença.

   As cores são as do sistema (`resources/css/app.css`), copiadas como literais porque esta folha
   não tem acesso ao `@theme` do Tailwind.
   ========================================================================== */

:root {
    --marca-50:  #f0f2fc;
    --marca-100: #e4e6f9;
    --marca-600: #5766da;
    --marca-700: #4253d5;
    --marca-900: #2a3484;
    --faixa-1: #233c4a;
    --faixa-2: #253a5a;
    --faixa-3: #2a2a46;
    --tinta: #2f394e;
    --suave: #6c757d;
    --borda: #dee2e6;
    --fundo: #f2f5f7;
    --sucesso: #1ecab8;
    --perigo: #f93b7a;

    /* 🔴 A ALTURA DO CABEÇALHO FIXO (prompt-525). Ela já existia como o número 76 repetido em
       QUATRO lugares — a altura da barra, o `scroll-padding-top`, o recuo do hero e o `inset` do
       menu no celular. ⚠️ Extraída para cá porque a compensação das páginas de texto passou a
       precisar dela: número mágico copiado quebra quando o cabeçalho mudar, e aí o título volta a
       sair cortado sem ninguém relacionar as duas coisas. 🛑 O VALOR NÃO MUDOU. */
    --altura-topo: 76px;

    /* 🔴 O VERDE DA SEÇÃO DE BENEFÍCIOS É DERIVADO DO VERDE DO LOGO, E O TOM FOI MEDIDO
       (`site-institucional-10`). O verde do próprio logo — o cluster dominante é `#008C24` — dá
       **4,40:1** contra branco: REPROVA o AA de texto normal por um fio. `--verde` é ele
       escurecido no MESMO matiz (135,4° → 135°): **7,86:1** contra branco.

       ⚠️ O TEXTO MAIS CLARO DESTA SEÇÃO É O SUBTÍTULO, A **82%** DE OPACIDADE — **5,85:1**, e é
       ele que manda. (Uma versão anterior deste comentário dizia "72%, 4,90:1": a opacidade não
       existe em regra nenhuma da folha, e o número era mais pessimista que a realidade. Medido no
       DOM renderizado, não lido daqui.) O item da lista vem a 88% (**6,49:1**).
       Nada aqui é escolha de olho. */
    --verde: #0b5f20;
    --verde-marca: #8fe9a3;   /* os ✓ da lista — 5,37:1 sobre `--verde` */

    /* Cinza escuro do bloco de contato final (11,51:1 com branco). É neutro de propósito: a faixa
       ao lado dele é a `--marca-700`, e duas cores fortes seguidas competiriam entre si. */
    --grafite: #343a40;

    --raio: 10px;
    --sombra: 0 10px 30px rgba(35, 60, 74, .10);
    --largura: 1140px;
}

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

html { scroll-behavior: smooth; scroll-padding-top: var(--altura-topo); }

body {
    margin: 0;
    background: #fff;
    color: var(--tinta);
    font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
    font-size: 17px;
    line-height: 1.65;
    -webkit-font-smoothing: antialiased;
}

img { max-width: 100%; height: auto; display: block; }
a { color: var(--marca-700); }

.envelope { width: 100%; max-width: var(--largura); margin: 0 auto; padding: 0 20px; }

.secao { padding: 72px 0; }
.secao--clara { background: var(--fundo); }
.secao--escura {
    background: linear-gradient(135deg, var(--faixa-1), var(--faixa-2) 55%, var(--faixa-3));
    color: #fff;
}
/* A cor primária da marca, atrás do formulário do topo (`site-institucional-10` §6). */
.secao--marca { background: var(--marca-700); color: #fff; }
.secao--verde { background: var(--verde); color: #fff; }
.secao--grafite { background: var(--grafite); color: #fff; }

.titulo-secao { font-size: 2rem; line-height: 1.25; margin: 0 0 8px; font-weight: 700; }
.subtitulo-secao { color: var(--suave); margin: 0 0 32px; max-width: 780px; }
.secao--escura .subtitulo-secao,
.secao--marca .subtitulo-secao,
.secao--verde .subtitulo-secao,
.secao--grafite .subtitulo-secao { color: rgba(255, 255, 255, .82); }

.secao--centrada { text-align: center; }
.secao--centrada .subtitulo-secao { margin-left: auto; margin-right: auto; }
.cabecalho-secao { margin-bottom: 40px; }

/* Os dois botões no topo da seção de diferenciais (`site-institucional-12` §2) — onde o `.docx`
   os coloca e onde a referência põe o dela. Envolvem para não espremer no celular. */
.acoes-topo { display: flex; flex-wrap: wrap; gap: 14px; justify-content: center; margin: 0 0 34px; }

/* 🔴 A ALTURA É A DA REFERÊNCIA, E ELA FOI MEDIDA NO FONTE DO WIDGET OFICIAL, não estimada de
   olho (`site-institucional-13` §2). O botão de lá é o "Message us" do WhatsApp em `size=compact`:
   `padding: 8px 13px`, ícone de 24px, `line-height: 0`, borda de 1px — **42px** de altura. O nosso
   `.botao` genérico dá 47px, e era essa a diferença que se via.

   🔴 O ESCOPO É `.acoes-topo`, DE PROPÓSITO: `.botao` também veste o CTA do topo fixo, os do
   formulário e os do rodapé — mexer nele encolheria a página inteira, que é justamente o que a
   rodada não pode fazer. ⚠️ E os DOIS botões desta seção entram na regra, não só o verde: o §2
   pede que fiquem da mesma altura, lado a lado.

   ⚠️ `min-height`, não `height`: numa tela estreita o texto do CTA quebra em duas linhas, e uma
   altura fixa o cortaria. Em desktop os dois medem 42px — é o que o teste de comparação afere. */
.acoes-topo .botao { min-height: 42px; padding: 8px 20px; font-size: .92rem; }

/* ------------------------------------------- marcador linha–estrela–linha */

/* 🔴 COPIADO DA REFERÊNCIA, NÃO REDESENHADO (`site-institucional-12` §4). A receita é a do
   `.separator_wrapper` da landing do Aviso de Venda, medida no CSS dela: dois pseudo-elementos de
   **60×1px** ladeando a estrela, `inline-block` + `vertical-align: middle`. ⚠️ O que muda é só a
   COR — lá é o azul-piscina `#34b1c4`, aqui é a cor da marca, porque a estrela é um elemento de
   identidade e copiar a cor do outro produto seria copiar a marca dele.

   ⚠️ A estrela é SVG inline (não temos fonte de ícone, e não vamos carregar uma por um glifo). */
.separador { display: flex; align-items: center; justify-content: center; gap: 14px; margin: 0 0 18px; }
.separador::before,
.separador::after { content: ""; width: 60px; height: 1px; background: var(--marca-600); flex: none; }
.separador svg { display: block; color: var(--marca-600); flex: none; }
.secao--escura .separador::before, .secao--escura .separador::after,
.secao--grafite .separador::before, .secao--grafite .separador::after { background: rgba(255, 255, 255, .45); }
.secao--escura .separador svg, .secao--grafite .separador svg { color: #fff; }

/* ------------------------------------------------ faixa de números (§1) */

/* 🔴 O ÍCONE É O DA REFERÊNCIA, RECORTADO DO PNG DELA (`site-institucional-13` §1) — o que
   REVOGA os desenhos de traço simples que a rodada 12 pôs aqui. Na referência esta faixa são TRÊS
   PNGs (`APR_imagens_site_aviso_de_venda_16/17/18.png`, 465×197) com o ícone à esquerda e o texto
   CRAVADO NO PIXEL à direita. Veio só a metade da esquerda: o texto continua em HTML, porque
   dizer em imagem não se corrige, não se traduz e não se lê em leitor de tela — e estes dois
   números são justamente os que o Fabricio ainda vai conferir.

   ⚠️ ESTES TRÊS NÃO USAM `currentColor`, ao contrário dos outros ícones da página: são raster, e
   o cinza é o do pixel original — a cor de lá, sem retoque. Isso amarra a faixa a um fundo CLARO
   (`--fundo`, #f2f5f7): num fundo tingido o cinza sumiria, e não haveria como corrigi-lo pelo CSS. */
.faixa-numeros { background: var(--fundo); padding: 34px 0; }
.faixa-numeros__grade { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
.faixa-numeros__item { display: flex; align-items: center; gap: 18px; justify-content: center; }
.faixa-numeros__icone { flex: none; }
.faixa-numeros__icone img { display: block; }
.faixa-numeros__texto { color: #9aa4ad; font-size: .95rem; line-height: 1.35; }
.faixa-numeros__forte { display: block; color: #7d868f; font-weight: 700; font-size: 1.28rem; }

/* --------------------------------- blocos centrados com ícone preenchido (§2) */

/* 🔴 COPIADO DA REFERÊNCIA: quadrado PREENCHIDO na cor da marca, cantos arredondados, glifo branco
   dentro, centralizado — e o título e o texto ABAIXO dele. ⚠️ SEM CARD: sem fundo branco, sem
   borda, sem sombra. Era exatamente isso que a rodada anterior tinha reinterpretado como cartão. */
.blocos { display: grid; grid-template-columns: repeat(3, 1fr); gap: 40px; text-align: center; }
/* ⚠️ A CAIXA É A DE LÁ, MEDIDA NO CSS DA REFERÊNCIA (`.features-icon`): glifo de 42px com
   `padding: 18px 22px` e `border-radius: 8px` — 86×78, não o quadrado de 84×84 que eu tinha
   estimado. A COR continua sendo a da marca, e não o azul-piscina de lá: a cor é identidade do
   outro produto, e o §1 da rodada 13 fala dos ÍCONES (ver o cabeçalho do partial). */
.bloco__icone {
    padding: 18px 22px; border-radius: 8px; background: var(--marca-600); color: #fff;
    display: inline-flex; align-items: center; justify-content: center; margin: 0 0 25px;
}
.bloco__titulo { font-size: 1.12rem; font-weight: 700; margin: 0 0 10px; color: var(--tinta); }
.bloco__texto { margin: 0; color: var(--suave); font-size: .96rem; }

/* --------------------------- os sete blocos: ícone à ESQUERDA, texto à direita (§3) */

/* 🔴 COPIADO DA REFERÊNCIA (`.services-item`): ícone à esquerda em posição absoluta, texto com
   recuo à direita, fileiras de três, SEM CARD. A medida do recuo é a de lá (`padding-left: 60px`
   sobre um ícone de 70px de caixa). Hoje eram cartões brancos com o ícone em cima — errado. */
.servicos { display: grid; grid-template-columns: repeat(3, 1fr); gap: 40px 30px; text-align: left; }
/* ⚠️ AS TRÊS MEDIDAS SÃO AS DE LÁ, agora que o ícone também é (`site-institucional-13` §1): caixa
   de 70px, glifo de 48px e recuo de 60px. Os 62px que estavam aqui eram ajuste ao ícone de 30px
   que eu tinha desenhado — com o desenho real, o número da referência é o que fecha. */
.servico { position: relative; padding-left: 60px; }
.servico__icone {
    position: absolute; left: 0; top: 5px; width: 70px; height: 70px;
    display: flex; align-items: center; justify-content: center; color: var(--marca-600);
}
.servico__titulo { font-size: 1.05rem; font-weight: 700; margin: 0 0 8px; color: var(--tinta); }
.servico__texto { margin: 0; color: var(--suave); font-size: .95rem; }

/* ------------------------------------------- revelação progressiva (§3) */

/* 🔴🔴 O ESTADO ESCONDIDO SÓ EXISTE DEPOIS QUE O JS ASSUME — e essa inversão é o ponto.
   A referência usa WOW.js, que manda `opacity: 0` na FOLHA e conta com o script para desfazer:
   sem JS, o conteúdo fica invisível PARA SEMPRE. Aqui é ao contrário — os blocos nascem visíveis,
   e é o `js-revelar` (posto pelo próprio script, na inicialização) que liga o esconde-e-revela.
   Sem JS, nada some. É a mesma regra do carrossel (p476): o realce nunca vira requisito.

   ⚠️ `prefers-reduced-motion` desliga a animação inteira — e vale para ESTA seção e para o
   carrossel, não só para ele: um fade disparado por rolagem é precisamente o que essa preferência
   existe para calar. */
.js-revelar .servico { opacity: 0; transform: translateY(14px); transition: opacity .5s ease, transform .5s ease; }
.js-revelar .servico.revelado { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
    .js-revelar .servico { opacity: 1; transform: none; transition: none; }
    .carrossel__trilho { scroll-behavior: auto; }
}

/* -------------------------------------------------------------- topo fixo */

.topo {
    position: fixed; inset: 0 0 auto 0; z-index: 30;
    background: rgba(255, 255, 255, .96);
    border-bottom: 1px solid var(--borda);
    backdrop-filter: blur(6px);
}
.topo__linha { display: flex; align-items: center; gap: 16px; height: var(--altura-topo); }
.topo__marca { display: flex; align-items: center; gap: 10px; text-decoration: none; color: var(--tinta); font-weight: 700; }
.topo__marca img { height: 38px; width: auto; }
.topo__menu { margin-left: auto; display: flex; align-items: center; gap: 22px; }
.topo__menu a { color: var(--tinta); text-decoration: none; font-size: .95rem; font-weight: 500; }
.topo__menu a:hover { color: var(--marca-700); }

/* 🔴 O BOTÃO DENTRO DO MENU PRECISA VENCER A COR DOS LINKS DO MENU — medido por CDP, não por olho.
   `.topo__menu a` (0,2,0) tem especificidade MAIOR que `.botao--principal` (0,1,0), então o CTA do
   topo herdava a cor de link: fundo azul com texto `--tinta` dava contraste **2.38** em repouso, e
   no `:hover` o texto virava `--marca-700` — a MESMA cor do fundo, contraste **1.00**: o texto
   sumia por completo. Estas duas linhas são o conserto, e a especificidade delas é deliberada. */
.topo__menu a.botao--principal,
.topo__menu a.botao--principal:hover { color: #fff; }
.topo__menu a.botao--principal:hover { background: var(--marca-700); }
.topo__alternar {
    display: none; margin-left: auto; background: none; border: 1px solid var(--borda);
    border-radius: 8px; padding: 8px 10px; cursor: pointer; color: var(--tinta);
}

/* ------------------------------------------------------------------ botões */

.botao {
    display: inline-flex; align-items: center; justify-content: center; gap: 8px;
    padding: 13px 24px; border-radius: var(--raio); border: 1px solid transparent;
    font-weight: 600; font-size: .98rem; text-decoration: none; cursor: pointer;
    transition: background-color .15s ease, color .15s ease, border-color .15s ease;
}
.botao--principal { background: var(--marca-600); color: #fff; }
.botao--principal:hover { background: var(--marca-700); }
.botao--claro { background: #fff; color: var(--marca-700); }
.botao--claro:hover { background: var(--marca-50); }
.botao--contorno { border-color: currentColor; color: inherit; background: transparent; }
/* 🔴 O VERDE ESCURECEU PARA O TEXTO PODER SER BRANCO (`site-institucional-13` §2), e isto REVOGA o
   texto escuro que estava aqui. A referência usa o widget oficial "Message us" do WhatsApp, que
   pinta branco sobre `#25d366`: **1,98:1** — reprova AA e é pouco legível de verdade, não por
   formalidade. Copiar aquilo seria copiar um defeito.

   ⚠️ O TOM NÃO FOI ESCOLHIDO NO OLHO: é o próprio `#25d366` escurecido no MESMO matiz (142,4°) e
   na mesma saturação (0,702) — só a luminosidade desce. Continua lendo-se como o verde do
   WhatsApp, e o branco passa:

     repouso  #15793b  →  5,48:1 com #fff
     hover    #115f2e  →  7,78:1 com #fff

   ⚠️ O alvo é 4,5:1, não 3:1: o texto é 15px/600, que NÃO é "texto grande" pela régua do WCAG.
   ⚠️ Existe uma saída oficial (o widget aceita `color="teal"`, `#075E54`, 7,67:1), mas ela troca o
   verde por um azul-esverdeado escuro — o §2 pede escurecer o verde, mantendo a cara de WhatsApp. */
.botao--zap { background: #15793b; color: #fff; }
.botao--zap:hover { background: #115f2e; color: #fff; }
.botao--bloco { width: 100%; }

/* -------------------------------------------------------------------- hero */

.hero {
    margin-top: var(--altura-topo); position: relative; color: #fff; overflow: hidden;
    background: #1d2733 url('../img/hero.webp') right center / cover no-repeat;
}
.hero::after {
    content: ""; position: absolute; inset: 0;
    background: linear-gradient(100deg, rgba(29, 39, 51, .96) 42%, rgba(29, 39, 51, .35) 72%, rgba(29, 39, 51, .1));
}
.hero__conteudo { position: relative; z-index: 1; max-width: 620px; padding: 96px 0 104px; }
.hero__titulo { font-size: 2.6rem; line-height: 1.15; font-weight: 800; margin: 0 0 18px; }
.hero__texto { color: rgba(255, 255, 255, .86); margin: 0 0 14px; }
.hero__numero { font-weight: 700; color: #fff; }
.hero__acoes { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 28px; }

/* ------------------------------------------------------------- duas colunas */

.duas-colunas { display: grid; grid-template-columns: 1fr 1fr; gap: 48px; align-items: center; }
.duas-colunas img { border-radius: var(--raio); box-shadow: var(--sombra); }

/* --------------------------------------------------------- características */

.cartoes { display: grid; grid-template-columns: repeat(3, 1fr); gap: 22px; }
.cartao {
    background: #fff; border: 1px solid var(--borda); border-radius: var(--raio);
    padding: 26px 24px; box-shadow: var(--sombra);
}
.cartao__icone {
    width: 46px; height: 46px; border-radius: 12px; background: var(--marca-50); color: var(--marca-700);
    display: flex; align-items: center; justify-content: center; margin-bottom: 14px;
}
.cartao__titulo { font-size: 1.02rem; font-weight: 700; margin: 0 0 6px; text-transform: uppercase; letter-spacing: .02em; }
.cartao__texto { margin: 0; color: var(--suave); font-size: .96rem; }

/* --------------------------------------------------------------- benefícios */

.beneficios { list-style: none; margin: 24px 0 0; padding: 0; display: grid; gap: 16px; }
.beneficios li { display: flex; gap: 12px; align-items: flex-start; }
.beneficios__marca { color: var(--verde-marca); font-weight: 700; flex: none; line-height: 1.65; }
.beneficios strong { color: #fff; }
.beneficios span:last-child { color: rgba(255, 255, 255, .88); }

/* ------------------------------------------------------------- depoimentos */

/* 🔴 O CARROSSEL FUNCIONA SEM JS, E ISSO É REQUISITO (p476). O trilho é um contêiner com
   `overflow-x: auto` + `scroll-snap`: arrastar já navega, sem uma linha de script. Os pontos são
   ÂNCORAS (`<a href="#depoimento-N">`), não `<button>`: o navegador rola o contêiner até o alvo
   sozinho. O JS só acrescenta o rolar suave e o ponto aceso — se ele não carregar, nada fica mudo. */
.carrossel { position: relative; }
.carrossel__trilho {
    display: flex; gap: 22px; overflow-x: auto; scroll-snap-type: x mandatory;
    scroll-behavior: smooth; scrollbar-width: none; padding-bottom: 4px;
}
.carrossel__trilho::-webkit-scrollbar { display: none; }
.carrossel__item { flex: 0 0 100%; scroll-snap-align: center; }

.carrossel__pontos { display: flex; gap: 10px; justify-content: center; margin-top: 28px; }
.carrossel__ponto {
    width: 14px; height: 14px; border-radius: 50%; padding: 0; cursor: pointer;
    background: rgba(255, 255, 255, .32); border: 1px solid rgba(255, 255, 255, .5);
    display: block; text-indent: -9999px; overflow: hidden; text-decoration: none;
    transition: background-color .15s ease, transform .15s ease;
}
.carrossel__ponto:hover { background: rgba(255, 255, 255, .6); }
.carrossel__ponto[aria-current="true"] { background: #fff; transform: scale(1.15); }
.carrossel__ponto:focus-visible { outline: 2px solid #fff; outline-offset: 3px; }

.depoimento {
    background: rgba(255, 255, 255, .06); border: 1px solid rgba(255, 255, 255, .14);
    border-radius: var(--raio); padding: 28px;
    display: grid; grid-template-columns: 230px 1fr; gap: 28px; align-items: center;
    min-height: 220px;
}
.depoimento__autor { text-align: center; }
.depoimento__autor img {
    width: 96px; height: 96px; border-radius: 50%; object-fit: cover;
    background: #fff; margin: 0 auto 14px; border: 3px solid rgba(255, 255, 255, .55);
}
.depoimento__nome { font-weight: 700; font-size: .95rem; text-transform: uppercase; letter-spacing: .02em; }
.depoimento__cargo { color: rgba(255, 255, 255, .78); font-size: .86rem; font-style: italic; }
.depoimento__texto {
    margin: 0; color: rgba(255, 255, 255, .92); font-style: italic; font-size: 1.05rem;
    border-left: 1px solid rgba(255, 255, 255, .22); padding-left: 28px;
}

/* --------------------------------------------------------------------- FAQ */

/* ⚠️ `<details>` abre e fecha sem JS. O `list-style: none` sozinho não basta: o Safari só obedece
   ao `::-webkit-details-marker` (armadilha registrada em `front-end.md`). */
.faq { display: grid; gap: 12px; max-width: 860px; margin: 0 auto; }
.faq__item { background: #fff; border: 1px solid var(--borda); border-radius: var(--raio); }
.faq__item[open] { box-shadow: var(--sombra); }
.faq__pergunta {
    list-style: none; cursor: pointer; padding: 18px 22px; font-weight: 700;
    display: flex; align-items: center; justify-content: space-between; gap: 16px;
}
.faq__pergunta::-webkit-details-marker { display: none; }
.faq__pergunta::after {
    content: "+"; font-size: 1.5rem; line-height: 1; color: var(--marca-700); flex: none;
    font-weight: 400;
}
.faq__item[open] .faq__pergunta::after { content: "–"; }
.faq__pergunta:hover { color: var(--marca-700); }
.faq__pergunta:focus-visible { outline: 2px solid var(--marca-600); outline-offset: -2px; }
.faq__resposta { padding: 0 22px 20px; margin: 0; color: var(--suave); }
.faq__resposta p { margin: 0 0 10px; }
.faq__resposta ul { margin: 10px 0 0; padding-left: 20px; }
.faq__resposta li { margin-bottom: 6px; }

/* ------------------------------------------------------------- formulários */

.formulario { background: #fff; border-radius: var(--raio); box-shadow: var(--sombra); padding: 28px; }
/* O cartão do formulário é branco em qualquer fundo — a cor da seção não pode vazar para dentro
   dele, ou os rótulos herdariam o branco do bloco colorido e sumiriam. */
.secao--escura .formulario,
.secao--marca .formulario,
.secao--grafite .formulario { color: var(--tinta); }
.campo { margin-bottom: 14px; }
.campo label { display: block; font-size: .88rem; font-weight: 600; margin-bottom: 6px; }
.campo input, .campo textarea {
    width: 100%; padding: 12px 14px; border: 1px solid var(--borda); border-radius: 8px;
    font: inherit; font-size: .96rem; color: var(--tinta); background: #fff;
}
.campo input:focus, .campo textarea:focus { outline: 2px solid var(--marca-600); outline-offset: 1px; border-color: var(--marca-600); }
.campo textarea { min-height: 110px; resize: vertical; }
.campo__erro { display: block; margin-top: 6px; color: var(--perigo); font-size: .85rem; font-weight: 600; }
.campo--invalido input, .campo--invalido textarea { border-color: var(--perigo); }

.aviso {
    border-radius: var(--raio); padding: 14px 16px; margin-bottom: 20px; font-size: .95rem;
    border: 1px solid transparent;
}
.aviso--ok { background: #e9fbf8; border-color: var(--sucesso); color: #10635a; }
.aviso--erro { background: #fdeaf1; border-color: var(--perigo); color: #8c1338; }

.nota-form { font-size: .84rem; color: var(--suave); margin: 12px 0 0; }

/* ------------------------------------------------------------------ rodapé */

.rodape { background: #1b2430; color: rgba(255, 255, 255, .78); padding: 56px 0 0; }
.rodape a { color: rgba(255, 255, 255, .78); text-decoration: none; }
.rodape a:hover { color: #fff; }
.rodape__grade { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 34px; }
.rodape__titulo { color: #fff; font-size: .92rem; font-weight: 700; text-transform: uppercase; letter-spacing: .06em; margin: 0 0 14px; }
.rodape__lista { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; font-size: .94rem; }
.rodape__marca img { height: 40px; margin-bottom: 16px; }
.rodape__texto { font-size: .94rem; margin: 0; max-width: 420px; }
.rodape__barra {
    margin-top: 44px; border-top: 1px solid rgba(255, 255, 255, .12); padding: 20px 0;
    font-size: .86rem; display: flex; flex-wrap: wrap; gap: 8px 20px; justify-content: space-between;
}

/* ------------------------------------------------------- WhatsApp flutuante */

.zap-flutuante {
    position: fixed; right: 20px; bottom: 20px; z-index: 40;
    width: 58px; height: 58px; border-radius: 50%; background: #25d366; color: #fff;
    display: flex; align-items: center; justify-content: center;
    box-shadow: 0 8px 20px rgba(0, 0, 0, .25);
}

/* ---------------------------------------------------------------- responsivo */

@media (max-width: 900px) {
    .duas-colunas, .cartoes, .blocos { grid-template-columns: 1fr; }
    /* Os sete blocos e a faixa de números empilham; o ícone continua à esquerda no serviço,
       porque é o recuo que dá a leitura de lista — empilhá-lo por cima viraria o cartão que
       esta rodada acabou de desfazer. */
    .servicos { grid-template-columns: 1fr; gap: 28px; }
    .faixa-numeros__grade { grid-template-columns: 1fr; gap: 22px; }
    .faixa-numeros__item { justify-content: flex-start; }
    /* No celular o depoimento empilha: logo em cima, citação embaixo — a barra vertical que os
       separa vira horizontal, senão sobra um traço solto na lateral. */
    .depoimento { grid-template-columns: 1fr; gap: 18px; min-height: 0; }
    .depoimento__texto { border-left: 0; border-top: 1px solid rgba(255, 255, 255, .22); padding: 18px 0 0; font-size: 1rem; }
    .rodape__grade { grid-template-columns: 1fr 1fr; }
    .hero { background-position: 72% center; }
    .hero__conteudo { padding: 72px 0; max-width: none; }
    .hero__titulo { font-size: 2.05rem; }
    .topo__alternar { display: inline-flex; }
    .topo__menu {
        display: none; position: absolute; inset: var(--altura-topo) 0 auto 0; flex-direction: column;
        align-items: stretch; gap: 0; background: #fff; border-bottom: 1px solid var(--borda);
        padding: 8px 20px 16px;
    }
    .topo__menu[data-aberto="1"] { display: flex; }
    .topo__menu a { padding: 12px 0; border-bottom: 1px solid var(--borda); }
    .topo__menu .botao { margin-top: 12px; }
}

@media (max-width: 560px) {
    body { font-size: 16px; }
    .secao { padding: 52px 0; }
    .rodape__grade { grid-template-columns: 1fr; }
    .hero__titulo { font-size: 1.8rem; }
}

/* ─────────────────────────────────────────────────────────────────────────────
   AS PÁGINAS DE TEXTO E A TABELA DE COMPARAÇÃO (prompt-515)
   ───────────────────────────────────────────────────────────────────────────── */

/* 🔴🔴 O ESPAÇO QUE O CABEÇALHO FIXO OCUPA (prompt-525) — e ele FALTAVA.
   `.topo` é `position: fixed` e mede 77px (76 + 1px de borda); as páginas de texto começavam no
   `padding` da `.secao` — 72px no desktop e **52px** abaixo de 560px —, então o `<h1>` nascia
   DEBAIXO da barra. 🛑 Medido em produção, antes do conserto: **25px do título cobertos a 380 e a
   414px**, e **5px no desktop** — o defeito existia nas duas pontas, e no desktop passava
   despercebido por sobrar espaço.

   ⚠️ A HOME NÃO ENTRA AQUI, e é por isso que a compensação não vai na `.secao`: lá quem reserva o
   espaço é o `.hero` (`margin-top`), e somar as duas empurraria a página inteira.
   🔴 A classe está no `<main>` da `_moldura`, que é o lugar único das quatro páginas de texto. */
.pagina-de-texto { padding-top: var(--altura-topo); }

/* O envelope de leitura: mais estreito que o da home, porque texto corrido longo
   em coluna larga cansa. ~70 caracteres por linha. */
.envelope--texto { max-width: 820px; }

.envelope--texto h2 {
    margin: 32px 0 12px;
    font-size: 1.25rem;
    font-weight: 700;
    color: var(--tinta);
}

.envelope--texto p { margin: 0 0 14px; line-height: 1.7; }

.envelope--texto a { color: var(--verde); text-decoration: underline; }

.texto-legal { line-height: 1.7; }
.texto-legal--destaque { font-weight: 600; margin-bottom: 24px; }
.texto-legal--assinatura { margin-top: 32px; font-style: italic; }

.lista-legal { margin: 0 0 14px; padding-left: 22px; }
.lista-legal li { margin-bottom: 10px; line-height: 1.7; }

/* A placa identificadora: fundo próprio claro, então sem moldura nossa por cima. */
.imagem-legal { display: block; max-width: 100%; height: auto; margin: 8px 0; }


/* ─────────────────────────────────────────────────────────────────────────────
   COMPARE E ECONOMIZE (prompt-515) — a tabela que era imagem
   ───────────────────────────────────────────────────────────────────────────── */

.secao--verde-escuro { background: #01491F; color: #fff; }   /* medido na arte (p518) */

/* ═══ A SEÇÃO "COMPARE E ECONOMIZE" ═══════════════════════════════════════════════════════════
   🔴 AS CORES SÃO MEDIDAS NA ARTE DO FABRICIO, não estimadas (prompt-518). O que cada uma é, e
   onde foi amostrada, está na tabela do relatório daquela rodada. Trocar um destes valores é
   afastar a página da referência — se for preciso, MEDIR de novo, não chutar. */
.compare {
    --compare-fundo:        #01491F;   /* o fundo da seção, fora do painel */
    --compare-painel:       #074F28;   /* o corpo da tabela */
    --compare-cabecalho:    #013D1B;   /* a faixa do cabeçalho, mais escura */
    --compare-linha:        #2F8353;   /* a borda do painel e os divisores */
    --compare-verde:        #5BF15F;   /* o verde do texto de destaque */
    --compare-verde-suave:  #4FCE54;   /* o verde de apoio ("120 dias") */
    --compare-texto:        #FFFFFF;

    display: grid; grid-template-columns: 420px 1fr; gap: 38px; align-items: center;
}

.compare__selo {
    display: inline-flex; align-items: center; gap: 9px;
    background: rgba(255,255,255,.12); color: var(--compare-verde);
    border-radius: 999px; padding: 9px 18px;
    font-size: .8rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
}

.compare__titulo { margin: 20px 0 0; font-size: 2.05rem; line-height: 1.15; font-weight: 800; color: var(--compare-texto); }
.compare__titulo em { font-style: normal; color: var(--compare-verde); }
.compare__texto { margin: 14px 0 0; color: rgba(255,255,255,.88); line-height: 1.6; }

/* A marca: globo colorido + sobretítulo + nome em branco — a composição da arte. */
.compare__marca { display: flex; align-items: center; gap: 14px; margin: 28px 0 0; }
.compare__marca-globo { display: block; width: 84px; height: 84px; }
.compare__marca-texto { display: block; }
.compare__marca-sobre {
    display: block; color: var(--compare-texto);
    font-size: .78rem; font-weight: 600; letter-spacing: .16em; text-transform: uppercase;
    margin-bottom: 4px;
}
.compare__marca-nome { display: block; width: 162px; height: auto; }

.compare__economia {
    display: flex; align-items: flex-start; gap: 16px;
    margin-top: 26px; padding: 18px 20px;
    border: 1px solid rgba(255,255,255,.18); border-radius: 16px;
}
/* O porquinho vai dentro de um anel, como na arte. */
.compare__economia-icone {
    flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center;
    width: 76px; height: 76px; border-radius: 999px;
    border: 1px solid rgba(255,255,255,.28); color: rgba(255,255,255,.92);
}
.compare__economia-valor { display: block; font-size: 2.15rem; font-weight: 800; color: var(--compare-verde); line-height: 1; }
.compare__economia-rotulo { display: block; margin-top: 5px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; font-size: .84rem; }
.compare__economia-nota { margin: 10px 0 0; font-size: .82rem; color: rgba(255,255,255,.78); line-height: 1.5; }
.compare__economia-nota strong { color: var(--compare-verde-suave); font-weight: 600; }

/* ─── O PAINEL DA TABELA ─────────────────────────────────────────────────────────────────────
   🔴 O `overflow: hidden` é load-bearing: sem ele a faixa escura do cabeçalho vaza pelos cantos
   arredondados e a borda do painel aparece cortada nos quatro vértices. */
.compare__painel {
    background: var(--compare-painel);
    border: 1px solid var(--compare-linha); border-radius: 18px; overflow: hidden;
}

.compare__tabela { width: 100%; border-collapse: collapse; font-size: .95rem; }
.compare__tabela th, .compare__tabela td { padding: 15px 12px; text-align: center; }
/* 🔴 O valor NÃO QUEBRA: sem isto o «R$ 493,08» do total parte em duas linhas quando a coluna
   aperta, e a linha do total fica com o dobro da altura das outras. */
.compare__tabela td { white-space: nowrap; }

/* A faixa do cabeçalho e os divisores VERTICAIS entre as colunas. */
.compare__tabela thead th {
    background: var(--compare-cabecalho);
    font-size: .78rem; letter-spacing: .06em; text-transform: uppercase; font-weight: 700;
    /* ⚠️ «COM RENAVE» quebrava em duas linhas e desalinhava a faixa — na arte é uma linha só. */
    white-space: nowrap;
}
.compare__tabela thead th small { display: block; font-weight: 600; font-size: .68rem; letter-spacing: .05em; opacity: .85; }
.compare__tabela th + th, .compare__tabela td + td,
.compare__tabela tbody th + td, .compare__tabela tfoot th + td { border-left: 1px solid var(--compare-linha); }
/* ⚠️ A célula da seta não tem divisor à esquerda: na arte ela pertence à coluna «Economia». */
.compare__tabela .compare__sinal { border-left: 0; }

.compare__tabela tbody tr th, .compare__tabela tbody tr td,
.compare__tabela tfoot th, .compare__tabela tfoot td { border-top: 1px solid var(--compare-linha); }

/* Os rótulos das linhas: caixa alta, com o ícone à esquerda. */
.compare__tabela tbody th, .compare__tabela tfoot th {
    text-align: left; font-weight: 600; text-transform: uppercase; letter-spacing: .02em;
    display: flex; align-items: center; gap: 12px;
}
.compare__icone { display: inline-flex; width: 26px; flex: 0 0 26px; justify-content: center; color: var(--compare-verde); }
.compare__icone img { display: block; }

/* O «R$» é menor e mais leve que o número — como na arte, nas quatro colunas. */
.compare__tabela td i { font-style: normal; font-size: .85em; font-weight: 400; opacity: .95; }

.compare__com { color: var(--compare-verde); font-weight: 700; }
.compare__tabela td.compare__com { font-weight: 700; }
.compare__eco { white-space: nowrap; }
.compare__eco--ganho { color: var(--compare-verde); font-weight: 700; }

/* A seta em célula própria, colada à direita — e o travessão ocupa a mesma posição. */
.compare__sinal { width: 46px; padding-left: 0; padding-right: 18px; text-align: right; color: var(--compare-verde); }
.compare__sinal svg { display: inline-block; vertical-align: middle; }
.compare__traco { color: var(--compare-texto); font-size: 1.1rem; }

/* O TOTAL: maior e mais forte. ⚠️ SEM faixa de fundo própria — medido na arte, o fundo dele é o
   mesmo das outras linhas (#074F27 contra #074F28). O que o destaca é o corpo do texto. */
.compare__tabela tfoot th, .compare__tabela tfoot td { font-weight: 800; font-size: 1.15rem; padding-top: 20px; padding-bottom: 20px; }
.compare__tabela tfoot th { font-size: 1.05rem; }

.compare__nota { display: flex; align-items: center; gap: 9px; margin: 16px 0 0; font-size: .82rem; color: rgba(255,255,255,.78); }
.compare__nota-icone { flex: 0 0 auto; display: inline-flex; color: var(--compare-verde); }

/* Só para leitor de tela — a legenda da tabela. */
.sr-apenas {
    position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
    overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}

@media (max-width: 900px) {
    .compare { grid-template-columns: 1fr; gap: 28px; }
}

/* 🔴 NO CELULAR A TABELA EMPILHA — e isso é o requisito, não enfeite: a decisão do Geraldo exige
   que ela seja legível SEM deslizar. Cada linha vira um bloco, e o `data-rotulo` de cada célula
   passa a ser o cabeçalho dela (o `<thead>` some, porque um cabeçalho de quatro colunas não tem
   onde caber). */
@media (max-width: 680px) {
    .compare__tabela thead { display: none; }
    .compare__tabela, .compare__tabela tbody, .compare__tabela tfoot,
    .compare__tabela tr, .compare__tabela th, .compare__tabela td { display: block; width: 100%; }
    .compare__painel { border: 0; background: transparent; }
    .compare__tabela tr {
        background: var(--compare-painel);
        border: 1px solid var(--compare-linha); border-radius: 14px;
        padding: 12px 14px; margin-bottom: 12px;
    }
    .compare__tabela tbody th, .compare__tabela tfoot th {
        border: 0; padding: 0 0 10px; font-size: 1rem;
    }
    .compare__tabela tbody tr th, .compare__tabela tbody tr td,
    .compare__tabela tfoot th, .compare__tabela tfoot td { border-top: 0; }
    .compare__tabela th + th, .compare__tabela td + td,
    .compare__tabela tbody th + td, .compare__tabela tfoot th + td { border-left: 0; }
    /* 🔴 `flex-end` + `margin-right:auto` no rótulo, NUNCA `space-between`: a célula tem TRÊS
       filhos (o rótulo, o «R$» e o número), e o `space-between` afastaria o cifrão do valor,
       jogando-o para o meio da linha. */
    .compare__tabela td {
        display: flex; justify-content: flex-end; align-items: baseline; gap: 5px;
        border: 0; padding: 6px 0; text-align: right;
    }
    .compare__tabela td::before {
        content: attr(data-rotulo); margin-right: auto;
        font-size: .78rem; text-transform: uppercase; letter-spacing: .04em;
        color: rgba(255,255,255,.7); text-align: left;
    }
    /* O total no estreito é um bloco como os outros — sem a folga que ele tem na tabela. */
    .compare__tabela tfoot td { padding-top: 6px; padding-bottom: 6px; }
    /* ⚠️ A seta/travessão não empilha: no estreito ela não tem rótulo e viraria uma linha órfã. */
    .compare__tabela .compare__sinal { display: none; }
    .compare__tabela tfoot td { font-size: 1.05rem; }
    .compare__titulo { font-size: 1.6rem; }
    .compare__marca-globo { width: 64px; height: 64px; }
}
}
