/* ==========================================================================
   CMC Digital — site
   Paleta: skill design-cmc, linha "CMC Digital" + sistema de cor do Google
   nas seções que falam de produto Google. Cor SEMPRE em variável.

   Duas regras de layout deste arquivo:
   1. Não existe card com borda. O que separa bloco é espaço, contraste de
      fundo e escala tipográfica.
   2. Cada seção tem UM efeito próprio. Repetir o mesmo movimento na página
      inteira foi a crítica de 30/07/2026 — o mapa de quem usa o quê está
      comentado em cada bloco.
   ========================================================================== */

:root {
  /* Linha CMC */
  --navy:        #050E1A;
  --grafite:     #0C141F;
  --borda:       #1E2733;
  --neon:        #22FC00;
  --neon-tinta:  #010611;
  --aco:         #06224D;
  --texto:       #F1F6FC;
  --texto-suave: #8E99A8;

  /* Modo claro */
  --claro-fundo: #FFFFFF;
  --claro-alt:   #F4F7FB;
  --claro-texto: #0B1220;
  --claro-suave: #55636F;
  --claro-borda: #E3E9F0;

  /* Sistema de cor do Google — usado só onde o assunto é produto Google */
  --g-azul:     #4285F4;
  --g-vermelho: #EA4335;
  --g-amarelo:  #FBBC04;
  --g-verde:    #34A853;

  --fonte-display: 'DM Sans', system-ui, sans-serif;
  --fonte-corpo:   'Inter', system-ui, sans-serif;

  --largura: 1200px;
  --gutter: clamp(1.25rem, 4vw, 3.5rem);

  /* Escala de espaço — o "espaçamento feio" vinha de valores soltos */
  --e-1: .5rem;  --e-2: 1rem;   --e-3: 1.75rem;
  --e-4: 3rem;   --e-5: 5rem;   --e-6: clamp(6rem, 5rem + 6vw, 11rem);

  --t-rapida: 200ms cubic-bezier(.4, 0, .2, 1);
  --t-media:  520ms cubic-bezier(.22, 1, .36, 1);
  --t-suave:  680ms cubic-bezier(.16, 1, .3, 1);
}

*, *::before, *::after { box-sizing: border-box; }
/* A cor de fundo vive no <html>, não no <body>: assim o canvas do ambiente
   (fixed, z-index -1) pinta ACIMA do fundo da página e ABAIXO do conteúdo.
   Com a cor no body o canvas sumiria atrás dela. */
html { scroll-behavior: auto; -webkit-text-size-adjust: 100%; background: var(--navy); }

body {
  margin: 0;
  background: transparent;
  color: var(--texto);
  font-family: var(--fonte-corpo);
  font-size: clamp(1rem, .96rem + .2vw, 1.0625rem);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}

h1, h2, h3, h4 { font-family: var(--fonte-display); margin: 0; font-weight: 700; }
p { margin: 0; }
a { color: inherit; }
img, video, svg { max-width: 100%; display: block; }

.container { width: 100%; max-width: var(--largura); margin-inline: auto; padding-inline: var(--gutter); }
/* isolation + overflow para o canvas do fundo ambiente poder viver dentro */
.secao { padding-block: var(--e-6); position: relative; isolation: isolate; overflow: hidden; }
.secao > .container { position: relative; z-index: 1; }

/* -- Tipografia ----------------------------------------------------------
   DM Sans em peso 1000 nos títulos grandes, com tracking negativo forte —
   é o que dá o "aperto" da tipografia do Google em tamanho grande. */
h1 { font-size: clamp(2.5rem, 1.5rem + 4.4vw, 5.2rem); font-weight: 1000; line-height: .98; letter-spacing: -.04em; }

.titulo-xl { font-size: clamp(2.2rem, 1.4rem + 3.8vw, 4.6rem); font-weight: 1000; line-height: 1; letter-spacing: -.038em; max-width: 16ch; }
.titulo-lg { font-size: clamp(1.9rem, 1.4rem + 2.6vw, 3.4rem); font-weight: 1000; line-height: 1.05; letter-spacing: -.032em; max-width: 18ch; }
.titulo-xl--escuro, .titulo-lg--escuro { color: var(--claro-texto); }
.titulo-xl--centro { max-width: 18ch; margin-inline: auto; text-align: center; }

/* Rótulo em versalete espaçado — pegada da Trionn */
.rotulo {
  font-family: var(--fonte-display);
  font-size: .72rem; font-weight: 700;
  letter-spacing: .24em; text-transform: uppercase;
  color: var(--neon);
  margin-bottom: var(--e-3);
}
.rotulo--escuro { color: var(--claro-suave); }

.lead { font-size: clamp(1.05rem, 1rem + .4vw, 1.25rem); color: var(--texto-suave); max-width: 50ch; margin-top: var(--e-3); line-height: 1.65; }
.lead--escura { color: var(--claro-suave); }
.destaque { color: var(--neon); }

/* Palavra a palavra: a externa mascara, a interna é o que o GSAP move.
   overflow-x hidden no título: as palavras do efeito cinético começam
   deslocadas lateralmente e furavam a margem em telas estreitas. */
.palavra { display: inline-block; overflow: hidden; padding-bottom: .1em; vertical-align: bottom; }
.palavra__int { display: inline-block; will-change: transform, opacity, filter; }
[data-kinetico] { overflow-x: clip; }

.revela { opacity: 0; transform: translateY(24px); }
.revela.visivel { opacity: 1; transform: none; transition: opacity .7s var(--t-suave), transform .7s var(--t-suave); }

