/* ===========================================================================
   Arena Acauhan — folha da marca sobre o piso do scrollcraft.
   Tokens medidos em identidade/design-guide.md (pixel a pixel no logo.png).
   Contraste conferido contra o fundo real, não estimado:
     creme  #EFE2C7 sobre #241C18 ....... 13,1:1
     tan    #A8977E sobre #241C18 ........ 5,9:1
     terracota #D2552A sobre #241C18 ..... 4,1:1  (só display grande e traços)
     creme sobre #8F3616 (botão) ......... 6,0:1
   Por isso o botão é o terracota escuro, e o claro nunca carrega texto de corpo.
   =========================================================================== */

:root {
  --sc-canvas: #241c18;
  --sc-surface: #2a201b;
  --sc-ink: #efe2c7;
  --sc-ink-soft: #a8977e;
  --sc-accent: #d2552a;
  --sc-accent-ink: #efe2c7;

  --deep: #1b1512;
  --burnt: #8f3616;
  --sun-core: #ffd966;
  --sun-edge: #f5a623;

  --sc-font-display: "Anton", "Archivo", system-ui, sans-serif;
  --sc-font-text: "Archivo", system-ui, sans-serif;
  --sc-font-mono: "Archivo", ui-monospace, monospace;

  --sc-maxw: 84rem;
  --sc-r-sm: 2px;
  --sc-r-md: 2px;
  --sc-r-lg: 2px;
  --sc-shadow-color: 20 32% 4%;

  /* O Sol da Acauhan. O dial escreve estes quatro; nada mais os toca. */
  --hour: 0.42;
  --sun-x: 42%;
  --sun-y: 30%;
  --light: rgba(255, 217, 102, 0.1);
  --grade: saturate(1) brightness(1);

  /* Em :root, e não em .topo: o brasão e o painel do menu também leem esta
     altura, e custom property não passa de um irmão para o outro. */
  --topo-h: 4.25rem;
}

html {
  background: var(--deep);
  /* O `color` também, e não só no body: sem ele o próprio <html> fica com o
     preto inicial do agente do usuário sobre um fundo quase preto. Nada
     renderiza ali fora do <body>, mas é o par que uma auditoria estática lê, e
     é o que vale em modo de cores forçadas. */
  color: var(--sc-ink);
}

/* O cromo fixo (brasão, barra, menu) vem antes do conteúdo na ordem de foco.
   Sem este atalho, quem navega por teclado atravessa seis itens de menu antes
   de chegar ao texto. Ele só aparece quando recebe foco. */
.pular {
  position: fixed;
  top: 0.5rem;
  left: 0.5rem;
  z-index: 999;
  padding: 0.75rem 1.25rem;
  background: var(--burnt);
  color: #efe2c7;
  font-weight: 600;
  font-size: 0.9rem;
  text-decoration: none;
  border-radius: var(--sc-r-sm);
  transform: translateY(-160%);
  transition: transform 180ms var(--sc-ease-out);
}
.pular:focus-visible {
  transform: none;
  outline: 2px solid var(--sc-ink);
  outline-offset: 3px;
}
/* A barra do topo é fixa, então todo alvo de âncora precisa reservar a altura
   dela: senão cada item do menu leva o visitante para um título escondido. */
:target,
section[id] {
  scroll-margin-top: calc(var(--topo-h) + 0.75rem);
}

/* Anton é tudo em caixa alta por desenho; forçar minúsculas nele é desperdício
   de uma fonte que só tem um andar. */
.d {
  font-family: var(--sc-font-display);
  font-weight: 400;
  text-transform: uppercase;
  /* 0,92 é a entrelinha que o Anton pede em inglês e é errada em português:
     em caixa alta acentuada o circunflexo de VOCÊ e o til de NÃO sobem acima da
     altura de caixa e batem na linha de cima. 1,02 é o menor valor em que Á, Ã,
     Ê, Ô e Õ passam limpos, medido no render e não no papel. */
  line-height: 1.02;
  letter-spacing: 0.002em;
  text-wrap: balance;
  margin: 0;
}
.d--xl {
  /* Teto em 6,6rem e não 7,4rem: a 1440px a manchete do hero batia em 115px e
     sozinha tomava 61% da altura da tela, empurrando os dois botões para a
     borda. O limite do craft floor para display é 6rem; 6,6rem é o ponto em que
     a frase continua imperativa e os CTAs voltam a respirar. */
  font-size: clamp(2.9rem, 1.4rem + 6.4vw, 6.6rem);
  line-height: 1.02;
}
.d--lg {
  font-size: clamp(2.3rem, 1.3rem + 4.2vw, 5rem);
}
.d--md {
  font-size: clamp(1.7rem, 1.2rem + 2.2vw, 3rem);
}
.d--sm {
  font-size: clamp(1.15rem, 1rem + 0.9vw, 1.6rem);
}

.lede {
  font-size: clamp(1.05rem, 0.98rem + 0.4vw, 1.35rem);
  line-height: 1.45;
  letter-spacing: -0.012em;
  max-width: 34ch;
  text-wrap: pretty;
  margin: 0;
}
.body {
  max-width: 60ch;
  color: var(--sc-ink-soft);
  text-wrap: pretty;
  margin: 0;
}
.tag {
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--sc-ink-soft);
  margin: 0;
}

.wrap {
  width: 100%;
  max-width: var(--sc-maxw);
  margin-inline: auto;
  padding-inline: var(--sc-gutter);
}

/* --------------------------------------------------------------- atmosfera --
   A luz da hora escolhida vem em DUAS camadas, e a separação não é capricho.
   Uma só, fixa e `screen` por cima de tudo, clareava também o scrim que protege
   o texto: o palco cria contexto de empilhamento, então uma camada fixa em
   z-index 2 passa por cima da cópia inteira dele, e o título do hero caía para
   1,7:1 sem que nada no CSS do texto estivesse errado.

   Então: a forte mora DENTRO do palco, logo acima da mídia e logo abaixo do
   scrim, onde faz todo o trabalho de regradar a fotografia. A fraca é a fixa,
   e só dá o ar da hora ao resto da página. */
