/* ============================================================
   TOKENS
   Paleta da campanha, alinhada com a LP e com o criativo.
   A paleta institucional está congelada até a decisão do nome,
   ver 03-conteudo-marca/MEMORY.md
   ============================================================ */
:root{
  --preto:#020202;
  --preto-0:#000000;
  --preto-1:#070708;
  --card:#131315;
  --card-alto:#1A1A1D;
  --linha:rgba(255,255,255,.08);
  --linha-forte:rgba(255,255,255,.16);
  --txt:#B9B9BC;
  /* Contraste do texto fraco: subido de #75757A para #8E8E95.
     (era o A1 do relatório de QA de 05/08, em historico-05ago) Mede 5.34:1 no pior fundo usado
     (--card-alto #1A1A1D) e 6.45:1 sobre preto puro, acima do mínimo AA de 4.5:1. */
  --txt-fraco:#8E8E95;
  /* Cor do texto de placeholder dos campos, que só aparece sobre o fundo dos
     campos, que é --preto-0 (#000000).
     (era o A1 do relatório de QA de 06/08) Era #48484D solto no CSS, que media
     2.31:1 e ficava abaixo do mínimo AA de 4.5:1. #7A7A82 mede 4.93:1 sobre
     preto puro, com folga acima do mínimo, e continua abaixo do --txt-fraco
     (6.45:1) e do texto digitado, que é branco. A hierarquia de leitura fica
     texto digitado > dica > placeholder, que é a ordem certa: o placeholder é
     exemplo, não conteúdo.
     Virou token porque cor de texto é decisão de sistema, e valor solto no meio
     do CSS é o que ninguém revisa quando a paleta muda (era também o B4). */
  --txt-placeholder:#7A7A82;
  --txt-forte:#FFFFFF;
  /* Cores de partida do preenchimento palavra a palavra.
     (era o A2 do relatório de QA de 05/08, em historico-05ago)
     Título é texto grande, mínimo 3:1. Lead é texto normal, mínimo 4.5:1. */
  --split-ini-titulo:#6E6E74;
  --split-ini-lead:#808088;
  --claro:#D9D9DC;
  --azul:#1877F2;
  --azul-claro:#4DA3FF;
  --azul-fraco:rgba(24,119,242,.14);
  --ok:#3DDC97;
  --erro:#FF6B6B;

  --r-sm:12px; --r-md:20px; --r-lg:32px; --r-pill:100px; --r-painel:72px;
  --sh-halo:0 0 60px rgba(255,255,255,.10);
  --ease:cubic-bezier(.22,1,.36,1);
  --d-micro:150ms; --d-normal:300ms; --d-macro:600ms;
  --wrap:1160px;
  /* Altura ocupada pela barra fixa a partir do topo da janela.
     Conta: header top:14px, mais o .nav-pill com 6px de preenchimento em cima
     e embaixo, mais 9px em cada lado do link e cerca de 20px de linha, mais os
     16px que o header::before estende para baixo. Fecha em torno de 80px.
     Em telas de até 900px o .nav-pill some e quem manda é a .marca, com 44px de
     alvo mínimo, o que dá altura equivalente. Um valor só serve aos dois casos.
     Mexeu no header, no .nav-pill ou no header::before, revê este valor. */
  --h-fixa:80px;
  /* Folga entre o fim da barra e o começo do conteúdo da seção. */
  --folga-ancora:16px;
}

