/* =========================================================================
   KiteApp — Vitrine
   -------------------------------------------------------------------------
   A camada de desenho da PÁGINA DE VENDA. Carregada depois de `site.css`, no
   layout do site, e só ela.

   POR QUE UM SEGUNDO ARQUIVO, se a regra do projeto é "um arquivo de estilo".

   `site.css` atende cinco páginas com vidas diferentes: a vitrine, o cadastro,
   as duas legais e o CHECKOUT — este último no caminho do dinheiro, onde uma
   regressão de CSS custa uma venda. A vitrine foi redesenhada por inteiro; o
   checkout não mudou uma linha. Reescrever as seções dentro do arquivo comum
   colocaria as duas coisas no mesmo diff e no mesmo risco.

   Separadas, a fronteira é legível e o rollback é um `<link>`: as regras daqui
   nunca alcançam o checkout, porque o layout do checkout é outro
   (`site/checkout/layout.blade.php`) e não carrega este arquivo.

   O QUE FICOU EM `site.css` E É USADO AQUI: reset, tipografia base, botões,
   campos de formulário, cartões, modal, rodapé, e a folha inteira do cadastro.
   Aqui só entra o que a vitrine redesenhou.

   NOMES. Prefixo `site-` como no resto do projeto. Onde a estrutura mudou, o
   componente ganhou nome novo (`site-capa`, e não `site-hero`) — a página de
   campanha `/fale-conosco` continua usando o `site-hero` antigo, e redefinir a
   classe por baixo dela a quebraria sem aviso.

   CONTRASTE — a regra que mais restringe este arquivo, herdada de `site.css`:
     - `#1FA3A6`, `#C2DFDB`, `#F7F5EF` e `#7A858B` NUNCA são cor de texto. São
       superfície, filete, ícone e divisória. O teal da marca dá 2,81:1 sobre o
       off-white e reprovaria em qualquer tamanho;
     - a cor de ação (link, botão, foco) é `#198285`, 4,59:1 com texto branco;
     - texto forte `#0F2D3D` (13,17:1), texto secundário `#41545B`;
     - sobre fundo escuro, branco — e o teal claro só em corpo grande.

   GEOMETRIA. O vocabulário vem da ANATOMIA DO SÍMBOLO (manual, §04): o arco da
   vela sob pressão, as DUAS LINHAS em tensão diagonal que saem do ponto e
   tocam as pontas da pipa, e o ponto vazado da conexão. Daí saem os planos
   diagonais, as linhas convergentes e o círculo vazado usados como marcador.

   O que saiu, e de propósito: o DIVISOR DE ONDA. Ele era herança do produto de
   surf de onde este código veio, e onda não é o assunto de uma escola de kite —
   o assunto é vento, linha e tensão. No lugar entram cortes angulares, e só
   onde o contraste entre as duas faixas justifica.

   TEMA. A vitrine é SEMPRE clara. Não há alternância, e é deliberado: cartão de
   visita precisa sair igual em todo aparelho, inclusive no que está em modo
   escuro.

   MOBILE FIRST. A base é o celular; toda regra maior começa em `min-width`.
   Breakpoints: 560, 768, 1024 e 1280.
   ========================================================================= */

/* =========================================================================
   1. A FONTE — Inter, servida por nós
   -------------------------------------------------------------------------
   Até aqui `site.css` declarava `'Inter', system-ui, …` e NÃO servia arquivo
   nenhum. O efeito prático: quem não tem Inter instalada — a esmagadora
   maioria de quem abre o site — lia a página em Segoe UI ou Roboto. A marca
   pede Inter (manual §09), o desenho foi calibrado com as métricas dela, e o
   peso 800 dos títulos simplesmente não existe na pilha do sistema.

   Isto NÃO contradiz a decisão registrada de não usar CDN: a CSP da aplicação
   é `font-src 'self' data:`, e um arquivo em `public/fonts/` é `self`. O que
   estava vetado era o terceiro, não a fonte.

   UM arquivo, variável, subset latin: 48 KB cobrem os pesos 100–900 e todo o
   português (com acentos, cedilha, aspas tipográficas e travessão). Cinco
   pesos estáticos custariam o triplo.

   `font-display: swap` — o texto aparece imediatamente na pilha do sistema e
   troca quando a Inter chega. Numa página de venda, texto invisível por 3s é
   pior do que uma troca de fonte visível.
   ========================================================================= */

@font-face {
    font-family: 'Inter var';
    font-style: normal;
    font-weight: 100 900;
    font-display: swap;
    src: url('/fonts/inter-var-latin.woff2') format('woff2');
    /* Sem `unicode-range`: o arquivo já é o subset latin, e declarar a faixa
       de novo só criaria uma chance de errá-la. */
}

:root {
    /* A família ganha a variável na frente da pilha herdada. `Inter var` é o
       arquivo local; `Inter` cobre quem tem a fonte instalada no sistema e
       ainda não baixou a nossa. */
    --fonte-titulo: 'Inter var', 'Inter', system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
    --fonte-corpo: 'Inter var', 'Inter', system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;

    /* ---- Medidas da vitrine ----
       O contêiner cresceu de 1140 para 1200: a composição da capa põe o painel
       do produto ao lado do texto, e a 1140 o painel ficava pequeno demais para
       se ler o que está na tela — que é o ponto de mostrá-lo. */
    --maxw: 1200px;

    /* Respiro vertical de seção. `clamp` para não haver um salto no
       breakpoint: 56px no celular, 128px no desktop grande. */
    --secao-y: clamp(3.5rem, 8vw, 8rem);

    /* Raio dos blocos grandes (painel, palco, cartão de destaque). Os raios
       menores continuam vindo de site.css. */
    --raio-xl: 22px;

    /* A inclinação de TODO corte angular da página, num lugar só. Mudá-la aqui
       muda a página inteira e mantém os cortes paralelos entre si — que é o
       que faz a geometria parecer sistema, e não enfeite. */
    --angulo: 2.6vw;
}

/* =========================================================================
   2. TIPOGRAFIA DA VITRINE
   -------------------------------------------------------------------------
   Escala mais ambiciosa que a do resto do site: aqui o título É a peça
   gráfica. Com a Inter servida, dá para usar 800 de verdade e apertar o
   tracking — em fonte de sistema isso sairia diferente em cada máquina.
   ========================================================================= */

.site-vitrine h1,
.site-vitrine h2,
.site-vitrine h3 {
    font-family: var(--fonte-titulo);
    color: var(--navy);
    text-wrap: balance;      /* evita a última linha com uma palavra só */
}

/* Título da capa: 2,125rem no celular, 3,5rem a partir de ~1330px.

   O teto não é 4,25rem, que foi a primeira tentativa: o título tem 52
   caracteres e a coluna dele mede ~540px no desktop. A 68px ele quebrava em
   QUATRO linhas e empurrava os botões para fora da primeira tela — um título
   que não cabe na dobra não é um título grande, é um título mal medido.

   `line-height: 1.05` só é legível em peso alto com tracking negativo. Os três
   valores andam juntos e não se mexem separadamente. */
.site-capa__titulo {
    font-size: clamp(2.125rem, 4.2vw, 3.5rem);
    font-weight: 800;
    line-height: 1.05;
    letter-spacing: -.03em;
    margin: 0 0 var(--esp-5);
}

/* Título de seção. */
.site-vitrine .site-titulo,
.site-vitrine h2.site-titulo {
    font-size: clamp(1.75rem, 3.6vw, 2.75rem);
    font-weight: 800;
    line-height: 1.1;
    letter-spacing: -.022em;
    margin: 0 0 var(--esp-4);
}

.site-vitrine h3 {
    font-weight: 700;
    letter-spacing: -.011em;
}

/* Sobrelinha. Caixa alta com tracking largo, no verde de ação (4,59:1). */
.site-vitrine .site-eyebrow {
    display: block;
    font-size: .75rem;
    font-weight: 700;
    letter-spacing: .16em;
    text-transform: uppercase;
    color: var(--acao-forte);
    margin: 0 0 var(--esp-3);
}

/* Parágrafo de apoio, logo abaixo de um título. Maior que o corpo e mais
   claro que o título: é a ponte entre os dois. */
.site-vitrine .site-secao__apoio,
.site-capa__apoio {
    font-size: clamp(1.0625rem, 1.5vw, 1.1875rem);
    line-height: 1.6;
    color: var(--tinta-media);
    max-width: 58ch;
    margin: 0 0 var(--esp-5);
}