.luz-palco {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  mix-blend-mode: screen;
  background: radial-gradient(
    80vw 80vw at var(--sun-x) var(--sun-y),
    var(--light),
    transparent 64%
  );
  transition: background 520ms var(--sc-ease-out);
}
.light {
  position: fixed;
  inset: 0;
  z-index: 2;
  pointer-events: none;
  mix-blend-mode: screen;
  opacity: 0.4;
  background: radial-gradient(
    70vw 70vw at var(--sun-x) var(--sun-y),
    var(--light),
    transparent 62%
  );
  transition: background 520ms var(--sc-ease-out);
}
@media (prefers-reduced-motion: reduce) {
  .light,
  .luz-palco {
    transition: none;
  }
}

/* ------------------------------------------------- barra de progresso -----
   Um elemento, um dono. O scrollcraft.js tem uma barra própria que procura
   [data-sc-progress]; a marcação usa [data-scroll-progress], então a dele fica
   dormente e não há dois runtimes escrevendo no mesmo nó.

   Só `transform` muda: ele roda no compositor, sem layout e sem repaint a cada
   quadro de scroll. Animar `width` forçaria reflow da página inteira. */
.scroll-progress {
  position: fixed;
  top: 0;
  left: 0;
  z-index: calc(var(--sc-z-chrome) + 10);
  width: 100%;
  height: 3px;
  background: var(--sc-accent);
  transform: scaleX(0);
  transform-origin: 0 50%;
  will-change: transform;
  pointer-events: none;
}

/* ------------------------------------------------------------------ chrome --
   A barra nasce transparente sobre o filme e ganha corpo quando a página desce.
   O brasão nasce grande no meio do hero e aterrissa no canto dela. */

.topo {
  position: fixed;
  inset: 0 0 auto 0;
  z-index: calc(var(--sc-z-chrome) + 3);
  display: flex;
  align-items: center;
  gap: clamp(0.75rem, 2vw, 2.25rem);
  height: var(--topo-h);
  /* Espaço reservado à esquerda para o brasão pousar sem empurrar o menu. */
  padding-right: clamp(0.75rem, 3vw, 2.25rem);
  padding-left: calc(var(--seal-x) + var(--seal-w) + clamp(0.9rem, 2vw, 1.75rem));
}
/* O fundo é um elemento próprio, e não o background da barra, porque ele
   precisa aparecer e sumir por baixo do conteúdo sem arrastar o backdrop-filter
   junto quando está invisível. */
.topo-fundo {
  position: absolute;
  inset: 0;
  z-index: 0;
  /* Ornamento não intercepta ponteiro. A vinheta abaixo se estende 6rem para
     fora da barra, e como o cabeçalho fica acima do painel do menu, esse rabo
     cobria o primeiro item da lista: no celular, tocar em "A arena" não fazia
     nada. Invisível e clicável é a pior combinação possível. */
  pointer-events: none;
  border-bottom: 1px solid transparent;
  transition: background 340ms var(--sc-ease-out), border-color 340ms var(--sc-ease-out),
    backdrop-filter 340ms var(--sc-ease-out), opacity 340ms var(--sc-ease-out);
}
/* Transparente não pode significar ilegível: no topo o menu está sobre o céu
   estourado do filme. Um degradê curto vindo da borda segura o texto sem
   fechar a barra, e ele desaparece quando o fundo sólido assume. */
.topo-fundo::after {
  content: "";
  position: absolute;
  /* Desce bem abaixo da barra de propósito. Um degradê curto termina numa borda
     e lê como barra; um degradê longo lê como vinheta de topo, que é o que os
     heros de vídeo bons fazem. E é a queda longa que permite a densidade alta
     em cima: medido, o menu sobre o céu do filme dava 3,67:1 em 1920 com o
     degradê curto. */
  inset: 0 0 -6rem 0;
  background: linear-gradient(
    to bottom,
    color-mix(in oklab, var(--deep) 88%, transparent) 0%,
    color-mix(in oklab, var(--deep) 78%, transparent) 30%,
    color-mix(in oklab, var(--deep) 44%, transparent) 58%,
    color-mix(in oklab, var(--deep) 14%, transparent) 80%,
    transparent 100%
  );
  transition: opacity 340ms var(--sc-ease-out);
}
.topo--solido .topo-fundo {
  background: color-mix(in oklab, var(--deep) 94%, transparent);
  backdrop-filter: blur(16px) saturate(1.2);
  border-bottom-color: var(--sc-hairline);
}
.topo--solido .topo-fundo::after {
  opacity: 0;
}
.menu,
.topo-cta,
.hamburguer {
  position: relative;
  z-index: 1;
}

/* ---------------------------------------------------------------- brasão ---
   Fixo por conta própria. O CSS o deixa no destino final; quem o leva ao hero
   é uma transformação que o JS interpola do scroll. Assim o pouso é exato por
   construção, em vez de ser um valor calibrado à mão que erra em cada largura. */