/* -- Botões --------------------------------------------------------------- */
.btn {
  display: inline-flex; align-items: center; gap: .55rem;
  padding: 1rem 1.85rem; border-radius: 999px;
  font-family: var(--fonte-display); font-weight: 700; font-size: .98rem;
  text-decoration: none; border: 1px solid transparent; cursor: pointer;
  transition: transform var(--t-rapida), background var(--t-rapida), border-color var(--t-rapida), color var(--t-rapida), box-shadow var(--t-rapida);
}
.btn:hover { transform: translateY(-2px); }
.btn:focus-visible { outline: 3px solid var(--neon); outline-offset: 3px; }
.btn--primario { background: var(--neon); color: var(--neon-tinta); }
.btn--primario:hover { background: #3dff20; box-shadow: 0 12px 34px color-mix(in srgb, var(--neon) 30%, transparent); }
.btn--fantasma { background: transparent; color: var(--texto); border-color: color-mix(in srgb, var(--texto) 26%, transparent); }
.btn--fantasma:hover { border-color: var(--neon); color: var(--neon); }
.btn--fantasma-clara { color: var(--claro-texto); border-color: var(--claro-borda); }
.btn--fantasma-clara:hover { border-color: var(--claro-texto); }
.btn__seta { transition: transform var(--t-rapida); }
.btn:hover .btn__seta { transform: translateX(4px); }

.acoes { display: flex; flex-wrap: wrap; gap: .8rem; margin-top: var(--e-4); }
.acoes--centro { justify-content: center; }

/* -- Cabeçalho + menu com abertura suave --------------------------------- */
.topo { position: fixed; inset: 0 0 auto 0; z-index: 100; transition: background var(--t-media), backdrop-filter var(--t-media); }
.topo--fixo { background: color-mix(in srgb, var(--navy) 80%, transparent); backdrop-filter: blur(18px) saturate(1.2); }
.topo__inner { display: flex; align-items: center; justify-content: space-between; gap: 1.5rem; min-height: 78px; max-width: var(--largura); margin-inline: auto; padding-inline: var(--gutter); }
.marca { display: inline-flex; align-items: center; }
.marca img { height: 26px; width: auto; }

.nav__lista { display: flex; align-items: center; gap: 2.2rem; }
.nav a { text-decoration: none; font-size: .92rem; color: var(--texto-suave); position: relative; padding-block: .35rem; transition: color var(--t-rapida); }
.nav a::after {
  content: ""; position: absolute; left: 0; bottom: 0; height: 1px; width: 100%;
  background: var(--neon); transform: scaleX(0); transform-origin: right;
  transition: transform var(--t-media);
}
.nav a:hover { color: var(--texto); }
.nav a:hover::after { transform: scaleX(1); transform-origin: left; }

.topo__cta { display: inline-flex; padding: .68rem 1.35rem; font-size: .9rem; }

/* Botão de menu: dois riscos que viram X, sem corte seco */
.menu-btn { display: none; background: none; border: 0; padding: .6rem; cursor: pointer; width: 42px; height: 42px; }
.menu-btn__risco { display: block; height: 2px; width: 22px; background: var(--texto); border-radius: 2px; transition: transform var(--t-media), opacity var(--t-rapida); }
.menu-btn__risco + .menu-btn__risco { margin-top: 6px; }
.menu-btn[aria-expanded="true"] .menu-btn__risco:first-child { transform: translateY(4px) rotate(45deg); }
.menu-btn[aria-expanded="true"] .menu-btn__risco:last-child { transform: translateY(-4px) rotate(-45deg); }

@media (max-width: 940px) {
  .topo__cta { display: none; }
  .menu-btn { display: block; }
  .nav {
    position: fixed; inset: 78px 0 auto 0;
    background: color-mix(in srgb, var(--navy) 97%, transparent);
    backdrop-filter: blur(20px);
    /* Abertura suave: grid 0fr→1fr anima a altura sem precisar sabê-la.
       Exige UM filho só (.nav__lista) — com os links soltos, cada um vira
       uma linha e só a primeira colapsa. */
    display: grid; grid-template-rows: 0fr;
    transition: grid-template-rows var(--t-suave);
  }
  .nav__lista {
    min-height: 0; overflow: hidden;
    flex-direction: column; align-items: flex-start; gap: 0;
    padding-inline: var(--gutter);
  }
  .nav--aberto { grid-template-rows: 1fr; }
  .nav--aberto .nav__lista { padding-block: 1.25rem 2rem; }
  .nav a { font-size: 1.3rem; font-family: var(--fonte-display); font-weight: 700; color: var(--texto); padding-block: .65rem; }
  .nav a::after { display: none; }
}

/* ==========================================================================
   HERO — EFEITO PRÓPRIO: scroll-scrub de sequência de imagens em <canvas>
   ========================================================================== */
.hero { position: relative; height: 100svh; display: grid; align-items: center; overflow: hidden; isolation: isolate; }
.hero__palco { position: absolute; inset: 0; z-index: -2; background: var(--navy); }
.hero__tela { width: 100%; height: 100%; filter: saturate(1.06) contrast(1.05); }
.hero__poster { position: absolute; inset: 0; z-index: 1; width: 100%; height: 100%; object-fit: cover; transition: opacity .5s ease; }
.hero__veu {
  position: absolute; inset: 0; z-index: -1;
  background:
    radial-gradient(120% 80% at 72% 28%, transparent 0%, color-mix(in srgb, var(--aco) 45%, transparent) 58%, var(--navy) 100%),
    linear-gradient(to top, var(--navy) 3%, color-mix(in srgb, var(--navy) 45%, transparent) 48%, color-mix(in srgb, var(--navy) 78%, transparent) 100%);
}
.hero__conteudo { position: relative; padding-block: 9rem 5rem; max-width: 64rem; }
.hero h1 { text-wrap: balance; }
.hero__sub { font-size: clamp(1.05rem, 1rem + .5vw, 1.3rem); color: var(--texto-suave); max-width: 44ch; margin: var(--e-3) 0 var(--e-4); }
.hero__acoes { display: flex; flex-wrap: wrap; gap: .8rem; }
.hero__micro { margin-top: var(--e-2); font-size: .85rem; color: var(--texto-suave); }
.hero__intro { transition: opacity .12s linear; }
.hero__dica-scroll { margin-top: var(--e-4); font-size: .82rem; color: var(--texto-suave); animation: dica 2.4s ease-in-out infinite; }
@keyframes dica { 0%, 100% { transform: translateY(0); opacity: .6; } 50% { transform: translateY(6px); opacity: 1; } }

.hero__ato, .hero__outro { position: absolute; top: 9rem; left: var(--gutter); right: var(--gutter); opacity: 0; pointer-events: none; }
.hero__ato { max-width: 34rem; }
.hero__ato-linha, .hero__outro-linha { font-family: var(--fonte-display); font-weight: 1000; letter-spacing: -.03em; line-height: 1.05; font-size: clamp(1.7rem, 1.2rem + 2vw, 3rem); margin-bottom: var(--e-2); }
.hero__ato-sub { color: var(--texto-suave); max-width: 38ch; }
.hero__outro { transition: opacity .12s linear; }
.hero__outro-linha { max-width: 14ch; }

/* ==========================================================================
   TRANSIÇÕES ENTRE SEÇÕES — quebram a rolagem contínua
   ========================================================================== */

/* -- WIPE DE FAIXAS -------------------------------------------------------
   Só onde há troca de contraste (escuro↔claro). Seis faixas horizontais que
   varrem alternando direção conforme o scroll passa — é a transição que
   aparece no vídeo de referência entre as seções da Trionn. */
.wipe {
  position: relative; height: clamp(90px, 14vh, 190px);
  display: grid; grid-template-rows: repeat(6, 1fr);
  overflow: hidden;
}
.wipe--para-claro { background: var(--navy); }
.wipe--para-escuro { background: var(--claro-alt); }
.wipe > span {
  display: block; width: 100%; height: 101%; /* 101% mata a costura entre faixas */
  transform: scaleX(0); will-change: transform;
}
.wipe--para-claro > span { background: var(--claro-fundo); transform-origin: left; }
.wipe--para-claro > span:nth-child(even) { transform-origin: right; }
.wipe--para-escuro > span { background: var(--navy); transform-origin: right; }
.wipe--para-escuro > span:nth-child(even) { transform-origin: left; }

/* -- DECLARAÇÃO — pausa entre duas seções escuras -------------------------
   Sem wipe (não há troca de contraste): a quebra é a frase. Letras chegam
   espalhadas e se juntam com o scroll (ver [data-espalha] em main.js). */
.declaracao {
  position: relative; isolation: isolate; overflow: hidden;
  background: var(--navy);
  min-height: 72svh; display: grid; place-items: center;
  padding: var(--e-5) var(--gutter);
}
/* clip: as letras chegam espalhadas e não podem furar a margem no caminho */
.declaracao { overflow: clip; }
.declaracao__texto {
  position: relative; z-index: 1;
  font-family: var(--fonte-display); font-weight: 1000;
  font-size: clamp(1.9rem, 1.1rem + 3.6vw, 4.2rem);
  letter-spacing: -.035em; line-height: 1.05;
  text-align: center; max-width: 16ch;
}
/* Impede quebra de linha DENTRO da palavra — as letras internas continuam
   inline-block (main.js precisa disso pra mover cada uma), mas o wrapper
   nowrap garante que a linha só quebra nos espaços reais entre palavras. */
.palavra-espalha { display: inline-block; white-space: nowrap; }
.letra { display: inline-block; will-change: transform, opacity; }

/* ==========================================================================
   CENA (A DOR) — EFEITO PRÓPRIO: foto em paralaxe + título revelado por
   máscara vertical (clip-path subindo), nunca fade.
   ========================================================================== */
.cena { position: relative; isolation: isolate; min-height: 100svh; display: grid; align-items: center; padding-block: var(--e-6); overflow: hidden; }
.cena--escura { background: var(--navy); }
.cena__fundo { position: absolute; inset: 0; z-index: -3; margin: 0; }
.cena__fundo img { width: 100%; height: 122%; object-fit: cover; will-change: transform; }
.cena__veu {
  position: absolute; inset: 0; z-index: -2;
  background: linear-gradient(to right, var(--navy) 0%, color-mix(in srgb, var(--navy) 86%, transparent) 40%, color-mix(in srgb, var(--navy) 28%, transparent) 78%, color-mix(in srgb, var(--navy) 50%, transparent) 100%);
}
.cena__texto { position: relative; z-index: 1; }

[data-mascara] .linha-mascara { display: block; overflow: hidden; }
[data-mascara] .linha-mascara__int { display: block; will-change: transform; }

/* ==========================================================================
   VIRADA — EFEITO PRÓPRIO: três peças que deveriam encaixar mas se afastam
   em 3D conforme o scroll avança (ver [data-desalinha] em main.js). A
   metáfora É o efeito: cada peça existe, nenhuma sustenta a outra.
   ========================================================================== */
.virada__pecas {
  display: flex; flex-wrap: wrap; gap: clamp(1rem, .7rem + 1.2vw, 2rem);
  margin: var(--e-5) 0; perspective: 900px;
}
.peca {
  flex: 1 1 180px; padding: var(--e-3) var(--e-2);
  text-align: center; font-family: var(--fonte-display); font-weight: 700;
  font-size: 1.05rem; color: var(--texto-suave);
  background: var(--grafite); border-radius: 16px;
  will-change: transform, opacity;
}
.virada__fecho {
  font-family: var(--fonte-display); font-weight: 1000;
  font-size: clamp(1.5rem, 1.2rem + 1.4vw, 2.2rem); letter-spacing: -.03em;
  max-width: 20ch;
}

/* Canvas único e fixo atrás de tudo (ambiente.js). Um contexto WebGL por
   seção estourava o limite do navegador e ele derrubava os excedentes. */
.ambiente__tela--fixa { position: fixed; inset: 0; z-index: -1; width: 100%; height: 100%; pointer-events: none; }

/* Seção que quer ambiente fica TRANSPARENTE pra deixar o canvas aparecer;
   quem não quer mantém fundo opaco e naturalmente o cobre. Todas as seções
   com [data-ambiente] são escuras, então o navy do <html> é a base delas. */
[data-ambiente] { --ambiente-brilho: #06224D; background: transparent; }
[data-ambiente] > * { position: relative; z-index: 1; }

/* ==========================================================================
   TRÍADE — EFEITO PRÓPRIO: painéis chegando em 3D + trilho horizontal
   ========================================================================== */
.triade { background: var(--claro-fundo); color: var(--claro-texto); padding-block: var(--e-6) 0; overflow: hidden; }
.triade__cabeca { padding-bottom: var(--e-5); }

/* Enquanto a seção está presa (pin), a altura dela é a da janela — então
   cabeça + trilho TÊM que caber em 100vh, senão o painel corta embaixo.
   Por isso o painel é dimensionado por vh aqui, e não por aspect-ratio.
   Medido: em 1280x820 o layout antigo pedia 1204px de altura. */
@media (min-width: 641px) {
  .triade { padding-block: clamp(2.5rem, 1rem + 4vh, 4.5rem) 0; }
  /* Cabeça em duas colunas: título à esquerda, apoio à direita. Empilhado
     ela sozinha comia 337px dos 820 disponíveis. */
  .triade__cabeca {
    padding-bottom: clamp(1.25rem, .5rem + 2.5vh, 2.5rem);
    display: grid; grid-template-columns: 1.1fr .9fr; gap: var(--e-4); align-items: end;
  }
  .triade__cabeca .rotulo { grid-column: 1 / -1; margin-bottom: 0; }
  .triade__cabeca .titulo-xl { font-size: clamp(1.9rem, 1.2rem + 2.2vw, 3.2rem); max-width: 14ch; }
  .triade__cabeca .lead { margin-top: 0; font-size: 1rem; }
  .triade__trilho { padding-bottom: clamp(1.5rem, .5rem + 3vh, 3rem); }
  .painel__foto img { aspect-ratio: auto; height: clamp(180px, 32vh, 360px); }
  .painel__titulo { font-size: clamp(1.15rem, 1rem + .6vw, 1.5rem); }
  .painel__texto { padding-top: var(--e-2); }
  .painel__texto p { font-size: .92rem; }
  .painel__fecho { font-size: clamp(1.4rem, 1.1rem + 1.2vw, 2.1rem); }
}
.triade__trilho {
  display: flex; gap: clamp(1.5rem, 1rem + 2vw, 3rem);
  padding-inline: var(--gutter); padding-bottom: var(--e-6);
  will-change: transform; perspective: 1500px;
}
/* Painel acompanha a janela: cresce em tela larga em vez de travar em 430px.
   As variáveis --giro/--recuo/--sobe são escritas pelo arquear() em main.js
   conforme a distância do painel para o centro da tela — o arco 3D. */
.painel {
  flex: 0 0 clamp(260px, 30vw, 520px);
  display: flex; flex-direction: column;
  transform-style: preserve-3d;
  --giro: 0deg; --recuo: 0px; --sobe: 0px;
  transform: rotateY(var(--giro)) translateZ(var(--recuo)) translateY(var(--sobe));
}
.painel__foto { margin: 0; overflow: hidden; border-radius: 18px; }
.painel__foto img { width: 100%; aspect-ratio: 4 / 5; object-fit: cover; transition: transform 1.2s var(--t-suave); }
.painel:hover .painel__foto img { transform: scale(1.05); }
.painel__texto { padding-top: var(--e-3); }
/* Texto cresceu de "01" pra "01 — Ser encontrado" (copy oficial do
   documento, 30/07/2026): tracking largo (.22em) que servia pro número
   sozinho ficava ilegível na frase — reduzido e sem uppercase forçado. */
.painel__num { font-family: var(--fonte-display); font-weight: 700; font-size: .78rem; letter-spacing: .04em; color: var(--claro-suave); display: block; margin-bottom: var(--e-1); }
.painel__titulo { font-size: clamp(1.35rem, 1.15rem + .8vw, 1.8rem); letter-spacing: -.025em; color: var(--claro-texto); margin-bottom: .5rem; }
.painel__texto p { color: var(--claro-suave); max-width: 32ch; }
.painel--fecho { justify-content: center; }
.painel__texto--centro { text-align: center; }
.painel__texto--centro .painel__num { display: inline-block; }
.painel__fecho { font-family: var(--fonte-display); font-weight: 1000; letter-spacing: -.03em; font-size: clamp(1.7rem, 1.3rem + 1.6vw, 2.6rem); line-height: 1.05; color: var(--claro-texto); margin-bottom: var(--e-2); max-width: 14ch; }
.painel__fecho-sub { color: var(--claro-suave); max-width: 30ch; margin-bottom: var(--e-4); }

/* ==========================================================================
   SERVIÇOS — EFEITO PRÓPRIO: tilt 3D no mouse + barra de cor que cresce
   Sistema de cor do Google. Sem borda: a barra colorida é o separador.
   ========================================================================== */
.servicos { background: var(--claro-alt); color: var(--claro-texto); padding-block: var(--e-6); }
.servicos__grade {
  display: grid; gap: clamp(2.5rem, 2rem + 3vw, 4.5rem);
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 250px), 1fr));
  margin-top: var(--e-5);
}
.servico { transform-style: preserve-3d; will-change: transform; }
.servico__barra { display: block; height: 4px; width: 100%; border-radius: 4px; background: var(--g); transform: scaleX(0); transform-origin: left; transition: transform .9s var(--t-suave); }
.servico.visivel .servico__barra { transform: scaleX(1); }
.servico__icone { display: block; width: 34px; height: 34px; color: var(--g); margin: var(--e-3) 0 var(--e-2); }
.servico h3 { font-size: 1.35rem; letter-spacing: -.02em; margin-bottom: .5rem; }
.servico p { color: var(--claro-suave); font-size: .98rem; max-width: 34ch; }
/* Disclaimer de verba de mídia: informação real mas não é o que vende
   aqui — texto pequeno, sem borda separadora que chame atenção pra ele. */
