/* ==========================================================================
   ANIMATIONS — keyframes & motion utility classes
   Respects prefers-reduced-motion via the global rule in style.css.
   ========================================================================== */

[data-reveal] { opacity: 0; transform: translateY(28px); }
.no-motion [data-reveal] { opacity: 1 !important; transform: none !important; }

/* --------------------------------------------------------------------------
   Loader — plane banks in and levels out
   -------------------------------------------------------------------------- */
@keyframes plane-arrival {
  0%   { transform: translate(-60px, 40px) rotate(-25deg); opacity: 0; }
  60%  { transform: translate(6px, -4px) rotate(4deg); opacity: 1; }
  100% { transform: translate(0, 0) rotate(0deg); }
}
.loader__plane { animation: plane-arrival 1.1s var(--ease-flight) both; }
.loader.is-hidden { opacity: 0; visibility: hidden; transition: opacity 0.6s ease, visibility 0.6s ease; }

/* --------------------------------------------------------------------------
   Nav music toggle glow
   -------------------------------------------------------------------------- */
@keyframes pulse-glow {
  0%, 100% { text-shadow: 0 0 0 rgba(184,147,90,0); }
  50% { text-shadow: 0 0 10px rgba(184,147,90,0.9); }
}

/* --------------------------------------------------------------------------
   Ambient — twinkling stars + drifting cloud wisps in the hero sky
   -------------------------------------------------------------------------- */
.ambient { position: absolute; inset: 0; overflow: hidden; pointer-events: none; z-index: 1; }

.star {
  position: absolute; width: 2px; height: 2px; border-radius: 50%;
  background: var(--color-cream); opacity: 0; animation: twinkle ease-in-out infinite;
}
@keyframes twinkle {
  0%, 100% { opacity: 0; transform: scale(0.6); }
  50% { opacity: 0.85; transform: scale(1.3); }
}

.wisp {
  position: absolute; height: 2px; border-radius: 2px;
  background: linear-gradient(90deg, transparent, rgba(244,237,224,0.25), transparent);
  animation: drift-wisp linear infinite;
}
@keyframes drift-wisp {
  0%   { transform: translateX(-20vw); opacity: 0; }
  15%  { opacity: 1; }
  85%  { opacity: 1; }
  100% { transform: translateX(120vw); opacity: 0; }
}

/* --------------------------------------------------------------------------
   Card hover lift (generic)
   -------------------------------------------------------------------------- */
.lift-on-hover { transition: transform 0.35s var(--ease-flight), box-shadow 0.35s var(--ease-flight); }
.lift-on-hover:hover { transform: translateY(-6px); box-shadow: 0 14px 30px rgba(11,27,43,0.18); }

/* --------------------------------------------------------------------------
   RSVP submit micro-interaction — plane lands
   -------------------------------------------------------------------------- */
@keyframes plane-land {
  0%   { transform: translate(-50px, -30px) rotate(-20deg); opacity: 0; }
  70%  { transform: translate(4px, 2px) rotate(3deg); opacity: 1; }
  100% { transform: translate(0, 0) rotate(0deg); }
}
.rsvp__success.is-visible .rsvp__success-plane { animation: plane-land 0.9s var(--ease-flight) both; }

.no-motion .leg-card,
.no-motion .gallery__tile,
.no-motion .crew__member { opacity: 1 !important; transform: none !important; }