/* Numeral tabular onde há número comparável (preço, passo, indicador): sem
   isto o "1" da Inter é mais estreito e as colunas desalinham. */
.site-vitrine .site-oferta__valor,
.site-vitrine .site-plano__valor,
.site-passo__num {
    font-variant-numeric: tabular-nums;
    font-feature-settings: 'tnum' 1;
}

/* =========================================================================
   3. GEOMETRIA — o vocabulário gráfico
   -------------------------------------------------------------------------
   Três formas, e só três. Todas derivam do símbolo, nenhuma é desenho novo.
   ========================================================================= */

/* 3.1 PLANO ANGULAR
   Uma faixa cujo topo é cortado em diagonal, subindo da esquerda para a
   direita — a mesma direção das linhas de controle do símbolo.

   `clip-path` em vez de SVG: acompanha qualquer altura, não pede requisição e
   não deixa emenda de subpixel entre as faixas, que era o defeito clássico do
   divisor em imagem (uma linha clara de 1px aparecendo em tela boa).

   ONDE ELE ENTRA, e por que não em todo lugar: só nas duas transições de maior
   contraste da página — a entrada da faixa escura de benefícios e a do bloco
   de cadastro. Entre duas faixas claras o corte não teria o que recortar, e
   repeti-lo em toda seção seria trocar um enfeite obrigatório (a onda) por
   outro. Ele existe para marcar mudança de assunto, não para decorar. */
.site-corte-alto {
    clip-path: polygon(0 var(--angulo), 100% 0, 100% 100%, 0 100%);
    /* Sobe por baixo da seção anterior: sem isto sobra um triângulo com a cor
       do <body> no lugar que o corte abriu. O `padding-top` das duas faixas já
       compensa a altura perdida (`var(--secao-y) + var(--angulo)`). */
    margin-top: calc(var(--angulo) * -1);
}

/* Sem `clip-path` (navegador antigo) a faixa continua inteira e retangular —
   perde o corte, não perde conteúdo. Mas o `margin-top` negativo passaria a
   comer a última linha da seção de cima, e isso sim quebraria a leitura. */
@supports not (clip-path: polygon(0 0, 1px 0, 1px 1px)) {
    .site-corte-alto { margin-top: 0; }
}

/* 3.1b O TRAÇO ENTRE SEÇÕES CLARAS

   O mesmo desenho do filete do cartão, na escala da página: começa em teal
   cheio, esvanece na direção da leitura e não toca borda nenhuma.

   Ele resolve um problema que o corte angular não resolve. O corte precisa de
   contraste para existir — funciona entre uma faixa clara e uma escura, e some
   entre duas faixas claras, que é a maior parte desta página. Sem nada ali, as
   seções claras se emendam e o olho perde onde um assunto termina.

   É a alternativa certa ao divisor de onda: mesma função, um décimo do peso, e
   falando a língua do símbolo em vez da língua do mar.

   Mora DENTRO da seção, no topo, e não entre duas: como elemento próprio ele
   precisaria de marcação a mais em cada emenda, e um `<div>` decorativo por
   seção é exatamente o tipo de nó vazio que o projeto evita.

   `.site-secao--tracejo` é opt-in. Aplicada em toda seção clara, a página
   ganharia sete traços iguais e eles virariam papel de parede. */
.site-secao--tracejo::before {
    content: "";
    position: absolute;
    top: 0;
    left: 50%;
    transform: translateX(-50%);
    /* Acompanha o contêiner, com o mesmo respiro lateral: o traço nasce
       alinhado com a primeira letra do título abaixo dele. */
    width: min(var(--maxw), calc(100% - 2 * var(--esp-5)));
    height: 2px;
    /* As duas pontas em degradê, como no filete do cartão: o traço nasce, ganha
       peso no primeiro terço e some. Um começo em teal cheio seria um corte
       reto no meio da página — chama mais atenção do que o divisor merece. */
    background: linear-gradient(90deg,
        transparent 0%,
        var(--teal) 16%,
        var(--teal-claro) 58%,
        transparent 100%);
    opacity: .9;
}

/* 3.2 LINHAS EM TENSÃO
   As duas linhas de controle do símbolo, em par e convergindo para um ponto
   fora do quadro. Grafismo puro: `aria-hidden` na marcação, `pointer-events:
   none` aqui, para nunca roubar um clique do que está por baixo. */
.site-linhas {
    position: absolute;
    inset: 0;
    pointer-events: none;
    overflow: hidden;
    z-index: 0;
}

.site-linhas svg {
    position: absolute;
    display: block;
    width: 100%;
    height: 100%;
}

.site-linhas path,
.site-linhas line {
    fill: none;
    stroke: currentColor;
    vector-effect: non-scaling-stroke;
}

/* 3.3 PONTO VAZADO
   O círculo que substitui o pingo do "i" na marca vira o marcador da lista.
   É a peça mais reconhecível do símbolo na escala pequena.

   TAMANHO: 0,625rem (10px), e não os 1,375rem (22px) da primeira versão.

   A 22px o marcador tinha a altura de duas linhas de texto e o traço de 2,5px
   pesava mais que o título do item ao lado — a lista lia como uma sequência de
   alvos, não como texto. Um marcador existe para dizer onde a linha começa; se
   ele disputa atenção com o conteúdo, está grande.

   A referência é o próprio símbolo: lá o círculo é pequeno em relação à pipa, e
   é a pipa que se lê primeiro. Aqui vale a mesma proporção — o texto é a pipa.

   `margin-top` alinha o ponto com a PRIMEIRA LINHA do texto, e não com o topo
   da caixa: em item de duas linhas ele subiria acima da letra. */
.site-ponto {
    display: inline-block;
    flex: 0 0 auto;
    inline-size: .625rem;
    block-size: .625rem;
    margin-top: .42em;
    border: 2px solid var(--teal);
    border-radius: 50%;
    background: transparent;
}

/* =========================================================================
   4. ESTRUTURA DE SEÇÃO
   ========================================================================= */

.site-vitrine .site-container {
    max-width: var(--maxw);
}

.site-vitrine .site-secao {
    position: relative;
    padding-block: var(--secao-y);
}

.site-secao--branca { background: var(--superficie); }
.site-secao--neutra { background: var(--pagina); }

/* A faixa escura. Fundo de marca, texto branco, e o teal claro reservado ao
   apoio em corpo grande — em corpo pequeno ele perde contra o navy. */
.site-secao--escura {
    background: var(--navy);
    color: #fff;
}