.servicos__nota { margin-top: var(--e-4); color: var(--claro-suave); font-size: .78rem; max-width: 56ch; opacity: .8; }

/* ==========================================================================
   SEGMENTOS — grade simples de texto, sem imagem. Reaproveita .revela
   (não é toda seção que precisa de um efeito exclusivo próprio).
   ========================================================================== */
.segmentos__grade {
  display: grid; gap: clamp(1.75rem, 1.4rem + 1.6vw, 3rem);
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
  margin-top: var(--e-5);
}
.segmento { border-top: 1px solid var(--borda); padding-top: var(--e-2); }
.segmento h3 { font-size: 1.15rem; letter-spacing: -.02em; margin-bottom: .5rem; color: var(--texto); }
.segmento p { color: var(--texto-suave); font-size: .95rem; max-width: 36ch; }

/* Utilitário: fundo claro reutilizável pra qualquer seção do bloco de
   fechamento (como funciona, dúvidas) — mesma cor que .mapa-cmc já usava,
   só nomeada de forma genérica pra não depender de uma seção específica. */
.secao--clara { background: var(--claro-fundo); color: var(--claro-texto); }
.secao--clara .faq details { border-color: var(--claro-borda); }
.secao--clara .faq details:last-child { border-color: var(--claro-borda); }
.secao--clara .faq summary { color: var(--claro-texto); }
.secao--clara .faq summary:hover { color: var(--aco); }
.secao--clara .faq__corpo > p { color: var(--claro-suave); }

