.reveal {
    opacity: 0;
    transform: translateY(48px);
    transition:
        opacity 1s var(--ease),
        transform 1.2s var(--ease);
}
.reveal.vis { opacity: 1; transform: translateY(0); }
.d1 { transition-delay: 0.15s; }
.d2 { transition-delay: 0.30s; }
.d3 { transition-delay: 0.45s; }

/* ── Reveal de imagem — usa o fade/slide do .reveal (o reveal.js adiciona
      .vis) e soma um leve zoom-out da imagem. A imagem precisa ser filha
      direta do elemento, que também deve ter a classe .reveal. ── */
.reveal-img {
  overflow: hidden;   /* recorta o zoom da imagem */
}
.reveal-img > img {
  transform: scale(1.12);
  transition: transform 1.6s var(--ease);
}
.reveal-img.vis > img {
  transform: scale(1);
}

/* Palavra do efeito "preenchimento por scroll" — começa apagada; a
   opacidade é preenchida pelo word-fill.js ([data-word-fill]). */
.wf-word { opacity: 0.2; }

/* Slide de slideshow (troca seca) — só o .is-active fica visível.
   Alternado pelo slideshow.js ([data-slideshow]). O empilhamento
   (posição/tamanho) é definido por cada seção. */
.slide { opacity: 0; }
.slide.is-active { opacity: 1; }

/* Respeita quem prefere menos movimento — mostra tudo estático */
@media (prefers-reduced-motion: reduce) {
  .reveal,
  .hero__line,
  .hero__eyebrow {
    opacity: 1;
    transform: none;
    transition: none;
  }
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ── Títulos — PP Writer ── */
.text-t0, .text-t1, .text-t2, .text-t3, .text-t4, .text-t5, .text-t6, .text-t7 {
    font-family: var(--font-display);
    font-weight: var(--weight-title);
    text-transform: uppercase;
    letter-spacing: var(--tracking-title);
}
.text-t0 { font-size: var(--fs-t0); line-height: var(--lh-t0); }
.text-t1 { font-size: var(--fs-t1); line-height: var(--lh-t1); }
.text-t2 { font-size: var(--fs-t2); line-height: var(--lh-t2); }
.text-t3 { font-size: var(--fs-t3); line-height: var(--lh-t3); }
.text-t4 { font-size: var(--fs-t4); line-height: var(--lh-t4); }
.text-t5 { font-size: var(--fs-t5); line-height: var(--lh-t5); }
.text-t6 { font-size: var(--fs-t6); line-height: var(--lh-t6); }
.text-t7 { font-size: var(--fs-t7); line-height: var(--lh-t7); }

/* ── Corpo — Cormorant Garamond ── */
.text-body-lead, .text-body-base, .text-body-deci, .text-body-centi {
    font-family: var(--font-body);
    font-style: normal;
    font-weight: var(--weight-body);
    letter-spacing: var(--tracking-body);
}
.text-body-lead  { font-size: var(--fs-body-lead);  line-height: var(--lh-body); }
.text-body-base  { font-size: var(--fs-body-base);  line-height: var(--lh-body); }
.text-body-deci  { font-size: var(--fs-body-deci);  line-height: var(--lh-body); }
.text-body-centi { font-size: var(--fs-body-centi); line-height: var(--lh-body); }

/* ── Interface / Subtítulos — Area Extended ── */
.text-ui-lead, .text-ui-base, .text-ui-deci, .text-ui-centi {
    font-family: var(--font-ui);
    font-style: normal;
    font-weight: var(--weight-subtitle);
    letter-spacing: var(--tracking-subtitle);
    text-transform: uppercase;
}
.text-ui-lead  { font-size: var(--fs-ui-lead);  line-height: var(--lh-ui); }
.text-ui-base  { font-size: var(--fs-ui-base);  line-height: var(--lh-ui); }
.text-ui-deci  { font-size: var(--fs-ui-deci);  line-height: var(--lh-ui); }
.text-ui-centi { font-size: var(--fs-ui-centi); line-height: var(--lh-ui); }