.site-secao--escura .site-titulo,
.site-secao--escura h2,
.site-secao--escura h3 { color: #fff; }

.site-secao--escura .site-eyebrow { color: var(--teal-claro); }

.site-secao--escura .site-secao__apoio,
.site-secao--escura p { color: rgba(255, 255, 255, .82); }

/* Cabeçalho de seção centrado, com largura de leitura limitada. */
.site-cab {
    max-width: 46rem;
    margin: 0 0 var(--esp-7);
}

.site-cab--centro {
    margin-inline: auto;
    text-align: center;
}

.site-cab--centro .site-secao__apoio { margin-inline: auto; }

/* =========================================================================
   5. CABEÇALHO
   -------------------------------------------------------------------------
   Estrutura e comportamento continuam os de `site.css` (barra fixa, menu de
   celular em `<details>`, `.is-rolado` ligada por script). O que muda aqui é
   só o acabamento: vidro em vez de branco chapado, e um filete no lugar da
   sombra enquanto a página está no topo.
   ========================================================================= */

.site-header {
    background: rgba(247, 245, 239, .82);
    backdrop-filter: saturate(180%) blur(14px);
    -webkit-backdrop-filter: saturate(180%) blur(14px);
    border-bottom: 1px solid transparent;
    transition: background 200ms ease-out, border-color 200ms ease-out;
}

.site-header.is-rolado {
    background: rgba(255, 255, 255, .9);
    border-bottom-color: var(--linha);
}

/* Sem `backdrop-filter` (Firefox antigo, navegador de dentro de aplicativo) a
   barra vira opaca: translúcida sem desfoque deixa o texto do menu ilegível
   por cima do conteúdo que passa. */
@supports not (backdrop-filter: blur(1px)) {
    .site-header,
    .site-header.is-rolado { background: var(--pagina); }
}

.site-header__inner { max-width: var(--maxw); }

.site-nav__link {
    font-weight: 500;
    color: var(--tinta-media);
    transition: color 150ms ease-out;
}

.site-nav__link:hover,
.site-nav__link:focus-visible { color: var(--navy); }

/* AS DUAS PORTAS, LADO A LADO EM VEZ DE EMPILHADAS.

   Empilhados, "Portal do aluno" e "Entrar como escola" formavam um bloco de
   duas linhas em corpo 13 encostado no botão — pesado, desalinhado do resto da
   barra e ainda por cima com sublinhado no hover, que fazia a segunda linha
   pular. Deitados e separados por um filete, ocupam a mesma largura de antes e
   leem como o que são: duas entradas de mesmo peso, diferentes do CTA.

   A exceção ao alvo de 44px continua valendo e continua documentada em
   `site.css`: este bloco só existe a partir de 1024px, onde quem aponta é um
   mouse. No celular as duas portas aparecem no painel do menu, com área de
   toque inteira. */
@media (min-width: 1024px) {
    .site-acessos {
        flex-direction: row;
        align-items: center;
        gap: var(--esp-4);
        /* Respiro antes do botão. Sem ele "Entrar como escola" encosta no
           "Começar agora" e os dois leem como uma coisa só — justamente os dois
           que precisam ser distinguidos, porque um é entrada de quem já é
           cliente e o outro é a ação primária da página. */
        margin-right: var(--esp-2);
    }

    .site-acessos__link {
        position: relative;
        font-size: .875rem;
        font-weight: 600;
        color: var(--tinta-media);
    }

    /* O FILETE É UM PSEUDO-ELEMENTO, e não `border-left`.

       Como borda, ele acompanhava a altura do link inteiro — que é um
       `inline-flex` com `padding-block` — e saía com 26px de altura, do topo
       da caixa até abaixo do texto. Lido de longe, aquilo não era um separador:
       era a borda esquerda de um campo de formulário, e o "Entrar como escola"
       parecia estar dentro de uma caixa de texto.

       Como pseudo-elemento, a altura é escolhida (14px) e centrada na linha do
       texto, que é onde um separador tem de estar. */
    /* O `border-top` que vem de `site.css` era o separador do arranjo
       EMPILHADO: com um link em cima do outro, a divisória natural é
       horizontal. Deitados, ela vira um risco atravessando o topo do segundo
       link — que foi exatamente o que apareceu na tela, lido como sublinhado
       torto. Zerado aqui junto com o recuo que o acompanhava. */
    .site-acessos__link + .site-acessos__link {
        border-top: 0;
        padding-top: 0;
        margin-top: 0;
        padding-left: var(--esp-4);
    }

    .site-acessos__link + .site-acessos__link::before {
        content: "";
        position: absolute;
        left: 0;
        top: 50%;
        transform: translateY(-50%);
        width: 1px;
        height: 14px;
        background: var(--linha-forte);
    }

    .site-acessos__link:hover,
    .site-acessos__link:focus-visible {
        color: var(--navy);
        text-decoration: none;
    }
}

/* ENTRE 1024 E 1199 A BARRA NÃO FECHA A CONTA.

   Ali cabem, na mesma linha: a marca, cinco itens de menu, duas portas de
   acesso e o botão. Deitar as duas portas (que antes eram empilhadas) somou
   ~90px de largura, e o "Começar agora" — a ação primária da página — passou a
   ser CORTADO pela borda direita da janela. Não havia barra de rolagem para
   denunciar: o corte era silencioso, e só aparece em quem abre o site num
   laptop de 1024 ou num tablet deitado.

   Nesta faixa as duas portas voltam a empilhar. É o arranjo que `site.css` já
   traz por padrão, com o filete horizontal dele — por isso o pseudo-elemento
   vertical some aqui, senão apareceriam os dois separadores ao mesmo tempo. */
@media (min-width: 1024px) and (max-width: 1199.98px) {
    .site-acessos {
        flex-direction: column;
        align-items: flex-start;
        gap: 2px;
        margin-right: 0;
    }

    .site-acessos__link {
        font-size: .8125rem;
        line-height: 1.25;
    }

    .site-acessos__link + .site-acessos__link {
        padding-left: 0;
        padding-top: var(--esp-1);
        margin-top: 1px;
        border-top: 1px solid var(--linha);
    }

    .site-acessos__link + .site-acessos__link::before { content: none; }
}

/* =========================================================================
   6. CAPA (a primeira tela)
   -------------------------------------------------------------------------
   Duas colunas no desktop: o argumento à esquerda, o PRODUTO à direita.

   A composição da direita é a decisão que mais muda esta página em relação à
   anterior. Antes havia ali uma ilustração da pipa — honesta, mas muda: ela
   não diz o que o software faz. Agora há uma captura real do painel com a
   agenda da semana e, sobreposta, a mesma operação no celular do aluno. As
   duas telas juntas contam a frase que o texto ao lado promete, e são as telas
   que a pessoa vai encontrar quando entrar.

   A fotografia entra ATRÁS, dentro de um plano angular escuro, e nunca sozinha:
   ela diz de que mundo o produto é. Não está legendada como aula, escola ou
   aluno do KiteApp, porque não é — e afirmar isso seria o mesmo tipo de
   invenção que um depoimento falso.
   ========================================================================= */

.site-capa {
    position: relative;
    overflow: hidden;
    background: var(--pagina);
    padding-block: clamp(2rem, 5vw, 4.5rem) clamp(3rem, 7vw, 6rem);
}

.site-capa__grid {
    display: grid;
    gap: clamp(2.5rem, 5vw, 4rem);
    align-items: center;
}

.site-capa__texto {
    position: relative;
    z-index: 2;
    max-width: 40rem;
}

.site-capa__acoes {
    display: flex;
    flex-wrap: wrap;
    gap: var(--esp-3);
    margin-bottom: var(--esp-5);
}

/* As provas curtas. Ponto vazado + rótulo; o ponto é o do símbolo, na escala
   menor em que ele ainda se reconhece (manual §07: 16px é o mínimo). */
.site-capa__provas {
    display: flex;
    flex-wrap: wrap;
    gap: var(--esp-3) var(--esp-5);
    margin: 0;
    padding: 0;
    list-style: none;
}

.site-capa__provas li {
    display: flex;
    align-items: center;
    gap: var(--esp-2);
    font-size: .9375rem;
    font-weight: 500;
    color: var(--tinta-media);
}

/* Numa linha só, o ponto centra pelo flex e não precisa do recuo de topo que
   alinha com a primeira linha nos itens de texto corrido. */
.site-capa__provas .site-ponto {
    inline-size: .5rem;
    block-size: .5rem;
    margin-top: 0;
}

/* ---- O palco: onde o produto aparece ---- */

.site-capa__palco {
    position: relative;
    z-index: 1;
    /* A proporção segura a altura antes de a imagem carregar; sem ela a página
       salta quando o painel chega, e o salto acontece exatamente na primeira
       tela (é o que o Lighthouse mede como CLS). */
    aspect-ratio: 4 / 3.4;
    border-radius: var(--raio-xl);
    overflow: hidden;
    background: var(--navy);
}

/* A fotografia, dentro do palco. `object-position` puxa o enquadramento para a
   direita, onde está a pipa: no recorte estreito do celular o lado esquerdo é
   só céu. */
.site-capa__foto {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: 72% 40%;
}

/* Véu sobre a foto. Dois papéis: dar contraste para a interface branca que
   entra por cima, e puxar a fotografia para a cor da marca — sem isso a
   composição tem dois azuis diferentes brigando. */
.site-capa__veu {
    position: absolute;
    inset: 0;
    background:
        linear-gradient(200deg, rgba(15, 45, 61, .18) 0%, rgba(15, 45, 61, .72) 62%, rgba(15, 45, 61, .92) 100%);
}

/* O painel do produto. Sai pela borda direita do palco de propósito — a tela é
   maior que o quadro, e é assim que se lê "tem mais aqui dentro".

   A MARGEM DE CIMA É O QUE FAZ A FOTO EXISTIR. Com o painel encostado no topo,
   a fotografia virava uma tira de dois centímetros no canto e a composição
   perdia a única coisa que dizia "kitesurf". Um quinto da altura livre no topo
   deixa o kite e o céu aparecerem, e é ali que o olho entra na imagem. */
.site-capa__painel {
    position: absolute;
    left: 12%;
    top: 22%;
    width: 96%;
    max-width: none;
    height: auto;
    border-radius: 12px;
    border: 1px solid rgba(255, 255, 255, .18);
    box-shadow: 0 24px 60px rgba(6, 22, 31, .5);
}

/* O celular, no canto inferior esquerdo, encostando no painel sem cobrir a
   agenda. É o portal do aluno na largura real em que ele é usado — e é o que
   prova, sem uma frase, que o aluno tem para onde ir. */
.site-capa__fone {
    position: absolute;
    left: 1%;
    bottom: 6%;
    width: 27%;
    height: auto;
    border-radius: 16px;
    border: 3px solid rgba(255, 255, 255, .92);
    box-shadow: 0 18px 44px rgba(6, 22, 31, .55);
    background: #fff;
}

/* Legenda da composição. Obrigatória: a tela mostra dados semeados, e quem lê
   uma vitrine assume que o número é de cliente até que se diga o contrário. */
.site-capa__legenda {
    margin: var(--esp-3) 0 0;
    font-size: .75rem;
    color: var(--tinta-media);
}

/* ---- As linhas de tensão do fundo ---- */

.site-capa .site-linhas {
    color: var(--teal);
    opacity: .16;
}

@media (min-width: 1024px) {
    .site-capa__grid {
        /* A coluna do texto é a maior: ela carrega o título, e um título que
           quebra em quatro linhas custa mais do que trinta pixels de painel. */
        grid-template-columns: minmax(0, 1.12fr) minmax(0, 1fr);
        gap: clamp(2rem, 3.5vw, 3rem);
    }

    .site-capa__palco { aspect-ratio: 4 / 3.5; }
}

/* Abaixo de 1024 o palco vira uma faixa larga e baixa: empilhado, uma caixa
   quase quadrada empurraria o resto da página para fora da primeira tela. */
@media (max-width: 1023.98px) {
    .site-capa__palco { aspect-ratio: 16 / 10; }
    .site-capa__painel { left: 14%; top: 20%; width: 92%; }
    .site-capa__fone { width: 23%; left: 2%; bottom: 7%; }
}

@media (max-width: 559.98px) {
    .site-capa__palco { aspect-ratio: 4 / 3.2; }
    .site-capa__painel { left: 12%; top: 18%; width: 100%; }
    /* O celular sai no telefone: sobrepor uma foto de telefone a um telefone de
       verdade, em 360px, produz duas interfaces do tamanho de um selo e
       nenhuma legível. O portal aparece por inteiro na seção do aluno. */
    .site-capa__fone { display: none; }
}

/* =========================================================================
   6b. A CAIXA — um modelo só para a vitrine inteira
   -------------------------------------------------------------------------
   Até aqui a página tinha TRÊS caixas brancas diferentes, herdadas de momentos
   diferentes do projeto:

     `.site-dor`       (problemas)  branca, raio 16, sem sombra, com filete
     `.site-card`      (pagamentos) branca, raio 14, com sombra, sem filete
     `.site-cartao`    (planos)     idem — é o mesmo componente com outro nome
     `.site-destaque`  (pagamentos) teal claro, raio 16, sem sombra, sem filete

   Duas delas eram quase iguais e erravam por dois pixels de raio; a terceira
   trocava o fundo. Lado a lado na mesma rolagem, isso não lê como hierarquia —
   lê como três pessoas tendo desenhado a mesma coisa em semanas diferentes.

   Agora é UM modelo, e as variações são declaradas:

     padrão      branco, raio `--raio-lg`, borda `--linha`, filete no topo
     --calmo     o mesmo, com fundo teal claro (ênfase, não outro componente)
     --realce    o mesmo, com a borda em teal

   O `.site-dor` deixou de ter regra própria: ele É a caixa padrão, e o nome
   sobrevive só porque a seção de problemas o usa na marcação.

   O QUE NÃO ENTRA AQUI: `.site-pergunta` (sanfona — tem estado aberto/fechado),
   `.site-plano` (cartão de preço, com selo e ação), `.site-oferta` (bloco de
   números) e `.site-criar__caixa` (a moldura do formulário). São componentes
   com anatomia própria, não caixas de conteúdo — forçá-los no mesmo molde
   apagaria a diferença entre ler e escolher.
   ========================================================================= */

.site-vitrine .site-dor,
.site-vitrine .site-card,
.site-vitrine .site-cartao,
.site-vitrine .site-destaque {
    position: relative;
    padding: var(--esp-5);
    background: var(--superficie);
    border: 1px solid var(--linha);
    border-radius: var(--raio-lg);
    /* Sem sombra. A `--sombra-sm` que `.site-card` trazia é invisível sobre o
       off-white da página e só aparece sobre o branco — ou seja, aparecia em
       metade das seções e sumia na outra metade. Uma borda de 1px separa
       melhor, e separa igual em qualquer fundo. */
    box-shadow: none;
}

/* O FILETE SUPERIOR — o único enfeite da caixa.

   A primeira versão o esticava de borda a borda (`inset-inline: -1px`) com o
   canto arredondado do cartão. Não funcionava: um traço de 3px encostado na
   quina precisa acompanhar a curva do raio, e como ele é reto sobrava um degrau
   de um pixel em cada canto — a caixa parecia com a borda quebrada bem no
   ponto em que o olho entra nela.

   Agora ele COMEÇA RECUADO e termina esvanecendo, sem tocar quina nenhuma. O
   recuo resolve o degrau e faz o traço ler como o que ele é no vocabulário da
   marca: uma linha sob tensão entrando no bloco, não uma moldura.

   O mesmo desenho volta em `.site-secao--tracejo`, entre seções: uma forma só,
   em duas escalas. */
.site-vitrine .site-dor::before,
.site-vitrine .site-card::before,
.site-vitrine .site-cartao::before,
.site-vitrine .site-destaque::before {
    content: "";
    position: absolute;
    left: var(--esp-5);
    right: var(--esp-5);
    top: 0;
    height: 3px;
    border-radius: 0 0 3px 3px;
    /* DEGRADÊ NAS DUAS PONTAS. Com o traço nascendo em teal cheio, o começo era
       um corte reto no meio do nada — o mesmo defeito da quina, três
       centímetros mais para dentro. Saindo de transparente, ele nasce e morre,
       e o peso fica no meio, onde o olho pousa. */
    background: linear-gradient(90deg,
        transparent 0%,
        var(--teal) 22%,
        var(--teal-claro) 68%,
        transparent 100%);
}

/* ÊNFASE POR FUNDO — a única variação de cor da caixa, e ela é declarada.

   `.site-destaque` e o modificador `--calmo` trocam o branco pelo teal claro.
   Nada mais muda: mesmo raio, mesma borda, mesmo respiro interno, mesma
   ausência de sombra. É isso que faz as duas lerem como a MESMA peça em dois
   pesos, e não como dois componentes — que era o defeito de antes, quando cada
   uma tinha também raio e sombra próprios.

   Onde ela entra na vitrine: as duas caixas de canal de venda em "Pagamentos"
   ("Venda com a escola fechada" e "Continue vendendo pelo WhatsApp") e o bloco
   "Como o KiteApp ganha dinheiro?" na seção de preço. Nos três casos o
   conteúdo é uma nota ao lado do argumento principal, e não mais um item da
   mesma lista — a cor marca esse degrau. */
.site-vitrine .site-destaque,
.site-vitrine .site-card--calmo,
.site-vitrine .site-cartao--calmo {
    background: var(--turquesa-fundo);
    border-color: #CFE5E3;
}

/* Sobre o teal claro o filete não tem o que separar: teal sobre teal some, e o
   que sobra é um degradê fantasma na borda de cima. Mesma decisão da faixa
   escura — o filete existe onde há contraste para ele existir. */
.site-vitrine .site-destaque::before,
.site-vitrine .site-card--calmo::before,
.site-vitrine .site-cartao--calmo::before { content: none; }

/* ---- Os blocos que NÃO são caixa de conteúdo, alinhados no que dá ----

   `.site-oferta` (os três números do preço), `.site-precos__abas` (o seletor de
   modelo de cobrança) e `.site-tela` (a moldura das capturas) têm anatomia
   própria e continuam com ela. O que se alinha aqui é o acabamento: mesmo raio
   e SEM SOMBRA, como as caixas de conteúdo.

   A sombra era o que mais destoava. Ela vinha de `--sombra`, com 24px de
   difusão, e punha os três blocos flutuando meio centímetro acima de vizinhos
   que estavam apoiados na página — na mesma rolagem, isso lê como se metade
   dos elementos fosse de outro sistema de desenho. */
.site-vitrine .site-oferta,
.site-vitrine .site-precos__abas {
    box-shadow: none;
}

.site-vitrine .site-tela {
    border-radius: var(--raio-lg);
    /* A captura mantém sombra — e é a única exceção deliberada. Ela não é uma
       caixa da página: é uma janela para outra tela, e a sombra é o que diz
       isso. Mas suavizada, para ficar no mesmo tom das demais. */
    box-shadow: 0 1px 2px rgba(15, 45, 61, .05), 0 16px 36px rgba(15, 45, 61, .1);
}

.site-vitrine .site-card--realce,
.site-vitrine .site-cartao--realce {
    border-color: var(--teal);
    box-shadow: none;
}

/* NA FAIXA ESCURA a caixa se inverte: superfície translúcida sobre o navy, sem
   filete — em cima de fundo escuro o degradê teal vira uma mancha, e a borda
   clara já cumpre o papel de delimitar. */
.site-vitrine .site-secao--escura .site-card,
.site-vitrine .site-secao--escura .site-cartao,
.site-vitrine .site-faixa .site-card,
.site-vitrine .site-faixa .site-cartao {
    background: rgba(255, 255, 255, .07);
    border-color: rgba(255, 255, 255, .16);
}

.site-vitrine .site-secao--escura .site-card::before,
.site-vitrine .site-secao--escura .site-cartao::before,
.site-vitrine .site-faixa .site-card::before,
.site-vitrine .site-faixa .site-cartao::before { content: none; }

/* =========================================================================
   7. DORES — "não cabe mais no WhatsApp"
   -------------------------------------------------------------------------
   Três dores em cartão, e três em linha. A hierarquia é o argumento: as três
   primeiras são as que fazem a pessoa procurar solução; as outras confirmam.
   A lista anterior tinha nove itens no mesmo peso, e nove problemas de peso
   igual não pesam.

   A caixa em si vem do modelo acima — aqui só ficam o arranjo da grade e o
   corpo do texto.
   ========================================================================= */

.site-dores {
    display: grid;
    gap: var(--esp-4);
    grid-template-columns: 1fr;
}

.site-dor h3 {
    font-size: 1.0625rem;
    margin: 0 0 var(--esp-2);
}

.site-dor p {
    margin: 0;
    font-size: .9375rem;
    line-height: 1.55;
    color: var(--tinta-media);
}

.site-dor__ic { margin-bottom: var(--esp-4); }

/* As secundárias: sem cartão, sem ícone, só o ponto vazado. */
.site-dores-menores {
    display: grid;
    gap: var(--esp-4);
    margin: var(--esp-6) 0 0;
    padding: var(--esp-6) 0 0;
    border-top: 1px solid var(--linha);
    list-style: none;
}

.site-dores-menores li {
    display: flex;
    gap: var(--esp-3);
    font-size: .9375rem;
    line-height: 1.55;
    color: var(--tinta-media);
}

.site-dores-menores strong {
    display: block;
    color: var(--navy);
    font-weight: 600;
}

@media (min-width: 768px) {
    .site-dores { grid-template-columns: repeat(3, 1fr); }
    .site-dores-menores { grid-template-columns: repeat(3, 1fr); gap: var(--esp-5); }
}

/* =========================================================================
   8. OS CINCO PASSOS
   -------------------------------------------------------------------------
   Nada aqui: a linha do tempo (`.site-timeline`) é a de `site.css` e continua
   inteira — selo com ícone, número em contador, cinco colunas no desktop e uma
   coluna com selo à esquerda no celular. É um componente bem resolvido.

   O que mudou, mudou LÁ, na fonte, e não por sobreposição aqui: a linha que
   liga os passos era desenhada com uma máscara ondulada (`--onda-linha-h/v`) e
   passou a ser uma linha reta de 2px em degradê teal. A máscara, os tokens e os
   dois `@supports` que a degradavam saíram do arquivo — corrigir na origem
   custou o mesmo que sobrescrever e não deixa duas verdades sobre o mesmo
   traço.
   ========================================================================= */

/* =========================================================================
   9. ABAS DA PLATAFORMA — escola · aluno · instrutor
   -------------------------------------------------------------------------
   Três públicos, três telas. As abas são `<input type="radio">` + `:checked ~`,
   sem uma linha de JavaScript — a mesma técnica que a seção de preço já usava.
   O motivo é o mesmo: a página carrega zero script obrigatório, e um seletor
   que só funciona com JS é um seletor que às vezes não funciona.

   Semanticamente é um `<fieldset>` de escolha, e não `role="tablist"`: um
   tablist de mentira exigiria gestão de foco em JavaScript para não mentir
   para o leitor de tela.
   ========================================================================= */

.site-abas { position: relative; }

.site-abas__escolha {
    border: 0;
    padding: 0;
    margin: 0;
}

/* O GRUPO DE ABAS É CENTRADO, e o respiro abaixo dele é grande.

   Duas correções da primeira montagem, e as duas eram de alinhamento:

   1. o grupo ficava encostado à ESQUERDA embaixo de um cabeçalho centrado. O
      olho desce pelo eixo do título e encontra os botões deslocados para o
      canto — lê como elemento solto, não como o seletor daquele bloco;

   2. o painel começava colado nos botões. Sem respiro, o título "Toda a
      operação num painel só" parecia legenda da aba, e não o início do
      conteúdo que ela abre.

   `flex` no contêiner, e não `text-align: center`: o grupo é `inline-flex` com
   fundo próprio, e centrá-lo pelo texto dependeria de o pai ser bloco de
   texto — o que ele não é. */
.site-abas__botoes {
    display: inline-flex;
    flex-wrap: wrap;
    gap: 4px;
    padding: 5px;
    background: var(--turquesa-fundo);
    border-radius: var(--raio-pill);
}

.site-abas__escolha > .site-abas__botoes {
    display: inline-flex;
}

.site-abas__escolha {
    display: flex;
    flex-direction: column;
    align-items: center;
}

.site-abas__paineis {
    width: 100%;
    margin-top: clamp(2.5rem, 4vw, 3.5rem);
}

.site-abas__botao {
    display: inline-flex;
    align-items: center;
    gap: var(--esp-2);
    min-height: 2.75rem;
    padding: 0 var(--esp-5);
    border-radius: var(--raio-pill);
    font-size: .9375rem;
    font-weight: 600;
    color: var(--acao-forte);
    cursor: pointer;
    transition: background 160ms ease-out, color 160ms ease-out;
}

.site-abas__botao:hover { background: rgba(255, 255, 255, .6); }

/* NO CELULAR OS TRÊS RÓTULOS EMPILHAM, e a trilha deixa de ser cápsula.

   Os três não cabem numa linha em telefone nenhum, e não é por pouco: lado a
   lado eles medem ~590px, contra 343px de container num iPhone SE. Faltam 250px
   — não há aperto de padding que resolva, porque só o texto dos três rótulos
   ("Gestão da escola", "Portal do aluno", "Instrutor") já soma ~296px, mais os
   três ícones de 36px. Mesmo com padding zero não caberia.

   O que acontecia sem esta regra: `flex-wrap: wrap` quebrava a linha onde desse,
   e onde dava mudava com a largura — três fileiras em 375 e 390, duas em 430,
   ainda duas até ~620. Cada fileira encostada à ESQUERDA dentro de uma trilha
   centrada e larga, sobrando turquesa vazia à direita. Era isso que se via como
   "o link quebrando": não é o texto do rótulo que parte no meio (esse cabe
   inteiro), é o GRUPO que se parte em fileiras desalinhadas.

   E a cápsula piorava o estrago. `--raio-pill` são 999px, que o navegador corta
   em metade da altura da caixa: numa trilha de uma fileira (54px) isso é o
   estádio pretendido; em três fileiras (150px) vira um losango de cantos de
   75px, e a pílula navy da aba ativa aparecia atravessando essa curva.

   Empilhar resolve os dois de uma vez e não depende de medir texto — não existe
   largura em que a conta volte a não fechar, que é a armadilha de consertar
   quebra de linha empurrando o ponto de quebra para outro lugar.

   O corte é 768px, e não os ~622px onde a linha única passaria a caber: essa
   fronteira fica a 18px de folga da medida do texto, e 18px é menos que a
   diferença entre a Inter e a fonte de sistema que a substitui quando o woff2
   não chega. Em 768px sobram 130px — a conta fecha mesmo com outra fonte.

   `max-width` porque sem ele, num tablet retrato de 760px, os três viram faixas
   de 728px de largura: deixa de ler como seletor e passa a ler como menu. */
@media (max-width: 767.98px) {
    .site-abas__botoes {
        flex-direction: column;
        width: 100%;
        max-width: 22rem;
        /* 22px da pílula (o `--raio-pill` cortado em metade dos 44px de altura
           do rótulo) + os 5px de padding da trilha. É o raio que faz a trilha
           acompanhar a curva do primeiro e do último rótulo em vez de cruzá-la. */
        border-radius: 27px;
    }

    /* Centrado, e não à esquerda: o cabeçalho da seção logo acima é centrado, e
       o rótulo empilhado herda esse eixo. Alinhado à esquerda, o ícone de cada
       um formaria uma coluna deslocada do título. */
    .site-abas__botao { justify-content: center; }
}

/* ---- A troca, sem uma linha de JavaScript ----

   Os três radios são irmãos do grupo de botões E do grupo de painéis, e o
   pareamento é POSICIONAL: o enésimo radio marcado acende o enésimo rótulo e
   abre o enésimo painel. Nada aqui depende de `id`, então renomear um deles no
   Blade não quebra o CSS em silêncio — o que quebraria é mudar a ORDEM de um
   dos três grupos sem mudar a dos outros dois.

   `:nth-of-type` conta entre elementos `<input>`; `:nth-child` conta entre os
   filhos do contêiner. São contagens diferentes de propósito: os inputs
   dividem o `<fieldset>` com o `<legend>` e as duas `<div>`. */
.site-abas__radio:nth-of-type(1):checked ~ .site-abas__botoes > .site-abas__botao:nth-child(1),
.site-abas__radio:nth-of-type(2):checked ~ .site-abas__botoes > .site-abas__botao:nth-child(2),
.site-abas__radio:nth-of-type(3):checked ~ .site-abas__botoes > .site-abas__botao:nth-child(3) {
    background: var(--navy);
    color: #fff;
    box-shadow: var(--sombra-sm);
}

/* O foco precisa aparecer no RÓTULO: o input está fora da tela
   (`.site-sr-only`) e o anel dele não seria visto por ninguém. Sem isto, quem
   navega por teclado atravessa a seção às cegas. */
.site-abas__radio:nth-of-type(1):focus-visible ~ .site-abas__botoes > .site-abas__botao:nth-child(1),
.site-abas__radio:nth-of-type(2):focus-visible ~ .site-abas__botoes > .site-abas__botao:nth-child(2),
.site-abas__radio:nth-of-type(3):focus-visible ~ .site-abas__botoes > .site-abas__botao:nth-child(3) {
    outline: 3px solid var(--acao);
    outline-offset: 2px;
}

.site-abas__painel { display: none; }

.site-abas__radio:nth-of-type(1):checked ~ .site-abas__paineis > .site-abas__painel:nth-child(1),
.site-abas__radio:nth-of-type(2):checked ~ .site-abas__paineis > .site-abas__painel:nth-child(2),
.site-abas__radio:nth-of-type(3):checked ~ .site-abas__paineis > .site-abas__painel:nth-child(3) {
    display: block;
}

.site-abas__conteudo {
    display: grid;
    gap: clamp(2rem, 4vw, 3.5rem);
    align-items: center;
}

.site-abas__lista {
    display: grid;
    gap: var(--esp-4);
    margin: var(--esp-5) 0 0;
    padding: 0;
    list-style: none;
}

.site-abas__lista li {
    display: flex;
    gap: var(--esp-3);
    font-size: .9375rem;
    line-height: 1.55;
    color: var(--tinta-media);
}

.site-abas__lista strong {
    display: block;
    color: var(--navy);
    font-weight: 600;
}

@media (min-width: 1024px) {
    .site-abas__conteudo { grid-template-columns: minmax(0, .85fr) minmax(0, 1.15fr); }
    .site-abas__conteudo--invertido > *:first-child { order: 2; }
}

/* ---- A moldura das capturas ---- */

/* Painel de desktop. A borda clara e a sombra separam a captura do fundo sem
   simular uma janela de sistema operacional — um cromo de macOS numa captura
   de aplicação web é decoração que mente sobre a plataforma. */
.site-tela {
    display: block;
    width: 100%;
    height: auto;
    border-radius: 14px;
    border: 1px solid var(--linha);
    background: #fff;
    box-shadow: 0 1px 2px rgba(15, 45, 61, .06), 0 22px 50px rgba(15, 45, 61, .13);
}

.site-figura { margin: 0; }

.site-figura figcaption {
    margin-top: var(--esp-3);
    font-size: .75rem;
    color: var(--tinta-media);
}

/* Telefone. Moldura mínima: dois pixels de borda e um raio grande bastam para
   ler "isto é um celular" sem desenhar um aparelho de marca nenhuma. */
.site-fone {
    display: block;
    width: 100%;
    max-width: 268px;
    height: auto;
    margin-inline: auto;
    border-radius: 24px;
    border: 3px solid var(--navy);
    background: #fff;
    box-shadow: 0 20px 46px rgba(15, 45, 61, .18);
}

.site-fones {
    display: flex;
    gap: var(--esp-4);
    justify-content: center;
    align-items: flex-start;
}

/* Dois telefones lado a lado: o segundo desce um pouco e vem menor, para o par
   ter profundidade em vez de parecer uma tabela de dois itens. */
.site-fones > :nth-child(2) {
    margin-top: var(--esp-6);
    max-width: 232px;
}

@media (max-width: 559.98px) {
    .site-fones > :nth-child(2) { display: none; }
}

/* =========================================================================
   10. EVOLUÇÃO — a seção do diferencial
   -------------------------------------------------------------------------
   Ganhou seção própria porque é o que o produto tem e o concorrente de
   planilha não tem: o aluno vê a própria curva. Estava diluída no meio da
   lista de funcionalidades, onde competia com "cadastro de alunos".

   A captura é a tela real do portal, com o radar das habilidades de kite
   (body drag, water start, ganha barlavento) — ela prova, sozinha, que o
   currículo é do esporte, e não um formulário genérico com outro rótulo.
   ========================================================================= */

.site-evolucao {
    display: grid;
    gap: clamp(2rem, 4vw, 3.5rem);
    align-items: center;
}

.site-evolucao__pontos {
    display: grid;
    gap: var(--esp-5);
    margin: var(--esp-6) 0 0;
    padding: 0;
    list-style: none;
}

.site-evolucao__pontos li { display: flex; gap: var(--esp-4); }

.site-evolucao__pontos h3 {
    font-size: 1rem;
    margin: 0 0 4px;
}

.site-evolucao__pontos p {
    margin: 0;
    font-size: .9375rem;
    line-height: 1.55;
    color: var(--tinta-media);
}

@media (min-width: 1024px) {
    .site-evolucao { grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr); }
}