*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{
  background:var(--preto);color:var(--txt);
  font-family:"Fustat",ui-sans-serif,system-ui,-apple-system,sans-serif;
  font-size:16px;line-height:1.55;-webkit-font-smoothing:antialiased;overflow-x:hidden
}
img{max-width:100%;display:block}
.wrap{max-width:var(--wrap);margin:0 auto;padding:0 24px}
section{padding:104px 0}
@media(max-width:768px){section{padding:64px 0}}
/* Compensação da barra fixa no salto de âncora.
   (era o A5 do relatório de QA de 05/08, em historico-05ago, e voltou como o A1
   do relatório de teste funcional de 06/08 depois que a regra se perdeu na
   extração do CSS)
   Sem isto, com html{scroll-behavior:smooth} e header{position:fixed}, o topo da
   seção encosta em y=0 e o cabeçalho cobre o começo dela. Vale para clique no
   menu, para chegada direta por index.html#processo e para o botão do hero.
   Aplicado em section[id] porque todo alvo de âncora da página é uma <section>
   com id: #sinais, #processo, #prova, #investimento e #formulario. Regra geral
   em vez de pontual para seção nova nascer já compensada.
   Não conflita com .sem-topo{padding-top:0}: scroll-margin não é preenchimento,
   ele afasta o alvo do topo da janela por fora da caixa. Nas seções com
   padding:104px a folga soma, e nas duas com .sem-topo, #processo e
   #investimento, esta regra é a única coisa que separa o título da barra. */
section[id]{scroll-margin-top:calc(var(--h-fixa) + var(--folga-ancora))}

/* ---------- tipografia ---------- */
h1,h2{font-weight:400;letter-spacing:-.02em;color:var(--txt-forte)}
h1{font-size:clamp(36px,5.4vw,58px);line-height:1.02}
h2{font-size:clamp(28px,4vw,46px);line-height:1.14;margin-bottom:18px}
h3{font-size:19px;font-weight:600;line-height:1.3;color:var(--txt-forte);margin-bottom:8px}
.lead{font-size:clamp(16px,1.6vw,18px);max-width:640px;color:var(--txt)}
.eyebrow{
  display:inline-flex;align-items:center;gap:9px;font-size:11px;font-weight:700;
  letter-spacing:.16em;text-transform:uppercase;color:var(--azul-claro);margin-bottom:20px
}
.eyebrow::before{content:"";width:22px;height:1px;background:var(--azul-claro);opacity:.6}
/* O rótulo do formulário é o único centralizado na página. */
.eyebrow-centro{justify-content:center}
.secao-topo{max-width:720px;margin-bottom:44px}
/* Seção que continua o painel anterior, sem repetir o respiro do topo. */
.sem-topo{padding-top:0}
/* Distância entre dois blocos dentro da mesma seção. */
.bloco-espacado{margin-top:88px}

/* ---------- header ---------- */
header{position:fixed;top:14px;left:0;right:0;z-index:80;pointer-events:none;
  transition:transform var(--d-normal) var(--ease)}
header.escondido{transform:translateY(-130%)}
/* Fundo com desfoque só depois que a página rola.
   (era o A3 do relatório de QA de 05/08, em historico-05ago)
   No topo a barra continua limpa sobre o hero, e o fundo entra ao rolar,
   que é quando o conteúdo passaria por baixo do logo e do botão. */
header::before{
  content:"";position:absolute;left:0;right:0;top:-14px;bottom:-16px;z-index:0;pointer-events:none;
  background:rgba(2,2,2,.78);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  border-bottom:1px solid var(--linha);
  opacity:0;transition:opacity var(--d-normal) var(--ease)
}
header.rolado::before{opacity:1}
.topo{display:flex;align-items:center;justify-content:space-between;gap:16px;pointer-events:auto;
  position:relative;z-index:1}
.marca{font-weight:800;font-size:17px;letter-spacing:.02em;color:var(--txt-forte);line-height:1;text-decoration:none;
  display:inline-flex;flex-direction:column;justify-content:center;min-height:44px;padding:8px 4px}
.marca small{display:block;font-size:8px;letter-spacing:.42em;color:var(--txt-fraco);font-weight:600;margin-top:3px}
.nav-pill{
  display:flex;gap:2px;padding:6px;border-radius:var(--r-pill);
  background:rgba(8,8,10,.82);backdrop-filter:blur(14px);border:1px solid var(--linha)
}
.nav-pill a{
  padding:9px 17px;border-radius:var(--r-pill);text-decoration:none;color:var(--txt);font-size:14px;
  transition:color var(--d-micro) var(--ease),background var(--d-micro) var(--ease)
}
.nav-pill a:hover{color:var(--txt-forte)}
.nav-pill a.ativo{background:rgba(255,255,255,.10);color:var(--txt-forte)}
@media(max-width:900px){.nav-pill{display:none}}

