/* ============================================================================
   KOREVRA SERVE — motion
   Reveal-on-scroll (.rv → .in), stagger, keyframes used across portals.
   Everything respects prefers-reduced-motion via the --t-* tokens and the
   media query at the bottom.
   ==========================================================================*/
.rv { opacity: 0; transform: translateY(22px); transition: opacity 0.7s var(--ease-out), transform 0.7s var(--ease-out); will-change: opacity, transform; }
.rv.in { opacity: 1; transform: none; }
.rv-left { transform: translateX(-28px); } .rv-right { transform: translateX(28px); } .rv-scale { transform: scale(0.94); } .rv-left.in, .rv-right.in, .rv-scale.in { transform: none; }
.stagger > * { opacity: 0; transform: translateY(14px); animation: fade-up 0.6s var(--ease-out) forwards; }
.stagger > *:nth-child(1) { animation-delay: 0.03s; } .stagger > *:nth-child(2) { animation-delay: 0.08s; } .stagger > *:nth-child(3) { animation-delay: 0.13s; } .stagger > *:nth-child(4) { animation-delay: 0.18s; } .stagger > *:nth-child(5) { animation-delay: 0.23s; } .stagger > *:nth-child(6) { animation-delay: 0.28s; } .stagger > *:nth-child(7) { animation-delay: 0.33s; } .stagger > *:nth-child(8) { animation-delay: 0.38s; } .stagger > *:nth-child(9) { animation-delay: 0.43s; } .stagger > *:nth-child(10) { animation-delay: 0.48s; } .stagger > *:nth-child(n+11) { animation-delay: 0.52s; }
.fade-in { animation: fade-in 0.5s var(--ease-out) both; }
.fade-up { animation: fade-up 0.6s var(--ease-out) both; }
.pop-in { animation: pop-in 0.5s var(--ease-spring) both; }
.slide-in { animation: slide-in 0.4s var(--ease-out) both; }
.float { animation: float 5s ease-in-out infinite; }
.float-2 { animation: float 6.5s ease-in-out infinite reverse; }
.shimmer { background: linear-gradient(100deg, transparent 30%, rgba(255, 255, 255, 0.35) 50%, transparent 70%); background-size: 200% 100%; animation: shimmer 2.2s linear infinite; }
.pulse-once { animation: pulse-once 0.6s var(--ease-out); }
.blink { animation: blink 1.2s steps(2) infinite; }
.spin { animation: spin 1s linear infinite; }
.breathe { animation: breathe 2.4s ease-in-out infinite; }
.tick-in { animation: tick-in 0.45s var(--ease-spring) both; }
.flash-new { animation: flash-new 1.6s var(--ease-out); }
.marquee { display: flex; gap: 48px; width: max-content; animation: marquee 28s linear infinite; }
.marquee:hover { animation-play-state: paused; }

@keyframes fade-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes fade-up { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }
@keyframes pop-in { from { opacity: 0; transform: scale(0.8); } to { opacity: 1; transform: none; } }
@keyframes slide-in { from { opacity: 0; transform: translateX(24px); } to { opacity: 1; transform: none; } }
@keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } }
@keyframes shimmer { to { background-position: -200% 0; } }
@keyframes pulse-once { 0% { transform: scale(1); } 40% { transform: scale(1.06); } 100% { transform: scale(1); } }
@keyframes pulse-dot { 0%, 100% { box-shadow: 0 0 0 0 rgba(31, 157, 106, 0.5); } 60% { box-shadow: 0 0 0 7px rgba(31, 157, 106, 0); } }
@keyframes blink { to { opacity: 0.25; } }
@keyframes spin { to { transform: rotate(360deg); } }
@keyframes breathe { 0%, 100% { transform: scale(1); opacity: 0.85; } 50% { transform: scale(1.05); opacity: 1; } }
@keyframes tick-in { from { transform: scale(0.4) rotate(-20deg); opacity: 0; } to { transform: none; opacity: 1; } }
@keyframes flash-new { 0% { background: var(--saffron-wash); box-shadow: 0 0 0 3px var(--saffron); } 100% { box-shadow: 0 0 0 0 transparent; } }
@keyframes marquee { to { transform: translateX(-50%); } }
@keyframes draw { to { stroke-dashoffset: 0; } }
@keyframes grow-y { from { transform: scaleY(0); } to { transform: scaleY(1); } }
@keyframes confetti { 0% { transform: translate(0, 0) rotate(0); opacity: 1; } 100% { transform: translate(var(--dx), calc(var(--dy) + 160px)) rotate(var(--r)); opacity: 0; } }
@keyframes ticker { 0% { transform: translateY(0); } 100% { transform: translateY(-100%); } }
@keyframes glow { 0%, 100% { box-shadow: 0 0 0 0 rgba(245, 165, 36, 0.0); } 50% { box-shadow: 0 0 0 10px rgba(245, 165, 36, 0.18); } }
@keyframes rise { from { transform: translateY(100%); } to { transform: none; } }
@keyframes wiggle { 0%, 100% { transform: rotate(0); } 25% { transform: rotate(-6deg); } 75% { transform: rotate(6deg); } }

@media (prefers-reduced-motion: reduce) {
  .rv, .stagger > * { opacity: 1 !important; transform: none !important; animation: none !important; transition: none !important; }
  .float, .float-2, .shimmer, .breathe, .marquee, .blink { animation: none !important; }
  .spark-line { animation: none; stroke-dashoffset: 0; }
  .bar { animation: none; }
}
