/* ===== KEYFRAMES & ANIMATIONS ===== */
@keyframes ai-pulse {
  0%,
  100% {
    opacity: 0.6;
    transform: scale(1);
  }
  50% {
    opacity: 1;
    transform: scale(1.05);
  }
}

@keyframes spin-slow {
  to {
    transform: rotate(360deg);
  }
}

@keyframes pulse-red {
  0%,
  100% {
    box-shadow: 0 0 0 0 rgba(182, 23, 34, 0.6);
  }
  50% {
    box-shadow: 0 0 0 14px rgba(182, 23, 34, 0);
  }
}

@keyframes pulse-orange {
  0%,
  100% {
    box-shadow: 0 0 0 0 rgba(249, 115, 22, 0.6);
  }
  50% {
    box-shadow: 0 0 0 14px rgba(249, 115, 22, 0);
  }
}

@keyframes pulse-yellow {
  0%,
  100% {
    box-shadow: 0 0 0 0 rgba(251, 191, 36, 0.6);
  }
  50% {
    box-shadow: 0 0 0 14px rgba(251, 191, 36, 0);
  }
}

@keyframes pulse-green {
  0%,
  100% {
    box-shadow: 0 0 0 0 rgba(0, 104, 87, 0.5);
  }
  50% {
    box-shadow: 0 0 0 14px rgba(0, 104, 87, 0);
  }
}

@keyframes pulse-blue {
  0%,
  100% {
    box-shadow: 0 0 0 0 rgba(45, 91, 255, 0.6);
  }
  50% {
    box-shadow: 0 0 0 14px rgba(45, 91, 255, 0);
  }
}

@keyframes pulse-cyan {
  0%,
  100% {
    box-shadow: 0 0 0 0 rgba(6, 182, 212, 0.6);
  }
  50% {
    box-shadow: 0 0 0 14px rgba(6, 182, 212, 0);
  }
}

@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}

@keyframes comm-fade-in {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes comm-bar-grow {
  from {
    width: 0 !important;
  }
}

@keyframes ss-glow-pulse {
  0% {
    transform: scale(0.9) rotate(0deg);
    opacity: 0.5;
  }
  100% {
    transform: scale(1.1) rotate(15deg);
    opacity: 1;
  }
}

@keyframes ss-tip-fade {
  0% {
    opacity: 0;
    transform: translateY(6px);
  }
  15%,
  85% {
    opacity: 1;
    transform: translateY(0);
  }
  100% {
    opacity: 0;
    transform: translateY(-6px);
  }
}

@keyframes movement-pulse-glow {
  0% { transform: scale(1); opacity: 0.15; }
  100% { transform: scale(1.1); opacity: 0.3; }
}

@keyframes movement-shine {
  0% { left: -100%; }
  20% { left: 200%; }
  100% { left: 200%; }
}

@keyframes movement-success-pop {
  0% { transform: scale(0.9); opacity: 0; }
  50% { transform: scale(1.05); }
  100% { transform: scale(1); opacity: 1; }
}

@keyframes ss-emergency-pulse {
  0%,
  100% {
    box-shadow: 0 0 0 0 rgba(182, 23, 34, 0.55);
  }
  50% {
    box-shadow: 0 0 0 12px rgba(182, 23, 34, 0);
  }
}

@keyframes splashAutoHide {
  to { opacity: 0; pointer-events: none; visibility: hidden; }
}

@keyframes pulse-splash-logo {
  0%,
  100% {
    transform: scale(1);
  }
  50% {
    transform: scale(1.05);
  }
}

@keyframes bar-chart-anim {
  0%,
  40%,
  100% {
    transform: scaleY(0.4);
    opacity: 0.5;
  }
  20% {
    transform: scaleY(1);
    opacity: 1;
  }
}

@keyframes nira-card-entrance {
  from { opacity: 0; transform: translateY(10px) scale(0.97); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}

@keyframes nira-marker-breathing {
  0% { transform: scale(1); opacity: 0.7; }
  100% { transform: scale(3); opacity: 0; }
}

@keyframes soft-pulse-highlight {
  0%, 100% {
    box-shadow: 0 4px 20px rgba(0,0,0,0.06), 0 0 0 0px rgba(11, 143, 114, 0.4);
    border-color: rgba(11, 143, 114, 0.4) !important;
  }
  50% {
    box-shadow: 0 4px 20px rgba(0,0,0,0.06), 0 0 0 6px rgba(11, 143, 114, 0);
    border-color: rgba(11, 143, 114, 0.1) !important;
  }
}

@keyframes nira-blink {
  0%,
  100% {
    opacity: 1;
  }
  50% {
    opacity: 0.35;
  }
}

@keyframes nira-dot-bounce {
  0%,
  80%,
  100% {
    transform: translateY(0);
    opacity: 0.4;
  }
  40% {
    transform: translateY(-6px);
    opacity: 1;
  }
}

@keyframes nira-fab-pulse {
  0%,
  100% {
    box-shadow: 0 8px 28px rgba(0, 104, 87, 0.45), 0 0 0 0 rgba(0, 168, 126, 0.5);
  }
  50% {
    box-shadow: 0 8px 28px rgba(0, 104, 87, 0.45), 0 0 0 10px rgba(0, 168, 126, 0);
  }
}
