/* Reveal animations driven by IntersectionObserver in scripts/reveals.js */

[data-reveal] {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 900ms var(--ease), transform 900ms var(--ease);
}
[data-reveal][data-revealed="true"] {
  opacity: 1;
  transform: none;
}

/* Stagger children */
[data-reveal-children] > * {
  opacity: 0;
  transform: translateY(18px);
  transition: opacity 700ms var(--ease), transform 700ms var(--ease);
  transition-delay: calc(var(--i, 0) * 80ms);
}
[data-reveal-children][data-revealed="true"] > * {
  opacity: 1;
  transform: none;
}

/* Hero subtle vignette to ground the white stage */
.hero::after {
  content: "";
  position: absolute; inset: 0;
  pointer-events: none;
  background: radial-gradient(ellipse at center, transparent 50%, rgba(247,245,240,0.6) 100%);
  z-index: 1;
}

/* Reduced motion — honour user preference */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    transition-duration: 0.001ms !important;
  }
  [data-reveal], [data-reveal-children] > * { opacity: 1 !important; transform: none !important; }
}
