/* ==========================================================================
   EFFECTS — Keyframes, global overlays, and utility effect classes
   ========================================================================== */

/* --- Keyframes --- */

/* Glow Pulse — box-shadow intensity oscillation for buttons/CTAs on hover */
@keyframes glowPulse {
  0%, 100% {
    box-shadow: 0 0 5px var(--color-cyan-glow), 0 0 15px transparent;
  }
  50% {
    box-shadow: 0 0 12px var(--color-cyan-shadow), 0 0 30px var(--color-cyan-glow);
  }
}

/* Scanline Sweep — horizontal light band descending over element on hover */
@keyframes scanlineSweep {
  0% { transform: translateY(-100%); }
  100% { transform: translateY(200%); }
}

/* Glitch Flicker — brief horizontal displacement + opacity shift */
@keyframes glitchFlicker {
  0%, 100% { transform: translate(0); opacity: 1; }
  10% { transform: translate(-2px, 1px); opacity: 0.85; }
  20% { transform: translate(2px, -1px); opacity: 1; }
  30% { transform: translate(0); }
}

/* Border Energy Flow — animated gradient via background-position */
@keyframes borderEnergyFlow {
  0% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}

/* Neon Breathe — subtle text-shadow intensity oscillation */
@keyframes neonBreathe {
  0%, 100% {
    text-shadow: 0 0 10px var(--color-cyan-glow), 0 0 20px transparent;
  }
  50% {
    text-shadow: 0 0 18px var(--color-cyan-shadow), 0 0 40px var(--color-cyan-glow);
  }
}

/* Holographic Shimmer — diagonal highlight sweep across surfaces */
@keyframes holoShimmer {
  0% { transform: translateX(-100%) rotate(25deg); }
  100% { transform: translateX(200%) rotate(25deg); }
}

/* Data Stream — vertical scrolling dashes for decorative borders */
@keyframes dataStream {
  0% { background-position: 0 0; }
  100% { background-position: 0 20px; }
}

/* Scroll Pulse — hero scroll indicator */
@keyframes scrollPulse {
  0%, 100% { opacity: 0.3; }
  50% { opacity: 1; }
}

/* --- AAA Button Animations --- */

/* Light Sweep — diagonal highlight sweeping across button on hover */
@keyframes lightSweep {
  0% { left: -100%; }
  100% { left: 200%; }
}

/* Click Burst — radial energy burst on press */
@keyframes clickBurst {
  0% {
    transform: translate(-50%, -50%) scale(0);
    opacity: 0.6;
  }
  50% {
    opacity: 0.3;
  }
  100% {
    transform: translate(-50%, -50%) scale(3);
    opacity: 0;
  }
}

/* Snap Punch — quick scale-down then overshoot-up on click */
@keyframes snapPunch {
  0% { transform: scale(1); }
  30% { transform: scale(0.92); }
  60% { transform: scale(1.06); }
  80% { transform: scale(0.98); }
  100% { transform: scale(1); }
}

/* Edge Flare — border glow intensifying in a sweep */
@keyframes edgeFlare {
  0% {
    box-shadow: -4px 0 15px -3px var(--color-cyan-shadow),
                0 0 5px var(--color-cyan-glow);
  }
  25% {
    box-shadow: 0 -4px 15px -3px var(--color-cyan-shadow),
                0 0 8px var(--color-cyan-glow);
  }
  50% {
    box-shadow: 4px 0 15px -3px var(--color-purple-shadow),
                0 0 10px var(--color-purple-glow);
  }
  75% {
    box-shadow: 0 4px 15px -3px var(--color-cyan-shadow),
                0 0 8px var(--color-cyan-glow);
  }
  100% {
    box-shadow: -4px 0 15px -3px var(--color-cyan-shadow),
                0 0 5px var(--color-cyan-glow);
  }
}

/* Chromatic Shift — text color channel separation feel */
@keyframes chromaticShift {
  0%, 100% {
    text-shadow: none;
  }
  20% {
    text-shadow: -2px 0 var(--color-cyan), 2px 0 var(--color-magenta);
  }
  40% {
    text-shadow: 2px 0 var(--color-cyan), -2px 0 var(--color-purple);
  }
  60% {
    text-shadow: -1px 1px var(--color-magenta), 1px -1px var(--color-cyan);
  }
  80% {
    text-shadow: 1px 0 var(--color-cyan), -1px 0 var(--color-magenta);
  }
}

/* Idle Glow — subtle continuous edge glow on buttons at rest */
@keyframes idleGlow {
  0%, 100% {
    box-shadow: inset 0 0 15px rgba(0, 240, 255, 0.04),
                0 0 8px rgba(0, 240, 255, 0.06);
  }
  50% {
    box-shadow: inset 0 0 20px rgba(0, 240, 255, 0.08),
                0 0 15px rgba(0, 240, 255, 0.1);
  }
}


/* --- Global Scanline Overlay --- */
body::before {
  content: '';
  position: fixed;
  inset: 0;
  background: repeating-linear-gradient(
    0deg,
    transparent,
    transparent 2px,
    rgba(0, 240, 255, 0.006) 2px,
    rgba(0, 240, 255, 0.006) 4px
  );
  pointer-events: none;
  z-index: 9999;
}


/* --- Utility Effect Classes --- */

/* Glitch on hover — apply to headings or key interactive elements */
.glitch-hover:hover {
  animation: glitchFlicker 0.3s ease;
}

/* Holographic shimmer on image containers */
.holo-shimmer {
  position: relative;
  overflow: hidden;
}

.holo-shimmer::before {
  content: '';
  position: absolute;
  inset: -50%;
  width: 50%;
  background: linear-gradient(
    transparent,
    rgba(0, 240, 255, 0.04),
    rgba(180, 74, 255, 0.04),
    transparent
  );
  transform: translateX(-100%) rotate(25deg);
  pointer-events: none;
  z-index: 2;
  transition: none;
}

.holo-shimmer:hover::before {
  animation: holoShimmer 0.8s ease forwards;
}

/* Neon text glow */
.neon-glow {
  text-shadow: 0 0 10px var(--color-cyan-glow), 0 0 20px transparent;
}

/* Beveled clip-path corners — reusable utility sizes */
.clip-sm {
  clip-path: polygon(0 0, calc(100% - 6px) 0, 100% 6px, 100% 100%, 6px 100%, 0 calc(100% - 6px));
}

.clip-md {
  clip-path: polygon(0 0, calc(100% - 10px) 0, 100% 10px, 100% 100%, 10px 100%, 0 calc(100% - 10px));
}

.clip-lg {
  clip-path: polygon(0 0, calc(100% - 14px) 0, 100% 14px, 100% 100%, 14px 100%, 0 calc(100% - 14px));
}


/* --- Accessibility: Reduced Motion Guard --- */
@media (prefers-reduced-motion: reduce) {
  body::before {
    display: none;
  }

  .glitch-hover:hover {
    animation: none;
  }

  .holo-shimmer:hover::before {
    animation: none;
  }

  * {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
  }
}
