/* =============================================================
   CONSULAB — ANIMATIONS.CSS
   Animações, transições e efeitos de hover
   ============================================================= */

/* Pulse do botão WhatsApp flutuante */
@keyframes waPulse {
  0%   { box-shadow: 0 6px 20px rgba(37,211,102,.5), 0 0 0 0 rgba(37,211,102,.5); }
  70%  { box-shadow: 0 6px 20px rgba(37,211,102,.5), 0 0 0 16px rgba(37,211,102,0); }
  100% { box-shadow: 0 6px 20px rgba(37,211,102,.5), 0 0 0 0 rgba(37,211,102,0); }
}

/* Fade-in genérico (fallback caso AOS não carregue) */
@keyframes fadeInUp {
  from { opacity: 0; transform: translateY(30px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* Efeito ripple nos botões */
.btn .ripple {
  position: absolute; border-radius: 50%; background: rgba(255,255,255,.5);
  transform: scale(0); animation: ripple .6s linear; pointer-events: none;
}
.btn--outline .ripple, .btn--white .ripple { background: rgba(0,80,143,.25); }
@keyframes ripple { to { transform: scale(4); opacity: 0; } }

/* Loading spinner nos botões de envio */
.btn.is-loading { pointer-events: none; opacity: .85; }
.btn.is-loading .btn__label { visibility: hidden; }
.btn.is-loading::after {
  content: ''; position: absolute; width: 20px; height: 20px; border: 2.5px solid rgba(255,255,255,.4);
  border-top-color: #fff; border-radius: 50%; animation: spin .7s linear infinite;
}
.btn--outline.is-loading::after, .btn--white.is-loading::after { border-color: rgba(0,80,143,.3); border-top-color: var(--primary); }
@keyframes spin { to { transform: rotate(360deg); } }

/* Hover de imagem com brilho */
.hover-shine { position: relative; overflow: hidden; }
.hover-shine::after {
  content: ''; position: absolute; top: 0; left: -75%; width: 50%; height: 100%;
  background: linear-gradient(120deg, transparent, rgba(255,255,255,.35), transparent);
  transform: skewX(-25deg); transition: left .7s ease;
}
.hover-shine:hover::after { left: 125%; }

/* Underline animado em links */
.link-underline { position: relative; }
.link-underline::after {
  content: ''; position: absolute; left: 0; bottom: -2px; width: 0; height: 2px;
  background: var(--accent); transition: width .3s ease;
}
.link-underline:hover::after { width: 100%; }

/* Reveal suave para elementos com data-reveal (fallback JS) */
[data-reveal] { opacity: 0; transform: translateY(24px); transition: opacity .7s ease, transform .7s ease; }
[data-reveal].revealed { opacity: 1; transform: translateY(0); }

/* Respeita usuários que preferem menos movimento */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .001ms !important; transition-duration: .001ms !important; scroll-behavior: auto !important; }
  .wa-float { animation: none; }
}