/* ==========================================================================
   COMO FUNCIONA — EFEITO PRÓPRIO: degraus em profundidade. O passo mais
   próximo do centro da tela vem à frente (translateZ + escala), os outros
   recuam — ver [data-escada] em main.js.
   ========================================================================== */
.escada { list-style: none; margin: var(--e-5) 0 0; padding: 0; perspective: 1100px; }
.escada__item {
  display: flex; gap: clamp(1.25rem, 1rem + 1vw, 2rem); align-items: flex-start;
  padding-block: var(--e-3); border-top: 1px solid var(--claro-borda);
  will-change: transform, opacity;
}
.escada__item:last-child { border-bottom: 1px solid var(--claro-borda); }
.escada__num {
  font-family: var(--fonte-display); font-weight: 1000; font-size: 1.8rem;
  letter-spacing: -.03em; color: color-mix(in srgb, var(--claro-texto) 22%, transparent);
  flex: 0 0 auto; line-height: 1;
}
.escada__item h3 { font-size: 1.2rem; letter-spacing: -.02em; margin-bottom: .35rem; color: var(--claro-texto); }
.escada__item p { color: var(--claro-suave); max-width: 48ch; font-size: .97rem; }

/* ==========================================================================
   MAPA CMC — diagnóstico. Fundo claro, contínuo com o bloco de fechamento
   inteiro (como funciona → Mapa CMC → dúvidas → CTA — ver index.html).
   ========================================================================== */