/* =========================================================================
   11. FAIXA ESCURA — a pausa da página
   -------------------------------------------------------------------------
   Uma faixa escura no meio de uma página clara faz duas coisas: quebra o ritmo
   antes que a leitura canse, e é o único lugar em que a marca aparece em
   escala. A fotografia entra aqui, no fundo, atrás de um véu forte.
   ========================================================================= */

.site-faixa {
    position: relative;
    overflow: hidden;
    background: var(--navy);
    color: #fff;
    padding-block: calc(var(--secao-y) + var(--angulo));
}

.site-faixa__foto {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    /* 62% da altura pega o kitesurfista e o sol; centrada, a faixa cairia na
       água e a foto viraria uma textura cinza sem assunto. */
    object-position: center 62%;
    /* Dessaturada para o azul da foto não brigar com o navy da marca, e
       escurecida o suficiente para o texto branco ter folga — mas não tanto
       que a imagem desapareça. Em `brightness(.42)`, que era o valor da
       primeira tentativa, a foto sumia por completo sob o véu e a faixa virava
       um retângulo azul chapado: todo o custo de carregar a imagem, nenhum
       benefício. O contraste do texto é medido contra o ponto MAIS CLARO
       (o sol, no canto), não contra a média. */
    filter: saturate(.62) brightness(.6);
}