/* ---------- botões ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:10px;border:none;cursor:pointer;
  text-decoration:none;background:var(--claro);color:#000;padding:18px 34px;border-radius:var(--r-pill);
  font-family:inherit;font-size:16px;font-weight:700;line-height:1;box-shadow:var(--sh-halo);
  transition:transform var(--d-micro) var(--ease),box-shadow var(--d-normal) var(--ease),background var(--d-micro) var(--ease)
}
.btn:hover{background:#fff;transform:translateY(-2px);box-shadow:0 0 80px rgba(255,255,255,.20)}
.btn:disabled{opacity:.55;cursor:default;transform:none}
.btn .seta{transition:transform var(--d-normal) var(--ease)}
.btn:hover .seta{transform:translateX(4px)}
/* Alvo de toque de 44px de altura no botão pequeno do cabeçalho.
   (era o M1 do relatório de QA de 05/08, em historico-05ago) */
.btn-sm{padding:15px 22px;font-size:14px;min-height:44px}
.btn-full{width:100%;padding:19px}

/* ---------- HERO ---------- */
.hero{
  position:relative;overflow:hidden;min-height:min(100vh,940px);
  display:flex;align-items:center;padding:170px 0 90px
}
.hero-foto{
  position:absolute;inset:0;z-index:0;width:100%;height:100%;object-fit:cover;
  /* Foto clareada de .62 para .86, para a mesa vazia e o monitor se lerem.
     (era o B4 do relatório de QA de 05/08, em historico-05ago)
     O texto continua legível porque quem compensa é o véu, não o brilho da foto. */
  object-position:62% center;filter:brightness(.86) contrast(1.10) saturate(.85)
}
/* cena de reserva em CSS: se a foto não carregar, a peça continua intencional */
.hero-cena{
  position:absolute;inset:0;z-index:0;
  background:
    radial-gradient(520px 300px at 68% 58%, rgba(90,150,235,.20), transparent 70%),
    radial-gradient(900px 520px at 78% 10%, rgba(24,119,242,.14), transparent 64%),
    linear-gradient(160deg,#08080A 0%,#020202 60%)
}
#hero-canvas{position:absolute;inset:0;z-index:1;width:100%;height:100%;opacity:0;
  transition:opacity 1.4s var(--ease);pointer-events:none}
#hero-canvas.ativo{opacity:.40}
.hero-veu{
  position:absolute;inset:0;z-index:2;pointer-events:none;
  background:
    linear-gradient(90deg, rgba(2,2,2,.96) 0%, rgba(2,2,2,.90) 38%, rgba(2,2,2,.34) 66%, rgba(2,2,2,.18) 100%),
    linear-gradient(0deg, var(--preto) 1%, transparent 30%)
}
@media(max-width:860px){
  .hero-foto{object-position:66% center;filter:brightness(.66) contrast(1.10)}
  .hero-veu{background:
    linear-gradient(180deg, rgba(2,2,2,.90) 0%, rgba(2,2,2,.66) 40%, rgba(2,2,2,.90) 100%),
    linear-gradient(0deg, var(--preto) 1%, transparent 26%)}
}
.hero .wrap{position:relative;z-index:3}
.hero-conteudo{max-width:730px}
.hero h1{margin-bottom:22px;text-shadow:0 2px 30px rgba(0,0,0,.8)}
.hero .lead{margin-bottom:26px;text-shadow:0 1px 18px rgba(0,0,0,.85);max-width:560px}
.hero-bullets{list-style:none;display:flex;flex-wrap:wrap;gap:10px 22px;margin-bottom:34px}
.hero-bullets li{position:relative;padding-left:24px;font-size:15px;color:var(--txt)}
.hero-bullets li::before{
  content:"";position:absolute;left:0;top:8px;width:12px;height:6px;
  border-left:2px solid var(--ok);border-bottom:2px solid var(--ok);transform:rotate(-45deg)
}
.hero-acao{display:flex;flex-wrap:wrap;align-items:center;gap:16px 22px}
.hero-nota{font-size:14px;color:var(--txt-fraco);display:flex;align-items:center;gap:8px}
.pulso{width:7px;height:7px;border-radius:50%;background:var(--ok);box-shadow:0 0 0 0 rgba(61,220,151,.6);animation:pulso 2.4s infinite}
@keyframes pulso{0%{box-shadow:0 0 0 0 rgba(61,220,151,.55)}70%{box-shadow:0 0 0 12px rgba(61,220,151,0)}100%{box-shadow:0 0 0 0 rgba(61,220,151,0)}}

