/* Animations & Keyframes */

@keyframes pulse-led {
  0% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.7); }
  70% { box-shadow: 0 0 0 6px rgba(16, 185, 129, 0); }
  100% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0); }
}

@keyframes pulse-logo {
  0% { r: 3; opacity: 0.8; }
  50% { r: 4; opacity: 1; box-shadow: 0 0 10px var(--glow-cyan); }
  100% { r: 3; opacity: 0.8; }
}

.logo-pulse {
  transform-origin: 12px 12px;
  animation: pulse-logo 3s ease-in-out infinite;
}

@keyframes scan-moving {
  0% { transform: translateY(-100%); }
  100% { transform: translateY(100vh); }
}

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

.fade-in {
  animation: fade-in var(--duration-normal) var(--ease-out-expo) forwards;
}

/* Event kinds glow pulse for HTML elements if needed */
.glow-pulse-created { box-shadow: 0 0 10px var(--event-created); }
.glow-pulse-broken { box-shadow: 0 0 15px var(--event-broken); animation: pulse-error 1s infinite; }

@keyframes pulse-error {
  0% { box-shadow: 0 0 5px var(--event-broken); }
  50% { box-shadow: 0 0 15px var(--event-broken); }
  100% { box-shadow: 0 0 5px var(--event-broken); }
}