.site-faixa__veu {
    position: absolute;
    inset: 0;
    /* Mais escuro nas pontas e mais leve no meio: as pontas é que encostam no
       texto, e o meio é onde a fotografia tem o que mostrar. */
    background:
        linear-gradient(180deg, rgba(15, 45, 61, .88) 0%, rgba(15, 45, 61, .52) 46%, rgba(15, 45, 61, .9) 100%);
}

.site-faixa > .site-container {
    position: relative;
    z-index: 1;
}

/* A COR DO TEXTO DENTRO DA FAIXA.

   `.site-vitrine h2, h3 { color: var(--navy) }`, lá em cima, é a regra geral da
   página — e sobre este fundo ela pinta azul-marinho sobre azul-marinho: os
   quatro títulos existiam no HTML e eram invisíveis na tela. A regra da faixa
   precisa vir depois e ser tão específica quanto, ou o defeito volta em
   qualquer refatoração da folha. */
.site-vitrine .site-faixa h2,
.site-vitrine .site-faixa h3,
.site-faixa .site-titulo { color: #fff; }

.site-faixa .site-eyebrow { color: var(--teal-claro); }

.site-faixa .site-secao__apoio,
.site-faixa p { color: rgba(255, 255, 255, .8); }

.site-faixa__frase {
    font-size: clamp(1.5rem, 3.4vw, 2.5rem);
    font-weight: 800;
    line-height: 1.18;
    letter-spacing: -.022em;
    margin: 0 0 var(--esp-7);
    max-width: 22ch;
}

/* O teal claro entra aqui, e só aqui, como cor de texto: corpo grande sobre o
   navy dá 10,16:1 — folga de sobra. Em corpo pequeno não passaria. */
.site-faixa__frase em {
    font-style: normal;
    color: var(--teal-claro);
}

.site-faixa__itens {
    display: grid;
    gap: var(--esp-5);
    margin: 0;
    padding: 0;
    list-style: none;
}

.site-faixa__itens h3 {
    font-size: 1rem;
    margin: var(--esp-4) 0 var(--esp-2);
}

.site-faixa__itens p {
    margin: 0;
    font-size: .9375rem;
    line-height: 1.55;
    color: rgba(255, 255, 255, .78);
}

.site-faixa .site-ic--claro {
    background: rgba(255, 255, 255, .12);
    color: #fff;
}

@media (min-width: 768px) {
    .site-faixa__itens { grid-template-columns: repeat(2, 1fr); gap: var(--esp-6); }
}

@media (min-width: 1024px) {
    .site-faixa__itens { grid-template-columns: repeat(4, 1fr); }
}

/* =========================================================================
   12. PAGAMENTOS
   -------------------------------------------------------------------------
   O diagrama do dinheiro em três caixas, com a comissão pendurada no meio. É a
   pergunta que o dono de escola faz primeiro, e a resposta cabe num desenho.
   Os números não estão aqui nem no HTML: saem de `PlatformPricing`.
   ========================================================================= */

.site-dinheiro {
    display: grid;
    gap: var(--esp-4);
    align-items: stretch;
    margin: 0 0 var(--esp-6);
}

.site-dinheiro__caixa {
    position: relative;
    padding: var(--esp-5);
    background: var(--superficie);
    border: 1px solid var(--linha);
    border-radius: var(--raio-lg);
    text-align: center;
}

.site-dinheiro__caixa--fim {
    border-color: var(--teal);
    background: var(--turquesa-fundo);
}

.site-dinheiro__rotulo {
    display: block;
    font-size: 1rem;
    font-weight: 700;
    color: var(--navy);
    margin-bottom: 2px;
}

.site-dinheiro__apoio {
    display: block;
    font-size: .8125rem;
    line-height: 1.45;
    color: var(--tinta-media);
}

/* A seta entre as caixas. Vira para baixo no celular por `rotate`, para não
   existirem dois desenhos de seta na folha. */
.site-dinheiro__seta {
    display: grid;
    place-items: center;
    color: var(--teal);
    transform: rotate(90deg);
}

/* A comissão. Fica FORA da linha do dinheiro, presa por um filete: ela não é
   uma etapa do caminho, é um desconto que acontece nele. */
.site-dinheiro__taxa {
    align-self: center;
    padding: var(--esp-3) var(--esp-4);
    border: 1px dashed var(--teal);
    border-radius: var(--raio);
    background: var(--superficie);
    text-align: center;
}

.site-dinheiro__taxa strong {
    display: block;
    font-size: 1.375rem;
    font-weight: 800;
    color: var(--navy);
    font-variant-numeric: tabular-nums;
}

.site-dinheiro__taxa span {
    display: block;
    font-size: .75rem;
    color: var(--tinta-media);
}

@media (min-width: 768px) {
    .site-dinheiro {
        grid-template-columns: 1fr auto 1fr auto 1fr;
        align-items: center;
    }

    .site-dinheiro__seta { transform: none; }
}

/* ---- As ressalvas do fim da seção ----

   `.site-observacao--centro` centraliza o texto e mantém o ponto teal encostado
   na margem esquerda do bloco. Com o texto centrado, o ponto fica solto no ar,
   longe da primeira palavra da primeira linha — lê como marcador de lista de um
   item que ninguém escreveu.

   Uma ressalva de fim de seção não é lista. O ponto sai; o texto continua
   centrado, e o recuo que existia para abrir espaço a ele sai junto. */
.site-vitrine .site-observacao--centro {
    padding-left: 0;
    max-width: 56ch;
}

.site-vitrine .site-observacao--centro::before { content: none; }

/* =========================================================================
   13. PERGUNTAS
   -------------------------------------------------------------------------
   `<details>` nativo: abre e fecha sem script, já é anunciado como sanfona
   pelo leitor de tela e continua funcionando com JavaScript desligado. Um
   acordeão escrito à mão precisaria de `aria-expanded`, gestão de foco e
   teclado — três coisas para errar em troca de nada.
   ========================================================================= */

.site-perguntas {
    display: grid;
    gap: var(--esp-3);
    max-width: 52rem;
    margin-inline: auto;
}

.site-pergunta {
    background: var(--superficie);
    border: 1px solid var(--linha);
    border-radius: var(--raio-lg);
    overflow: hidden;
    transition: border-color 160ms ease-out;
}

.site-pergunta[open] { border-color: var(--linha-forte); }

.site-pergunta > summary {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--esp-4);
    min-height: var(--toque);
    padding: var(--esp-4) var(--esp-5);
    font-size: 1rem;
    font-weight: 600;
    color: var(--navy);
    cursor: pointer;
    list-style: none;
}

