/* ═══════════════════════════════════════════════════════════════
   REALITY FRACTURE — Animation Keyframes
   All @keyframes definitions, glitch effects, pulses
   ═══════════════════════════════════════════════════════════════ */

/* ── Ambient Pulse ─────────────────────────────────────────── */
@keyframes pulse-glow {
    0%, 100% { opacity: 0.4; }
    50% { opacity: 1; }
}

@keyframes pulse-soft {
    0%, 100% { opacity: 0.6; transform: scale(1); }
    50% { opacity: 1; transform: scale(1.05); }
}

@keyframes pulse-border {
    0%, 100% { 
        border-color: rgba(0, 212, 255, 0.15);
        box-shadow: 0 0 0 rgba(0, 212, 255, 0);
    }
    50% { 
        border-color: rgba(0, 212, 255, 0.4);
        box-shadow: 0 0 30px rgba(0, 212, 255, 0.1);
    }
}

/* ── Floating Motion ───────────────────────────────────────── */
@keyframes float-slow {
    0%, 100% { transform: translateY(0px); }
    50% { transform: translateY(-15px); }
}

@keyframes float-drift {
    0%, 100% { transform: translate(0, 0) rotate(0deg); }
    25% { transform: translate(5px, -10px) rotate(1deg); }
    50% { transform: translate(-3px, -18px) rotate(-0.5deg); }
    75% { transform: translate(8px, -8px) rotate(0.5deg); }
}

@keyframes float-rotate {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}

/* ── Fracture Line Effects ─────────────────────────────────── */
@keyframes fracture-line-1 {
    0% { 
        clip-path: polygon(0% 0%, 0% 0%, 0% 100%, 0% 100%);
        opacity: 0;
    }
    30% {
        opacity: 1;
    }
    100% { 
        clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
        opacity: 0;
    }
}

@keyframes fracture-crack {
    0% { 
        width: 0;
        opacity: 0;
    }
    20% {
        opacity: 1;
    }
    100% { 
        width: 100%;
        opacity: 0;
    }
}

/* ── Glitch Distortion ─────────────────────────────────────── */
@keyframes glitch-1 {
    0%, 100% { clip-path: inset(0 0 0 0); transform: translate(0); }
    20% { clip-path: inset(20% 0 60% 0); transform: translate(-4px, 2px); }
    40% { clip-path: inset(60% 0 10% 0); transform: translate(4px, -1px); }
    60% { clip-path: inset(40% 0 40% 0); transform: translate(-2px, 1px); }
    80% { clip-path: inset(80% 0 5% 0); transform: translate(3px, -2px); }
}

@keyframes glitch-2 {
    0%, 100% { clip-path: inset(0 0 0 0); transform: translate(0); }
    25% { clip-path: inset(10% 0 70% 0); transform: translate(3px, -1px); }
    50% { clip-path: inset(50% 0 20% 0); transform: translate(-5px, 2px); }
    75% { clip-path: inset(70% 0 15% 0); transform: translate(2px, 1px); }
}

@keyframes glitch-skew {
    0%, 100% { transform: skew(0deg); }
    20% { transform: skew(-2deg); }
    40% { transform: skew(1.5deg); }
    60% { transform: skew(-0.5deg); }
    80% { transform: skew(1deg); }
}

@keyframes glitch-color {
    0%, 100% { text-shadow: none; }
    25% { text-shadow: -3px 0 var(--electric-blue), 3px 0 var(--neon-violet); }
    50% { text-shadow: 3px 0 var(--spectral-cyan), -3px 0 var(--neon-violet); }
    75% { text-shadow: -2px 0 var(--neon-violet), 2px 0 var(--electric-blue); }
}

/* ── Energy Pulse ──────────────────────────────────────────── */
@keyframes energy-pulse {
    0% { 
        transform: scaleX(0);
        opacity: 1;
    }
    100% { 
        transform: scaleX(1);
        opacity: 0;
    }
}

@keyframes energy-travel {
    0% { left: -20%; opacity: 0; }
    10% { opacity: 1; }
    90% { opacity: 1; }
    100% { left: 120%; opacity: 0; }
}

