/* ZAMP - Z Talent | Programa de Trainee 2027
   Folha única do site. Editar aqui direto: o único arquivo gerado é js/main.js.
   As fontes vêm do Google Fonts, pelo <link> no <head> do index.html.

   Sumário
      1. Tokens (cores, fontes, medidas)
      2. Base
      3. Peças que se repetem (inclui a foto em polaroide)
      4. Topo
      5. Hero
      6. Marcas (logos animados)
      7. 01 Sobre o programa
      8. 02 Como são os 12 meses (produtos que caem)
      9. Faixa
     10. 03 Pré-requisitos
     11. 04 Benefícios
     12. 05 Sobre a empresa e galeria de fotos
     13. 06 Etapas
     14. 07 Trilhas
     15. Chamada final
     16. Rodapé
     17. Traço da rolagem
     18. Tablet (até 1080px)
     19. Celular (até 760px)
     20. Movimento reduzido
*/


/* =========================================================================
   1. TOKENS
   ========================================================================= */
:root {
  /* Marca */
  --azul: #0028F1;
  --laranja: #FD7F25;          /* detalhes: etiquetas, ícones, traço, botões */
  --marinho: #001166;
  --bege: #EBEADB;

  /* Superfícies e texto */
  --papel: #FBFAF6;
  --cartao: #FFFEFB;
  --texto-apoio: #59617A;
  --texto-claro: #DCE3FF;
  --texto-claro-apoio: #C7CCE6;
  --marinho-cartao: #0A1D86;
  --marinho-borda: #2E40A6;
  --azul-trilho: #3A5BF7;
  --azul-palavra: #1B41F6;

  /* Cores das marcas do ecossistema (logos oficiais): detalhes para a
     página não ficar só em azul. */
  --vermelho: #D62300;   /* Burger King */
  --verde: #00891A;      /* Subway */
  --amarelo: #F2B700;    /* Subway */
  --verde-escuro: #006A14; /* cartões sobre o fundo verde */
  --verde-claro: #DDF3E1;  /* texto de apoio sobre o verde */

  --titulo: 'Poppins', 'Arial Black', Arial, sans-serif;
  --texto: 'Montserrat', 'Segoe UI', Arial, sans-serif;

  /* Largura máxima do conteúdo. Trocar aqui muda o site inteiro. */
  --largura: 1040px;

  --contorno: 3px solid var(--marinho);
  --raio: 28px;

  /* Altura do topo fixo (barra + contorno). O hero e a jornada, que também
     gruda na tela, descontam essa altura. */
  --topo-h: 91px;
}


/* =========================================================================
   2. BASE
   ========================================================================= */
*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; scroll-padding-top: calc(var(--topo-h) + 16px); }
body { margin: 0; background: var(--papel); color: var(--marinho); font-family: var(--texto); font-weight: 500; -webkit-font-smoothing: antialiased; overflow-x: hidden; }
h1, h2, h3, p, figure, ol, ul { margin: 0; }
ol, ul { padding: 0; list-style: none; }
img { display: block; max-width: 100%; height: auto; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; cursor: pointer; }
mark { background: none; color: inherit; }
a:focus-visible, button:focus-visible, summary:focus-visible { outline: 3px solid var(--laranja); outline-offset: 4px; }
::selection { background: var(--laranja); color: var(--marinho); }

.container { width: min(88%, var(--largura)); margin-inline: auto; }
.sprite { position: absolute; width: 0; height: 0; overflow: hidden; }
.icone { width: 18px; height: 18px; flex-shrink: 0; fill: none; stroke: currentColor; stroke-width: 2.6; stroke-linecap: round; stroke-linejoin: round; }

.skip { position: fixed; left: 16px; top: -80px; z-index: 100; padding: 12px 16px; background: var(--laranja); font-weight: 700; }
.skip:focus { top: 16px; }

/* Entrada suave dos blocos. Usa `translate` para não brigar com as
   inclinações dos adesivos, que usam `rotate`. */
.js .reveal { opacity: 0; translate: 0 24px; transition: opacity .7s ease, translate .7s cubic-bezier(.2, .7, .2, 1); }
.js .reveal.visible { opacity: 1; translate: 0 0; }


/* =========================================================================
   3. PEÇAS QUE SE REPETEM
   ========================================================================= */
.secao { padding-block: clamp(72px, 9vw, 120px); }

.titulo { font-family: var(--titulo); font-size: clamp(40px, 6.2vw, 88px); line-height: .95; font-weight: 900; letter-spacing: -.045em; text-wrap: balance; }
/* Nome da seção: é o primeiro destaque de cada bloco, por isso vem como
   adesivo cheio, e não só com contorno. */
.etiqueta { display: inline-flex; padding: 11px 20px; background: var(--azul); color: var(--papel); border: var(--contorno); border-radius: 999px; box-shadow: 4px 4px 0 var(--marinho); font-size: 13px; font-weight: 800; line-height: 1; letter-spacing: .18em; white-space: nowrap; }
.etiqueta + .titulo { margin-top: 28px; }
/* Nos fundos escuros o adesivo inverte, para continuar saltando. */
.etiqueta-clara { background: var(--papel); color: var(--marinho); }
.etiqueta-bege { background: var(--bege); color: var(--marinho); }
.etiqueta-laranja { background: var(--laranja); color: var(--marinho); }
.etiqueta-amarela { background: var(--amarelo); color: var(--marinho); }
.etiqueta-verde { background: var(--verde); color: var(--papel); }
.etiqueta-vermelha { background: var(--vermelho); color: var(--papel); }
.lead { max-width: 520px; margin-top: 22px; font-size: clamp(16px, 1.4vw, 19px); line-height: 1.6; font-weight: 600; color: var(--texto-apoio); }
.lead-clara { color: var(--texto-claro-apoio); }
/* Negrito dentro do texto corrido: 800, o peso mais forte da Montserrat que a
   página carrega. Sem isso o navegador inventa um 900 engrossando a letra. */
.lead strong { font-weight: 800; }

.destaque { display: inline-block; padding: 0 .16em .06em; border-radius: .2em; rotate: -1.5deg; }
.destaque-azul { background: var(--azul); color: var(--papel); }
.destaque-papel { background: var(--papel); color: var(--marinho); border: var(--contorno); }
.cor-azul { color: var(--azul); }
.cor-bege { color: var(--bege); }

.botao { display: inline-flex; align-items: center; justify-content: center; gap: 12px; min-height: 56px; padding: 0 26px; border: var(--contorno); border-radius: 999px; font-family: var(--titulo); font-size: 16px; font-weight: 800; transition: translate .2s ease; }
.botao:hover { translate: -2px -2px; }
.botao-azul { background: var(--azul); color: var(--papel); box-shadow: 4px 4px 0 var(--marinho); }
.botao-marinho { background: var(--marinho); color: var(--papel); box-shadow: 5px 5px 0 var(--laranja); }
.botao-laranja { background: var(--laranja); color: var(--marinho); box-shadow: 6px 6px 0 var(--marinho); }
.botao-grande { min-height: 68px; padding: 0 34px; font-size: 19px; }