/* ---------- barra de números ---------- */
.numeros{border-top:1px solid var(--linha);border-bottom:1px solid var(--linha);background:var(--preto-1)}
.numeros .wrap{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;padding:0 24px}
.num-item{padding:34px 8px;text-align:center;position:relative}
.num-item+.num-item::before{content:"";position:absolute;left:0;top:26%;height:48%;width:1px;background:var(--linha)}
.num-item b{display:block;font-size:clamp(26px,3.4vw,38px);font-weight:400;color:var(--txt-forte);letter-spacing:-.02em;line-height:1}
.num-item span{display:block;font-size:13px;color:var(--txt-fraco);margin-top:10px}
@media(max-width:760px){
  .numeros .wrap{grid-template-columns:repeat(2,1fr)}
  .num-item{padding:24px 8px}
  .num-item:nth-child(odd)::before{display:none}
  .num-item:nth-child(n+3){border-top:1px solid var(--linha)}
}

/* ---------- painel ---------- */
.painel{background:var(--preto-0);border-radius:var(--r-painel) var(--r-painel) 0 0;margin-top:-1px;position:relative;z-index:2}
@media(max-width:768px){.painel{border-radius:36px 36px 0 0}}
/* O painel da prova encosta na faixa de stack, então ele não arredonda o topo
   e usa o preto um tom acima. Declarado depois da consulta de largura para
   valer nos dois tamanhos. */
.painel-reto{background:var(--preto-1);border-radius:0}

/* ---------- grids ---------- */
.grid{display:grid;gap:20px}
.g2{grid-template-columns:repeat(2,1fr)}
.g3{grid-template-columns:repeat(3,1fr)}
@media(max-width:900px){.g3{grid-template-columns:1fr 1fr}}
@media(max-width:700px){.g2,.g3{grid-template-columns:1fr}}

/* ---------- sinais ---------- */
.sinal{
  padding:28px 26px;border:1px solid var(--linha);border-radius:var(--r-md);background:var(--card);
  position:relative;overflow:hidden;
  transition:transform var(--d-normal) var(--ease),border-color var(--d-normal) var(--ease)
}
.sinal::after{
  content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--azul);
  transform:scaleY(0);transform-origin:top;transition:transform var(--d-macro) var(--ease)
}
.sinal:hover{transform:translateY(-3px);border-color:var(--linha-forte)}
.sinal:hover::after{transform:scaleY(1)}
.sinal p{font-size:15px;color:var(--txt-fraco)}

/* ---------- processo ---------- */
.passos{display:grid;gap:1px;background:var(--linha);border:1px solid var(--linha);border-radius:var(--r-md);overflow:hidden}
.passo{display:flex;gap:24px;align-items:flex-start;background:var(--preto-0);padding:28px 30px;
  transition:background var(--d-normal) var(--ease)}
