/* ==========================================================================
   ANIMATIONS — keyframes & motion utility classes
   ========================================================================== */

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

@keyframes pulse-glow {
  0%, 100% { text-shadow: 0 0 0 rgba(201,138,107,0); }
  50% { text-shadow: 0 0 10px rgba(201,138,107,0.9); }
}

/* Ambient sparkle particles in the hero */
.ambient { position: absolute; inset: 0; overflow: hidden; pointer-events: none; z-index: 1; }
.sparkle { position: absolute; width: 3px; height: 3px; border-radius: 50%; background: var(--color-rosegold-light); opacity: 0; animation: twinkle ease-in-out infinite; box-shadow: 0 0 6px 1px rgba(232,184,160,0.6); }
@keyframes twinkle {
  0%, 100% { opacity: 0; transform: scale(0.5); }
  50% { opacity: 0.9; transform: scale(1.4); }
}

.lift-on-hover { transition: transform 0.35s var(--ease-jewel), box-shadow 0.35s var(--ease-jewel); }
.lift-on-hover:hover { transform: translateY(-6px); box-shadow: 0 14px 30px rgba(46,15,41,0.18); }

@keyframes ring-settle {
  0%   { transform: translateY(-30px) scale(1.5); opacity: 0; }
  70%  { transform: translateY(0) scale(0.95); opacity: 1; }
  100% { transform: translateY(0) scale(1); }
}
.rsvp__success.is-visible .rsvp__success-icon { animation: ring-settle 0.8s var(--ease-jewel) both; }

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