/* choreography — motion module (Utkarsh & Nandini).
   Owns the .enter channel on slide 2 + slide 3 heroes (entrance choreography).
   Never touches .plx (parallax), img.ly (ambient / core reveal), or .stage--slide1.
   The gold sheen over the wording now lives in text.css (.tx__sheen), because the
   wording is live text rather than a maskable cutout. */

/* ------------------------------------------------------------------ *
 * Hero entrance choreography (slide 2 + slide 3)
 * FOUC-safe: the hidden initial state applies ONLY once JS adds .choreo,
 * so if the script never runs the heroes stay fully visible.
 * ------------------------------------------------------------------ */

.stage--slide2.choreo [data-hero] .enter,
.stage--slide3.choreo [data-hero] .enter {
  opacity: 0;
  transform: translateY(3%) scale(0.98);
  transition:
    opacity 1s ease,
    transform 1.15s cubic-bezier(0.22, 0.68, 0.2, 1);
  transition-delay: calc(var(--i, 0) * 0.11s);
}

/* Settled resting state — heroes rise into place, staggered by z-order (--i). */
.stage--slide2.choreo.entered [data-hero] .enter,
.stage--slide3.choreo.entered [data-hero] .enter {
  opacity: 1;
  transform: none;
}

/* The couple should feel like it rises + settles last-ish: a touch slower
   and delayed a little past its raw --i so it lands near the end of the build. */
.stage--slide2.choreo [data-hero="couple"] .enter {
  transform: translateY(4.5%) scale(0.985);
  transition:
    opacity 1.1s ease,
    transform 1.35s cubic-bezier(0.22, 0.68, 0.2, 1);
  transition-delay: calc(var(--i, 0) * 0.11s + 0.55s);
}

/* Slide-2 lanterns / candelabras get a small overshoot so they look like they
   drop into their existing ambient sway (tasteful, not bouncy). */
.stage--slide2.choreo [data-hero="candelabra-left"] .enter,
.stage--slide2.choreo [data-hero="candelabra-right"] .enter,
.stage--slide2.choreo [data-hero="lantern-cluster-left"] .enter,
.stage--slide2.choreo [data-hero="lantern-cluster-right"] .enter {
  transform: translateY(-2.6%) scale(1.008);
  transition:
    opacity 0.95s ease,
    transform 1.2s cubic-bezier(0.34, 1.32, 0.5, 1);
  transition-delay: calc(var(--i, 0) * 0.11s);
}

/* ------------------------------------------------------------------ *
 * Reduced motion — no build. Heroes resolve instantly visible.
 * ------------------------------------------------------------------ */
@media (prefers-reduced-motion: reduce) {
  .stage.choreo [data-hero] .enter {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
}