/* O triângulo padrão sai nos dois motores; o sinal é desenhado por nós. */
.site-pergunta > summary::-webkit-details-marker { display: none; }
.site-pergunta > summary::marker { content: ""; }

.site-pergunta > summary:hover { background: var(--turquesa-fundo); }

.site-pergunta > summary:focus-visible {
    outline: 3px solid var(--acao);
    outline-offset: -3px;
}

/* O sinal de mais/menos: duas barras cruzadas, e a vertical some quando abre.
   Um caractere "+" dependeria da fonte; duas barras não dependem de nada. */
.site-pergunta__sinal {
    position: relative;
    flex: 0 0 auto;
    inline-size: 1.25rem;
    block-size: 1.25rem;
}

.site-pergunta__sinal::before,
.site-pergunta__sinal::after {
    content: "";
    position: absolute;
    background: var(--acao);
    border-radius: 2px;
    transition: transform 180ms ease-out, opacity 180ms ease-out;
}

.site-pergunta__sinal::before {
    inset-inline: 0;
    top: calc(50% - 1px);
    height: 2px;
}

.site-pergunta__sinal::after {
    inset-block: 0;
    left: calc(50% - 1px);
    width: 2px;
}

.site-pergunta[open] .site-pergunta__sinal::after {
    transform: scaleY(0);
    opacity: 0;
}

