/* ==========================================================================
   BIGHEADSITES · MOVIMENTO COMPARTILHADO
   Entrada por scroll (js/core/reveal.js) e parallax discreto (js/core/parallax.js).

   data-reveal="up"     sobe e aparece
   data-reveal="scale"  cresce com leve rebote
   data-reveal="lines"  título: palavras (.w) sobem por linha, uma linha por vez
   data-reveal="custom" só recebe .is-in; o CSS da seção define o efeito

   Atraso por elemento: --reveal-delay no CSS da seção.
   Os estados escondidos só valem com .has-reveal, que o JS liga ao iniciar.
   Sem JS ou com movimento reduzido, tudo fica visível.
   ========================================================================== */

.has-reveal [data-reveal="up"] {
  opacity: 0;
  translate: 0 1.5rem;
  transition:
    opacity 700ms var(--ease-out) var(--reveal-delay, 0ms),
    translate 900ms var(--ease-out) var(--reveal-delay, 0ms);
}

.has-reveal [data-reveal="scale"] {
  opacity: 0;
  scale: 0.6;
  transition:
    opacity 400ms linear var(--reveal-delay, 0ms),
    scale 800ms var(--ease-snap) var(--reveal-delay, 0ms);
}

.has-reveal :is([data-reveal="up"], [data-reveal="scale"]).is-in {
  opacity: 1;
  translate: none;
  scale: none;
}

/* Títulos: cada palavra sobe por trás de uma máscara.
   O recorte negativo nas bordas protege acentos e inclinações. */
[data-reveal="lines"] .w {
  display: inline-block;
}

.has-reveal [data-reveal="lines"] .w {
  clip-path: inset(-40% -12% 100% -12%);
  translate: 0 60%;
  transition:
    clip-path 900ms var(--ease-out),
    translate 900ms var(--ease-out);
  transition-delay: calc(var(--reveal-delay, 0ms) + var(--line, 0) * 120ms);
}

.has-reveal [data-reveal="lines"].is-in .w {
  clip-path: inset(-40% -12% -30% -12%);
  translate: none;
}

/* Fita verde (.tape) em títulos: corte da esquerda para a direita na linha
   onde ela começa (--tape-line, calculado pelo JS); as palavras sobre a fita
   esperam a fita chegar. */
.has-reveal [data-reveal="lines"] .tape {
  clip-path: inset(-20% 100% -20% -6%);
  transition: clip-path 650ms var(--ease-out);
  transition-delay: calc(var(--reveal-delay, 0ms) + var(--tape-line, 0) * 120ms - 60ms);
}

.has-reveal [data-reveal="lines"].is-in .tape {
  clip-path: inset(-20% -6% -20% -6%);
}

.has-reveal [data-reveal="lines"] .taped .w {
  transition-delay: calc(var(--reveal-delay, 0ms) + var(--line, 0) * 120ms + 380ms);
}

@media (prefers-reduced-motion: no-preference) {
  [data-parallax] {
    will-change: translate;
  }
}