.passo:hover{background:#0B0B0D}
.passo .n{flex:0 0 auto;font-size:13px;font-weight:700;letter-spacing:.1em;color:var(--azul-claro);padding-top:5px;min-width:30px}
/* Limita o comprimento de linha na descrição dos passos.
   (era o M5 do relatório de QA de 05/08, em historico-05ago) */
.passo p{font-size:15px;color:var(--txt-fraco);max-width:72ch}
@media(max-width:600px){.passo{padding:22px 20px;gap:16px}}

/* ---------- cases ---------- */
.case{
  background:var(--card);border:1px solid var(--linha);border-radius:var(--r-lg);overflow:hidden;
  display:flex;flex-direction:column;
  transition:transform var(--d-normal) var(--ease),border-color var(--d-normal) var(--ease)
}
.case:hover{transform:translateY(-4px);border-color:var(--linha-forte)}
.case-img{height:186px;background:linear-gradient(140deg,#141419,#0A0A0C);position:relative;overflow:hidden}
.case-img img{width:100%;height:100%;object-fit:cover;opacity:.72;transition:transform var(--d-macro) var(--ease)}
.case:hover .case-img img{transform:scale(1.05)}
.case-tag{
  position:absolute;left:16px;top:16px;z-index:2;font-size:11px;letter-spacing:.1em;text-transform:uppercase;
  padding:6px 12px;border-radius:var(--r-pill);background:rgba(2,2,2,.72);backdrop-filter:blur(8px);
  border:1px solid var(--linha);color:var(--txt)
}
.case-corpo{padding:26px;display:flex;flex-direction:column;flex:1}
.case-metricas{display:flex;gap:12px;flex-wrap:wrap;margin:16px 0 18px}
.case-metrica{flex:1;min-width:120px;padding:14px;border-radius:var(--r-sm);background:var(--azul-fraco);border:1px solid rgba(24,119,242,.22)}
.case-metrica b{display:block;font-size:17px;font-weight:600;color:var(--txt-forte);line-height:1.25}
.case-metrica span{display:block;font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--azul-claro);margin-top:6px}
.case-corpo p{font-size:14.5px;color:var(--txt-fraco);margin-top:auto}

/* ---------- depoimentos ---------- */
.depo{background:var(--card);border:1px solid var(--linha);border-radius:var(--r-lg);padding:30px;display:flex;flex-direction:column}
.estrelas{color:var(--ok);font-size:13px;letter-spacing:.22em;margin-bottom:16px}
.depo blockquote{font-size:15.5px;color:var(--txt);line-height:1.62;flex:1}
.depo-quem{display:flex;align-items:center;gap:13px;margin-top:22px;padding-top:20px;border-top:1px solid var(--linha)}
.depo-quem img{width:44px;height:44px;border-radius:50%;object-fit:cover;background:var(--card-alto);flex:0 0 auto}
.depo-quem b{display:block;font-size:14.5px;color:var(--txt-forte);font-weight:600}
.depo-quem span{display:block;font-size:12.5px;color:var(--txt-fraco);margin-top:2px}

/* ---------- sócios ---------- */
/* Sem max-width, os dois cards ocupam a largura do container e o bloco deixa
   de parecer sobra de layout.
   (era o B2 do relatório de QA de 05/08, em historico-05ago) */
.socios{display:grid;grid-template-columns:repeat(2,1fr);gap:20px}
@media(max-width:700px){.socios{grid-template-columns:1fr}}
.socio{
  display:flex;gap:20px;align-items:center;background:var(--card);border:1px solid var(--linha);
  border-radius:var(--r-lg);padding:22px;
  transition:border-color var(--d-normal) var(--ease)
}
.socio:hover{border-color:var(--linha-forte)}
.socio img{width:86px;height:86px;border-radius:var(--r-md);object-fit:cover;background:var(--card-alto);flex:0 0 auto}
.socio b{display:block;font-size:17px;color:var(--txt-forte);font-weight:600}
/* O cargo saiu do azul de link. Ele se distingue por caixa alta e espaçamento,
   e não por uma cor que promete clique.
   (era o B1 do relatório de QA de 05/08, em historico-05ago) */
.socio span{display:block;font-size:12px;color:var(--txt);letter-spacing:.06em;text-transform:uppercase;margin:6px 0 9px}
.socio p{font-size:13.5px;color:var(--txt-fraco);line-height:1.5}

/* ---------- para quem ---------- */
.card{background:var(--card);border:1px solid var(--linha);border-radius:var(--r-lg);padding:32px;
  transition:transform var(--d-normal) var(--ease),border-color var(--d-normal) var(--ease)}
.card:hover{transform:translateY(-2px)}
.card ul{list-style:none;margin-top:18px}
.card li{padding:9px 0 9px 30px;position:relative;font-size:15px;line-height:1.5}
.card li::before{position:absolute;left:0;top:9px;font-weight:800}
.card.sim{border-color:rgba(61,220,151,.26)}
.card.sim li::before{content:"✓";color:var(--ok)}
.card.nao{border-color:rgba(255,107,107,.22)}
.card.nao li::before{content:"×";color:var(--erro);font-size:18px;top:7px}

/* ---------- investimento ---------- */
.faixas{display:grid;gap:1px;background:var(--linha);border:1px solid var(--linha);border-radius:var(--r-md);overflow:hidden;margin-top:30px}
.faixa{display:grid;grid-template-columns:200px 1fr 150px;gap:20px;align-items:center;background:var(--preto-0);padding:22px 26px;
  transition:background var(--d-normal) var(--ease)}
.faixa:hover{background:#0B0B0D}
.faixa.cabecalho{background:#0D0D0F;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--txt-fraco);padding:14px 26px}
/* A linha de cabeçalho fica de fora destas três regras de propósito: ela herda
   a própria tipografia e a própria cor. Escrito como :not aqui para o HTML não
   precisar desfazer nada com font:inherit em atributo. */
.faixa:not(.cabecalho) b{font-size:16.5px;font-weight:600;color:var(--txt-forte);white-space:nowrap}
.faixa:not(.cabecalho) span{color:var(--txt-fraco);font-size:14.5px}
/* O prazo fica fora do azul de link, para não prometer clique.
   (era o B1 do relatório de QA de 05/08, em historico-05ago) */
.faixa:not(.cabecalho) .prazo{color:var(--txt);font-size:14px;text-align:right;white-space:nowrap}
/* O <b> do cabeçalho é rótulo de coluna, não valor, então não fica em negrito. */
.faixa.cabecalho b{font-weight:inherit}
.faixa.cabecalho .prazo{text-align:right}
/* Ressalva abaixo da tabela de faixas. */
.nota-faixas{margin-top:22px;font-size:15px;color:var(--txt-fraco);max-width:660px}
@media(max-width:820px){
  .faixa{grid-template-columns:1fr;gap:6px;padding:20px}
  .faixa.cabecalho{display:none}
  .faixa:not(.cabecalho) .prazo{text-align:left}
}

/* ---------- marquee de stack ---------- */
.marquee{overflow:hidden;border-top:1px solid var(--linha);border-bottom:1px solid var(--linha);padding:22px 0;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent);
  mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent)}
.marquee-faixa{display:flex;gap:44px;width:max-content;animation:desliza 38s linear infinite}
.marquee:hover .marquee-faixa{animation-play-state:paused}
.marquee span{font-size:14px;letter-spacing:.1em;text-transform:uppercase;color:var(--txt-fraco);white-space:nowrap}
@keyframes desliza{from{transform:translateX(0)}to{transform:translateX(-50%)}}

/* ---------- faixa de imagem ---------- */
.faixa-img{position:relative;overflow:hidden;background:var(--preto-0)}
.faixa-img img{width:100%;height:clamp(260px,40vh,420px);object-fit:cover;opacity:.5}
.faixa-img::after{content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,var(--preto-0) 0%,transparent 34%,transparent 60%,var(--preto-0) 100%)}
.faixa-txt{position:absolute;inset:0;display:flex;align-items:center;z-index:2;padding:0 24px}
.faixa-txt p{max-width:var(--wrap);margin:0 auto;width:100%;
  font-size:clamp(19px,2.6vw,30px);line-height:1.32;color:var(--txt-forte);font-weight:400;letter-spacing:-.015em}
.faixa-txt span{display:block;max-width:600px}

/* ---------- formulário ---------- */
.form-sec .secao-topo{margin:0 auto 0;text-align:center}
.form-sec .lead{margin:0 auto}
form{background:var(--card);border:1px solid var(--linha);border-radius:var(--r-lg);
  padding:38px;max-width:640px;margin:36px auto 0;text-align:left}
@media(max-width:600px){form{padding:26px 20px;border-radius:var(--r-md)}}
.progresso{display:flex;align-items:center;gap:14px;margin-bottom:28px}
.barra{flex:1;height:3px;background:rgba(255,255,255,.08);border-radius:99px;overflow:hidden}
.barra-fill{height:100%;width:50%;background:linear-gradient(90deg,var(--azul),var(--azul-claro));border-radius:99px;transition:width var(--d-macro) var(--ease)}
#passo-txt{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--txt-fraco);white-space:nowrap}
fieldset{border:none;padding:0;margin:0}
.etapa{display:none}
.etapa.ativa{display:block;animation:entra var(--d-macro) var(--ease)}
@keyframes entra{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.campo{margin-bottom:20px}
.dupla{display:grid;grid-template-columns:1fr 1fr;gap:16px}
@media(max-width:520px){.dupla{grid-template-columns:1fr;gap:0}}
label{display:block;font-size:14px;font-weight:600;margin-bottom:8px;color:var(--txt-forte)}
.dica{font-size:13px;color:var(--txt-fraco);margin-bottom:10px;line-height:1.45}
input,select,textarea{
  width:100%;background:var(--preto-0);border:1px solid var(--linha);border-radius:var(--r-sm);
  padding:14px 15px;color:var(--txt-forte);font-size:16px;font-family:inherit;
  transition:border-color var(--d-micro) var(--ease),box-shadow var(--d-micro) var(--ease)
}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--azul);box-shadow:0 0 0 3px rgba(24,119,242,.18)}
input::placeholder,textarea::placeholder{color:var(--txt-placeholder)}
textarea{resize:vertical;min-height:112px;line-height:1.5}
select{appearance:none;cursor:pointer;
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath fill='none' stroke='%238E8E95' stroke-width='1.6' d='M1 1.5l5 5 5-5'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 15px center}
.opcional{font-weight:400;font-size:.78rem;color:#8A8A8A;margin-left:6px}
.erro-campo{color:var(--erro);font-size:13px;margin-top:7px;display:none}
.invalido input,.invalido select,.invalido textarea{border-color:var(--erro)}
.invalido .erro-campo{display:block}
/* O checkbox era o menor alvo da página, com 17px, e é obrigatório para
   converter. Agora o quadrado desenha 22px e o alvo clicável é a área de 44px
   do rótulo que o envolve. O texto do aceite também é clicável.
   (era o M1 do relatório de QA de 05/08, em historico-05ago) */
.consentimento{display:flex;gap:4px;align-items:flex-start;margin:6px 0 20px}
.consentimento .cx{
  display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;
  width:44px;height:44px;margin:-9px 0 -9px -11px;cursor:pointer
}
.consentimento input{width:22px;height:22px;flex:0 0 auto;margin:0;accent-color:var(--azul);padding:0;cursor:pointer}
.consentimento .txt-aceite{font-size:13px;font-weight:400;color:var(--txt-fraco);margin:0;line-height:1.7;
  padding:6px 0;cursor:pointer}
.consentimento a{color:var(--txt);text-decoration:underline}
/* A mensagem de erro do aceite fica colada no bloco de consentimento, e não
   com o respiro normal de um campo. */
.campo-aceite{margin:-14px 0 20px}
.privacidade{font-size:13px;color:var(--txt-fraco);text-align:center;margin-top:18px;line-height:1.5}
.btn-voltar{display:block;width:100%;margin-top:14px;background:none;border:none;color:var(--txt-fraco);
  font-size:14px;cursor:pointer;font-family:inherit;padding:8px}
.btn-voltar:hover{color:var(--txt-forte)}
#obrigado{
  display:none;text-align:center;max-width:580px;margin:36px auto 0;
  padding:32px 30px;border-radius:var(--r-lg);border:1px solid var(--linha)
}
#obrigado h2{margin-bottom:14px}
#obrigado p{margin:0 auto 0}
#tentar-novamente{margin-top:24px}
/* A classe .btn define display:inline-flex, e regra de classe escrita aqui
   sempre vence o display:none padrão do atributo [hidden] do navegador,
   mesmo com o atributo presente no HTML. Sem esta linha o botão aparece
   também no sucesso, quando js/main.js o deixa hidden. */
