/* VELORA — keyframes & scroll-reveal helpers */
@keyframes marquee { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@keyframes scrollPulse { 0%,100% { opacity: .2; transform: scaleY(.6); transform-origin: top; } 50% { opacity: 1; transform: scaleY(1); } }
@keyframes toastIn { from { opacity: 0; transform: translateX(40px); } to { opacity: 1; transform: none; } }
@keyframes toastOut { to { opacity: 0; transform: translateX(40px); } }
@keyframes spinSlow { to { transform: rotate(360deg); } }

/* Elements marked with data-reveal start hidden; GSAP reveals them.
   If JS fails, they stay visible thanks to the no-js fallback below. */
.js [data-reveal] { opacity: 0; transform: translateY(34px); will-change: transform, opacity; }
.js [data-reveal].revealed { opacity: 1; transform: none; }
.hero-ring.r1 { animation: spinSlow 60s linear infinite; }
.hero-ring.r2 { animation: spinSlow 90s linear infinite reverse; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; scroll-behavior: auto !important; }
  .js [data-reveal] { opacity: 1 !important; transform: none !important; }
  .hero-ring { animation: none; }
}
