/* ============================================
   THE REBORN SIGNAL — KEYFRAMES
   All animations. All frequencies.
   ============================================ */

/* 1. FRACTURE PULSE — the line breathes */
@keyframes fracture-pulse {
  0%, 100% {
    width: 1px;
    opacity: 0.6;
  }
  25% {
    width: 3px;
    opacity: 0.9;
  }
  50% {
    width: 1px;
    opacity: 0.5;
  }
  75% {
    width: 2px;
    opacity: 0.8;
  }
}

/* 2. GLITCH LEFT — CANON zone distortion */
@keyframes glitch-left {
  0%, 100% {
    transform: translate(0, 0) skewX(0deg);
  }
  10% {
    transform: translate(-3px, 1px) skewX(-0.5deg);
  }
  20% {
    transform: translate(2px, -1px) skewX(0.3deg);
  }
  30% {
    transform: translate(0, 0) skewX(0deg);
  }
}

/* 3. GLITCH RIGHT — CIPHER zone distortion */
@keyframes glitch-right {
  0%, 100% {
    transform: translate(0, 0) skewX(0deg);
  }
  15% {
    transform: translate(3px, -1px) skewX(0.5deg);
  }
  25% {
    transform: translate(-2px, 1px) skewX(-0.3deg);
  }
  35% {
    transform: translate(0, 0) skewX(0deg);
  }
}

/* 4. TYPEWRITER — code line reveal */
@keyframes typewriter {
  from {
    width: 0;
  }
  to {
    width: 100%;
  }
}

@keyframes typewriter-cursor {
  0%, 100% {
    border-right-color: var(--cipher-cyan);
  }
  50% {
    border-right-color: transparent;
  }
}

/* 5. WAVEFORM — SVG wave deformation */
@keyframes waveform {
  0% {
    d: path("M0,50 Q60,35 120,50 T240,50 T360,50 T480,50 T600,50 T720,50 T840,50 T960,50 T1080,50 T1200,50 T1320,50 T1440,50");
  }
  25% {
    d: path("M0,50 Q60,25 120,55 T240,45 T360,55 T480,45 T600,55 T720,45 T840,55 T960,45 T1080,55 T1200,45 T1320,55 T1440,50");
  }
  50% {
    d: path("M0,50 Q60,60 120,40 T240,60 T360,40 T480,60 T600,40 T720,60 T840,40 T960,60 T1080,40 T1200,60 T1320,40 T1440,50");
  }
  75% {
    d: path("M0,50 Q60,30 120,55 T240,42 T360,58 T480,42 T600,58 T720,42 T840,58 T960,42 T1080,58 T1200,42 T1320,58 T1440,50");
  }
  100% {
    d: path("M0,50 Q60,35 120,50 T240,50 T360,50 T480,50 T600,50 T720,50 T840,50 T960,50 T1080,50 T1200,50 T1320,50 T1440,50");
  }
}

/* 6. STATIC NOISE — grain intensification */
@keyframes static-noise {
  0% {
    opacity: 0;
    transform: scale(1) translate(0, 0);
  }
  10% {
    opacity: 0.15;
    transform: scale(1.02) translate(1px, -1px);
  }
  20% {
    opacity: 0.08;
    transform: scale(0.99) translate(-1px, 1px);
  }
  30% {
    opacity: 0.2;
    transform: scale(1.01) translate(2px, 0);
  }
  40% {
    opacity: 0.05;
    transform: scale(1) translate(0, 0);
  }
  50% {
    opacity: 0.18;
    transform: scale(1.03) translate(-2px, 1px);
  }
  60% {
    opacity: 0.03;
  }
  100% {
    opacity: 0;
    transform: scale(1) translate(0, 0);
  }
}

/* 7. SIGNAL BLINK — slow pulse for TRANSMITTING */
@keyframes signal-blink {
  0%, 100% {
    opacity: 1;
  }
  50% {
    opacity: 0.2;
  }
}

/* 8. SCROLL INDICATOR — arrow drift */
@keyframes scroll-drift {
  0%, 100% {
    transform: translateY(0);
    opacity: 1;
  }
  50% {
    transform: translateY(12px);
    opacity: 0.4;
  }
}

/* 9. FRACTURE TREMBLE — aggressive hover state */
@keyframes fracture-tremble {
  0%, 100% {
    transform: translateX(0) scaleX(1);
  }
  10% {
    transform: translateX(-2px) scaleX(1.5);
  }
  20% {
    transform: translateX(3px) scaleX(0.8);
  }
  30% {
    transform: translateX(-1px) scaleX(2);
  }
  40% {
    transform: translateX(2px) scaleX(1);
  }
  50% {
    transform: translateX(0) scaleX(1.3);
  }
}

/* 10. CODE PARTICLES — floating for CIPHER background */
@keyframes code-float {
  0% {
    transform: translateY(100vh) translateX(0);
    opacity: 0;
  }
  10% {
    opacity: 0.1;
  }
  90% {
    opacity: 0.1;
  }
  100% {
    transform: translateY(-10vh) translateX(20px);
    opacity: 0;
  }
}

/* 11. FADE STAGGER — for manifeste paragraphs */
@keyframes fade-up-stagger {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* 12. MOBILE MENU TEAR */
@keyframes menu-tear {
  from {
    clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);
  }
  to {
    clip-path: polygon(0 0, 100% 0, 95% 48%, 100% 100%, 0 100%);
  }
}

@keyframes menu-tear-close {
  from {
    clip-path: polygon(0 0, 100% 0, 95% 48%, 100% 100%, 0 100%);
  }
  to {
    clip-path: polygon(0 0, 0 0, 0 50%, 0 100%, 0 100%);
  }
}

/* 13. TROPHY CRACK */
@keyframes trophy-crack {
  0%, 70%, 100% {
    filter: none;
  }
  72% {
    filter: brightness(2) contrast(1.5);
    transform: skewX(-1deg);
  }
  74% {
    filter: none;
    transform: skewX(0deg);
  }
}