.mapa-cmc { background: var(--claro-fundo); color: var(--claro-texto); }
.check-lista {
  list-style: none; margin: var(--e-3) 0; padding: 0;
  display: grid; gap: .65rem;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
  max-width: 52rem;
}
.check-lista li {
  position: relative; padding-left: 1.6rem; color: var(--claro-texto); font-size: .98rem;
}
.check-lista li::before {
  content: ""; position: absolute; left: 0; top: .5em;
  width: 9px; height: 9px; border-radius: 50%;
  background: color-mix(in srgb, var(--neon) 65%, var(--navy) 35%);
}

/* ==========================================================================
   EMPILHA (IA E BUSCA) — EFEITO PRÓPRIO: fatias sticky que se sobrepõem
   Cada bloco gruda no topo e o próximo sobe por cima. Nada de rolagem reta.
   ========================================================================== */
.empilha { position: relative; isolation: isolate; background: var(--navy); padding-block: var(--e-6) var(--e-5); }
.empilha__cabeca, .empilha__pilha { position: relative; z-index: 1; }
.empilha__cabeca { padding-bottom: var(--e-5); }
.empilha__pilha { max-width: var(--largura); margin-inline: auto; padding-inline: var(--gutter); }
/* Sem sigla técnica (SEO/AEO/GEO/AIO/LLMO saíram — jargão que não
   esclarecia nada pro cliente, 30/07/2026). A cor do Google vira só um
   filete de acento à esquerda, mantendo a identidade sem o texto técnico. */
