/* ════════════════════════════════════════════════════════════════════
   ANIMATIONS — keyframes + utilitários de reveal/fade
   ════════════════════════════════════════════════════════════════════ */

/* ─── KEYFRAMES ─── */
@keyframes pulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50%      { opacity: .5; transform: scale(1.5); }
}

@keyframes float {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-14px); }
}

@keyframes logoFloat {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-6px); }
}

@keyframes glow {
  from { opacity: .6; transform: translate(-50%, -50%) scale(1); }
  to   { opacity: 1;  transform: translate(-50%, -50%) scale(1.1); }
}

@keyframes ripple {
  0%   { transform: scale(.85); opacity: .6; }
  100% { transform: scale(1.5);  opacity: 0;  }
}

@keyframes fadeUp {
  to { opacity: 1; transform: translateY(0); }
}

/* ─── UTILITÁRIOS DE ANIMAÇÃO ─── */

/* Reveal on scroll — controlado pelo IntersectionObserver no JS */
.reveal {
  opacity: 0; transform: translateY(28px);
  transition: opacity .8s var(--ease-out), transform .8s var(--ease-out);
}
.reveal.in { opacity: 1; transform: translateY(0); }

/* Fade-up imediato (elementos do hero, etc) */
.fade-up {
  opacity: 0; transform: translateY(20px);
  animation: fadeUp .9s var(--ease-out) forwards;
}
.delay-1 { animation-delay: .15s; }
.delay-2 { animation-delay: .3s;  }
.delay-3 { animation-delay: .45s; }
.delay-4 { animation-delay: .6s;  }
