/* ============================================================
   animations.css — keyframes & motion classes
   ============================================================ */

@keyframes logo-breathe {
  0%, 100% { filter: drop-shadow(0 0 40px rgba(164,116,255,0.32)) drop-shadow(0 0 60px rgba(255,100,40,0.18)); transform: translateY(0); }
  50%      { filter: drop-shadow(0 0 56px rgba(164,116,255,0.5))  drop-shadow(0 0 80px rgba(255,100,40,0.32)); transform: translateY(-6px); }
}

@keyframes float-slow {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-12px); }
}
@keyframes float-slower {
  0%, 100% { transform: translate(0, 0); }
  50%      { transform: translate(-10px, 10px); }
}

/* jagged violet lightning flicker over the hero */
@keyframes flicker-bolt {
  0%, 100% { opacity: 0.15; }
  6%  { opacity: 0.85; }
  9%  { opacity: 0.1; }
  13% { opacity: 0.7; }
  17% { opacity: 0.12; }
  46% { opacity: 0.12; }
  50% { opacity: 0.6; }
  54% { opacity: 0.08; }
}

@keyframes pulse-dot {
  0%, 100% { transform: scale(1); box-shadow: 0 0 8px var(--online), 0 0 16px rgba(72,211,106,0.5); }
  50%      { transform: scale(1.35); box-shadow: 0 0 12px var(--online), 0 0 26px rgba(72,211,106,0.75); }
}

@keyframes glow-violet-pulse {
  0%, 100% { box-shadow: 0 0 0 rgba(164,116,255,0); }
  50%      { box-shadow: var(--glow-violet); }
}

@keyframes shimmer-text {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}

/* entrance reveal */
@keyframes rise-in {
  from { opacity: 0; transform: translateY(24px); }
  to   { opacity: 1; transform: translateY(0); }
}
.reveal { opacity: 0; }
.reveal.in { animation: rise-in 0.7s ease forwards; }
.reveal.d1 { animation-delay: 0.08s; }
.reveal.d2 { animation-delay: 0.16s; }
.reveal.d3 { animation-delay: 0.24s; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important; }
  .reveal { opacity: 1; }
}