/* ==========================================================================
   ANIMATIONS & TRANSITIONS - JUKI & GITA WEDDING
   ========================================================================== */

@keyframes slowZoom {
  0% {
    transform: scale(1);
  }
  100% {
    transform: scale(1.12);
  }
}

@keyframes shineSweep {
  0% {
    left: -70%;
  }
  30% {
    left: 120%;
  }
  100% {
    left: 120%;
  }
}

@keyframes spinSlow {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

@keyframes soundBar {
  0% {
    height: 4px;
  }
  100% {
    height: 16px;
  }
}

@keyframes floatSoft {
  0%, 100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-8px);
  }
}

@keyframes pulseGlow {
  0%, 100% {
    box-shadow: 0 0 15px rgba(223, 183, 67, 0.3);
  }
  50% {
    box-shadow: 0 0 35px rgba(223, 183, 67, 0.65);
  }
}

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

@keyframes rotateBorder {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

/* Scroll Reveal Classes */
.reveal-fade-up {
  opacity: 0;
  transform: translateY(35px);
  transition: opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1), transform 0.8s cubic-bezier(0.16, 1, 0.3, 1);
  will-change: opacity, transform;
}

.reveal-fade-left {
  opacity: 0;
  transform: translateX(-40px);
  transition: opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1), transform 0.8s cubic-bezier(0.16, 1, 0.3, 1);
  will-change: opacity, transform;
}

.reveal-fade-right {
  opacity: 0;
  transform: translateX(40px);
  transition: opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1), transform 0.8s cubic-bezier(0.16, 1, 0.3, 1);
  will-change: opacity, transform;
}

.reveal-zoom-in {
  opacity: 0;
  transform: scale(0.9);
  transition: opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1), transform 0.8s cubic-bezier(0.16, 1, 0.3, 1);
  will-change: opacity, transform;
}

.reveal-active {
  opacity: 1 !important;
  transform: translateY(0) translateX(0) scale(1) !important;
}

/* Delays */
.delay-100 { transition-delay: 0.1s; }
.delay-200 { transition-delay: 0.2s; }
.delay-300 { transition-delay: 0.3s; }
.delay-400 { transition-delay: 0.4s; }
.delay-500 { transition-delay: 0.5s; }

/* Pulse animation utility */
.animate-pulse-glow {
  animation: pulseGlow 3s infinite ease-in-out;
}

.animate-float {
  animation: floatSoft 4s infinite ease-in-out;
}

/* ==========================================================================
   NEW LUXURY ANIMATIONS: WAX SEAL, ENVELOPE 3D, HEARTS & CONFETTI
   ========================================================================== */

/* 3D Envelope Flap Opening */
@keyframes envelopeFlapOpen {
  0% {
    transform: rotateX(0deg);
    z-index: 5;
  }
  50% {
    transform: rotateX(-90deg);
    z-index: 5;
  }
  100% {
    transform: rotateX(-180deg);
    z-index: 1;
  }
}

/* Card Slide Up from Envelope */
@keyframes envelopeSlideUp {
  0% {
    transform: translateY(0) scale(0.96);
    opacity: 0.8;
  }
  100% {
    transform: translateY(-50px) scale(1);
    opacity: 1;
  }
}

/* Wax Seal Break & Pop */
@keyframes waxSealPop {
  0% {
    transform: scale(1);
  }
  40% {
    transform: scale(1.28) rotate(8deg);
    filter: drop-shadow(0 0 35px rgba(223, 183, 67, 1));
  }
  100% {
    transform: scale(0) rotate(-25deg);
    opacity: 0;
  }
}

/* Holographic Card Reflection Sheen */
@keyframes holographicShine {
  0% {
    background-position: 0% 50%;
  }
  50% {
    background-position: 100% 50%;
  }
  100% {
    background-position: 0% 50%;
  }
}

/* Floating Hearts & Reaction Particle */
@keyframes floatReaction {
  0% {
    opacity: 1;
    transform: translateY(0) scale(0.6) rotate(0deg);
  }
  50% {
    opacity: 0.9;
    transform: translateY(-40px) scale(1.1) rotate(15deg);
  }
  100% {
    opacity: 0;
    transform: translateY(-85px) scale(0.8) rotate(-15deg);
  }
}

/* Sparkle Star Twinkle */
@keyframes starTwinkle {
  0%, 100% {
    opacity: 0.3;
    transform: scale(0.8);
  }
  50% {
    opacity: 1;
    transform: scale(1.25);
  }
}

/* Golden Ribbon Shimmer */
@keyframes ribbonShimmer {
  0% {
    background-position: -200% 0;
  }
  100% {
    background-position: 200% 0;
  }
}

/* Vinyl Turntable Tone Arm */
@keyframes toneArmPlay {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(18deg);
  }
}


/* Javanese Gunungan Floating & Breathing Glow */
@keyframes gununganGlow {
  0%, 100% {
    filter: drop-shadow(0 0 10px rgba(223, 183, 67, 0.45));
    transform: translateY(0) scale(1);
  }
  50% {
    filter: drop-shadow(0 0 25px rgba(223, 183, 67, 0.85)) drop-shadow(0 0 35px rgba(250, 230, 158, 0.5));
    transform: translateY(-6px) scale(1.02);
  }
}

.gunungan-animated {
  animation: gununganGlow 4.5s infinite ease-in-out;
}