:root {
  --seal-x: clamp(0.75rem, 3vw, 2.25rem);
  /* Dimensionado para caber INTEIRO na barra, com folga igual em cima e
     embaixo. Antes ele transbordava por baixo de propósito, para a sobreposição
     dar profundidade, mas a barra precisa ficar por cima do painel do menu e o
     brasão acabava cortado pela borda dela. Contido resolve os dois. */
  --seal-w: clamp(2.5rem, 3.6vw, 3.1rem);
}
.seal {
  position: fixed;
  /* Centrado na altura da barra: a folga é a mesma em cima e embaixo, em
     qualquer viewport, porque as duas medidas vêm do mesmo par de tokens. */
  top: calc((var(--topo-h) - var(--seal-w)) / 2);
  left: var(--seal-x);
  width: var(--seal-w);
  aspect-ratio: 1;
  /* Acima da barra, senão o fundo dela corta o brasão ao meio. A ordem do cromo
     é: painel < barra < brasão. */
  z-index: calc(var(--sc-z-chrome) + 4);
  display: block;
  transform-origin: 50% 50%;
  /* Sem `will-change: transform` de propósito. A caixa do brasão mede 50px e o
     voo do hero o amplia quase 8x por transform. Promovido a camada, o Chrome
     rasteriza uma vez no tamanho da caixa e a GPU estica esse bitmap de 50px:
     o brasão chegava mole no topo da página. Sem a promoção ele re-rasteriza a
     cada mudança de escala e sai limpo, e o custo é irrisório perto do scrub. */
}
.seal img {
  width: 100%;
  height: auto;
  border-radius: 50%;
  background: #efe2c7;
  box-shadow: var(--sc-e2);
}
@media (hover: hover) and (pointer: fine) {
  .seal:hover img {
    box-shadow: var(--sc-e3);
  }
}
@media (prefers-reduced-motion: reduce) {
  /* Sem o voo: o brasão já nasce no lugar dele. A marca continua presente e a
     página continua contando a mesma coisa. */
  .seal {
    transform: none !important;
  }
}

.menu {
  flex: 1 1 auto;
  min-width: 0;
  overflow-x: auto;
  overscroll-behavior-x: contain;
  scrollbar-width: none;
  -webkit-mask-image: linear-gradient(to right, transparent 0, #000 12px, #000 calc(100% - 18px), transparent 100%);
  mask-image: linear-gradient(to right, transparent 0, #000 12px, #000 calc(100% - 18px), transparent 100%);
}
.menu::-webkit-scrollbar {
  display: none;
}
.menu ul {
  display: flex;
  align-items: center;
  gap: clamp(0.9rem, 2.2vw, 2rem);
  margin: 0;
  padding: 0 0.75rem;
  list-style: none;
  width: max-content;
}
.menu a {
  display: block;
  position: relative;
  padding: 0.3rem 0;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.13em;
  text-transform: uppercase;
  white-space: nowrap;
  color: var(--sc-ink-soft);
  text-decoration: none;
  transition: color 180ms var(--sc-ease-out);
}
/* Com a barra transparente o tan secundário cai para menos de 3:1 sobre o céu
   do filme. Enquanto ela não fecha, todo item é creme. */
.topo:not(.topo--solido) .menu a {
  color: var(--sc-ink);
}
.menu a::after {
  content: "";
  position: absolute;
  inset: auto 0 0 0;
  height: 2px;
  background: var(--sc-accent);
  transform: scaleX(0);
  transform-origin: 0 50%;
  transition: transform 260ms var(--sc-ease-out);
}
.menu a:hover,
.menu a:focus-visible {
  color: var(--sc-ink);
}
.menu [aria-current="true"] {
  color: var(--sc-ink);
}
.menu [aria-current="true"]::after {
  transform: scaleX(1);
}
.topo-cta {
  flex: none;
  padding: 0.6rem 1.1rem;
  font-size: 0.82rem;
}

/* ------------------------------------------------------------ hambúrguer -- */
.hamburguer {
  display: none;
  flex: none;
  align-items: center;
  gap: 0.55rem;
  margin-left: auto;
  padding: 0.55rem 0.7rem;
  background: none;
  border: 0;
  border-radius: var(--sc-r-sm);
  color: var(--sc-ink);
  cursor: pointer;
  /* Alvo de toque de 44px sem inflar a caixa visual. */
  min-height: 2.75rem;
}
.hamburguer-rotulo {
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.13em;
  text-transform: uppercase;
}
.hamburguer-barras {
  display: grid;
  gap: 4px;
  width: 1.15rem;
}
.hamburguer-barras i {
  display: block;
  height: 2px;
  background: currentColor;
  border-radius: 2px;
  transition: transform 260ms var(--sc-ease-out), opacity 180ms var(--sc-ease-out);
}
/* As três barras viram X. Só transform e opacity, nada de width nem margin. */
[aria-expanded="true"] .hamburguer-barras i:nth-child(1) {
  transform: translateY(6px) rotate(45deg);
}
[aria-expanded="true"] .hamburguer-barras i:nth-child(2) {
  opacity: 0;
}
[aria-expanded="true"] .hamburguer-barras i:nth-child(3) {
  transform: translateY(-6px) rotate(-45deg);
}

.painel {
  position: fixed;
  inset: var(--topo-h) 0 0 0;
  z-index: calc(var(--sc-z-chrome) + 2);
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
  padding: 1.75rem clamp(1.25rem, 6vw, 2rem) calc(2rem + env(safe-area-inset-bottom));
  background: color-mix(in oklab, var(--deep) 97%, transparent);
  backdrop-filter: blur(18px);
  overflow-y: auto;
  overscroll-behavior: contain;
  opacity: 0;
  visibility: hidden;
  transform: translate3d(0, -0.75rem, 0);
  transition: opacity 260ms var(--sc-ease-out), transform 260ms var(--sc-ease-out),
    visibility 0s linear 260ms;
}
.seal--anima {
  transition: transform 300ms var(--sc-ease-out);
}
.painel--aberto {
  opacity: 1;
  visibility: visible;
  transform: none;
  transition-delay: 0s;
}
@media (prefers-reduced-motion: reduce) {
  .painel {
    transform: none;
  }
}
.painel ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
}
.painel li + li {
  border-top: 1px solid var(--sc-hairline);
}
.painel nav a {
  display: block;
  padding: 0.95rem 0;
  font-family: var(--sc-font-display);
  font-size: 1.6rem;
  line-height: 1.02;
  text-transform: uppercase;
  color: var(--sc-ink);
  text-decoration: none;
}
.painel nav a[aria-current="true"] {
  color: var(--sc-accent);
}
.painel-acoes {
  display: grid;
  gap: 0.6rem;
}
.painel-acoes .cta {
  justify-content: center;
}
.painel-nap {
  margin: 0;
  font-size: 0.82rem;
  line-height: 1.5;
  color: var(--sc-ink-soft);
}
.painel-nap a {
  color: var(--sc-ink);
  display: inline-block;
  padding-block: 0.35rem;
  margin-block: -0.35rem;
}

/* ------------------------------------------------------------------ botões -- */
.cta {
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
  padding: 0.85rem 1.5rem;
  background: var(--burnt);
  color: #efe2c7;
  font-weight: 600;
  font-size: 0.95rem;
  letter-spacing: 0.01em;
  text-decoration: none;
  border: 0;
  border-radius: var(--sc-r-sm);
  box-shadow: var(--sc-e1), var(--sc-edge);
  white-space: nowrap;
  transition: background 150ms var(--sc-ease-out), transform 120ms var(--sc-ease-out);
}
.cta:hover {
  background: #a33f1a;
}
.cta:active {
  transform: translateY(1px);
}
.cta svg {
  width: 1.05em;
  height: 1.05em;
  flex: none;
}

.cta--ghost {
  background: transparent;
  color: var(--sc-ink);
  box-shadow: inset 0 0 0 1px var(--sc-hairline-strong);
}
.cta--ghost:hover {
  background: rgba(239, 226, 199, 0.07);
}

/* Barra de ação no rodapé do celular. É a única chrome fixa lá embaixo, e
   carrega exatamente o mesmo rótulo que todos os outros CTAs da página. */
.dock {
  position: fixed;
  inset: auto 0 0 0;
  z-index: var(--sc-z-chrome);
  display: flex;
  gap: 0.6rem;
  padding: 0.65rem clamp(0.75rem, 4vw, 1.25rem)
    calc(0.65rem + env(safe-area-inset-bottom));
  background: color-mix(in oklab, var(--deep) 95%, transparent);
  backdrop-filter: blur(14px);
  border-top: 1px solid var(--sc-hairline);
}
.dock .cta {
  flex: 1;
  justify-content: center;
  padding-inline: 0.5rem;
  font-size: 0.82rem;
}
/* O rótulo é o mesmo da página inteira, então ele não pode quebrar em duas
   linhas dentro da barra: o tipo é que cede, não o texto. */
@media (max-width: 400px) {
  .dock .cta {
    font-size: 0.75rem;
  }
}
@media (min-width: 861px) {
  .dock {
    display: none;
  }
}
@media (max-width: 860px) {
  body {
    padding-bottom: 4.5rem;
  }
}

/* ================================================================== ATO 1 ==
   O salto. O clipe é um plano só em câmera lenta, então o percurso
   cinematográfico vem de três planos que se separam, não do corte. */
#salto .sc-stage {
  background: #0d1d33;
}
#salto video[data-sc-scrub],
#salto .sc-stage__poster {
  transform: scale(calc(1 + var(--sc-p, 0) * 0.16));
  transform-origin: 52% 42%;
}
.duna {
  position: absolute;
  inset: auto 0 -1px 0;
  height: 34vh;
  z-index: 3;
  pointer-events: none;
  background: linear-gradient(
    to top,
    var(--sc-canvas) 6%,
    color-mix(in oklab, var(--sc-canvas) 72%, transparent) 46%,
    transparent 100%
  );
}

