/*
  Padrão invertido: o conteúdo nasce visível. Só depois que o GSAP carrega e
  gsap-animations.js marca <html class="is-animated"> é que estas regras
  escondem o conteúdo para a entrada animar — se o script falhar (CDN fora do
  ar, rede bloqueada), a classe nunca é adicionada e o texto fica visível.
*/
.is-animated .hero__portrait,
.is-animated .hero__line,
.is-animated .hero__subtext,
.is-animated .hero__ctas {
  opacity: 0;
  transform: translateY(24px);
}

.is-animated .hero__portrait {
  transform: scale(1.035);
}

.is-animated .projects__intro > *,
.is-animated .projects__stage,
.is-animated .projects__caption,
.is-animated .projects__controls {
  opacity: 0;
  transform: translateY(16px);
}

.is-animated .manifesto__statement,
.is-animated .manifesto__step {
  opacity: 0;
  transform: translateY(12px);
}

@media (prefers-reduced-motion: reduce) {
  * {
    animation: none !important;
    transition: none !important;
  }
}