.site-pergunta__corpo {
    padding: 0 var(--esp-5) var(--esp-5);
    font-size: .9375rem;
    line-height: 1.65;
    color: var(--tinta-media);
}

.site-pergunta__corpo > :first-child { margin-top: 0; }
.site-pergunta__corpo > :last-child { margin-bottom: 0; }
.site-pergunta__corpo strong { color: var(--navy); }

/* =========================================================================
   14. CHAMADA FINAL E CADASTRO
   -------------------------------------------------------------------------
   O ÚNICO formulário da página, e ele fica aqui. Não há formulário no topo,
   nem em janela, nem no rodapé: uma porta de entrada só, para onde todos os
   botões da página apontam.

   O formulário em si continua sendo o de `site.css` — campos, validação,
   mensagens de erro e trilha de três passos não mudaram uma linha. O que muda
   é a moldura.
   ========================================================================= */

.site-criar {
    position: relative;
    overflow: hidden;
    background: var(--navy);
    color: #fff;
    padding-block: calc(var(--secao-y) + var(--angulo)) var(--secao-y);
}

.site-criar__foto {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    /* 32% pega o kite e a linha do sol do entardecer; mais abaixo a imagem
       vira areia escura, que não tem assunto nenhum. */
    object-position: center 32%;
    /* Como na faixa de benefícios: escurecida o bastante para o texto branco
       ter folga, clara o bastante para a fotografia existir. Em
       `brightness(.4)` — a primeira tentativa — ela sumia inteira debaixo do
       véu, e a seção pagava o download de uma imagem que ninguém via. */
    filter: saturate(.72) brightness(.72);
}

