/* ML-Engineered Analytics animation utilities (extracted for scalability) */

@keyframes flow-dash {
  from {
    stroke-dashoffset: 102;
  }
  to {
    stroke-dashoffset: 0;
  }
}

@keyframes gridPan {
  0% {
    background-position: 0 0;
  }
  100% {
    background-position: 3rem 3rem;
  }
}

@keyframes float {
  0%,
  100% {
    transform: translateY(0) scale(1);
    opacity: 0.3;
  }
  50% {
    transform: translateY(-20px) scale(1.5);
    opacity: 0.8;
  }
}

@keyframes spin-forward {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

@keyframes spin-reverse {
  from {
    transform: rotate(360deg);
  }
  to {
    transform: rotate(0deg);
  }
}

@keyframes pulse-fast {
  0%,
  100% {
    opacity: 1;
    transform: scale(1.25);
  }
  50% {
    opacity: 0.8;
    transform: scale(1.35);
  }
}

.anim-grid-pan {
  animation: gridPan 20s linear infinite;
}

.anim-flow-1 {
  animation: flow-dash 1.5s linear infinite;
}

.anim-flow-fast {
  animation: flow-dash 0.3s linear infinite;
}

.anim-spin-slow {
  animation: spin-forward 40s linear infinite;
}

.anim-spin-reverse-slow {
  animation: spin-reverse 20s linear infinite;
}

.anim-spin-8 {
  animation: spin-forward 8s linear infinite;
}

.anim-spin-12-rev {
  animation: spin-reverse 12s linear infinite;
}

.anim-spin-15 {
  animation: spin-forward 15s linear infinite;
}

.anim-pulse-fast {
  animation: pulse-fast 0.5s ease-in-out infinite;
}

