/* RAVOLUTION VAULTS — standalone animation library
   Extracted from the site's CSS bundle. Drop into any project/Shopify theme.
   74 keyframe animations + 91 animation utility rules. */

/* ============ KEYFRAMES ============ */
@keyframes ping{75%,to{transform:scale(2);opacity:0}}
@keyframes pulse{50%{opacity:.5}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}
@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}
@keyframes float-slow{0%,to{transform:translateY(0) rotate(0)}50%{transform:translateY(-14px) rotate(1deg)}}
@keyframes pulse-glow{0%,to{box-shadow:0 0 25px #dc262680,0 0 60px #8b000059}50%{box-shadow:0 0 45px #ff3b3be6,0 0 100px #ff1a1a80}}
@keyframes ember-rise{0%{transform:translateY(0) scale(1);opacity:0}20%{opacity:1}to{transform:translateY(-240px) scale(.3);opacity:0}}
@keyframes gallop{0%,to{transform:translateY(0) rotate(-1deg)}25%{transform:translateY(-6px) rotate(1deg)}50%{transform:translateY(0) rotate(-1deg)}75%{transform:translateY(-4px) rotate(2deg)}}
@keyframes marquee{0%{transform:translate(0)}to{transform:translate(-50%)}}
@keyframes shine{0%{transform:translate(-100%) skew(-20deg)}to{transform:translate(250%) skew(-20deg)}}
@keyframes rise-in{0%{transform:translateY(30px);opacity:0}to{transform:translateY(0);opacity:1}}
@keyframes scale-in{0%{transform:scale(.85);opacity:0}to{transform:scale(1);opacity:1}}
@keyframes evolve-grow{0%{transform:scale(.6) translateY(20px);opacity:0;filter:blur(6px)}to{transform:scale(1) translateY(0);opacity:1;filter:blur(0)}}
@keyframes ticker-pulse{0%,to{opacity:1}50%{opacity:.5}}
@keyframes breathe{0%,to{transform:scale(1)}50%{transform:scale(1.025)}}
@keyframes sway{0%,to{transform:translate(0) rotate(0)}50%{transform:translate(5px) rotate(1.5deg)}}
@keyframes drift{0%,to{transform:translate(0)}25%{transform:translate(6px,-8px)}50%{transform:translate(-4px,-3px)}75%{transform:translate(3px,5px)}}
@keyframes lightning-flash{0%,88%,to{opacity:0}90%,92%{opacity:.85}94%{opacity:.25}96%{opacity:.6}}
@keyframes flame-flicker{0%,to{opacity:.85;filter:brightness(1)}25%{opacity:1;filter:brightness(1.15)}50%{opacity:.7;filter:brightness(.92)}75%{opacity:.95;filter:brightness(1.1)}}
@keyframes rotate-slow{0%{transform:rotate(0)}to{transform:rotate(360deg)}}
@keyframes spin-slow{0%{transform:rotate(0)}to{transform:rotate(-360deg)}}
@keyframes scan-line{0%{transform:translateY(-120%);opacity:0}15%{opacity:.9}85%{opacity:.7}to{transform:translateY(360%);opacity:0}}
@keyframes kenburns{0%,to{transform:scale(1) translate(0)}50%{transform:scale(1.08) translate(-1.5%,-1.5%)}}
@keyframes heartbeat{0%,to{transform:scale(1)}10%,30%{transform:scale(1.06)}20%,40%{transform:scale(1)}}
@keyframes mane-wave{0%,to{transform:translateY(0) rotate(0)}33%{transform:translateY(-2px) rotate(1deg)}66%{transform:translateY(1px) rotate(-1deg)}}
@keyframes dust-drift{0%{transform:translate(0) scale(.6);opacity:0}20%{opacity:.9}to{transform:translate(var(--tx,0px),var(--ty,-100px)) scale(1.4);opacity:0}}
@keyframes blink{0%,47%,50%,to{transform:scaleY(1)}48.5%{transform:scaleY(.1)}}
@keyframes tilt-3d{0%,to{transform:perspective(1400px) rotateY(-2deg) rotateX(.6deg)}50%{transform:perspective(1400px) rotateY(2deg) rotateX(-.6deg)}}
@keyframes glow-pulse{0%,to{filter:drop-shadow(0 0 20px rgba(220,38,38,.4))}50%{filter:drop-shadow(0 0 40px rgba(255,59,59,.8))}}
@keyframes reveal-blur{0%{filter:blur(20px);opacity:0;transform:translateY(30px)}to{filter:blur(0);opacity:1;transform:translateY(0)}}
@keyframes badge-pop{0%{transform:scale(0) rotate(-12deg)}60%{transform:scale(1.12) rotate(3deg)}to{transform:scale(1) rotate(0)}}
@keyframes gradient-shift{0%,to{background-position:0% 50%}50%{background-position:100% 50%}}
@keyframes wobble{0%,to{transform:rotate(0)}25%{transform:rotate(-2deg)}75%{transform:rotate(2deg)}}
@keyframes shake-x{0%,to{transform:translate(0)}25%{transform:translate(-4px)}75%{transform:translate(4px)}}
@keyframes bounce-in{0%{transform:scale(.3) translateY(20px);opacity:0}50%{transform:scale(1.08) translateY(-4px);opacity:.9}80%{transform:scale(.98) translateY(1px);opacity:1}to{transform:scale(1) translateY(0);opacity:1}}
@keyframes glitch{0%,to{transform:translate(0);text-shadow:0 0 0 transparent}20%{transform:translate(-1px,1px);text-shadow:2px 0 rgba(255,0,51,.8),-2px 0 rgba(0,255,255,.6)}40%{transform:translate(-2px,-1px);text-shadow:2px 0 rgba(255,59,59,.9),-2px 0 rgba(255,221,102,.6)}60%{transform:translate(1px,2px);text-shadow:1px 0 rgba(255,0,51,.8),-1px 0 rgba(0,255,255,.6)}80%{transform:translateY(-1px);text-shadow:0 0 0 transparent}}
@keyframes neon-flicker{0%,19%,21%,23%,25%,54%,56%,to{opacity:1;filter:drop-shadow(0 0 6px rgba(255,59,59,.75))}20%,24%,55%{opacity:.5;filter:none}}
@keyframes rubber{0%,to{transform:scale(1)}30%{transform:scale(1.25,.75)}40%{transform:scale(.75,1.25)}50%{transform:scale(1.15,.85)}65%{transform:scale(.95,1.05)}75%{transform:scale(1.05,.95)}}
@keyframes zoom-pop{0%,to{transform:scale(1)}50%{transform:scale(1.08)}}
@keyframes slide-fade-up{0%{transform:translateY(40px);opacity:0;filter:blur(4px)}to{transform:translateY(0);opacity:1;filter:blur(0)}}
@keyframes rotate-wobble{0%,to{transform:rotate(0)}25%{transform:rotate(-8deg)}75%{transform:rotate(8deg)}}
@keyframes beat-double{0%,to{transform:scale(1)}14%,42%{transform:scale(1.12)}28%,56%{transform:scale(1)}}
@keyframes horse-run{0%,to{transform:translateY(0) scaleY(1)}20%{transform:translateY(-3px) scaleY(1.02)}40%{transform:translateY(-6px) scaleY(.98)}60%{transform:translateY(-3px) scaleY(1.02)}80%{transform:translateY(-1px) scaleY(.99)}}
@keyframes aura{0%,to{box-shadow:inset 0 0 20px #ff3b3b26,0 0 20px #ff3b3b4d}50%{box-shadow:inset 0 0 40px #ff3b3b4d,0 0 50px #ff3b3b99}}
@keyframes typewriter{0%{width:0}to{width:100%}}
@keyframes ripple{0%{transform:scale(.9);opacity:.9}to{transform:scale(2.4);opacity:0}}
@keyframes swing-rope{0%,to{transform:rotate(-3deg)}50%{transform:rotate(3deg)}}
@keyframes jump-stomp{0%,to{transform:translateY(0)}30%{transform:translateY(-10px)}60%{transform:translateY(2px)}}
@keyframes quote-pop{0%{transform:scale(.82) rotate(-3deg);opacity:0;filter:blur(6px)}60%{transform:scale(1.04) rotate(1deg);filter:blur(0)}to{transform:scale(1) rotate(0);opacity:1}}
@keyframes card-flip-in{0%{transform:perspective(1200px) rotateY(-90deg);opacity:0}to{transform:perspective(1200px) rotateY(0);opacity:1}}
@keyframes countdown-flip{0%,to{transform:rotateX(0) scale(1)}50%{transform:rotateX(180deg) scale(1.06)}}
@keyframes quote-glow{0%,to{box-shadow:0 0 25px #dc26264d,inset 0 0 20px #ff3b3b0d}50%{box-shadow:0 0 45px #ff3b3b8c,inset 0 0 40px #ff3b3b26}}
@keyframes mark-tilt{0%,to{transform:rotate(-4deg) translateY(0)}50%{transform:rotate(4deg) translateY(-4px)}}
@keyframes logo-drop{0%{transform:translateY(-320px) scale(1.3) rotate(-10deg);opacity:0;filter:blur(20px) drop-shadow(0 0 0 transparent)}45%{transform:translateY(50px) scale(.88) rotate(5deg);opacity:1;filter:blur(0) drop-shadow(0 20px 40px rgba(220,38,38,.6))}65%{transform:translateY(-18px) scale(1.06) rotate(-2deg)}80%{transform:translateY(6px) scale(.98) rotate(1deg)}92%{transform:translateY(-2px) scale(1.01) rotate(-.5deg)}to{transform:translateY(0) scale(1) rotate(0);filter:blur(0) drop-shadow(0 10px 30px rgba(220,38,38,.4))}}
@keyframes card-shimmer{0%{transform:translate(-150%) skew(-20deg)}to{transform:translate(260%) skew(-20deg)}}
@keyframes star-fill{0%{transform:scale(0) rotate(-180deg);opacity:0}55%{transform:scale(1.35) rotate(12deg)}80%{transform:scale(.95) rotate(-4deg)}to{transform:scale(1) rotate(0);opacity:1}}
@keyframes strike-line{0%{width:0%;opacity:.7}to{width:100%;opacity:1}}
@keyframes buy-shake{0%,to{transform:scale(1) rotate(0)}15%{transform:scale(1.05) rotate(-1.6deg)}30%{transform:scale(1.08) rotate(1.6deg)}45%{transform:scale(1.06) rotate(-1deg)}60%{transform:scale(1.08) rotate(.8deg)}75%{transform:scale(1.04) rotate(-.4deg)}90%{transform:scale(1.02) rotate(.2deg)}}
@keyframes fade-up{0%{opacity:0;transform:translateY(32px);filter:blur(4px)}to{opacity:1;transform:translateY(0);filter:blur(0)}}
@keyframes cat-flash{0%{box-shadow:0 0 0 0 var(--accent, #ef4444),0 0 30px var(--accent, #ef4444);transform:scale(1)}40%{box-shadow:0 0 0 14px transparent,0 0 60px var(--accent, #ef4444);transform:scale(1.08)}to{box-shadow:0 0 0 40px transparent,0 0 0 transparent;transform:scale(1)}}
@keyframes badge-breathe{0%,to{opacity:.4;transform:scale(1)}50%{opacity:.85;transform:scale(1.15)}}
@keyframes card-glow-pulse{0%,to{box-shadow:0 0 0 transparent}50%{box-shadow:0 20px 60px -20px var(--accent, #ef4444),0 0 0 1px var(--accent, #ef4444) inset}}
@keyframes aurora-shift{0%,to{transform:translate(0) rotate(0) scale(1);opacity:.7}33%{transform:translate(40px,-30px) rotate(120deg) scale(1.15);opacity:.9}66%{transform:translate(-30px,40px) rotate(240deg) scale(.9);opacity:.6}}
@keyframes conic-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}
@keyframes shimmer-bg{0%{background-position:-200% center}to{background-position:200% center}}
@keyframes pulse-ring{0%{transform:scale(.9);opacity:.7}to{transform:scale(2);opacity:0}}
@keyframes pillar-icon-bob{0%,to{transform:translateY(0) rotate(0)}50%{transform:translateY(-10px) rotate(6deg)}}
@keyframes scroll-band{0%{transform:translate(0)}to{transform:translate(-50%)}}
@keyframes text-glow-pulse{0%,to{text-shadow:0 0 18px rgba(255,59,59,.45),0 0 38px rgba(139,0,0,.3)}50%{text-shadow:0 0 36px rgba(255,59,59,.95),0 0 70px rgba(255,59,59,.55)}}
@keyframes orbit-dot{0%{transform:rotate(0) translate(140%) rotate(0)}to{transform:rotate(360deg) translate(140%) rotate(-360deg)}}
@keyframes spotlight-sweep{0%{transform:translate(-150%) rotate(8deg)}to{transform:translate(250%) rotate(8deg)}}
@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}
@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}

/* ============ ANIMATION UTILITY CLASSES ============ */
.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}
.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}
.animate-spin{animation:spin 1s linear infinite}
.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}
.duration-1000{animation-duration:1s}
.duration-200{animation-duration:.2s}
.duration-300{animation-duration:.3s}
.duration-500{animation-duration:.5s}
.duration-700{animation-duration:.7s}
.ease-in{animation-timing-function:cubic-bezier(.4,0,1,1)}
.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}
.ease-linear{animation-timing-function:linear}
.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}
.running{animation-play-state:running}
.paused{animation-play-state:paused}
.anim-float{animation:float-slow 6s ease-in-out infinite}
.anim-pulse-glow{animation:pulse-glow 2.8s ease-in-out infinite}
.anim-gallop{animation:gallop 1.4s ease-in-out infinite}
.anim-rise{animation:rise-in .8s cubic-bezier(.2,.9,.2,1) both}
.anim-scale{animation:scale-in .7s cubic-bezier(.2,.9,.2,1) both}
.anim-marquee{animation:marquee 35s linear infinite}
.anim-marquee-reverse{animation:marquee 40s linear infinite reverse}
.anim-evolve{animation:evolve-grow .9s cubic-bezier(.2,.9,.2,1) both}
.anim-ticker{animation:ticker-pulse 2s ease-in-out infinite}
.anim-breathe{animation:breathe 4s ease-in-out infinite}
.anim-sway{animation:sway 5s ease-in-out infinite}
.anim-drift{animation:drift 9s ease-in-out infinite}
.anim-lightning{animation:lightning-flash 8s ease-in-out infinite}
.anim-flame{animation:flame-flicker 1.8s ease-in-out infinite}
.anim-rotate-slow{animation:rotate-slow 30s linear infinite}
.anim-spin-slow{animation:spin-slow 22s linear infinite}
.anim-scanline{animation:scan-line 5s ease-in-out infinite}
.anim-kenburns{animation:kenburns 12s ease-in-out infinite}
.anim-heartbeat{animation:heartbeat 2.4s ease-in-out infinite}
.anim-mane-wave{animation:mane-wave 2s ease-in-out infinite}
.anim-tilt3d{animation:tilt-3d 7s ease-in-out infinite}
.anim-glow-pulse{animation:glow-pulse 2.6s ease-in-out infinite}
.anim-reveal-blur{animation:reveal-blur 1s cubic-bezier(.2,.9,.2,1) both}
.anim-badge-pop{animation:badge-pop .7s cubic-bezier(.2,1.3,.4,1) both}
.anim-wobble{animation:wobble 4s ease-in-out infinite}
.anim-blood-shift{animation:gradient-shift 8s ease infinite}
.anim-shake-x{animation:shake-x .5s ease-in-out infinite}
.anim-bounce-in{animation:bounce-in .8s cubic-bezier(.25,1.6,.4,1) both}
.anim-glitch{animation:glitch 2.5s steps(1) infinite}
.anim-neon-flicker{animation:neon-flicker 4s ease-in-out infinite}
.anim-rubber{animation:rubber 1.2s ease-in-out}
.anim-zoom-pop{animation:zoom-pop 1.8s ease-in-out infinite}
.anim-slide-up{animation:slide-fade-up .9s cubic-bezier(.2,.9,.2,1) both}
.anim-rotate-wobble{animation:rotate-wobble 3s ease-in-out infinite}
.anim-beat-double{animation:beat-double 1.6s ease-in-out infinite}
.anim-horse-run{animation:horse-run .7s ease-in-out infinite}
.anim-aura{animation:aura 3s ease-in-out infinite}
.anim-ripple{animation:ripple 2.5s ease-out infinite}
.anim-swing-rope{animation:swing-rope 3s ease-in-out infinite;transform-origin:top center}
.anim-jump-stomp{animation:jump-stomp 1.2s ease-in-out infinite}
.anim-quote-pop{animation:quote-pop .9s cubic-bezier(.2,1.4,.3,1) both}
.anim-card-flip{animation:card-flip-in .9s cubic-bezier(.2,.9,.2,1) both;transform-style:preserve-3d}
.anim-countdown-flip{animation:countdown-flip 1s ease-in-out infinite}
.anim-quote-glow{animation:quote-glow 3s ease-in-out infinite}
.anim-mark-tilt{animation:mark-tilt 4s ease-in-out infinite;transform-origin:center}
.shine-wrap:hover:after{animation:shine 1.1s ease}
.anim-logo-drop{animation:logo-drop 1.55s cubic-bezier(.22,1.4,.36,1) both}
.anim-star-fill{animation:star-fill .62s cubic-bezier(.25,1.55,.4,1) both}
.anim-badge-breathe{animation:badge-breathe 2s ease-in-out infinite}
.anim-fade-up-delay-1{animation:fade-up .95s cubic-bezier(.2,.9,.2,1) .5s both}
.anim-fade-up-delay-2{animation:fade-up .95s cubic-bezier(.2,.9,.2,1) .85s both}
.anim-fade-up-delay-3{animation:fade-up .95s cubic-bezier(.2,.9,.2,1) 1.15s both}
.buy-btn-shake:hover{animation:buy-shake .7s ease-in-out infinite;filter:brightness(1.1) saturate(1.1)}
.program-card:hover .card-shimmer-bar{animation:card-shimmer 1.1s ease}
.strike-anim-run:after{animation:strike-line .75s cubic-bezier(.2,.9,.2,1) .35s forwards}
.cat-flash-click{animation:cat-flash .55s ease-out}
.anim-aurora-shift{animation:aurora-shift 24s ease-in-out infinite}
.anim-conic-spin{animation:conic-spin 25s linear infinite}
.anim-pulse-ring{animation:pulse-ring 2.4s cubic-bezier(.215,.61,.355,1) infinite}
.anim-pillar-bob{animation:pillar-icon-bob 4s ease-in-out infinite}
.anim-scroll-band{animation:scroll-band 32s linear infinite}
.anim-scroll-band-rev{animation:scroll-band 38s linear infinite reverse}
.anim-text-glow{animation:text-glow-pulse 3s ease-in-out infinite}
.anim-orbit-dot{animation:orbit-dot 14s linear infinite}
.anim-spotlight{animation:spotlight-sweep 7s ease-in-out infinite}
.shimmer-gold{background:linear-gradient(90deg,#b45309,#fbbf24,#fff,#fbbf24,#b45309);background-size:200% auto;-webkit-background-clip:text;background-clip:text;color:transparent;animation:shimmer-bg 4s linear infinite}
.shimmer-fire{background:linear-gradient(90deg,#b00020,#ff6a00,#fd6,#ff3b3b,#b00020);background-size:200% auto;-webkit-background-clip:text;background-clip:text;color:transparent;animation:shimmer-bg 5s linear infinite}
.live-dot:before{content:"";position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px;border-radius:50%;background:#10b98173;animation:pulse-ring 2s cubic-bezier(.215,.61,.355,1) infinite}
.pillar-conic-border:before{content:"";position:absolute;top:-2px;right:-2px;bottom:-2px;left:-2px;border-radius:inherit;background:conic-gradient(from var(--ang,0deg),var(--accent, #ef4444),transparent 28%,var(--accent, #ef4444) 56%,transparent 84%,var(--accent, #ef4444));z-index:-1;animation:conic-spin 9s linear infinite;opacity:.55;transition:opacity .35s ease;filter:blur(.4px)}
.group:hover .group-hover\:\[animation\:none\]{animation:none}
.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up .2s ease-out}
.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down .2s ease-out}
.data-\[motion\^\=from-\]\:animate-in[data-motion^=from-],.data-\[state\=open\]\:animate-in[data-state=open],.data-\[state\=visible\]\:animate-in[data-state=visible]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}
.data-\[motion\^\=to-\]\:animate-out[data-motion^=to-],.data-\[state\=closed\]\:animate-out[data-state=closed],.data-\[state\=hidden\]\:animate-out[data-state=hidden],.data-\[swipe\=end\]\:animate-out[data-swipe=end]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}
.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}
.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}