.cartao { background: var(--cartao); border: var(--contorno); border-radius: var(--raio); }
.numero { display: grid; place-items: center; width: 62px; height: 62px; border: var(--contorno); border-radius: 50%; font-family: var(--titulo); font-size: 22px; font-weight: 900; }
.numero-laranja { background: var(--laranja); }
.numero-azul { background: var(--azul); color: var(--papel); }
.numero-bege { background: var(--bege); }
.numero-verde { background: var(--verde); color: var(--papel); }
.numero-amarelo { background: var(--amarelo); }
.numero-vermelho { background: var(--vermelho); color: var(--papel); }
.numero .icone { width: 30px; height: 30px; stroke-width: 2.2; }

/* Foto em polaroide: moldura de papel, contorno e sombra dura, levemente
   torta (--giro). Endireita e cresce um pouco quando o mouse passa. Não use
   junto com .reveal no mesmo elemento: coloque a polaroide dentro dele. */
.polaroid { position: relative; padding: 10px 10px 40px; background: var(--cartao); border: var(--contorno); box-shadow: 8px 8px 0 var(--marinho); rotate: var(--giro, 0deg); transition: rotate .45s cubic-bezier(.2, 1.5, .4, 1), scale .45s cubic-bezier(.2, 1.5, .4, 1); }
.polaroid img { width: 100%; border: 2px solid var(--marinho); }
.polaroid:hover { rotate: 0deg; scale: 1.04; }


/* =========================================================================
   4. TOPO
   ========================================================================= */
/* Topo fixo: acompanha a rolagem e fica sempre à mão. */
.topo { position: sticky; top: 0; z-index: 50; background: var(--papel); border-bottom: var(--contorno); }
.topo-barra { display: flex; align-items: center; gap: 24px; height: 88px; }
.topo-logo img { width: auto; height: 44px; }
.topo-nav { display: flex; align-items: center; gap: 4px; margin-left: auto; font-size: 14px; font-weight: 700; }
.topo-nav a { padding: 10px 16px; border-radius: 999px; transition: background .2s; }
.topo-nav a:hover { background: var(--bege); }
.topo-inscricao { min-height: 50px; padding: 0 20px; font-size: 15px; }
.menu { display: none; align-items: center; justify-content: center; width: 46px; height: 46px; border: var(--contorno); border-radius: 50%; background: var(--papel); }
.menu .icone { width: 22px; height: 22px; }


/* =========================================================================
   5. HERO

   Arte animada do Z Talent (4000x1535, o dobro de 2000x768). Largura no
   padrão Hager: base de 1140px, acompanhando a tela a partir daí e travando
   em 2000px. A altura ocupa a tela abaixo do topo; o excedente de largura
   sai pelas laterais (object-fit: cover).
   Trava de segurança: título, foto e logos ocupam uns 62% do centro da
   arte. Em tela muito alta o corte lateral pegaria o "Z", então a altura
   para em largura / 1,72, a proporção em que tudo ainda cabe.
   Acima de 2000px as laterais continuam as cores das bordas da arte.
   z-index 2: o hero cobre o traço da rolagem (seção 17).
   ========================================================================= */