.fatia {
  position: sticky; top: 18vh;
  border-left: 4px solid var(--g);
  background: var(--grafite);
  border-radius: 0 20px 20px 0;
  padding: clamp(1.75rem, 1.4rem + 1.6vw, 3rem);
  margin-bottom: 1.25rem;
  box-shadow: 0 -1px 0 color-mix(in srgb, var(--texto) 8%, transparent);
}
.fatia h3 { font-size: clamp(1.2rem, 1.05rem + .7vw, 1.6rem); letter-spacing: -.025em; margin-bottom: .5rem; }
.fatia p { color: var(--texto-suave); max-width: 52ch; }

/* ==========================================================================
   PROVA — EFEITO PRÓPRIO: só tipografia gigante e vazio. Nenhuma foto.
   Depois de tanta imagem, o respiro é o efeito.
   ========================================================================== */
.prova { position: relative; isolation: isolate; background: var(--navy); padding-block: var(--e-6); overflow: hidden; }
.numeros { display: grid; gap: clamp(2.5rem, 2rem + 3vw, 4rem); grid-template-columns: repeat(auto-fit, minmax(min(100%, 200px), 1fr)); margin-top: var(--e-4); }
.numeros__valor { font-family: var(--fonte-display); font-weight: 1000; letter-spacing: -.045em; font-size: clamp(3rem, 2rem + 4.5vw, 6rem); line-height: .92; display: block; }
.numeros__rot { color: var(--texto-suave); font-size: .9rem; display: block; margin-top: var(--e-1); }
.acompanha { margin-top: var(--e-5); padding-top: var(--e-4); border-top: 1px solid var(--borda); }
.acompanha__titulo { font-family: var(--fonte-display); font-weight: 700; font-size: 1rem; color: var(--texto); margin-bottom: var(--e-3); }
.acompanha__chips { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: .6rem; max-width: 62rem; }
.acompanha__chips li {
  font-size: .85rem; color: var(--texto-suave);
  padding: .5rem 1rem; border-radius: 999px;
  border: 1px solid var(--borda);
  background: color-mix(in srgb, var(--grafite) 70%, transparent);
  white-space: nowrap;
}

/* ==========================================================================
   CTA — fundo branco puro, respiro máximo
   ========================================================================== */
.cta { background: var(--claro-fundo); color: var(--claro-texto); padding-block: var(--e-6); }
.cta__inner { text-align: center; }
.cta .rotulo { display: block; }
.cta .lead { margin-inline: auto; }

/* ==========================================================================
   FAQ — abertura animada por JS (grid-template-rows), sem corte seco
   ========================================================================== */
.faq { display: grid; max-width: 56rem; margin-top: var(--e-4); }
.faq details { border-top: 1px solid var(--borda); }
.faq details:last-child { border-bottom: 1px solid var(--borda); }
.faq summary {
  cursor: pointer; list-style: none; padding-block: var(--e-3);
  font-family: var(--fonte-display); font-weight: 700;
  font-size: clamp(1.02rem, .98rem + .3vw, 1.2rem); letter-spacing: -.015em;
  display: flex; align-items: center; justify-content: space-between; gap: 1.5rem;
  transition: color var(--t-rapida);
}
.faq summary:hover { color: var(--neon); }
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after { content: "+"; color: var(--neon); font-size: 1.5rem; line-height: 1; transition: transform var(--t-media); }
.faq details[open] summary::after { transform: rotate(135deg); }
/* grid 0fr→1fr anima altura sem precisar saber a altura final */
.faq__corpo { display: grid; grid-template-rows: 0fr; transition: grid-template-rows var(--t-suave); }
.faq details[open] .faq__corpo { grid-template-rows: 1fr; }
.faq__corpo > p { min-height: 0; overflow: hidden; color: var(--texto-suave); max-width: 60ch; padding-bottom: var(--e-3); }

/* ==========================================================================
   RODAPÉ
   ========================================================================== */
.rodape { position: relative; isolation: isolate; background: var(--navy); padding-block: var(--e-6) 2.5rem; overflow: hidden; }
.rodape__inner { position: relative; z-index: 1; }
.rodape__logo { width: clamp(150px, 20vw, 240px); height: auto; margin-bottom: var(--e-5); will-change: transform; }
/* auto-fit com minmax fixo estourava a margem em 375px: o minmax(240px)
   da primeira coluna + as de 150px não cabem, e o grid transborda em vez
   de quebrar. min() amarra o mínimo à largura real disponível. */
.rodape__grade {
  display: grid; gap: var(--e-4); padding-bottom: var(--e-4);
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 210px), 1fr));
}
.rodape__nota { color: var(--texto-suave); font-size: .95rem; max-width: 32ch; }
.rodape h4 { font-size: .72rem; letter-spacing: .2em; text-transform: uppercase; color: var(--texto-suave); margin-bottom: var(--e-2); font-weight: 700; }
.rodape ul { list-style: none; margin: 0; padding: 0; display: grid; gap: .6rem; }
.rodape a { color: var(--texto-suave); text-decoration: none; font-size: .95rem; transition: color var(--t-rapida); }
.rodape a:hover { color: var(--neon); }
.rodape__base { border-top: 1px solid var(--borda); padding-top: var(--e-3); display: flex; flex-wrap: wrap; gap: 1rem; justify-content: space-between; color: var(--texto-suave); font-size: .78rem; }

