/* ============================================================
   animations.css — entrance, reveals & ambient motion
   ============================================================ */

/* ---------- Entrance states ---------- */
.entrance.is-opening .entrance__panel--left { transform: translateX(-102%); }
.entrance.is-opening .entrance__panel--right { transform: translateX(102%); }
.entrance.is-opening .entrance__light { opacity: 0; transition: opacity 1.6s ease; }
.entrance.is-opening .entrance__stage {
  transform: translateY(-26px) scale(1.04);
  opacity: 0;
  transition-delay: .35s;
}
.entrance.is-fading { opacity: 0; transition: opacity .8s ease .9s; }

.entrance__card { animation: cardBreathe 7s ease-in-out infinite; }
@keyframes cardBreathe {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-7px); }
}

/* ---------- Scroll reveal ---------- */
.reveal {
  opacity: 0;
  transform: translateY(26px);
  transition: opacity .9s ease, transform .9s cubic-bezier(.22, .7, .3, 1);
}
.reveal.is-visible { opacity: 1; transform: none; }

.timeline__item.reveal { transition-delay: var(--reveal-delay, 0s); }

/* ---------- Hero entrance (after curtain opens) ---------- */
.hero.is-revealed .hero__figure { animation: heroRise 1.2s cubic-bezier(.2, .7, .3, 1) both; }
.hero.is-revealed .hero__blessing { animation: fadeSoft 1s ease .25s both; }
.hero.is-revealed .hero__names { animation: heroRise 1.1s cubic-bezier(.2, .7, .3, 1) .35s both; }
.hero.is-revealed .hero__request { animation: fadeSoft 1s ease .6s both; }
.hero.is-revealed .hero__datetime,
.hero.is-revealed .hero__actions { animation: fadeSoft 1s ease .8s both; }

@keyframes heroRise {
  from { opacity: 0; transform: translateY(30px); }
  to { opacity: 1; transform: none; }
}
@keyframes fadeSoft {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: none; }
}

/* ---------- Floating petals ---------- */
.petal {
  position: absolute;
  top: -8%;
  width: 14px;
  height: 14px;
  border-radius: 60% 40% 55% 45%;
  background: radial-gradient(circle at 30% 30%, rgba(255,255,255,.95), var(--petal-color, rgba(216,167,167,.55)));
  opacity: .5;
  animation: petalFall var(--petal-duration, 16s) linear var(--petal-delay, 0s) infinite;
  will-change: transform;
}
@keyframes petalFall {
  0% { transform: translate3d(0, -10vh, 0) rotate(0deg); opacity: 0; }
  12% { opacity: .5; }
  100% { transform: translate3d(var(--petal-drift, 30px), 110vh, 0) rotate(320deg); opacity: 0; }
}

/* ---------- Micro-interactions ---------- */
.scroll-indicator__mouse span { animation: scrollNudge 2s ease-in-out infinite; }
@keyframes scrollNudge {
  0%, 100% { transform: translateY(0); opacity: 1; }
  50% { transform: translateY(8px); opacity: .35; }
}

@keyframes musicPulse {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.12); }
}

.scratch-card__canvas.is-revealed { animation: veilLift .9s ease forwards; }
@keyframes veilLift {
  from { opacity: 1; }
  to { opacity: 0; }
}

.countdown__value.is-ticking { animation: tickFlip .45s ease; }
@keyframes tickFlip {
  0% { transform: translateY(-6px); opacity: .35; }
  100% { transform: translateY(0); opacity: 1; }
}

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }

  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
    scroll-behavior: auto !important;
  }

  .reveal { opacity: 1; transform: none; }
  .entrance.is-opening .entrance__panel--left,
  .entrance.is-opening .entrance__panel--right { transform: none; opacity: 0; }
  .petal { display: none; }
}
