@keyframes float-soft {
  0%, 100% { transform: translateY(0) rotate(var(--float-rotate, 0deg)); }
  50% { transform: translateY(-8px) rotate(var(--float-rotate, 0deg)); }
}
@keyframes twinkle {
  0%, 100% { opacity: .5; scale: .92; }
  50% { opacity: 1; scale: 1.08; }
}
@keyframes card-pop {
  from { opacity: 0; transform: translateY(7px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes reveal-up {
  from { opacity: 0; transform: translateY(17px); }
  to { opacity: 1; transform: translateY(0); }
}
.hero-art-wrap .floating-note { animation: float-soft 5.5s ease-in-out infinite; }
.note-top { --float-rotate: -4deg; }
.note-bottom { --float-rotate: 3deg; animation-delay: -2.3s !important; }
.decor-star-one, .decor-heart, .sparkle-right { animation: twinkle 4.5s ease-in-out infinite; }
.decor-star-two, .sparkle-left { animation: twinkle 5s ease-in-out -2s infinite; }
.reveal { opacity: 0; transform: translateY(17px); }
.reveal.is-revealed { animation: reveal-up .65s cubic-bezier(.2,.65,.3,1) both; }
.reveal-delay-1.is-revealed { animation-delay: .1s; }
.reveal-delay-2.is-revealed { animation-delay: .18s; }
@media (prefers-reduced-motion: reduce) {
  .reveal, .reveal.is-revealed { opacity: 1; transform: none; animation: none; }
  .hero-art-wrap .floating-note, .decor-star-one, .decor-star-two, .decor-heart, .sparkle-right, .sparkle-left { animation: none; }
}