/* O poster virou <picture> para o celular receber o corte retrato próprio. O
   engine acende e apaga .sc-stage__poster, e a <img> dentro precisa preencher. */
/* COLUNA de densidade, não canto. O canto do engine é calibrado para uma linha
   baixa; o bloco do hero tem sobrenome, título de quatro linhas e dois botões,
   e sobe até 35% da tela, bem acima de onde o canto ainda tem densidade. Ali o
   título media 1,53:1 sobre o céu do poster. A coluna cobre a altura inteira do
   lado onde o texto está e devolve os 40% do outro lado à fotografia intacta,
   que é justamente onde o atleta está enquadrado nas sete cenas. */
.sc-scrim--lead {
  background: linear-gradient(to right,
    color-mix(in oklab, var(--sc-canvas) 95%, transparent) 0%,
    color-mix(in oklab, var(--sc-canvas) 86%, transparent) 40%,
    color-mix(in oklab, var(--sc-canvas) 64%, transparent) 52%,
    color-mix(in oklab, var(--sc-canvas) 20%, transparent) 64%,
    transparent 76%);
}
.sc-scrim--trail {
  background: linear-gradient(to left,
    color-mix(in oklab, var(--sc-canvas) 95%, transparent) 0%,
    color-mix(in oklab, var(--sc-canvas) 86%, transparent) 40%,
    color-mix(in oklab, var(--sc-canvas) 64%, transparent) 52%,
    color-mix(in oklab, var(--sc-canvas) 20%, transparent) 64%,
    transparent 76%);
}

picture.sc-stage__poster img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* As cenas do filme. Todas ocupam o mesmo lugar e se revezam por tempo de
   clipe, não por progresso do ato: o texto e a imagem são uma linha do tempo só.
   A âncora alterna de canto a cada cena para o olho não se acomodar. */