#tentar-novamente[hidden]{display:none}
/* Duas tonalidades sobre o mesmo texto. O conteúdo não muda entre sucesso e
   erro (ver js/main.js), só a moldura, para quem preencheu nunca ler uma
   mensagem de alarme, e quem acompanha a campanha perceber a diferença sem
   abrir o console. Fundo em mistura translúcida da cor do estado sobre o
   --card, para continuar lendo como parte da página escura e não como
   alerta de sistema operacional. */
/* Cor sólida primeiro, de reserva para navegador sem color-mix(). A regra
   seguinte, se suportada, substitui pela mistura translúcida com --card. */
#obrigado.sucesso{background:rgba(61,220,151,.08);border-color:rgba(61,220,151,.35)}
#obrigado.sucesso{background:color-mix(in srgb, var(--ok) 10%, var(--card));border-color:color-mix(in srgb, var(--ok) 35%, var(--linha))}
#obrigado.sucesso h2{color:var(--ok)}
#obrigado.erro{background:rgba(255,107,107,.08);border-color:rgba(255,107,107,.35)}
#obrigado.erro{background:color-mix(in srgb, var(--erro) 10%, var(--card));border-color:color-mix(in srgb, var(--erro) 35%, var(--linha))}
#obrigado.erro h2{color:var(--erro)}

