@keyframes fadeUp{
  from{ opacity:0; transform:translateY(24px); }
  to{ opacity:1; transform:translateY(0); }
}

@keyframes pulse-anim{
  0%{ box-shadow:0 0 0 0 rgba(43,207,107,.55); }
  70%{ box-shadow:0 0 0 8px rgba(43,207,107,0); }
  100%{ box-shadow:0 0 0 0 rgba(43,207,107,0); }
}

@keyframes float{
  0%,100%{ transform:translateY(0) translateX(0); }
  50%{ transform:translateY(-16px) translateX(6px); }
}

@keyframes glow-pulse{
  0%,100%{ box-shadow:0 0 20px rgba(43,207,107,.14); }
  50%{ box-shadow:0 0 42px rgba(43,207,107,.3); }
}
.glow{ animation:glow-pulse 3s ease-in-out infinite; }

.reveal{
  opacity:0; transform:translateY(28px);
  transition:opacity .7s ease, transform .7s ease;
  will-change:transform, opacity;
}
.reveal.visible{ opacity:1; transform:translateY(0); will-change:auto; }

.reveal-stagger > *{
  opacity:0; transform:translateY(20px);
  transition:opacity .6s ease, transform .6s ease;
  will-change:transform, opacity;
}
.reveal-stagger.visible > *{ opacity:1; transform:translateY(0); will-change:auto; }
.reveal-stagger.visible > *:nth-child(1){ transition-delay:.05s; }
.reveal-stagger.visible > *:nth-child(2){ transition-delay:.12s; }
.reveal-stagger.visible > *:nth-child(3){ transition-delay:.19s; }
.reveal-stagger.visible > *:nth-child(4){ transition-delay:.26s; }
.reveal-stagger.visible > *:nth-child(5){ transition-delay:.33s; }
.reveal-stagger.visible > *:nth-child(6){ transition-delay:.4s; }

.particle{
  position:absolute;
  border-radius:50%;
  pointer-events:none;
  animation:particle-float linear infinite;
}
@keyframes particle-float{
  0%{ transform:translateY(100vh) scale(0); opacity:0; }
  10%{ opacity:1; }
  90%{ opacity:1; }
  100%{ transform:translateY(-10vh) scale(1); opacity:0; }
}

@keyframes ballPop{
  0%{ transform:scale(0); opacity:0; }
  60%{ transform:scale(1.15); opacity:1; }
  100%{ transform:scale(1); }
}
.ball-pop{ animation:ballPop .45s cubic-bezier(.34,1.56,.64,1); }

@keyframes bonusGlowRainbow{
  0%,100%{ box-shadow:0 0 5px 1px rgba(255,255,255,.32), 0 3px 6px rgba(0,0,0,.4); }
  50%{ box-shadow:0 0 11px 3px rgba(255,255,255,.55), 0 3px 6px rgba(0,0,0,.4); }
}
@keyframes bonusGlowBomb{
  0%,100%{ box-shadow:0 0 5px 1px rgba(255,90,40,.32), 0 3px 6px rgba(0,0,0,.4); }
  50%{ box-shadow:0 0 10px 3px rgba(255,90,40,.5), 0 3px 6px rgba(0,0,0,.4); }
}
@keyframes bonusGlowLightning{
  0%,100%{ box-shadow:0 0 5px 1px rgba(255,230,60,.32), 0 3px 6px rgba(0,0,0,.4); }
  50%{ box-shadow:0 0 11px 3px rgba(255,230,60,.55), 0 3px 6px rgba(0,0,0,.4); }
}
.bonus-glow-rainbow{ animation:ballPop .45s cubic-bezier(.34,1.56,.64,1), bonusGlowRainbow 1.7s ease-in-out .45s infinite; }
.bonus-glow-bomb{ animation:ballPop .45s cubic-bezier(.34,1.56,.64,1), bonusGlowBomb 1.1s ease-in-out .45s infinite; }
.bonus-glow-lightning{ animation:ballPop .45s cubic-bezier(.34,1.56,.64,1), bonusGlowLightning .8s ease-in-out .45s infinite; }

@keyframes wobble{
  0%,100%{ transform:translateY(0) rotate(0deg); }
  25%{ transform:translateY(-6px) rotate(-4deg); }
  75%{ transform:translateY(4px) rotate(4deg); }
}

@keyframes modalIn{
  from{ opacity:0; transform:scale(.92) translateY(10px); }
  to{ opacity:1; transform:scale(1) translateY(0); }
}

@keyframes pageIn{
  from{ opacity:0; }
  to{ opacity:1; }
}

@media (prefers-reduced-motion: reduce){
  *, *::before, *::after{
    animation-duration:.001ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.001ms !important;
    scroll-behavior:auto !important;
  }
}