.cena {
  position: absolute;
  z-index: var(--sc-z-copy);
  bottom: clamp(3rem, 11vh, 8rem);
  max-width: min(42rem, 72vw);
  opacity: 0;
  pointer-events: none;
  will-change: opacity;
}
.cena--lead {
  left: var(--sc-gutter);
}
.cena--trail {
  right: var(--sc-gutter);
  text-align: right;
}
.cena--trail .lede,
.cena--trail .body {
  margin-left: auto;
}
.cena--trail .hero-meta {
  justify-content: flex-end;
}
.cena--primeira {
  opacity: 1;
}
.cena .d {
  max-width: 14ch;
}
.cena--trail .d {
  margin-left: auto;
}
.cena .lede {
  margin-top: 1.1rem;
}
.cena .tag {
  margin-bottom: 1.1rem;
  /* Sobre o filme o tan secundário mede 3,3:1. Aqui a tag é creme; o papel de
     "secundário" fica por conta do tamanho e do espaçamento, não da tinta. */
  color: var(--sc-ink);
  /* A caixa acompanha as letras. Um <p> de largura cheia estica a tag por cima
     do trecho claro do quadro e derruba a medição de contraste por causa de
     espaço vazio, não de texto. */
  width: max-content;
  max-width: 100%;
}

.sc-split--line {
  padding: 0.2em 0 0.14em;
  margin: -0.2em 0 -0.14em;
}

/* A máscara linha a linha. O engine faz isso para cues; aqui a divisão é nossa
   porque quem manda é o relógio do clipe. O padding devolve aos descendentes o
   espaço que uma máscara colada na caixa da linha comeria. */
.linha {
  display: block;
  overflow: hidden;
  /* Folga nas DUAS pontas. Descendente embaixo é o caso conhecido; em cima o
     Anton tem line-height 0,92 e o circunflexo de VOCÊ e de VÔLEI fica acima da
     caixa da linha, então uma máscara colada no topo decapita o acento e a
     palavra sai errada em português sem ninguém perceber. */
  padding: 0.2em 0 0.12em;
  margin: -0.2em 0 -0.12em;
}
.linha > i {
  display: inline-block;
  font-style: inherit;
  will-change: transform, opacity;
}

.hero-nap {
  font-size: 0.85rem;
  color: var(--sc-ink);
  margin: 0 0 1.1rem;
  letter-spacing: 0.01em;
}
.hero-nap b {
  font-weight: 600;
}
.hero-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.75rem 1rem;
  margin-top: 1.6rem;
}

/* Os dois scrims convivem e se revezam junto com a âncora da cena, para a
   densidade estar sempre embaixo do texto e nunca no meio da fotografia. */
[data-scrim] {
  opacity: 0;
  transition: opacity 320ms var(--sc-ease-out);
}

/* ================================================================== ATO 2 ==
   As quadras cobertas. Argumento, não imagem: o quadro para e o texto anda. */