@keyframes energy-border-top {
    0% { transform: translateX(-100%); }
    100% { transform: translateX(200%); }
}

@keyframes energy-border-right {
    0% { transform: translateY(-100%); }
    100% { transform: translateY(200%); }
}

/* ── Signal Strip Scroll ───────────────────────────────────── */
@keyframes signal-scroll {
    0% { transform: translateX(0); }
    100% { transform: translateX(-50%); }
}

/* ── Marker Pulse ──────────────────────────────────────────── */
@keyframes marker-pulse {
    0%, 100% { 
        transform: scale(1);
        opacity: 0.5;
    }
    50% { 
        transform: scale(1.8);
        opacity: 0;
    }
}

@keyframes marker-ring-expand {
    0% {
        transform: scale(0.5);
        opacity: 1;
    }
    100% {
        transform: scale(2.5);
        opacity: 0;
    }
}

/* ── Scan Lines ────────────────────────────────────────────── */
@keyframes scanline {
    0% { transform: translateY(-100%); }
    100% { transform: translateY(100%); }
}

/* ── Grain Noise ───────────────────────────────────────────── */
@keyframes grain {
    0%, 100% { transform: translate(0, 0); }
    10% { transform: translate(-5%, -10%); }
    20% { transform: translate(-15%, 5%); }
    30% { transform: translate(7%, -25%); }
    40% { transform: translate(-5%, 25%); }
    50% { transform: translate(-15%, 10%); }
    60% { transform: translate(15%, 0%); }
    70% { transform: translate(0%, 15%); }
    80% { transform: translate(3%, 35%); }
    90% { transform: translate(-10%, 10%); }
}

/* ── Scroll Indicator ──────────────────────────────────────── */
@keyframes scroll-line {
    0% { 
        transform: scaleY(0);
        transform-origin: top;
    }
    50% {
        transform: scaleY(1);
        transform-origin: top;
    }
    51% {
        transform: scaleY(1);
        transform-origin: bottom;
    }
    100% {
        transform: scaleY(0);
        transform-origin: bottom;
    }
}

/* ── Frame Corner Glow ─────────────────────────────────────── */
@keyframes corner-glow {
    0%, 100% {
        box-shadow: 0 0 8px var(--electric-blue-glow);
    }
    50% {
        box-shadow: 0 0 20px var(--electric-blue-glow),
                    0 0 40px rgba(0, 212, 255, 0.15);
    }
}

/* ── Dot Blink ─────────────────────────────────────────────── */
@keyframes dot-blink {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.3; }
}

/* ── Portal Open ───────────────────────────────────────────── */
@keyframes portal-open {
    0% {
        opacity: 0;
        transform: scale(0.85);
        filter: blur(20px) brightness(2);
    }
    60% {
        filter: blur(0px) brightness(1.2);
    }
    100% {
        opacity: 1;
        transform: scale(1);
        filter: blur(0px) brightness(1);
    }
}

/* ── Title Reveal ──────────────────────────────────────────── */
@keyframes title-reveal {
    0% {
        opacity: 0;
        transform: translateY(40px);
        filter: blur(10px);
    }
    100% {
        opacity: 1;
        transform: translateY(0);
        filter: blur(0);
    }
}

/* ── Threshold Energy ──────────────────────────────────────── */
@keyframes threshold-energy {
    0% {
        background-position: 0% 50%;
    }
    50% {
        background-position: 100% 50%;
    }
    100% {
        background-position: 0% 50%;
    }
}

/* ── Map Node Pulse ────────────────────────────────────────── */
@keyframes node-pulse {
    0%, 100% {
        box-shadow: 0 0 4px var(--electric-blue),
                    0 0 12px rgba(0, 212, 255, 0.3);
    }
    50% {
        box-shadow: 0 0 8px var(--electric-blue),
                    0 0 24px rgba(0, 212, 255, 0.5),
                    0 0 48px rgba(0, 212, 255, 0.2);
    }
}
