/* ══════════════════════════════════════
   ANIMATIONS.CSS
══════════════════════════════════════ */

/* Cursor sparkle trail */
@keyframes sparkle {
  0%   { transform:translate(-50%,-50%) scale(1) rotate(0deg);   opacity:1; }
  100% { transform:translate(-50%,-50%) scale(0) rotate(90deg);  opacity:0; }
}

/* Floating hearts (confetti) */
@keyframes floatUp {
  0%   { transform:translateY(0)     scale(1)   rotate(0deg);  opacity:.95; }
  100% { transform:translateY(-100vh) scale(.35) rotate(30deg); opacity:0;   }
}

/* Confetti fall */
@keyframes confettiFall {
  0%   { transform:translateY(-20px) rotate(0deg);   opacity:1; }
  100% { transform:translateY(100vh)  rotate(720deg); opacity:0; }
}

/* Hero section entrance */
@keyframes heroFadeUp {
  from { opacity:0; transform:translateY(28px); }
  to   { opacity:1; transform:translateY(0);    }
}
.hero-pre              { animation:heroFadeUp .8s  .30s ease forwards; }
.title-line:nth-child(1){ animation:heroFadeUp .8s  .55s ease forwards; }
.title-line:nth-child(2){ animation:heroFadeUp .9s  .75s ease forwards; }
.title-line:nth-child(3){ animation:heroFadeUp .8s  .95s ease forwards; }
.hero-sub              { animation:heroFadeUp .8s 1.15s ease forwards; }
.hero-actions          { animation:heroFadeUp .8s 1.35s ease forwards; }
.countdown-wrap        { animation:heroFadeUp .8s 1.55s ease forwards; }

/* Repeating animations */
@keyframes heartbeat {
  0%,100%{ transform:scale(1);    }
  50%     { transform:scale(1.18); }
}
@keyframes floatIcon {
  0%,100%{ transform:translateY(0);   }
  50%     { transform:translateY(-7px); }
}
@keyframes bounceDown {
  0%,100%{ transform:translateY(0);  }
  50%     { transform:translateY(8px); }
}
@keyframes floatCircle {
  0%,100%{ transform:translate(0,0) scale(1);       }
  50%     { transform:translate(18px,-18px) scale(1.04); }
}
@keyframes sealPulse {
  0%,100%{ transform:scale(1)    rotate(-5deg); }
  50%     { transform:scale(1.12) rotate(5deg);  }
}
@keyframes candleFlicker {
  0%  { transform:rotate(-2deg) scale(1);    }
  100%{ transform:rotate(2deg)  scale(1.06); }
}
@keyframes musicPulse {
  0%,100%{ transform:scale(1);    }
  50%     { transform:scale(1.25); }
}
@keyframes twinkle {
  0%,100%{ opacity:.25; }
  50%     { opacity:.7;  }
}
@keyframes letterReveal {
  from{ opacity:0; transform:translateY(20px) scale(.95); }
  to  { opacity:1; transform:none; }
}
@keyframes spin { to{ transform:rotate(360deg); } }
@keyframes overlayIn { from{opacity:0;} to{opacity:1;} }
@keyframes cardReveal { to{ opacity:1; transform:none; } }

/* Timeline dot pulse ring */
.timeline-dot::after {
  content:'';position:absolute;inset:-6px;border-radius:50%;
  border:2px solid var(--rose);opacity:0;
  animation:rippleDot 2.2s ease-in-out infinite;
}
@keyframes rippleDot {
  0%  { inset:-4px;  opacity:.7; }
  100%{ inset:-18px; opacity:0;  }
}

/* Music playing state */
.music-btn.playing .music-icon {
  animation:musicBounce .45s ease-in-out infinite alternate;
}
@keyframes musicBounce {
  from{ transform:scale(1)    rotate(-12deg); }
  to  { transform:scale(1.35) rotate(12deg);  }
}

/* Card shimmer on hover */
.reason-card::after {
  content:'';position:absolute;top:0;left:-100%;width:60%;height:100%;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.45),transparent);
  transition:left .65s ease;
}
.reason-card:hover::after{ left:150%; }

/* Wishes decorative stars */
.wishes-section::after {
  content:'✦   ✦   ✦   ✦   ✦';
  position:absolute;bottom:22px;left:0;right:0;text-align:center;
  color:rgba(255,255,255,.22);letter-spacing:20px;font-size:.75rem;
  animation:twinkle 3s ease-in-out infinite;
}

/* Carousel slide animations */
@keyframes carouselFadeIn {
  from{ opacity:0; transform:scale(.93) translateY(8px); }
  to  { opacity:1; transform:scale(1)   translateY(0);   }
}
@keyframes carouselSlideLeft {
  from{ opacity:0; transform:scale(.95) translateX(70px); }
  to  { opacity:1; transform:scale(1)   translateX(0);    }
}
@keyframes carouselSlideRight {
  from{ opacity:0; transform:scale(.95) translateX(-70px); }
  to  { opacity:1; transform:scale(1)   translateX(0);     }
}

/* Reduced motion */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.01ms!important;
    transition-duration:.01ms!important;
  }
}