#cobertas .sc-stage {
  display: grid;
  place-items: center;
  background: var(--deep);
}
.coberta-foto {
  position: absolute;
  inset: 0 0 0 auto;
  width: min(46%, 42rem);
  z-index: 0;
  pointer-events: none;
}
.coberta-foto img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  filter: var(--grade) grayscale(0.15);
  /* A máscara afasta a imagem da coluna de texto em vez de escurecer a foto
     inteira para resolver o contraste de um canto só. */
  -webkit-mask-image: linear-gradient(to right, transparent 0%, #000 38%, #000 100%);
  mask-image: linear-gradient(to right, transparent 0%, #000 38%, #000 100%);
  transform: translate3d(0, calc(var(--sc-p, 0) * -4vh), 0) scale(1.06);
}
@media (max-width: 860px) {
  .coberta-foto {
    inset: auto 0 0 0;
    width: 100%;
    height: 46%;
  }
  .coberta-foto img {
    -webkit-mask-image: linear-gradient(to top, transparent 0%, #000 52%, #000 100%);
    mask-image: linear-gradient(to top, transparent 0%, #000 52%, #000 100%);
  }
}
.arg {
  position: relative;
  z-index: 1;
  width: 100%;
  max-width: var(--sc-maxw);
  padding-inline: var(--sc-gutter);
  display: grid;
  gap: 1.1rem;
}
.arg > [data-sc-cue] {
  grid-area: 1 / 1;
  /* A caixa acompanha a coluna de texto, não a célula da grade. Um bloco de
     largura cheia se estende por cima da fotografia que sangra à direita, e a
     medição de contraste passa a ler areia estourada sob um título que na
     verdade termina muito antes dela. */
  justify-self: start;
  max-width: min(46rem, 58%);
}
@media (max-width: 860px) {
  .arg > [data-sc-cue] {
    max-width: 100%;
  }
}
.arg .d {
  max-width: 17ch;
}
.arg .body {
  margin-top: 1.1rem;
  max-width: 44ch;
}
.telha {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  opacity: 0.5;
  background: repeating-linear-gradient(
    98deg,
    transparent 0 44px,
    color-mix(in oklab, var(--sc-ink) 13%, transparent) 44px 46px
  );
  mask-image: linear-gradient(to bottom, #000 0%, transparent 72%);
  transform: translate3d(0, calc(var(--sc-p, 0) * -6vh), 0);
}

/* ================================================================== ATO 3 ==
   A régua lateral das modalidades. Largura medida, não presumida: o trilho
   precisa transbordar meia viewport ou o ato vira uma tela parada. */
#modalidades .sc-stage {
  display: flex;
  align-items: center;
  background: var(--deep);
}
.trilho {
  gap: clamp(1rem, 2.4vw, 2rem);
  align-items: stretch;
  padding-inline: var(--sc-gutter);
}
.trilho > * {
  flex: none;
}
.trilho-abre,
.trilho-fecha {
  width: min(32rem, 82vw);
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 1rem;
}
.mod {
  width: clamp(16rem, 26vw, 27rem);
  align-self: start;
  display: flex;
  flex-direction: column;
  margin: 0;
  opacity: var(--settle-o, 1);
  transform: translate3d(0, var(--settle-y, 0), 0);
}
.mod img {
  width: 100%;
  height: auto;
  aspect-ratio: 700 / 1080;
  object-fit: cover;
  filter: var(--grade);
  transition: filter 520ms var(--sc-ease-out);
}
.mod figcaption {
  padding-top: 1rem;
}
.mod dl {
  margin: 0.9rem 0 0;
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 0.35rem 1rem;
  font-size: 0.83rem;
  border-top: 1px solid var(--sc-hairline);
  padding-top: 0.8rem;
}
.mod dt {
  color: var(--sc-ink-soft);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  font-size: 0.7rem;
  align-self: center;
}
.mod dd {
  margin: 0;
  color: var(--sc-ink);
}
@media (prefers-reduced-motion: no-preference) {
  .mod {
    transition: opacity 420ms var(--sc-ease-out);
  }
}

/* ============================================================ interlúdio == */
.silencio {
  padding-block: clamp(5rem, 12vh, 9rem);
  text-align: center;
}
.silencio .d {
  margin-inline: auto;
  max-width: 18ch;
}

/* ================================================================== ATO 4 ==
   O Sol da Acauhan. O pico. Um controle, e a luz da página inteira obedece. */
#sol .sc-stage {
  display: grid;
  place-items: stretch;
  /* Horizonte em 54%: acima é céu e só o arco vive lá; abaixo é o chão da
     marca, e é onde todo o texto mora. A luz muda a cada hora; o contraste do
     texto, não. */
  background: linear-gradient(
    to bottom,
    var(--ceu-alto, #142a45) 0%,
    var(--ceu-baixo, #6d4a2c) 46%,
    var(--sc-canvas) 54%,
    var(--sc-canvas) 100%
  );
  transition: background 520ms var(--sc-ease-out);
}
.sol-grid {
  width: 100%;
  max-width: var(--sc-maxw);
  margin-inline: auto;
  padding: calc(var(--topo-h) + 1rem) var(--sc-gutter) clamp(2rem, 6vh, 4rem);
  display: grid;
  grid-template-rows: minmax(0, 1fr) auto;
  gap: clamp(1.25rem, 3vh, 2.5rem);
}
.arco {
  position: relative;
  width: 100%;
  min-height: 0;
  align-self: center;
}
.arco svg {
  width: 100%;
  height: 100%;
  max-height: 34vh;
  margin-inline: auto;
  overflow: visible;
}
/* O traço corre por cima do céu, que é claro ao meio-dia e escuro às 20h, por
   isso ele é escuro com alfa e não uma tinta clara: funciona nas duas pontas. */
.arco .traco {
  fill: none;
  stroke: rgb(27 21 18 / 0.42);
  stroke-width: 1.5;
  stroke-dasharray: 2 8;
  stroke-linecap: round;
}
.arco .chao {
  fill: none;
  stroke: var(--sc-accent);
  stroke-width: 1;
  opacity: 0.75;
}
.disco {
  transition: transform 520ms var(--sc-ease-out);
}
@media (prefers-reduced-motion: reduce) {
  .disco,
  #sol .sc-stage,
  .mod img,
  .servico img,
  .coberta-foto img {
    transition: none;
  }
}

.sol-baixo {
  display: grid;
  gap: clamp(1.25rem, 3vw, 3rem);
  align-items: end;
}
@media (min-width: 900px) {
  .sol-baixo {
    grid-template-columns: minmax(0, 1fr) minmax(19rem, 23rem);
  }
}
.sol-titulo .body {
  margin-top: 1rem;
  max-width: 40ch;
}

.sol-painel {
  background: color-mix(in oklab, var(--deep) 96%, transparent);
  backdrop-filter: blur(10px);
  border: 1px solid var(--sc-hairline);
  box-shadow: var(--sc-e2), var(--sc-edge);
  padding: clamp(1.25rem, 3vw, 2rem);
}
.sol-hora {
  font-family: var(--sc-font-display);
  font-size: clamp(3.4rem, 2rem + 5vw, 5.6rem);
  line-height: 0.86;
  font-variant-numeric: tabular-nums;
  color: var(--sc-ink);
  display: block;
}
.sol-faixa {
  color: var(--sc-accent);
  font-weight: 700;
  font-size: 1.2rem;
  letter-spacing: 0.06em;
  display: block;
  margin-top: 0.35rem;
}
.sol-nota {
  margin: 1rem 0 0;
  color: var(--sc-ink-soft);
  font-size: 0.95rem;
  min-height: 4.2em;
}
.sol-fim {
  margin: 1.1rem 0 0;
  padding-top: 1rem;
  border-top: 1px solid var(--sc-hairline);
  font-size: 0.82rem;
  color: var(--sc-ink-soft);
}

.dial {
  margin-top: 1.4rem;
}
.dial label {
  /* Sem caixa alta: são 31 caracteres, e é uma instrução, não um rótulo curto.
     Em caixa alta com tracking de .16em a frase perde a silhueta das palavras,
     que é justamente por onde se lê. O resto da etiqueta continua igual. */
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.01em;
  color: var(--sc-ink-soft);
  display: block;
  margin-bottom: 0.7rem;
}
.dial input[type="range"] {
  -webkit-appearance: none;
  appearance: none;
  width: 100%;
  height: 2.75rem;
  background: transparent;
  cursor: grab;
  display: block;
}
.dial input[type="range"]:active {
  cursor: grabbing;
}
.dial input[type="range"]::-webkit-slider-runnable-track {
  height: 2px;
  background: linear-gradient(
    to right,
    var(--sun-edge) 0%,
    var(--sun-core) 45%,
    var(--sc-accent) 100%
  );
}
.dial input[type="range"]::-moz-range-track {
  height: 2px;
  background: linear-gradient(
    to right,
    var(--sun-edge) 0%,
    var(--sun-core) 45%,
    var(--sc-accent) 100%
  );
}
.dial input[type="range"]::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 1.65rem;
  height: 1.65rem;
  margin-top: -0.8rem;
  border-radius: 50%;
  background: var(--sun-core);
  border: 2px solid var(--deep);
  box-shadow: 0 0 0 1px var(--sun-edge), 0 6px 16px -4px rgb(0 0 0 / 0.6);
}
.dial input[type="range"]::-moz-range-thumb {
  width: 1.65rem;
  height: 1.65rem;
  border-radius: 50%;
  background: var(--sun-core);
  border: 2px solid var(--deep);
  box-shadow: 0 0 0 1px var(--sun-edge);
}
.dial input[type="range"]:focus-visible {
  outline: 2px solid var(--sc-ink);
  outline-offset: 4px;
}
.dial-escala {
  display: flex;
  justify-content: space-between;
  font-size: 0.7rem;
  color: var(--sc-ink-soft);
  font-variant-numeric: tabular-nums;
  letter-spacing: 0.06em;
}

/* ================================================================ SERVIÇOS ==
   Lista editorial com fio, não quatro cartões iguais. */
.servicos {
  border-top: 1px solid var(--sc-hairline);
}
.servico {
  display: grid;
  gap: 0.6rem 2.5rem;
  padding-block: clamp(2.2rem, 5vw, 3.6rem);
  border-bottom: 1px solid var(--sc-hairline);
}
@media (min-width: 820px) {
  .servico {
    grid-template-columns: 4rem minmax(0, 20rem) minmax(0, 1fr);
    align-items: start;
  }
  .servico--media {
    grid-template-columns: 4rem minmax(0, 20rem) minmax(0, 1fr) 13rem;
  }
}
.servico-sub {
  margin-top: 0.5rem;
}
.servico-num {
  font-family: var(--sc-font-display);
  font-size: 1.6rem;
  color: var(--sc-accent);
  font-variant-numeric: tabular-nums;
  line-height: 1.6;
}
.servico .body {
  max-width: 52ch;
}
.servico ul {
  margin: 0.9rem 0 0;
  padding: 0;
  list-style: none;
  display: grid;
  gap: 0.4rem;
  font-size: 0.92rem;
  color: var(--sc-ink);
}
.servico li::before {
  content: "";
  display: inline-block;
  width: 0.5rem;
  height: 1px;
  background: var(--sc-accent);
  vertical-align: middle;
  margin-right: 0.7rem;
}
.servico img {
  width: 100%;
  height: 100%;
  min-height: 12rem;
  object-fit: cover;
  filter: var(--grade);
  transition: filter 520ms var(--sc-ease-out);
}
.servico-acao {
  margin-top: 1.2rem;
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
}
.num {
  font-variant-numeric: tabular-nums;
  font-family: var(--sc-font-display);
  font-size: 1.15em;
  color: var(--sc-ink);
}

/* ================================================================= ABERTURA ==
   Uma limpeza de tela: a faixa é apagada de baixo para cima pelo scroll. */
.abertura {
  position: relative;
  overflow: clip;
  padding-block: clamp(4rem, 11vw, 8rem);
  background: var(--burnt);
  color: #efe2c7;
  --sc-ink: #efe2c7;
  --sc-ink-soft: #f0d4c4;
  --sc-hairline: rgb(239 226 199 / 0.28);
}
.abertura .body {
  color: #f0d4c4;
}
.abertura-inner {
  display: grid;
  gap: 1.4rem;
}
@media (min-width: 900px) {
  .abertura-inner {
    grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr);
    align-items: end;
    gap: 3rem;
  }
}

/* =================================================================== FAQ === */
.faq {
  display: grid;
  gap: 0;
  border-top: 1px solid var(--sc-hairline);
  margin-top: 2.5rem;
}
.faq > div {
  padding-block: clamp(1.4rem, 3vw, 2rem);
  border-bottom: 1px solid var(--sc-hairline);
  display: grid;
  gap: 0.5rem;
}
@media (min-width: 820px) {
  .faq > div {
    grid-template-columns: minmax(0, 22rem) minmax(0, 1fr);
    gap: 2.5rem;
  }
}
.faq h3 {
  margin: 0;
  font-size: 1.02rem;
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--sc-ink);
}
.faq p {
  margin: 0;
  color: var(--sc-ink-soft);
  max-width: 58ch;
}

/* ================================================================ CONTATO === */
.contato {
  background: var(--deep);
  border-top: 1px solid var(--sc-hairline);
}
.contato-grid {
  display: grid;
  gap: clamp(2rem, 5vw, 4rem);
}
@media (min-width: 900px) {
  .contato-grid {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr);
    align-items: start;
  }
}
.nap {
  font-style: normal;
  display: grid;
  gap: 1.4rem;
}
.nap-bloco dt {
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--sc-ink-soft);
  margin-bottom: 0.35rem;
}
.nap-bloco dd {
  margin: 0;
  font-size: 1.02rem;
  color: var(--sc-ink);
}
.nap a {
  color: var(--sc-ink);
  text-decoration-color: var(--sc-accent);
  /* O telefone e o @ não estão dentro de uma frase: são valores soltos, então
     a exceção de link em linha do WCAG 2.5.8 não os cobre e eles precisam dos
     24px de alvo. O padding negativo na margem evita mexer no ritmo do bloco. */
  display: inline-block;
  padding-block: 0.3rem;
  margin-block: -0.3rem;
}
.horarios {
  margin: 0;
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 0.3rem 1.5rem;
  font-variant-numeric: tabular-nums;
}
.horarios dt {
  color: var(--sc-ink-soft);
  font-size: 0.92rem;
  letter-spacing: 0;
  text-transform: none;
  font-weight: 400;
  margin: 0;
}
.horarios dd {
  font-size: 0.92rem;
}
.mapa {
  width: 100%;
  aspect-ratio: 4 / 3;
  border: 1px solid var(--sc-hairline);
  filter: grayscale(0.35) contrast(1.05);
}
@media (min-width: 900px) {
  .mapa {
    aspect-ratio: 1 / 1;
  }
}

