/* Animations system definitions - animations.css */

/* Heartbeat Telemetry indicator pulse */
@keyframes pulse {
  0% {
    transform: scale(0.95);
    box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.7);
  }
  70% {
    transform: scale(1);
    box-shadow: 0 0 0 8px rgba(16, 185, 129, 0);
  }
  100% {
    transform: scale(0.95);
    box-shadow: 0 0 0 0 rgba(16, 185, 129, 0);
  }
}

.heartbeat-pulse {
  animation: pulse 2s infinite;
}

/* Outage alert blinker */
@keyframes warn-pulse {
  0% {
    transform: scale(0.95);
    box-shadow: 0 0 0 0 rgba(255, 79, 0, 0.7);
  }
  70% {
    transform: scale(1);
    box-shadow: 0 0 0 8px rgba(255, 79, 0, 0);
  }
  100% {
    transform: scale(0.95);
    box-shadow: 0 0 0 0 rgba(255, 79, 0, 0);
  }
}

.warning-pulse {
  animation: warn-pulse 1.2s infinite;
}

/* Monospace blinking cursor */
@keyframes blink {
  50% { opacity: 0; }
}

.blinking-cursor::after {
  content: "|";
  font-weight: bold;
  color: var(--primary-cobalt);
  animation: blink 1s step-start infinite;
}

/* SVG Line Drawing Path Animations */
@keyframes drawPath {
  to {
    stroke-dashoffset: 0;
  }
}

.draw-svg-line {
  stroke-dasharray: 1000;
  stroke-dashoffset: 1000;
  animation: drawPath 3s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}

/* GSAP Reveal Fallback Styles (in case JS is blocked or slow to run) */
.gsap-reveal {
  opacity: 0;
  transform: translateY(20px);
  filter: blur(4px);
  transition: opacity 0.6s ease, transform 0.6s ease, filter 0.6s ease;
}

.gsap-reveal.active {
  opacity: 1;
  transform: translateY(0);
  filter: blur(0);
}

/* Dynamic node connection lines pulse */
@keyframes flowLine {
  0% {
    stroke-dashoffset: 20;
  }
  100% {
    stroke-dashoffset: 0;
  }
}

.flow-line-dashed {
  stroke-dasharray: 8 4;
  animation: flowLine 1s linear infinite;
}

/* Spinning loading telemetry symbol */
@keyframes spin {
  to { transform: rotate(360deg); }
}

.spin-element {
  animation: spin 1s linear infinite;
}