/* O rodapé saiu de dentro do painel para o <main> poder fechar antes dele.
   (era o M4 do relatório de QA de 05/08, em historico-05ago)
   O fundo preto vem para cá, para o visual continuar o mesmo. */
footer{border-top:1px solid var(--linha);padding:44px 0;font-size:14px;color:var(--txt-fraco);
  background:var(--preto-0);position:relative;z-index:2}
.rodape{display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap;align-items:center}

/* ---------- aviso de configuração pendente ----------
   Só aparece quando o js/main.js detecta que o CONFIG.TOKEN ainda é o
   placeholder. É proposital que ele seja visível: token não preenchido faz o
   CRM recusar todos os leads, e sem este aviso a página aparenta funcionar. */
.aviso-publicacao{
  position:fixed;left:0;right:0;bottom:0;z-index:200;
  background:var(--erro);color:#1A0505;
  font-size:13px;font-weight:600;line-height:1.4;text-align:center;
  padding:12px 20px
}

/* ---------- entrada dos blocos ----------
   Decisão da volta 5, que continua valendo: a entrada é CSS puro e o conteúdo
   NASCE VISÍVEL. O estado final é o padrão e a animação é enfeite, então
   nenhum bloco depende de rolagem, de âncora, de JavaScript ou do GSAP para
   ser lido. Não voltar a esconder [data-reveal] por script: o
   ScrollTrigger.batch não dispara para quem chega por link com #ancora, e foi
   isso que deixou 33 blocos invisíveis nas voltas 3 e 4. */
[data-reveal]{opacity:1;transform:none}
@supports (animation-timeline: view()){
  @media(prefers-reduced-motion:no-preference){
    [data-reveal]{
      animation:revelar linear both;
      animation-timeline:view();
      animation-range:entry 0% cover 26%
    }
  }
}
@keyframes revelar{
  from{opacity:0;transform:translateY(26px)}
  to{opacity:1;transform:none}
}

/* ---------- movimento ---------- */
.w{color:inherit}
/* A cor de partida era #333338, que media 1.67:1 e sumia.
   (era o A2 do relatório de QA de 05/08, em historico-05ago)
   Título é texto grande e parte de #6E6E74, que mede 3.97:1 no pior fundo.
   Lead é texto normal e parte de #808088, que mede 4.74:1 no pior dos quatro
   fundos da página (#131315) e 5.14:1 no fundo onde de fato aparece (#070708).
   Nenhuma palavra fica ilegível em nenhum ponto do preenchimento. */
.split .w{color:var(--split-ini-titulo)}
p.split .w{color:var(--split-ini-lead)}
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *{animation:none!important;transition-duration:.01ms!important}
  .split .w,p.split .w{color:inherit}
  .marquee-faixa{animation:none}
}