/* ==========================================================================
   BLOG — listagem e artigo
   Mesma regra do resto: sem card com borda. O que separa post é a linha
   divisória e o espaço; o marcador colorido dá o ritmo.
   ========================================================================== */
.blog-topo { padding-top: calc(78px + var(--e-5)); }

/* [data-profundidade]: itens ganham translateZ + sombra conforme entram —
   ver iniciarProfundidade em main.js. perspective no PAI, não no item, pra
   os três lerem como uma pilha real, não cada um isolado. */
.lista-posts { list-style: none; margin: 0; padding: 0; max-width: 58rem; perspective: 1400px; }
.post-item { border-top: 1px solid var(--borda); will-change: transform, opacity; }
.post-item:last-child { border-bottom: 1px solid var(--borda); }
.post-item a {
  display: grid; grid-template-columns: auto 1fr auto; gap: var(--e-3);
  align-items: start; padding-block: var(--e-3);
  text-decoration: none; color: inherit;
  transition: padding-inline var(--t-media);
}
.post-item a:hover { padding-inline: .75rem 0; }
.post-item__marca { width: 4px; align-self: stretch; border-radius: 4px; background: var(--neon); opacity: .35; transition: opacity var(--t-rapida); }
.post-item a:hover .post-item__marca { opacity: 1; }
.post-item h2, .post-item h3 { font-size: clamp(1.15rem, 1rem + .8vw, 1.6rem); letter-spacing: -.025em; margin-bottom: .4rem; }
.post-item p { color: var(--texto-suave); max-width: 56ch; font-size: .97rem; }
.post-item__meta { display: block; margin-top: .7rem; font-family: var(--fonte-display); font-size: .74rem; letter-spacing: .16em; text-transform: uppercase; color: var(--texto-suave); }
.post-item__seta { color: var(--neon); font-size: 1.2rem; transition: transform var(--t-media); align-self: center; }
.post-item a:hover .post-item__seta { transform: translateX(5px); }

.artigo__topo { padding-top: calc(78px + var(--e-4)); }
.artigo__volta { display: inline-block; margin-bottom: var(--e-3); color: var(--texto-suave); text-decoration: none; font-size: .9rem; transition: color var(--t-rapida); }
.artigo__volta:hover { color: var(--neon); }

.artigo__corpo { max-width: 44rem; padding-block: var(--e-5) var(--e-6); }
.artigo__abre { font-size: clamp(1.1rem, 1rem + .45vw, 1.3rem); color: var(--texto); line-height: 1.6; }
.artigo__corpo h2 {
  font-size: clamp(1.3rem, 1.1rem + 1vw, 1.9rem); letter-spacing: -.025em;
  margin: var(--e-4) 0 var(--e-2);
}
.artigo__corpo p { color: var(--texto-suave); margin-bottom: var(--e-2); line-height: 1.75; }
.artigo__corpo strong { color: var(--texto); font-weight: 600; }
.artigo__corpo em { color: var(--texto); font-style: italic; }

.artigo__cta {
  margin-top: var(--e-5); padding: var(--e-4);
  border-radius: 18px; background: var(--grafite);
}
.artigo__cta-titulo { font-family: var(--fonte-display); font-weight: 1000; font-size: 1.4rem; letter-spacing: -.025em; margin-bottom: .5rem; }
.artigo__cta p { margin-bottom: var(--e-3); }
.artigo__cta .btn { margin-top: 0; }

.artigo__proximos { margin-top: var(--e-5); border-top: 1px solid var(--borda); padding-top: var(--e-3); }
.artigo__proximos h2 { font-size: .74rem; letter-spacing: .2em; text-transform: uppercase; color: var(--texto-suave); margin: 0 0 var(--e-2); font-weight: 700; }
.artigo__proximos ul { list-style: none; margin: 0; padding: 0; display: grid; gap: .75rem; }
.artigo__proximos a { color: var(--texto); text-decoration: none; transition: color var(--t-rapida); }
.artigo__proximos a:hover { color: var(--neon); }

/* -- Flutuantes ----------------------------------------------------------- */
.zap {
  position: fixed; right: 1.15rem; bottom: 1.15rem; z-index: 90;
  width: 54px; height: 54px; border-radius: 50%;
  display: grid; place-items: center;
  background: var(--neon); color: var(--neon-tinta);
  box-shadow: 0 10px 30px color-mix(in srgb, var(--neon) 26%, transparent);
  transition: transform var(--t-rapida);
}
.zap:hover { transform: scale(1.08); }
.zap svg { width: 27px; height: 27px; }
.pular { position: absolute; left: -9999px; background: var(--neon); color: var(--neon-tinta); padding: .75rem 1.25rem; border-radius: 8px; z-index: 200; }
.pular:focus { left: 1rem; top: 1rem; }

/* ==========================================================================
   Telas estreitas
   ========================================================================== */
/* ==========================================================================
   MOBILE — bloco dedicado (≤640px)
   A maioria dos acessos é aqui. Auditado em 375px em 30/07/2026: rótulos
   abaixo de 12px, links de rodapé com 19px de alvo de toque e letras do
   efeito saindo até 150px fora da margem. Tudo corrigido abaixo.
   ========================================================================== */
