/* animations.css — All @keyframes and animation utilities */

/* Background */
@keyframes gradientShift{0%{background-position:0% 50%}50%{background-position:100% 50%}100%{background-position:0% 50%}}
@keyframes gridMove{0%{transform:translate(0,0)}100%{transform:translate(50px,50px)}}

/* Ghost pulse rings */
@keyframes pulseGold{0%,100%{box-shadow:0 0 4px rgba(255,215,0,.3)}50%{box-shadow:0 0 14px rgba(255,215,0,.6)}}
@keyframes pulsePink{0%,100%{box-shadow:0 0 4px rgba(255,105,180,.3)}50%{box-shadow:0 0 14px rgba(255,105,180,.6)}}
@keyframes pulseRed{0%,100%{box-shadow:0 0 4px rgba(255,23,68,.3)}50%{box-shadow:0 0 14px rgba(255,23,68,.6)}}
@keyframes pulsePurple{0%,100%{box-shadow:0 0 4px rgba(191,64,191,.3)}50%{box-shadow:0 0 14px rgba(191,64,191,.6)}}
@keyframes pulseGreen{0%,100%{box-shadow:0 0 4px rgba(57,255,20,.3)}50%{box-shadow:0 0 14px rgba(57,255,20,.6)}}
@keyframes pulseCyan{0%,100%{box-shadow:0 0 4px rgba(0,245,255,.3)}50%{box-shadow:0 0 14px rgba(0,245,255,.6)}}

/* Text glow */
@keyframes textGlowGold{0%,100%{text-shadow:0 0 4px rgba(255,215,0,.4)}50%{text-shadow:0 0 12px rgba(255,215,0,.8)}}
@keyframes textGlowGreen{0%,100%{text-shadow:0 0 4px rgba(57,255,20,.4)}50%{text-shadow:0 0 12px rgba(57,255,20,.8)}}
@keyframes textGlowCyan{0%,100%{text-shadow:0 0 4px rgba(0,245,255,.4)}50%{text-shadow:0 0 12px rgba(0,245,255,.8)}}

/* Bar shimmer */
@keyframes goldShimmer{0%,100%{box-shadow:inset 0 0 10px rgba(255,215,0,.1)}50%{box-shadow:inset 0 0 30px rgba(255,215,0,.3)}}
@keyframes cyanShimmer{0%,100%{box-shadow:inset 0 0 10px rgba(0,245,255,.1)}50%{box-shadow:inset 0 0 30px rgba(0,245,255,.3)}}

/* Scroll reveal */
@keyframes fadeUp{from{opacity:0;transform:translateY(28px)}to{opacity:1;transform:translateY(0)}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes scaleIn{from{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}
@keyframes slideLeft{from{opacity:0;transform:translateX(24px)}to{opacity:1;transform:translateX(0)}}

/* Counter */
@keyframes countUp{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}

/* Modal */
@keyframes modalBgIn{0%{background:rgba(255,255,255,.8);backdrop-filter:blur(0px)}30%{background:rgba(255,255,255,.3)}100%{background:rgba(0,0,0,.7);backdrop-filter:blur(8px)}}
@keyframes modalSupernova{0%{opacity:0;transform:scale(3);filter:brightness(5) blur(20px)}20%{opacity:1;filter:brightness(2) blur(5px)}50%{transform:scale(.95);filter:brightness(1.2) blur(0px)}100%{transform:scale(1);filter:brightness(1) blur(0px)}}

/* Player bar */
@keyframes playerSlideUp{from{transform:translateY(100%);opacity:0}to{transform:translateY(0);opacity:1}}
@keyframes albumSpin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}

/* Ghost animation classes */
.gt-r{animation:pulseGold 2.5s ease infinite}
.gt-q{animation:pulsePink 2.5s ease infinite}
.gt-v{animation:pulseRed 2.5s ease infinite}
.gt-d{animation:pulsePurple 2.5s ease infinite}

.gc-r.a{animation:pulseGold 2s ease infinite}
.gc-q.a{animation:pulsePink 2s ease infinite}
.gc-v.a{animation:pulseRed 2s ease infinite}
.gc-d.a{animation:pulsePurple 2s ease infinite}

/* Reveal utility */
.reveal{opacity:0;transform:translateY(28px);transition:opacity .7s ease,transform .7s ease}
.reveal.visible{opacity:1;transform:translateY(0)}
.reveal-scale{opacity:0;transform:scale(.94);transition:opacity .6s ease,transform .6s ease}
.reveal-scale.visible{opacity:1;transform:scale(1)}
.reveal-left{opacity:0;transform:translateX(24px);transition:opacity .6s ease,transform .6s ease}
.reveal-left.visible{opacity:1;transform:translateX(0)}

/* Stagger children */
.stagger>*:nth-child(1){transition-delay:.05s}
.stagger>*:nth-child(2){transition-delay:.1s}
.stagger>*:nth-child(3){transition-delay:.15s}
.stagger>*:nth-child(4){transition-delay:.2s}
.stagger>*:nth-child(5){transition-delay:.25s}
.stagger>*:nth-child(6){transition-delay:.3s}