.hero { position: relative; z-index: 2; display: flex; justify-content: center; height: min(calc(100svh - var(--topo-h)), calc(min(100vw, 2000px) / 1.72)); overflow: hidden; background: linear-gradient(90deg, #0000FF 50%, #FFFFFF 50%); }
.hero picture { display: contents; }
.hero-kv { display: block; flex: none; width: clamp(1140px, 100vw, 2000px); max-width: none; height: 100%; object-fit: cover; object-position: center; }

/* Abaixo de 1140px a base de 1140 cortaria o título nas laterais: aqui a
   arte encolhe junto com a tela e a seção fica com a altura dela. A caixa
   1400x768 corta só sobra de fundo (o conteúdo vai de 380 a 1640 na arte
   de 2000). Vale até vir a versão mobile da arte. */
@media (max-width: 1139px) {
  .hero { height: auto; }
  .hero-kv { width: 100%; height: auto; aspect-ratio: 1400 / 768; }
}


/* =========================================================================
   6. MARCAS

   Logos oficiais em adesivos redondos (os desenhos ficam no começo do
   index.html, nos <symbol id="marca-...">). Quando o adesivo aparece na tela,
   o JS põe .desenhada: ele salta, o logo se contorna em marinho e depois
   ganha cor. Passar o mouse por cima recomeça tudo, só naquele adesivo.
   Com a rolagem, os adesivos da faixa balançam (--balanco).
   Os mesmos adesivos aparecem pequenos sobre as fotos da galeria.
   ========================================================================= */
/* Cada faixa colorida numa cor do grupo: a página não fica só azul. */
.marcas { padding-block: 22px; background: var(--laranja); color: var(--papel); border-block: var(--contorno); }
.marcas-linha { display: flex; align-items: center; justify-content: center; gap: 24px; }
.marcas-rotulo { font-size: 12px; font-weight: 700; line-height: 1.6; letter-spacing: .16em; }
.marcas-fim { text-align: right; }
.marcas-lista { display: flex; align-items: center; gap: clamp(14px, 2.2vw, 30px); }

.marca { display: block; rotate: calc(var(--giro, 0deg) + var(--balanco, 0deg)); }
.marca-adesivo { display: grid; place-items: center; width: clamp(64px, 7.4vw, 104px); aspect-ratio: 1; background: var(--papel); border: var(--contorno); border-radius: 50%; box-shadow: 4px 4px 0 var(--marinho); }
/* Altura igual à largura: sem isso o <svg> assume 150px de altura e estica
   o adesivo redondo. */
.marca-logo { display: block; width: 66%; height: auto; aspect-ratio: 1; overflow: visible; }

/* Ponto de partida (só com JS): adesivo recolhido, logo sem contorno nem cor. */
.js .marca-adesivo { scale: 0; }
.js .marca-logo { stroke: var(--marinho); stroke-width: 1.3; stroke-linejoin: round; stroke-dasharray: 1; stroke-dashoffset: 1; fill-opacity: 0; }
.js .marca.desenhada .marca-adesivo { scale: 1; transition: scale .6s cubic-bezier(.2, 1.7, .4, 1) var(--atraso, 0s); }
.js .marca.desenhada .marca-logo { stroke-dashoffset: 0; fill-opacity: 1; stroke-opacity: 0; transition: stroke-dashoffset 1.1s cubic-bezier(.65, 0, .35, 1) calc(var(--atraso, 0s) + .2s), fill-opacity .5s ease calc(var(--atraso, 0s) + 1s), stroke-opacity .4s ease calc(var(--atraso, 0s) + 1.35s); }
.marcas .marca:nth-child(2) { --atraso: .15s; }
.marcas .marca:nth-child(3) { --atraso: .3s; }
.marcas .marca:nth-child(4) { --atraso: .45s; }
/* Mouse em cima: recomeça na hora, sem esperar a vez dos outros. */
.marcas .marca.repetindo, .marca.repetindo { --atraso: 0s; }

/* Animação pausada: logos prontos, sem salto nem contorno. */
.motion-paused .marca-adesivo { scale: 1; }
.motion-paused .marca-logo { stroke-dashoffset: 0; fill-opacity: 1; stroke-opacity: 0; }


/* =========================================================================
   7. 01 SOBRE O PROGRAMA
   ========================================================================= */
/* Abertura no formato pedido pela ZAMP: texto à esquerda; à direita um
   cartão-adesivo com a assinatura do programa, o selo de 12 meses e as
   marcas (os mesmos adesivos animados da faixa azul). */
.programa-abertura { display: grid; grid-template-columns: minmax(0, 1.08fr) minmax(0, .92fr); gap: clamp(40px, 6vw, 84px); align-items: center; }
.programa-topo { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding-bottom: 18px; border-bottom: 2px solid var(--marinho); }
.programa-icones { display: flex; gap: 14px; color: var(--marinho); }
@media (max-width: 1180px) { .programa-icones { gap: 8px; } .programa-icones svg { width: 28px; height: 28px; } }
.programa-icones svg { width: 34px; height: 34px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
/* Os ícones pulam em sequência quando o bloco aparece. */
.js .programa-texto.visible .programa-icones svg { animation: icone-pula .7s cubic-bezier(.3, 1.6, .5, 1) both; }
.programa-icones svg:nth-child(2) { animation-delay: .1s !important; }
.programa-icones svg:nth-child(3) { animation-delay: .2s !important; }
.programa-icones svg:nth-child(4) { animation-delay: .3s !important; }
@keyframes icone-pula { 0% { translate: 0 14px; opacity: 0; } 60% { translate: 0 -6px; opacity: 1; } 100% { translate: 0 0; } }
.programa-nome { margin-top: 24px; font-size: clamp(11px, 1.05vw, 13px); font-weight: 800; letter-spacing: .1em; color: var(--azul); }
.programa-titulo { margin-top: 12px; font-family: var(--titulo); font-size: clamp(30px, 3.4vw, 46px); line-height: 1.06; font-weight: 600; letter-spacing: -.035em; text-wrap: balance; }
.programa-titulo strong { font-weight: 900; color: var(--azul); }
.programa-texto > p:not(.etiqueta) { margin-top: 18px; font-size: 17px; line-height: 1.65; color: var(--texto-apoio); }
.programa-texto > p strong { font-weight: 700; color: var(--marinho); }
.programa-acoes { display: flex; flex-wrap: wrap; align-items: center; gap: 18px 28px; margin-top: 32px; }

.programa-marca { position: relative; padding: clamp(36px, 4.4vw, 56px) clamp(22px, 3vw, 40px) clamp(30px, 3.6vw, 44px); background: var(--cartao); border: var(--contorno); border-radius: 32px; box-shadow: 10px 10px 0 var(--azul); text-align: center; rotate: 1.5deg; }
.programa-assinatura { display: flex; align-items: flex-end; justify-content: center; font-family: var(--titulo); font-size: clamp(56px, 6.6vw, 96px); font-weight: 900; line-height: .82; letter-spacing: -.055em; }
.pa-z { display: grid; place-items: center; width: 1.02em; height: 1.02em; margin-right: .1em; padding-top: .06em; background: var(--azul); color: var(--papel); border: var(--contorno); border-radius: .16em; box-shadow: 4px 4px 0 var(--marinho); rotate: -6deg; }
.pa-talent { color: var(--marinho); }
.pa-ano { margin-left: .1em; padding-bottom: .06em; font-size: .34em; line-height: .88; letter-spacing: -.02em; text-align: left; color: var(--azul); }
.pa-trilha-titulo { margin-top: 34px; font-size: 13px; font-weight: 800; letter-spacing: .2em; }
.pa-trilha { margin-top: 12px; font-size: 15px; line-height: 1.6; color: var(--texto-apoio); }
.pa-marcas { display: flex; flex-wrap: wrap; justify-content: center; gap: clamp(10px, 1.4vw, 16px); margin-top: 20px; }
.pa-marcas .marca-adesivo { width: clamp(56px, 5.4vw, 76px); box-shadow: 3px 3px 0 var(--marinho); }
.pa-marcas .marca:nth-child(2) { --atraso: .15s; }
.pa-marcas .marca:nth-child(3) { --atraso: .3s; }
.pa-marcas .marca:nth-child(4) { --atraso: .45s; }
.programa-marca .programa-meses { right: -42px; top: -52px; width: 132px; }
.programa-marca .programa-meses strong { font-size: 40px; }

.programa-meses { position: absolute; right: -36px; top: -34px; display: grid; place-content: center; width: 168px; aspect-ratio: 1; text-align: center; isolation: isolate; rotate: 10deg; }
.programa-meses strong { font-family: var(--titulo); font-size: 50px; line-height: .9; font-weight: 900; letter-spacing: -.04em; }
.programa-meses span { font-size: 11px; font-weight: 800; line-height: 1.2; }
.link-seta { display: inline-flex; align-items: center; gap: 14px; margin-top: 10px; font-family: var(--titulo); font-size: 17px; font-weight: 800; }
.link-seta-icone { display: grid; place-items: center; width: 44px; height: 44px; border-radius: 50%; background: var(--marinho); color: var(--papel); transition: translate .2s; }
.link-seta:hover .link-seta-icone { translate: 0 3px; }


/* =========================================================================
   8. 02 COMO SÃO OS 12 MESES (PRODUTOS QUE CAEM)

   A seção tem a altura de uma tela e toca sozinha: quando ela chega, o JS
   roda o progresso que derruba um produto por fase, 3 s cada. Com animação
   pausada, ela vira um bloco de altura livre e mostra o combo pronto.
   ========================================================================= */
.journey { position: relative; }
/* z-index 3: a jornada cobre o traço da rolagem enquanto passa (seção 17).
   A altura desconta o topo fixo, que não pode cobrir o título dela. */
.journey-sticky { position: relative; z-index: 3; height: calc(100svh - var(--topo-h)); min-height: 600px; overflow: hidden; background: var(--azul); color: var(--papel); border-block: var(--contorno); }
.jornada-grade { display: grid; grid-template-columns: minmax(0, .8fr) minmax(0, 1.2fr); grid-template-rows: auto minmax(0, 1fr) auto; column-gap: 28px; height: 100%; padding-block: clamp(22px, 4svh, 44px); }

.jornada-topo { grid-column: 1 / -1; display: flex; align-items: center; justify-content: space-between; gap: 16px; }
.motion-toggle { padding: 8px 16px; border: 0; border-radius: 999px; background: var(--marinho); color: var(--papel); font-size: 12px; font-weight: 700; }

/* "safe center": se o texto não couber, ele cresce para baixo, nunca por
   cima da etiqueta da seção. */
.jornada-texto { align-self: safe center; display: flex; flex-direction: column; gap: clamp(10px, 2.2svh, 22px); }
.jornada-rotulo { font-size: 13px; font-weight: 800; letter-spacing: .18em; }
/* O título acompanha também a altura da tela: num notebook de 768px ele
   encolhe para o card e as etapas caberem sem cortar. */
.journey .titulo { font-size: clamp(34px, min(4.4vw, 7.2svh), 64px); line-height: .92; }
.jornada-sub { font-size: 17px; line-height: 1.6; font-weight: 600; color: var(--texto-claro); }
@media (min-width: 761px) and (max-height: 1000px) {
  .motion-enabled .jornada-rotulo, .motion-enabled .jornada-sub, .motion-enabled .assembly-skip { display: none; }
  .motion-enabled #journey-description { font-size: 14px; }
}
/* Notebook (tela baixa): o topo fixo come 91px, então o título vira duas
   linhas e o card aperta, para nada encostar na etiqueta. */
@media (min-width: 761px) and (max-height: 800px) {
  .motion-enabled .journey .titulo { font-size: clamp(30px, min(3.6vw, 6svh), 48px); }
  .motion-enabled .journey .titulo br { display: none; }
  .motion-enabled .journey-tabs button { width: 44px; height: 44px; font-size: 13px; }
  .motion-enabled .assembly-panel { gap: 6px; padding: 14px 24px; }
  .motion-enabled #journey-title, .motion-enabled .step-kicker { font-size: 24px; }
  .motion-enabled #journey-description { min-height: 0; }
}

.journey-tabs { display: flex; gap: 10px; }
.journey-tabs button { width: 52px; height: 52px; border: 2.5px solid var(--papel); border-radius: 50%; background: transparent; color: var(--papel); font-family: var(--titulo); font-size: 15px; font-weight: 800; transition: background .2s, color .2s; }
.journey-tabs button:hover { background: #ffffff1f; }
.journey-tabs button[aria-selected="true"] { background: var(--laranja); color: var(--marinho); border: var(--contorno); box-shadow: 3px 3px 0 var(--marinho); }

.assembly-panel { display: flex; flex-direction: column; gap: 10px; max-width: 520px; padding: clamp(16px, 2.8svh, 28px) 30px; background: var(--papel); color: var(--marinho); border: var(--contorno); border-radius: var(--raio); box-shadow: 8px 8px 0 var(--marinho); }
/* O período tem o mesmo tamanho do nome da fase (pedido de 21/09). */
.step-kicker { align-self: flex-start; padding: .14em .5em .1em; border: var(--contorno); border-radius: 999px; background: var(--laranja); box-shadow: 3px 3px 0 var(--marinho); font-family: var(--titulo); font-size: clamp(22px, 2.3vw, 32px); line-height: 1.05; font-weight: 800; letter-spacing: -.03em; }
#journey-title { font-family: var(--titulo); font-size: clamp(22px, 2.3vw, 32px); line-height: 1.02; font-weight: 800; letter-spacing: -.04em; }
#journey-description { min-height: 4.8em; font-size: 15px; line-height: 1.6; color: var(--texto-apoio); }
.assembly-skip { display: inline-flex; align-self: flex-start; align-items: center; gap: 10px; padding-bottom: 4px; border-bottom: 2px solid var(--papel); font-size: 14px; font-weight: 700; }

/* Palco mais largo que alto: o combo se espalha na horizontal. */
.assembly-stage { position: relative; align-self: center; justify-self: end; width: min(100%, calc((100svh - var(--topo-h) - 230px) * 8 / 7), 640px); aspect-ratio: 8 / 7; }
.assembly-halo { position: absolute; left: 50%; top: 50%; height: 88%; aspect-ratio: 1; translate: -50% -50%; border: 2.5px dashed #7F97FF; border-radius: 50%; }
.assembly-word { position: absolute; left: 50%; top: 24%; translate: -50% 0; font-family: var(--titulo); font-size: clamp(56px, 7.2vw, 104px); line-height: 1; font-weight: 900; letter-spacing: -.05em; color: var(--azul-palavra); white-space: nowrap; pointer-events: none; }

/* Os produtos: o JS só move a imagem. Posição, tamanho e camada vêm das
   variáveis de cada .produto no HTML. */
.combo { position: absolute; inset: 0; z-index: 3; }
.produto { position: absolute; left: var(--x); bottom: var(--chao); z-index: var(--camada); width: var(--largura); translate: -50% 0; }
.produto img { position: relative; z-index: 1; width: 100%; max-width: none; transform-origin: 50% 100%; will-change: transform; visibility: hidden; filter: drop-shadow(0 16px 18px #00093a40); }
html:not(.js) .produto img { visibility: visible; }
.produto-sombra { position: absolute; left: 6%; right: 6%; bottom: -6%; height: 13%; border-radius: 50%; background: radial-gradient(closest-side, #00093a99, #00093a00); opacity: 0; }


.assembly-bottom { grid-column: 1 / -1; display: flex; align-items: center; gap: 24px; }
.assembly-counter { font-family: var(--titulo); font-size: 16px; font-weight: 700; color: #B9C6FF; white-space: nowrap; }
.assembly-counter b { font-size: 28px; font-weight: 800; color: var(--papel); }
.assembly-track { flex-grow: 1; height: 8px; border-radius: 999px; background: var(--azul-trilho); overflow: hidden; }
.assembly-track span { display: block; height: 100%; background: var(--laranja); transform-origin: 0 50%; transform: scaleX(0); }
.assembly-dica { font-size: 11px; font-weight: 800; letter-spacing: .16em; color: var(--texto-claro); white-space: nowrap; }

/* Animação pausada: bloco comum, combo pronto. */
.motion-paused .journey-sticky { height: auto; min-height: 0; }
.motion-paused .jornada-grade { height: auto; row-gap: 32px; padding-block: 72px; }


/* =========================================================================
   9. FAIXA
   ========================================================================= */
.faixa { padding-block: 44px; overflow: hidden; background: var(--papel); }
/* A fita fica por cima do traço da rolagem, que passa por baixo dela. */
.faixa-fita { position: relative; z-index: 2; width: 110%; margin-left: -5%; padding-block: 22px; background: var(--vermelho); color: var(--papel); border-block: var(--contorno); rotate: -2deg; }
.faixa-trilho { display: flex; align-items: center; width: max-content; font-family: var(--titulo); font-size: clamp(22px, 2.4vw, 34px); font-weight: 900; letter-spacing: -.03em; white-space: nowrap; animation: faixa 32s linear infinite; }
/* Margem em vez de gap: com o texto repetido duas vezes, -50% cai certinho
   no começo da cópia e a volta não dá tranco. */
.faixa-trilho > * { margin-right: 34px; }
.faixa-trilho .icone { width: 30px; height: 30px; color: var(--amarelo); stroke-width: 3; }
.faixa-trilho .faixa-amarelo { color: var(--papel); }
.faixa-trilho .faixa-verde { color: var(--amarelo); }
@keyframes faixa { to { translate: -50% 0; } }


/* =========================================================================
   10. 03 PRÉ-REQUISITOS (classe .perfil, do layout anterior)
   ========================================================================= */
/* Título à esquerda, na largura que ele precisa; a foto ocupa o resto. */
.perfil-topo { display: grid; grid-template-columns: minmax(0, max-content) minmax(0, 1fr); gap: 40px; align-items: center; }
.perfil-foto { justify-self: end; width: min(100%, 360px); }
.perfil-foto .troca-quadro { aspect-ratio: 4 / 5; }
.perfil-foto .troca-quadro img { object-position: 50% 22%; }
/* O parágrafo acompanha a largura do título em vez de alargar a coluna. */
.perfil-topo .lead { contain: inline-size; }
.requisitos { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 22px; margin-top: clamp(44px, 5vw, 64px); }
.requisito { display: flex; flex-direction: column; gap: 18px; padding: 26px; box-shadow: 7px 7px 0 var(--marinho); rotate: var(--giro, 0deg); }
.requisito h3 { font-family: var(--titulo); font-size: 28px; line-height: 1.05; font-weight: 800; letter-spacing: -.035em; }
.requisito p { font-family: var(--titulo); font-size: 19px; line-height: 1.25; font-weight: 700; letter-spacing: -.02em; }
.perfil-nota { max-width: 720px; margin-top: 36px; font-size: 17px; line-height: 1.6; font-weight: 600; color: var(--texto-apoio); }
.perfil-botao { margin-top: 48px; }


/* =========================================================================
   11. 04 BENEFÍCIOS
   ========================================================================= */
.beneficios { background: var(--verde); color: var(--papel); border-block: var(--contorno); }
.beneficios .lead-clara { color: var(--verde-claro); }
/* Remuneração em faixa larga no topo; embaixo, os cinco motivos e uma foto,
   três por linha. */
.beneficios-grade { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 18px; margin-top: clamp(44px, 5vw, 64px); }

.bolsa { position: relative; overflow: hidden; grid-column: 1 / -1; display: flex; align-items: center; justify-content: space-between; gap: 24px; padding: 26px clamp(24px, 4vw, 48px); background: var(--laranja); color: var(--marinho); border: 3px solid var(--papel); border-radius: 32px; box-shadow: 8px 8px 0 var(--marinho); }
.bolsa > div { position: relative; z-index: 1; display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 16px; }
.bolsa-etiqueta { position: relative; z-index: 1; padding: 9px 16px; border-radius: 999px; background: var(--marinho); color: var(--papel); font-size: 12px; font-weight: 800; letter-spacing: .16em; }
.bolsa-valor { position: relative; z-index: 1; font-family: var(--titulo); font-size: clamp(56px, 6vw, 84px); line-height: .9; font-weight: 900; letter-spacing: -.05em; white-space: nowrap; }
.bolsa-valor span { font-size: .4em; letter-spacing: -.02em; }
.bolsa-texto { font-family: var(--titulo); font-size: clamp(18px, 1.8vw, 24px); font-weight: 800; }

/* Pacote de benefícios: faixa clara logo abaixo da remuneração, com os
   itens em círculos coloridos. */
.pacote { grid-column: 1 / -1; padding: clamp(22px, 3vw, 32px) clamp(22px, 3.6vw, 40px); background: var(--papel); color: var(--marinho); border: 3px solid var(--papel); border-radius: 32px; box-shadow: 8px 8px 0 var(--marinho); }
.pacote-titulo { font-size: 13px; font-weight: 800; letter-spacing: .2em; }
.pacote-lista { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 18px 22px; margin-top: 20px; }
.pacote-lista li { display: flex; align-items: center; gap: 14px; font-family: var(--titulo); font-size: 17px; line-height: 1.2; font-weight: 700; letter-spacing: -.01em; }
.pacote-icone { display: grid; place-items: center; flex: none; width: 52px; height: 52px; border: var(--contorno); border-radius: 50%; background: var(--verde); color: var(--papel); }
.pacote-icone .icone { width: 26px; height: 26px; stroke-width: 2; }
.pacote-lista li:nth-child(4n + 2) .pacote-icone { background: var(--laranja); color: var(--marinho); }
.pacote-lista li:nth-child(4n + 3) .pacote-icone { background: var(--amarelo); color: var(--marinho); }
.pacote-lista li:nth-child(4n + 4) .pacote-icone { background: var(--vermelho); }
.beneficio { grid-column: span 2; display: flex; flex-direction: column; gap: 14px; padding: 28px; background: var(--verde-escuro); border: 2.5px solid #2E8F3F; border-radius: var(--raio); }
.beneficio-icone { display: grid; place-items: center; width: 50px; height: 50px; border-radius: 50%; }
.beneficio-icone .icone { width: 24px; height: 24px; stroke-width: 2.4; }
.icone-papel { background: var(--papel); color: var(--azul); }
.icone-laranja { background: var(--laranja); color: var(--marinho); }
.icone-azul { background: var(--azul); color: var(--papel); }
.icone-bege { background: var(--bege); color: var(--marinho); }
.beneficio:nth-of-type(3) .beneficio-icone { background: var(--laranja); color: var(--marinho); }
.beneficio:nth-of-type(4) .beneficio-icone { background: var(--amarelo); color: var(--marinho); }
.beneficio:nth-of-type(5) .beneficio-icone { background: var(--vermelho); color: var(--papel); }
.beneficio:nth-of-type(6) .beneficio-icone { background: var(--papel); color: var(--verde); }
.beneficio:nth-of-type(7) .beneficio-icone { background: var(--azul); color: var(--papel); }
.beneficios-foto { grid-column: span 2; align-self: center; box-shadow: 8px 8px 0 var(--laranja); }
/* Quadro mais alto que largo: o lanche fica na altura do peito e só
   aparece inteiro com o rosto se a foto não for cortada tão baixa. */
.beneficios-foto .troca-quadro { aspect-ratio: 4 / 5; }
.beneficios-foto .troca-quadro img { object-position: 50% 42% !important; }
.beneficios-foto .troca-quadro img, .etapa-foto .troca-quadro img, .cta-foto .troca-quadro img { object-position: 50% 20%; }
.beneficio h3 { font-family: var(--titulo); font-size: 24px; line-height: 1.1; font-weight: 800; letter-spacing: -.03em; }
.beneficio p { font-size: 14px; line-height: 1.6; color: var(--verde-claro); }
.beneficios-fecho { margin-top: clamp(40px, 5vw, 60px); font-family: var(--titulo); font-size: clamp(24px, 2.6vw, 36px); line-height: 1.15; font-weight: 600; letter-spacing: -.03em; color: var(--verde-claro); text-wrap: balance; }
.beneficios-fecho strong { font-weight: 900; color: var(--papel); }


/* =========================================================================
   12. 05 SOBRE A EMPRESA E GALERIA DE FOTOS (classe .league)
   ========================================================================= */
.league { background: var(--bege); border-bottom: var(--contorno); }
.league-grade { display: grid; grid-template-columns: .9fr 1.1fr; gap: 56px; align-items: center; }
/* O "Z" fica atrás, a foto da turma por cima e a seta laranja na frente. */
.league-simbolo { position: relative; height: 420px; }
.league-z { position: absolute; left: 10px; top: -40px; font-family: var(--titulo); font-size: 440px; line-height: 1; font-weight: 900; letter-spacing: -.05em; color: var(--azul); rotate: -8deg; }
.league-foto { position: absolute; left: 14%; top: 30%; z-index: 1; width: 86%; }
.league-foto .troca-quadro { aspect-ratio: 4 / 3; }
.league-foto .troca-a { object-position: 50% 16%; }
/* A seta laranja fica no canto de cima: aqui o balão sai por baixo. */
.league-foto .troca-balao { top: auto; bottom: 50px; right: -18px; }
.league-seta { position: absolute; right: 30px; top: 20px; z-index: 2; display: grid; place-items: center; width: 110px; height: 110px; border: var(--contorno); border-radius: 50%; background: var(--laranja); box-shadow: 5px 5px 0 var(--marinho); }
.league-seta .icone { width: 48px; height: 48px; }
.league .titulo { font-size: clamp(40px, 5.6vw, 80px); }
.league .lead { max-width: none; margin-top: 16px; font-size: 16px; }
.league .lead strong { color: var(--marinho); }
.pilulas { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 28px; }
.pilula { padding: 10px 18px; border: 2.5px solid var(--marinho); border-radius: 999px; font-size: 12px; font-weight: 800; letter-spacing: .13em; rotate: var(--giro, 0deg); }
.pilula-marinho { background: var(--marinho); color: var(--papel); }
.pilula-azul { background: var(--azul); color: var(--papel); }
.pilula-papel { background: var(--papel); }

/* Galeria: faixa de polaroides de ponta a ponta que anda para o lado com a
   rolagem (JS). Sem animação, vira uma faixa com rolagem lateral comum. */
.galeria { position: relative; z-index: 2; margin-top: clamp(56px, 7vw, 100px); padding-block: 34px 30px; overflow-x: auto; }
.motion-enabled .galeria { overflow: hidden; touch-action: pan-y; cursor: grab; }
.galeria.arrastando { cursor: grabbing; user-select: none; }
/* A galeria gruda na tela enquanto as fotos passam de ponta a ponta. A
   altura do .galeria-pino e o "top" do .galeria-fixa vêm do JS. */
.motion-enabled .galeria-fixa { position: sticky; }
.galeria-pino { margin-top: clamp(48px, 6vw, 80px); }
.galeria-fixa .galeria { margin-top: 0; }
.galeria img { -webkit-user-drag: none; }
.galeria-trilho { display: flex; gap: clamp(26px, 3.4vw, 52px); width: max-content; padding-inline: 6vw; }
.galeria-trilho .polaroid { flex: none; width: clamp(200px, 19vw, 290px); }
.galeria-trilho .troca-quadro { aspect-ratio: 3 / 4; }
.galeria-trilho .troca-quadro img { object-position: 50% 20%; }
/* Vídeo institucional: capa no formato de adesivo; o clique troca pelo player. */
.video-bloco { margin-top: clamp(56px, 7vw, 96px); }
.video, .video-player { display: block; width: 100%; aspect-ratio: 16 / 9; border: var(--contorno); border-radius: var(--raio); box-shadow: 10px 10px 0 var(--azul); overflow: hidden; }
.video { position: relative; padding: 0; background: var(--marinho); cursor: pointer; }
.video img { width: 100%; height: 100%; object-fit: cover; transition: scale .6s cubic-bezier(.2, .8, .2, 1); }
.video-play { position: absolute; left: 50%; top: 50%; display: grid; place-items: center; width: clamp(72px, 9vw, 112px); aspect-ratio: 1; translate: -50% -50%; background: var(--laranja); color: var(--marinho); border: var(--contorno); border-radius: 50%; box-shadow: 5px 5px 0 var(--marinho); transition: scale .35s cubic-bezier(.2, 1.8, .4, 1); }
.video-play svg { width: 42%; margin-left: 8%; fill: currentColor; }
.video:hover img { scale: 1.04; }
.video:hover .video-play, .video:focus-visible .video-play { scale: 1.12; }
.video-player { background: #000; }
.galeria-marca { position: absolute; right: -20px; top: -26px; z-index: 2; }
.galeria-marca .marca-adesivo { width: clamp(52px, 5vw, 72px); box-shadow: 3px 3px 0 var(--marinho); }


/* Troca de foto em laço. Cada .troca tem duas fotos da mesma pessoa: a
   normal (.troca-a) e a brincadeira (.troca-b), empilhadas. A de cima
   aparece num círculo que cresce a partir de um ponto sorteado pelo JS
   (--mx, --my) e se fecha no mesmo ponto. Junto, a foto de baixo dá um
   zoom e o balão salta. A virada é automática, a cada 2,2 s, enquanto a
   foto está na tela — ninguém precisa passar o mouse nem tocar. */
.troca { -webkit-tap-highlight-color: transparent; }
.troca-quadro { position: relative; overflow: hidden; border: 2px solid var(--marinho); background: var(--bege); isolation: isolate; }
.troca-quadro img { display: block; width: 100%; height: 100%; max-width: none; object-fit: cover; border: 0; }
.troca-a { transition: scale .7s cubic-bezier(.2, .8, .2, 1); }
.troca-b { position: absolute; inset: 0; clip-path: circle(0% at var(--mx, 50%) var(--my, 50%)); transition: clip-path .65s cubic-bezier(.65, 0, .35, 1); }
.troca.ativa .troca-a { scale: 1.1; }
.troca.ativa .troca-b { clip-path: circle(150% at var(--mx, 50%) var(--my, 50%)); }
.troca-balao { position: absolute; right: -14px; top: -16px; z-index: 3; padding: 8px 14px; background: var(--papel); border: var(--contorno); border-radius: 999px 999px 999px 4px; box-shadow: 3px 3px 0 var(--marinho); font-family: var(--titulo); font-size: clamp(15px, 1.4vw, 20px); font-weight: 900; letter-spacing: -.02em; color: var(--azul); pointer-events: none; scale: 0; rotate: -12deg; transition: scale .25s ease, rotate .25s ease; }
.galeria-trilho .troca:nth-child(3n + 1) .troca-balao, .cta-foto-a .troca-balao { color: var(--vermelho); }
.galeria-trilho .troca:nth-child(3n + 2) .troca-balao, .etapa-foto .troca-balao { color: var(--verde); }
.troca.ativa .troca-balao { scale: 1; rotate: 6deg; transition: scale .5s cubic-bezier(.2, 1.8, .4, 1) .18s, rotate .5s cubic-bezier(.2, 1.8, .4, 1) .18s; }
/* Nas polaroides o adesivo de logo fica no canto de cima: o balão desce. */
.galeria-trilho .troca-balao { top: auto; bottom: 52px; right: -12px; }
.troca-legenda { position: absolute; left: 0; right: 0; bottom: 11px; text-align: center; font-size: 11px; font-weight: 800; letter-spacing: .16em; text-transform: uppercase; color: var(--texto-apoio); }
.motion-paused .troca-a, .motion-paused .troca-b, .motion-paused .troca-balao { transition: none; }


/* =========================================================================
   13. 06 ETAPAS
   ========================================================================= */
/* Oito etapas mais a foto: três por linha. */
.etapas-lista { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px; margin-top: 32px; }
/* Todos os cartões com a mesma altura: a do 04, que é o de mais texto, com
   uma folga. align-self: start impede que os da última linha estiquem até a
   altura da foto, que é bem maior. */
.etapa { align-self: start; min-height: 262px; display: flex; flex-direction: column; align-items: flex-start; gap: 10px; padding: 24px 22px; background: var(--cartao); border: var(--contorno); border-radius: 26px; }
.etapa-numero { font-family: var(--titulo); font-size: 48px; line-height: 1; font-weight: 900; letter-spacing: -.04em; color: var(--azul); }
.etapa h3 { font-family: var(--titulo); font-size: 22px; line-height: 1.1; font-weight: 800; letter-spacing: -.03em; }
.etapa-quando { padding: 5px 12px; border-radius: 999px; background: var(--bege); font-size: 13px; font-weight: 800; }
.etapa p:last-child { font-size: 14px; line-height: 1.55; color: var(--texto-apoio); }
.etapa:nth-child(4n + 2) .etapa-numero { color: var(--laranja); }
.etapa:nth-child(4n + 3) .etapa-numero { color: var(--verde); }
.etapa:nth-child(4n + 4) .etapa-numero { color: var(--vermelho); }
.etapa-final { background: var(--laranja); box-shadow: 7px 7px 0 var(--marinho); rotate: 1.5deg; }
.etapa-final .etapa-numero { color: var(--marinho) !important; }
.etapa-final p:last-child { color: var(--marinho); font-weight: 600; }
.etapa-foto { align-self: center; rotate: var(--giro); }
.etapa-foto .troca-quadro { aspect-ratio: 4 / 5; }
.etapa-foto .troca-quadro img { object-position: 50% 55% !important; }


/* =========================================================================
   14. 07 TRILHAS (classe .faq, do layout anterior)
   ========================================================================= */
.faq-grade { display: grid; grid-template-columns: .8fr 1.2fr; gap: 56px; }
.faq .titulo { font-size: clamp(38px, 4.6vw, 64px); }
.vagas { display: grid; gap: 12px; margin-top: 28px; }
.vaga { padding: 16px 20px; background: var(--cartao); border: var(--contorno); border-radius: 20px; box-shadow: 4px 4px 0 var(--marinho); }
.vaga dt { font-size: 12px; font-weight: 800; letter-spacing: .18em; color: var(--verde); }
.vaga + .vaga dt { color: var(--vermelho); }
.vaga dd { margin: 6px 0 0; font-size: 15px; line-height: 1.5; font-weight: 600; }
.faq-lista { display: flex; flex-direction: column; gap: 14px; }
/* Foto com troca no mouse embaixo das trilhas, ocupando o espaço ao lado de
   Vagas e Entrada. O balão desce para não brigar com o adesivo do logo. */
.faq-foto { align-self: center; width: min(88%, 460px); margin-top: 26px; }
.faq-foto .troca-quadro { aspect-ratio: 4 / 3; }
.faq-foto .troca-quadro img { object-position: 50% 18%; }
.faq-foto .troca-balao { top: auto; bottom: 52px; right: -14px; }
.pergunta { background: var(--cartao); border: var(--contorno); border-radius: 24px; transition: box-shadow .2s; }
.pergunta[open] { box-shadow: 6px 6px 0 var(--marinho); }
.pergunta summary { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 22px 26px; list-style: none; cursor: pointer; font-family: var(--titulo); font-size: 20px; font-weight: 700; letter-spacing: -.02em; }
.pergunta summary::-webkit-details-marker { display: none; }
.pergunta-icone { display: grid; place-items: center; flex-shrink: 0; width: 38px; height: 38px; border: 2.5px solid var(--marinho); border-radius: 50%; background: var(--bege); transition: rotate .25s, background .2s; }
.pergunta[open] .pergunta-icone { rotate: 45deg; background: var(--marinho); color: var(--papel); }
.pergunta p { padding: 0 26px 22px; font-size: 15px; line-height: 1.6; color: var(--texto-apoio); }


/* =========================================================================
   15. CHAMADA FINAL
   ========================================================================= */
.cta-final { position: relative; overflow: hidden; padding-block: clamp(80px, 9vw, 110px); background: var(--amarelo); color: var(--marinho); border-block: var(--contorno); text-align: center; }
.cta-conteudo { position: relative; display: flex; flex-direction: column; align-items: center; gap: 28px; }
.cta-titulo { font-size: clamp(46px, 8.2vw, 120px); line-height: .9; }
.cta-rodape { font-size: 12px; font-weight: 800; letter-spacing: .15em; }
.cta-foto { --w: clamp(130px, 10.5vw, 190px); position: absolute; top: 50%; z-index: 2; display: none; width: var(--w); translate: 0 -50%; box-shadow: 8px 8px 0 var(--marinho); }
.cta-foto .troca-quadro { aspect-ratio: 3 / 4; }
.cta-foto .troca-balao { top: auto; bottom: 52px; right: -14px; }
/* Ficam na margem, fora da coluna do título. */
.cta-foto-a { left: max(12px, calc((100% - var(--largura)) / 2 - var(--w) - 20px)); }
.cta-foto-b { right: max(12px, calc((100% - var(--largura)) / 2 - var(--w) - 20px)); }
@media (min-width: 1360px) {
  .cta-foto { display: block; }
}


/* =========================================================================
   16. RODAPÉ

   Padrão dos programas da Across: logos da ZAMP e da Across lado a lado,
   contato de suporte, canais oficiais da ZAMP e copyright. Os dois logos vão
   nas cores originais, por isso o rodapé fica no fundo claro.
   ========================================================================= */
.rodape { padding-block: clamp(52px, 6vw, 76px) 30px; text-align: center; }
.rodape-conteudo { display: flex; flex-direction: column; align-items: center; gap: 28px; }
.rodape-logos { display: flex; align-items: center; justify-content: center; gap: clamp(22px, 4vw, 44px); }
/* O SVG da ZAMP tem respiro em volta da palavra: a altura maior equilibra
   o tamanho visível com o da Across. */
.rodape-zamp { width: auto; height: 84px; }
.rodape-across { width: auto; height: 58px; }
.rodape-divisor { width: 2px; height: 46px; border-radius: 2px; background: var(--marinho); opacity: .2; }
.rodape-suporte { font-size: 15px; line-height: 1.65; color: var(--texto-apoio); }
.rodape-suporte a { color: var(--azul); font-weight: 700; text-decoration: underline; text-underline-offset: 3px; }
.rodape-suporte a:hover { color: var(--marinho); }
.rodape-redes { display: flex; gap: 12px; }
.rodape-redes a { display: grid; place-items: center; width: 46px; height: 46px; background: var(--cartao); border: var(--contorno); border-radius: 50%; box-shadow: 3px 3px 0 var(--marinho); transition: translate .2s ease, background .2s ease; }
.rodape-redes a:hover { translate: -2px -2px; background: var(--bege); }
.rodape-redes .icone { width: 21px; height: 21px; stroke-width: 1.8; }
.icone-cheio { width: 18px; height: 18px; fill: currentColor; }
.rodape-copy { align-self: stretch; padding-top: 22px; border-top: 2px solid var(--marinho); font-size: 12px; font-weight: 600; color: var(--texto-apoio); }


/* =========================================================================
   17. TRAÇO DA ROLAGEM

   Linha fina que corre pelas margens, de cima a baixo, e se desenha conforme
   a rolagem (e se apaga quando a rolagem volta). O caminho é recalculado pelo
   JS a partir da posição das seções, então acompanha qualquer largura.
   Camadas: fundo das seções < traço < conteúdo. Por isso o conteúdo de cada
   seção (.container, galeria, fita da faixa) fica por cima, e a jornada, fixa
   na tela, cobre o traço inteiro enquanto passa.
   Para mudar espessura ou cor, mexa em .traco-linha.
   ========================================================================= */
main { position: relative; }
main .container { position: relative; z-index: 2; }
.traco { position: absolute; left: 0; top: 0; z-index: 1; width: 100%; height: 100%; overflow: hidden; pointer-events: none; }
html:not(.js) .traco { display: none; }
.traco-linha { fill: none; stroke: var(--laranja); stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; }
.traco-ponta { fill: var(--laranja); stroke: var(--marinho); stroke-width: 2.5; }


/* =========================================================================
   18. TABLET (até 1080px)
   ========================================================================= */
@media (max-width: 1080px) {
  .topo-nav a { padding: 10px; }
  .marcas-fim { display: none; }
  .beneficios-grade { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .league-z { font-size: 340px; }
  .league-simbolo { height: 360px; }
  .etapas-lista { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .requisitos { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .beneficio, .beneficios-foto { grid-column: auto; }
  .pacote-lista { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}




/* =========================================================================
   19. CELULAR (até 760px)
   ========================================================================= */
@media (max-width: 760px) {
  :root { --topo-h: 77px; }
  .topo-barra { height: 74px; gap: 12px; }
  .topo-logo img { height: 34px; }
  .topo-inscricao { margin-left: auto; min-height: 44px; padding: 0 14px; font-size: 13px; box-shadow: 3px 3px 0 var(--marinho); }
  .menu { display: inline-flex; }
  .topo-nav { position: absolute; left: 0; right: 0; top: 100%; display: none; flex-direction: column; align-items: stretch; gap: 0; margin: 0; padding: 8px 6% 16px; background: var(--papel); border-bottom: var(--contorno); }
  .topo-nav.open { display: flex; }
  .topo-nav a { padding: 14px 0; border-bottom: 1px solid var(--bege); border-radius: 0; font-size: 16px; }


  .marcas-linha { gap: 16px; }
  .marcas-lista { gap: 14px; }
  .marca-adesivo { box-shadow: 3px 3px 0 var(--marinho); }

  .programa-abertura { grid-template-columns: 1fr; }
  .programa-topo { flex-wrap: wrap; }
  .programa-texto > p:not(.etiqueta) { font-size: 16px; }
  .programa-marca { margin-inline: 8px; }
  .programa-marca .programa-meses { right: -14px; top: -44px; width: 100px; }
  .programa-marca .programa-meses strong { font-size: 30px; }
  .programa-meses span { font-size: 9px; }

  /* Jornada no celular: título em cima, produtos no meio, etapas embaixo.
     Como a seção não fica mais presa na tela, ela pode crescer: cada linha
     tem a altura do seu conteúdo e o palco dos produtos nunca é espremido
     em cima dos números. */
  .journey-sticky { height: auto; min-height: calc(100svh - var(--topo-h)); }
  .jornada-grade { grid-template-columns: 1fr; grid-template-rows: repeat(6, auto); height: auto; row-gap: 12px; padding-block: 18px; }
  .jornada-texto { display: contents; }
  .jornada-topo { order: 1; }
  .journey .titulo { order: 2; font-size: 34px; }
  .journey .titulo br { display: none; }
  .assembly-stage { order: 3; justify-self: center; width: min(100vw, 46svh); }
  .journey-tabs { order: 4; gap: 8px; }
  .assembly-panel { order: 5; max-width: none; gap: 6px; padding: 14px 18px; border-radius: 22px; box-shadow: 5px 5px 0 var(--marinho); }
  .assembly-bottom { order: 6; gap: 14px; }
  .jornada-rotulo, .jornada-sub, .assembly-skip, .assembly-dica { display: none; }
  .jornada-topo .etiqueta { padding: 6px 10px; font-size: 9px; letter-spacing: .12em; }
  .motion-toggle { padding: 6px 12px; font-size: 10px; }
  .journey-tabs button { width: 40px; height: 40px; font-size: 12px; }
  #journey-title, .step-kicker { font-size: 21px; }
  #journey-title br { display: none; }
  #journey-description { font-size: 13px; }
  .assembly-counter b { font-size: 22px; }
  .assembly-word { font-size: 64px; }

  .faixa { padding-block: 28px; }
  .perfil-topo { grid-template-columns: 1fr; gap: 36px; }
  .perfil-foto { justify-self: center; width: 94%; }
  .requisitos { grid-template-columns: 1fr; }

  .requisito { padding: 24px; rotate: 0deg; }
  .beneficios-grade { grid-template-columns: 1fr; }
  .bolsa { flex-direction: column; align-items: flex-start; padding: 24px; }
  .pacote-lista { grid-template-columns: 1fr; gap: 12px; }
  .pacote-lista li { font-size: 16px; }
  .pacote-icone { width: 44px; height: 44px; }
  .league-grade { grid-template-columns: 1fr; gap: 12px; }
  .league-simbolo { height: 360px; }
  .league-z { top: -20px; font-size: 240px; }
  .league-foto { left: 8%; top: 22%; width: 88%; }
  .league-seta { right: 10px; width: 80px; height: 80px; }
  .league-seta .icone { width: 34px; height: 34px; }
  .galeria { margin-top: 44px; }
  .galeria-trilho .polaroid { width: 58vw; }
  .galeria-marca { right: -12px; top: -22px; }
  .etapas-lista { grid-template-columns: 1fr; }
  .etapa { min-height: 0; }
  .etapa-numero { font-size: 44px; }
  .faq-grade { grid-template-columns: 1fr; gap: 28px; }
  .pergunta summary { padding: 18px 20px; font-size: 17px; }
  .pergunta p { padding: 0 20px 18px; }
  .rodape-zamp { height: 60px; }
  .rodape-across { height: 42px; }
  .rodape-divisor { height: 34px; }
  .rodape-suporte { font-size: 14px; }
  .rodape-suporte br { display: none; }
  .traco-linha { stroke-width: 2; }
}

@media (max-width: 760px) and (max-height: 740px) {
  .assembly-stage { width: min(94vw, 40svh); }
}


/* =========================================================================
   20. MOVIMENTO REDUZIDO
   ========================================================================= */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  .js .reveal { opacity: 1; translate: none; transition: none; }
  .faixa-trilho { animation: none; }
  .video img, .video-play, .botao, .link-seta-icone, .pergunta-icone, .polaroid, .rodape-redes a { transition: none; }
}

.etapa-final .etapa-quando { background: var(--papel); color: var(--marinho); font-size: 16px; }
