@keyframes heroPulse {
  0% { transform: scale(1); opacity: 0.8; }
  100% { transform: scale(1.1); opacity: 1; }
}

@keyframes float {
  0%, 100% { transform: translate(0, 0) rotate(0deg); opacity: 0; }
  10% { opacity: 1; }
  90% { opacity: 1; }
}

@keyframes gridPulse {
  0%, 100% { opacity: 0.1; }
  50% { opacity: 0.2; }
}

@keyframes scanlines {
  0% { transform: translateY(0); }
  100% { transform: translateY(20px); }
}

@keyframes logoShine {
  0% { transform: translateX(-100%); }
  100% { transform: translateX(200%); }
}

@keyframes kickerFloat {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-5px); }
}

@keyframes kickerShine {
  0% { transform: translateX(-100%); }
  100% { transform: translateX(200%); }
}

@keyframes codeShine {
  0% { transform: translateX(-100%); }
  100% { transform: translateX(200%); }
}

@keyframes lineIn {
  0%, 20% { opacity: 0; transform: translateY(8px); }
  35%, 80% { opacity: 1; transform: translateY(0); }
  100% { opacity: 0; transform: translateY(-6px); }
}

@keyframes cardShine {
  0% { transform: translateX(-100%); }
  100% { transform: translateX(200%); }
}

@keyframes iconShine {
  0% { transform: translateX(-100%); }
  100% { transform: translateX(200%); }
}

@keyframes priceShine {
  0% { transform: translateX(-100%); }
  100% { transform: translateX(200%); }
}

@keyframes scan {
  0% { transform: translateX(-100%); opacity: 0; }
  50% { opacity: 1; }
  100% { transform: translateX(100%); opacity: 0; }
}

@keyframes floating {
  0%, 100% { transform: translateY(0) rotate(0deg); }
  50% { transform: translateY(-20px) rotate(5deg); }
}

@keyframes skillLoad {
  from { width: 0; }
  to { width: var(--skill-width); }
}

@keyframes skillShine {
  0% { transform: translateX(-100%); }
  100% { transform: translateX(200%); }
}

@keyframes visualPulse {
  0% { transform: scale(1); opacity: 0.5; }
  100% { transform: scale(1.2); opacity: 0.8; }
}

@keyframes infraPulse {
  0%, 100% { transform: scaleY(0.75); opacity: 0.6; }
  50% { transform: scaleY(1); opacity: 1; }
}

@keyframes typingDot {
  0%, 100% { opacity: 0.3; transform: translateY(0); }
  50% { opacity: 1; transform: translateY(-2px); }
}

@keyframes pipelineFlow {
  0% { left: 0%; opacity: 0; }
  20% { opacity: 1; }
  100% { left: calc(100% - 8px); opacity: 0; }
}

@keyframes optPulse {
  0%, 100% { transform: scaleX(0.85); opacity: 0.7; }
  50% { transform: scaleX(1); opacity: 1; }
}

@keyframes sparkPulse {
  0%, 100% { transform: scaleY(0.7); opacity: 0.6; }
  50% { transform: scaleY(1); opacity: 1; }
}

@keyframes cellPulse {
  0%, 100% { opacity: 0.2; transform: scale(0.9); }
  50% { opacity: 1; transform: scale(1); }
}

@keyframes traceMove {
  0% { transform: translateX(0); opacity: 0; }
  20% { opacity: 1; }
  100% { transform: translateX(240%); opacity: 0; }
}

@keyframes repairPulse {
  0%, 100% { transform: scaleX(0.85); opacity: 0.7; }
  50% { transform: scaleX(1); opacity: 1; }
}

@keyframes upgradePulse {
  0%, 100% { transform: scaleX(0.85); opacity: 0.7; }
  50% { transform: scaleX(1); opacity: 1; }
}

@keyframes stackPulse {
  0%, 100% { transform: scaleX(0.8); opacity: 0.6; }
  50% { transform: scaleX(1); opacity: 1; }
}

@keyframes apiFlow {
  0% { left: 0%; opacity: 0; }
  20% { opacity: 1; }
  100% { left: calc(100% - 8px); opacity: 0; }
}

@keyframes codePulse {
  0%, 100% { transform: scaleY(0.7); opacity: 0.6; }
  50% { transform: scaleY(1); opacity: 1; }
}

@keyframes blink {
  0%, 49% { opacity: 1; }
  50%, 100% { opacity: 0; }
}

@keyframes pulseDot {
  0%, 100% { transform: scale(1); opacity: 0.7; }
  50% { transform: scale(1.3); opacity: 1; }
}

@keyframes rise {
  to { opacity: 1; transform: translateY(0); }
}

@keyframes glitchEffect {
  0% { transform: translateX(0); filter: hue-rotate(0deg); }
  25% { transform: translateX(-2px); filter: hue-rotate(20deg); }
  50% { transform: translateX(2px); filter: hue-rotate(-10deg); }
  75% { transform: translateX(-1px); filter: hue-rotate(10deg); }
  100% { transform: translateX(0); filter: hue-rotate(0deg); }
}