@media (max-width: 640px) {
  :root { --gutter: 1.35rem; }

  /* Tipografia: nada abaixo de 12px, e títulos com respiro maior */
  .rotulo { font-size: .78rem; letter-spacing: .18em; margin-bottom: var(--e-2); }
  .painel__num, .rodape h4, .post-item__meta { font-size: .78rem; }
  /* Marca no topo: a imagem tem 26px, mas o link precisa de alvo de 44px */
  .marca { min-height: 44px; align-items: center; }
  .titulo-xl, .titulo-lg { max-width: 100%; letter-spacing: -.03em; }
  .lead { font-size: 1.02rem; max-width: 100%; }

  /* Alvo de toque: 44px é o mínimo confortável de polegar */
  .nav a, .rodape a, .artigo__proximos a { min-height: 44px; display: flex; align-items: center; }
  .rodape ul { gap: 0; }
  .btn { padding: 1rem 1.6rem; }

  /* Hero: o scrub de frames agora roda AQUI TAMBÉM (24 frames leves,
     ver montarHero em main.js). Então o hero volta a ser tela cheia com
     pin, igual desktop — não mais um bloco empilhado. */
  .hero { height: 100svh; min-height: 100svh; display: grid; align-items: center; }
  .hero__conteudo { padding-block: 6.5rem 3rem; }
  .hero__sub { max-width: 100%; margin-block: var(--e-2) var(--e-3); }
  .hero__acoes .btn { width: 100%; justify-content: center; }
  .hero__dica-scroll { margin-top: var(--e-3); }
  .hero__ato, .hero__outro { top: 6.5rem; max-width: 100%; }
  .hero__ato-sub { max-width: 100%; }

  /* Declaração: menos altura, texto sem furar */
  .declaracao { min-height: 56svh; }
  .declaracao__texto { max-width: 100%; }

  /* Tríade empilhada */
  .triade__trilho { flex-direction: column; transform: none !important; perspective: none; }
  .painel { flex-basis: auto; transform: none !important; }
  .painel__foto img { aspect-ratio: 4 / 5; height: auto; }

  /* Cena com foto: véu vertical, senão o texto cai sobre a parte clara */
  .cena { min-height: auto; }
  .cena__veu { background: linear-gradient(to bottom, color-mix(in srgb, var(--navy) 92%, transparent) 0%, color-mix(in srgb, var(--navy) 76%, transparent) 55%, var(--navy) 100%); }

  /* Sticky empilhado vira lista: não sobra altura de viewport pra
     sobreposição funcionar sem cortar texto */
  .fatia { position: static; padding: var(--e-3); }

  /* Serviços e números respiram mais */
  .servicos__grade { gap: var(--e-4); }
  .numeros { gap: var(--e-3); grid-template-columns: repeat(2, 1fr); }
  .numeros__valor { font-size: clamp(2.2rem, 1.5rem + 5vw, 3rem); }

  /* Wipe menor: em tela alta e estreita, 190px de faixa era tempo morto */
  .wipe { height: 70px; }

  /* Blog */
  .post-item a { grid-template-columns: auto 1fr; gap: var(--e-2); }
  .post-item__seta { display: none; }
  .artigo__corpo { padding-block: var(--e-4) var(--e-5); }
  .artigo__cta { padding: var(--e-3); }
}

@media (prefers-reduced-motion: reduce) {
  .revela { opacity: 1; transform: none; }
  .ambiente__tela, .hero__ato, .hero__outro, .transicao--faixa { display: none; }
  .cena__fundo img { transform: none !important; }
  .servico__barra { transform: scaleX(1) !important; }
  [data-kinetico] .palavra__int, [data-mascara] .linha-mascara__int { transform: none !important; filter: none !important; opacity: 1 !important; }
  .hero__intro { opacity: 1 !important; }
  .hero__dica-scroll { display: none; }
}

/* ==================== Formulário do Mapa CMC ====================
   Vive na seção clara (.cta). Herda os tokens de cor da página; nenhuma cor nova. */
.form{max-width:640px;margin:2rem auto 0;text-align:left}
.form__linha{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
@media (max-width:640px){.form__linha{grid-template-columns:1fr}}
.campo{display:block;margin-bottom:1rem}
.campo__rotulo{display:block;font-size:.85rem;font-weight:600;letter-spacing:.02em;
  color:var(--claro-texto);margin-bottom:.4rem}
.campo__opcional{font-weight:400;color:var(--claro-suave)}
.campo__entrada{width:100%;padding:.85rem 1rem;font:inherit;font-size:1rem;
  color:var(--claro-texto);background:var(--claro-fundo);
  border:1px solid rgba(11,18,32,.18);border-radius:10px;
  transition:border-color .18s ease,box-shadow .18s ease}
.campo__entrada::placeholder{color:var(--claro-suave)}
.campo__entrada:focus{outline:none;border-color:var(--neon);
  box-shadow:0 0 0 3px rgba(34,252,0,.22)}
select.campo__entrada{appearance:none;cursor:pointer;
  background-image:linear-gradient(45deg,transparent 50%,var(--claro-suave) 50%),
                   linear-gradient(135deg,var(--claro-suave) 50%,transparent 50%);
  background-position:calc(100% - 20px) 50%,calc(100% - 15px) 50%;
  background-size:5px 5px,5px 5px;background-repeat:no-repeat;padding-right:2.5rem}
/* Isca de robô: fora da tela, invisível pra quem lê e pra leitor de tela. */
.form__isca{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}
.form__nota{margin-top:1rem;font-size:.85rem;line-height:1.5;text-align:center;
  color:var(--claro-suave)}
.form .acoes{margin-top:1.25rem}