.rodape {
  border-top: 1px solid var(--sc-hairline);
  padding-block: 2rem;
  display: flex;
  flex-wrap: wrap;
  gap: 1rem 2rem;
  justify-content: space-between;
  align-items: center;
  font-size: 0.8rem;
  color: var(--sc-ink-soft);
}
.rodape a {
  color: var(--sc-ink-soft);
  display: inline-block;
  padding-block: 0.35rem;
  margin-block: -0.35rem;
}
.rodape a:hover {
  color: var(--sc-ink);
}

/* -------------------------------------------------------------- celular ----
   Direção de arte própria, não a mesma tela encolhida. Este bloco fica no FIM
   do arquivo de propósito: `.topo-cta { display:none }` escrito lá em cima
   perdia para `.cta { display:inline-flex }`, que vem depois e tem o mesmo
   peso, e o botão continuava ocupando metade da barra no celular. */
@media (max-width: 860px) {
  .sc-copy {
    bottom: clamp(2rem, 9vh, 5rem);
  }
  /* A coluna vira faixa: abaixo de 860px a cópia ocupa a largura toda, então a
     densidade precisa estar embaixo dela e não de um lado. */
  .sc-scrim--lead,
  .sc-scrim--trail {
    /* A faixa sobe mais alto que a do engine porque o bloco do hero em retrato
       é alto: sobrenome, título de três linhas e dois botões de largura cheia
       ocupam 40% da tela. A densidade tem que alcançar o TOPO do bloco, não o
       rodapé dele. O recorte retrato do clipe deixa a atleta na metade de cima,
       que é justamente a metade que continua limpa. */
    background: linear-gradient(
      to top,
      color-mix(in oklab, var(--sc-canvas) 96%, transparent) 0%,
      color-mix(in oklab, var(--sc-canvas) 90%, transparent) 40%,
      color-mix(in oklab, var(--sc-canvas) 60%, transparent) 56%,
      color-mix(in oklab, var(--sc-canvas) 22%, transparent) 68%,
      transparent 82%
    );
  }

  /* Canto vira faixa: a cópia ocupa a largura toda, então alinhar à direita só
     deixa a leitura em degrau e a densidade no canto errado. */
  .cena {
    left: var(--sc-gutter);
    right: var(--sc-gutter);
    max-width: none;
    text-align: left;
    bottom: 6.5rem;
  }
  .cena--trail .d,
  .cena--trail .lede,
  .cena--trail .body {
    margin-left: 0;
  }
  .cena--trail .hero-meta {
    justify-content: flex-start;
  }
  .cena .d {
    max-width: none;
  }
  .cena .lede {
    font-size: 1rem;
  }

  /* O hero desce dois degraus: a 390px o clamp de desktop ainda entregava
     quatro linhas de Anton em cima do rosto da jogadora. */
  .d--xl {
    font-size: clamp(2rem, 1rem + 6.4vw, 2.6rem);
  }
  .d--lg {
    font-size: clamp(1.9rem, 1.1rem + 3.6vw, 2.5rem);
  }
  .hero-nap {
    font-size: 0.78rem;
    margin-bottom: 0.9rem;
  }
  .hero-meta {
    margin-top: 1.1rem;
  }
  .hero-meta .cta {
    flex: 1 1 100%;
    justify-content: center;
  }

  .duna {
    height: 26vh;
  }
  .trilho-abre,
  .trilho-fecha {
    width: 78vw;
  }
  .mod {
    width: 63vw;
  }

  /* O ato do sol tem que caber entre a barra do topo e a barra de ação de
     baixo, então o arco encolhe e o painel é que fica com o espaço. */
  .sol-grid {
    padding-bottom: 5.5rem;
    gap: 0.75rem;
  }
  /* Em retrato a coluna de texto é alta e encostava na faixa quente do céu.
     O horizonte sobe para 34% e o arco fica com a faixa de cima só para ele. */
  #sol .sc-stage {
    background: linear-gradient(
      to bottom,
      var(--ceu-alto, #142a45) 0%,
      var(--ceu-baixo, #6d4a2c) 27%,
      var(--sc-canvas) 34%,
      var(--sc-canvas) 100%
    );
  }
  .arco svg {
    max-height: 17vh;
  }
  .sol-titulo .body {
    display: none;
  }
  .sol-hora {
    font-size: clamp(2.6rem, 11vw, 3.4rem);
  }
  .sol-painel {
    padding: 1rem 1.1rem 1.2rem;
  }
  .sol-nota {
    min-height: 0;
    font-size: 0.9rem;
  }
  .sol-fim {
    font-size: 0.78rem;
  }

  /* O polegar precisa de alvo, não de elegância. */
  .dial input[type="range"] {
    height: 3.25rem;
  }
  .dial input[type="range"]::-webkit-slider-thumb {
    width: 2.1rem;
    height: 2.1rem;
    margin-top: -1.05rem;
  }
  .dial input[type="range"]::-moz-range-thumb {
    width: 2.1rem;
    height: 2.1rem;
  }
}

@media (max-width: 860px) {
  :root {
    --topo-h: 3.6rem;
  }
  /* A régua horizontal de seis trechos vira hambúrguer: em 390px ela mostrava
     três itens e escondia metade do site atrás de um gesto que ninguém sabe
     que existe. */
  .menu,
  .topo-cta {
    display: none;
  }
  .hamburguer {
    display: flex;
  }
}

@media (max-width: 400px) {
  .hamburguer-rotulo {
    display: none;
  }
  .hamburguer {
    /* Sem o rótulo sobram só as três barras, e o alvo caía para 36px de
       largura. O mínimo continua sendo 44px nos dois eixos. */
    padding-inline: 0.55rem;
    min-width: 2.75rem;
    justify-content: center;
  }
}