.site-criar__veu {
    position: absolute;
    inset: 0;
    /* DUAS CAMADAS, e cada uma resolve um problema diferente.

       A horizontal fecha o lado ESQUERDO, que é onde o texto branco vive: ali
       o contraste tem de ser garantido contra o ponto mais claro da foto.

       A vertical abre no topo — a faixa acima da caixa do formulário é a única
       parte da imagem que se vê inteira — e fecha embaixo, onde a caixa branca
       precisa de um fundo calmo para não competir com ela.

       Um gradiente só não daria conta: para proteger o texto ele teria de
       escurecer a faixa toda, e aí a fotografia voltaria a ser um retângulo. */
    background:
        linear-gradient(95deg, rgba(15, 45, 61, .9) 0%, rgba(15, 45, 61, .58) 46%, rgba(15, 45, 61, .3) 100%),
        linear-gradient(180deg, rgba(15, 45, 61, .32) 0%, rgba(15, 45, 61, .72) 52%, rgba(15, 45, 61, .92) 100%);
}

.site-criar > .site-container {
    position: relative;
    z-index: 1;
}

/* COLUNA ÚNICA, e não duas.

   A primeira montagem punha a chamada à esquerda e o formulário à direita.
   Medido na tela: 507px de texto contra 1341px de formulário — **834px de
   vazio** acompanhando quem rola preenchendo os campos, bem no momento em que a
   pessoa está decidindo.

   Empilhado, o formulário fica com a largura de leitura que `site.css` já lhe
   dá, a chamada ganha o eixo central e as provas viram uma faixa horizontal —
   que é onde elas funcionam: lidas de relance, antes do primeiro campo. */
.site-criar__cab {
    max-width: 46rem;
    margin: 0 auto clamp(2.5rem, 5vw, 3.5rem);
    text-align: center;
}

/* A COR DO TEXTO SOBRE A FAIXA ESCURA.

   O mesmo cuidado da faixa de benefícios, e pela mesma razão: a regra geral da
   vitrine pinta título em navy e apoio em `--tinta-media`, e as duas sobre este
   fundo dão texto invisível e texto ilegível. O seletor precisa citar a classe
   que o Blade realmente usa (`.site-secao__apoio`), e não uma inventada aqui —
   foi assim que o parágrafo de apoio saiu cinza-escuro sobre navy na primeira
   montagem, com contraste abaixo de 2:1. */
.site-vitrine .site-criar h2,
.site-criar .site-titulo { color: #fff; }

.site-criar .site-eyebrow { color: var(--teal-claro); }

.site-criar__cab .site-secao__apoio,
.site-criar__cab > p {
    color: rgba(255, 255, 255, .85);
    margin-inline: auto;
}

/* As quatro provas em faixa horizontal, e centradas por `justify-content` e não
   por `text-align`: cada item é um flex de ponto + texto, e centrar o texto
   dentro dele deixaria o ponto solto no meio da linha. */
.site-criar__provas {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: var(--esp-3) var(--esp-6);
    margin: clamp(1.5rem, 3vw, 2rem) 0 0;
    padding: 0;
    list-style: none;
}

.site-criar__provas li {
    display: flex;
    align-items: center;
    gap: var(--esp-2);
    font-size: .875rem;
    color: rgba(255, 255, 255, .88);
}

.site-criar__provas .site-ponto {
    border-color: var(--teal-claro);
    inline-size: .5rem;
    block-size: .5rem;
    margin-top: 0;
}

/* A caixa branca do formulário. Fica sobre o fundo escuro e é a única coisa
   clara desta faixa — que é como o olho encontra o que fazer. */
.site-criar__caixa {
    background: var(--superficie);
    border-radius: var(--raio-xl);
    padding: clamp(1.25rem, 3vw, 2rem);
    box-shadow: 0 30px 70px rgba(6, 22, 31, .38);
    color: var(--tinta);
}

/* =========================================================================
   15. RODAPÉ
   ========================================================================= */

.site-footer {
    background: var(--navy);
    color: rgba(255, 255, 255, .78);
}

/* O crédito da fotografia. Exigência da licença CC BY de uma das três imagens
   (as outras duas são CC0 e não pedem nada) — fica no rodapé, em corpo miúdo,
   porque é informação de procedência e não conteúdo da página. */
.site-footer__credito {
    margin: var(--esp-4) 0 0;
    font-size: .6875rem;
    line-height: 1.5;
    color: rgba(255, 255, 255, .5);
}

.site-footer__credito a { color: rgba(255, 255, 255, .72); }

/* =========================================================================
   16. MOVIMENTO
   -------------------------------------------------------------------------
   Um efeito só na página inteira: o bloco sobe 12px e aparece quando entra na
   tela. Sem parallax, sem partícula, sem pipa voando — é uma ferramenta de
   trabalho que está sendo vendida, e movimento contínuo numa página de venda
   cansa antes de encantar.

   O estado inicial é invisível, e quem devolve a opacidade é a classe que o
   IntersectionObserver aplica. Com JavaScript desligado o `<noscript>` do
   layout cancela a regra — senão o conteúdo sumiria de vez, que é perda de
   conteúdo e não um enfeite a menos.
   ========================================================================= */

@media (prefers-reduced-motion: no-preference) {
    .site-revelar {
        opacity: 0;
        transform: translateY(12px);
        transition: opacity 520ms ease-out, transform 520ms ease-out;
    }

    .site-revelar.is-visivel {
        opacity: 1;
        transform: none;
    }

    /* Escalonamento por irmão: cada cartão de uma grade entra 70ms depois do
       anterior. Quatro degraus bastam — no quinto o atraso já é percebido como
       lentidão, não como ritmo. */
    .site-revelar--1 { transition-delay: 70ms; }
    .site-revelar--2 { transition-delay: 140ms; }
    .site-revelar--3 { transition-delay: 210ms; }
    .site-revelar--4 { transition-delay: 280ms; }
}

/* Quem pediu menos movimento recebe a página inteira, imediatamente. */
@media (prefers-reduced-motion: reduce) {
    .site-revelar {
        opacity: 1 !important;
        transform: none !important;
        transition: none !important;
    }
}

/* =========================================================================
   17. IMPRESSÃO
   -------------------------------------------------------------------------
   Alguém imprime a página de preço para levar a uma reunião. Fundo escuro vira
   papel gasto e nada mais.
   ========================================================================= */

@media print {
    .site-capa__palco,
    .site-capa__foto,
    .site-faixa__foto,
    .site-criar__foto,
    .site-linhas { display: none !important; }

    .site-faixa,
    .site-criar,
    .site-secao--escura {
        background: #fff !important;
        color: #000 !important;
    }

    .site-faixa h2, .site-faixa h3, .site-criar h2,
    .site-secao--escura h2, .site-secao--escura h3 { color: #000 !important; }

    .site-pergunta > summary + * { display: block !important; }
}
