@keyframes slowZoom{
  0%{transform:scale(1)}
  100%{transform:scale(1.08)}
}
@keyframes pulse{
  0%,100%{opacity:1;transform:scale(1)}
  50%{opacity:.5;transform:scale(1.2)}
}
@keyframes pulseSoft{
  0%,100%{opacity:.6;transform:translateX(-50%) scale(1)}
  50%{opacity:1;transform:translateX(-50%) scale(1.05)}
}
@keyframes float1{
  0%,100%{transform:translate(0,0)}
  50%{transform:translate(30px,-40px)}
}
@keyframes float2{
  0%,100%{transform:translate(0,0)}
  50%{transform:translate(-25px,-35px)}
}

.fade-in-up{
  animation:fadeInUp 1s cubic-bezier(.4,0,.2,1) both;
}
.fade-in-up.delay-1{animation-delay:.15s}
.fade-in-up.delay-2{animation-delay:.3s}

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

.reveal{
  opacity:0;
  transform:translateY(30px);
  transition:opacity .9s cubic-bezier(.4,0,.2,1),transform .9s cubic-bezier(.4,0,.2,1);
}
.reveal.visible{opacity:1;transform:translateY(0)}
.reveal.delay-1{transition-delay:.12s}
.reveal.delay-2{transition-delay:.24s}
.reveal.delay-3{transition-delay:.36s}

@media (prefers-reduced-motion:reduce){
  *{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important}
}