/**
 * OneguS BioLynk — Animações
 * Keyframes reutilizáveis para intro, bio e componentes.
 */

/* Flash da intro (transição ao pular) */
@keyframes ob-flash {
  0% { opacity: 0; }
  15% { opacity: 1; }
  50% { opacity: 0.8; }
  85% { opacity: 1; }
  100% { opacity: 0; }
}

/* Brilho que atravessa o vidro (shimmer) */
@keyframes ob-shine {
  0% { transform: translateX(-100%); opacity: 0.85; }
  50% { opacity: 1; }
  100% { transform: translateX(250%); opacity: 0.85; }
}

/* Orbs de brilho no card — pulso suave */
@keyframes ob-card-orbs-pulse {
  0%, 100% { opacity: 0.7; }
  50% { opacity: 1; }
}

@keyframes ob-shine-card {
  0% { transform: translateX(-120%); }
  100% { transform: translateX(350%); }
}

/* Pulso suave do painel glass */
@keyframes ob-glass-pulse {
  0%, 100% {
    box-shadow: var(--ob-shadow-soft) var(--ob-shadow-soft-inset);
  }
  50% {
    box-shadow: 0 14px 48px rgba(130, 56, 179, 0.35),
      inset 0 1px 0 rgba(255, 255, 255, 0.4);
  }
}

/* Órbitas decorativas */
@keyframes ob-orbit-spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}

@keyframes ob-orbit-glow {
  0%, 100% { opacity: 0.85; border-color: rgba(215, 172, 40, 0.6); }
  50% { opacity: 1; border-color: rgba(215, 172, 40, 0.95); }
}

/* Avatar / foto de perfil — fade de baixo para cima + pulso e brilho */
@keyframes ob-avatar-fade-up {
  from {
    opacity: 0;
    transform: translateY(24px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Nome e tagline do hero — entrada em sequência */
@keyframes ob-hero-name-in {
  from {
    opacity: 0;
    transform: translateY(20px) scale(0.97);
    filter: blur(4px);
  }
  to {
    opacity: 1;
    transform: translateY(0) scale(1);
    filter: blur(0);
  }
}

@keyframes ob-hero-tagline-in {
  from {
    opacity: 0;
    transform: translateY(12px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes ob-avatar-pulse {
  0%, 100% {
    box-shadow: 0 0 18px rgba(130, 56, 179, 0.8),
      0 0 0 4px rgba(130, 56, 179, 0.35);
    transform: scale(1) translateZ(0);
    border-color: var(--ob-accent-primary);
  }
  50% {
    box-shadow: 0 0 26px rgba(130, 56, 179, 0.95),
      0 0 0 8px rgba(130, 56, 179, 0.2),
      0 0 20px rgba(215, 172, 40, 0.2);
    transform: scale(1.03) translateZ(0);
    border-color: rgba(239, 217, 247, 0.9);
  }
}

@keyframes ob-avatar-glow {
  0%, 100% { opacity: 0.7; transform: scale(1); }
  50% { opacity: 1; transform: scale(1.08); }
}

/* Nome da marca — shimmer e contorno */
@keyframes ob-brand-shimmer {
  0%, 100% { background-position: 100% 50%; }
  50% { background-position: 0% 50%; }
}

@keyframes ob-brand-outline {
  0%, 100% {
    -webkit-text-stroke-color: rgba(130, 56, 179, 0.4);
    filter: drop-shadow(0 0 6px rgba(130, 56, 179, 0.35));
  }
  50% {
    -webkit-text-stroke-color: rgba(130, 56, 179, 0.85);
    filter: drop-shadow(0 0 14px rgba(130, 56, 179, 0.6));
  }
}

/* Barra de progresso do carrossel */
@keyframes ob-progress-fill {
  from { width: 0%; }
  to { width: 100%; }
}

/* Logo parceiro — brilho */
@keyframes ob-logo-glow {
  0%, 100% {
    box-shadow: 0 6px 16px rgba(0, 0, 0, 0.6), 0 0 0 rgba(215, 172, 40, 0);
  }
  50% {
    box-shadow: 0 6px 22px rgba(0, 0, 0, 0.5), 0 0 24px rgba(215, 172, 40, 0.5);
  }
}

/* Footer — neon */
@keyframes ob-neon-glow {
  from {
    text-shadow: 0 0 5px rgba(130, 56, 179, 1),
      0 0 10px rgba(130, 56, 179, 0.9),
      0 0 15px rgba(130, 56, 179, 0.8),
      0 0 20px rgba(130, 56, 179, 0.7),
      0 0 25px rgba(130, 56, 179, 0.6),
      0 0 30px rgba(130, 56, 179, 0.5);
  }
  to {
    text-shadow: 0 0 8px rgba(130, 56, 179, 1),
      0 0 15px rgba(130, 56, 179, 1),
      0 0 20px rgba(130, 56, 179, 0.9),
      0 0 25px rgba(130, 56, 179, 0.8),
      0 0 30px rgba(130, 56, 179, 0.7),
      0 0 35px rgba(130, 56, 179, 0.6);
  }
}

/* Redução de movimento */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}
