/* ============================================
   GLITCH EFFECTS - ANIMATION LIBRARY
   ============================================ */

/* ========================================
   BASIC GLITCH EFFECT
   ======================================== */

.glitch {
    position: relative;
    display: inline-block;
}

.glitch[data-text]::before,
.glitch[data-text]::after {
    content: attr(data-text);
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: transparent;
}

/* Red/Cyan Channel Separation */
.glitch[data-text]::before {
    left: 2px;
    text-shadow: -2px 0 var(--cyber-magenta);
    clip: rect(44px, 450px, 56px, 0);
    animation: glitch-anim 5s infinite linear alternate-reverse;
}

.glitch[data-text]::after {
    left: -2px;
    text-shadow: -2px 0 var(--cyber-cyan);
    clip: rect(44px, 450px, 56px, 0);
    animation: glitch-anim2 5s infinite linear alternate-reverse;
}

@keyframes glitch-anim {
    0% {
        clip: rect(31px, 9999px, 94px, 0);
        transform: skew(0.3deg);
    }
    5% {
        clip: rect(70px, 9999px, 71px, 0);
        transform: skew(0.5deg);
    }
    10% {
        clip: rect(89px, 9999px, 43px, 0);
        transform: skew(0.2deg);
    }
    15% {
        clip: rect(5px, 9999px, 17px, 0);
        transform: skew(0.8deg);
    }
    20% {
        clip: rect(26px, 9999px, 60px, 0);
        transform: skew(0.4deg);
    }
    25% {
        clip: rect(84px, 9999px, 11px, 0);
        transform: skew(0.1deg);
    }
    30% {
        clip: rect(40px, 9999px, 93px, 0);
        transform: skew(0.6deg);
    }
    35% {
        clip: rect(19px, 9999px, 53px, 0);
        transform: skew(0.3deg);
    }
    40% {
        clip: rect(63px, 9999px, 81px, 0);
        transform: skew(0.7deg);
    }
    45% {
        clip: rect(12px, 9999px, 38px, 0);
        transform: skew(0.2deg);
    }
    50% {
        clip: rect(77px, 9999px, 24px, 0);
        transform: skew(0.5deg);
    }
    55% {
        clip: rect(33px, 9999px, 66px, 0);
        transform: skew(0.4deg);
    }
    60% {
        clip: rect(58px, 9999px, 9px, 0);
        transform: skew(0.1deg);
    }
    65% {
        clip: rect(2px, 9999px, 48px, 0);
        transform: skew(0.8deg);
    }
    70% {
        clip: rect(91px, 9999px, 27px, 0);
        transform: skew(0.3deg);
    }
    75% {
        clip: rect(45px, 9999px, 72px, 0);
        transform: skew(0.6deg);
    }
    80% {
        clip: rect(20px, 9999px, 55px, 0);
        transform: skew(0.2deg);
    }
    85% {
        clip: rect(67px, 9999px, 14px, 0);
        transform: skew(0.5deg);
    }
    90% {
        clip: rect(36px, 9999px, 82px, 0);
        transform: skew(0.7deg);
    }
    95% {
        clip: rect(8px, 9999px, 99px, 0);
        transform: skew(0.4deg);
    }
    100% {
        clip: rect(52px, 9999px, 35px, 0);
        transform: skew(0.1deg);
    }
}

@keyframes glitch-anim2 {
    0% {
        clip: rect(65px, 9999px, 100px, 0);
        transform: skew(0.5deg);
    }
    5% {
        clip: rect(25px, 9999px, 33px, 0);
        transform: skew(0.2deg);
    }
    10% {
        clip: rect(47px, 9999px, 85px, 0);
        transform: skew(0.8deg);
    }
    15% {
        clip: rect(3px, 9999px, 61px, 0);
        transform: skew(0.3deg);
    }
    20% {
        clip: rect(76px, 9999px, 18px, 0);
        transform: skew(0.6deg);
    }
    25% {
        clip: rect(39px, 9999px, 52px, 0);
        transform: skew(0.1deg);
    }
    30% {
        clip: rect(88px, 9999px, 29px, 0);
        transform: skew(0.7deg);
    }
    35% {
        clip: rect(11px, 9999px, 74px, 0);
        transform: skew(0.4deg);
    }
    40% {
        clip: rect(54px, 9999px, 96px, 0);
        transform: skew(0.2deg);
    }
    45% {
        clip: rect(22px, 9999px, 41px, 0);
        transform: skew(0.5deg);
    }
    50% {
        clip: rect(69px, 9999px, 7px, 0);
        transform: skew(0.8deg);
    }
    55% {
        clip: rect(15px, 9999px, 59px, 0);
        transform: skew(0.3deg);
    }
    60% {
        clip: rect(81px, 9999px, 21px, 0);
        transform: skew(0.6deg);
    }
    65% {
        clip: rect(44px, 9999px, 68px, 0);
        transform: skew(0.1deg);
    }
    70% {
        clip: rect(6px, 9999px, 92px, 0);
        transform: skew(0.4deg);
    }
    75% {
        clip: rect(73px, 9999px, 34px, 0);
        transform: skew(0.7deg);
    }
    80% {
        clip: rect(28px, 9999px, 57px, 0);
        transform: skew(0.2deg);
    }
    85% {
        clip: rect(90px, 9999px, 13px, 0);
        transform: skew(0.5deg);
    }
    90% {
        clip: rect(49px, 9999px, 78px, 0);
        transform: skew(0.8deg);
    }
    95% {
        clip: rect(16px, 9999px, 45px, 0);
        transform: skew(0.3deg);
    }
    100% {
        clip: rect(62px, 9999px, 86px, 0);
        transform: skew(0.6deg);
    }
}

/* ========================================
   GLITCH SHAKE
   ======================================== */

.glitch-shake {
    animation: glitch-shake 0.3s cubic-bezier(.36,.07,.19,.97) both;
}

@keyframes glitch-shake {
    0%, 100% {
        transform: translate(0, 0) rotate(0deg);
    }
    10%, 30%, 50%, 70%, 90% {
        transform: translate(-2px, 2px) rotate(-1deg);
    }
    20%, 40%, 60%, 80% {
        transform: translate(2px, -2px) rotate(1deg);
    }
}

/* ========================================
   GLITCH SKEW
   ======================================== */

.glitch-skew {
    animation: glitch-skew 1s ease-in-out infinite;
}

@keyframes glitch-skew {
    0% {
        transform: skew(0deg, 0deg);
    }
    10% {
        transform: skew(-2deg, 0deg);
    }
    20% {
        transform: skew(2deg, 0deg);
    }
    30% {
        transform: skew(0deg, -2deg);
    }
    40% {
        transform: skew(0deg, 2deg);
    }
    50% {
        transform: skew(-1deg, 1deg);
    }
    60% {
        transform: skew(1deg, -1deg);
    }
    70% {
        transform: skew(-2deg, 2deg);
    }
    80% {
        transform: skew(2deg, -2deg);
    }
    90% {
        transform: skew(0deg, 0deg);
    }
    100% {
        transform: skew(0deg, 0deg);
    }
}

/* ========================================
   RGB SPLIT EFFECT
   ======================================== */

.glitch-rgb {
    position: relative;
    display: inline-block;
}

.glitch-rgb::before,
.glitch-rgb::after {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: inherit;
    mix-blend-mode: screen;
    opacity: 0.8;
}

.glitch-rgb::before {
    background: var(--cyber-cyan);
    animation: glitch-rgb-left 3s infinite;
}

.glitch-rgb::after {
    background: var(--cyber-magenta);
    animation: glitch-rgb-right 3s infinite;
}

@keyframes glitch-rgb-left {
    0%, 100% {
        transform: translate(0, 0);
    }
    10% {
        transform: translate(-5px, -2px);
    }
    20% {
        transform: translate(-3px, 3px);
    }
    30% {
        transform: translate(5px, -3px);
    }
    40% {
        transform: translate(-2px, 2px);
    }
    50% {
        transform: translate(3px, -5px);
    }
    60% {
        transform: translate(-5px, 3px);
    }
    70% {
        transform: translate(2px, -2px);
    }
    80% {
        transform: translate(-3px, 5px);
    }
    90% {
        transform: translate(5px, -3px);
    }
}

@keyframes glitch-rgb-right {
    0%, 100% {
        transform: translate(0, 0);
    }
    10% {
        transform: translate(5px, 2px);
    }
    20% {
        transform: translate(3px, -3px);
    }
    30% {
        transform: translate(-5px, 3px);
    }
    40% {
        transform: translate(2px, -2px);
    }
    50% {
        transform: translate(-3px, 5px);
    }
    60% {
        transform: translate(5px, -3px);
    }
    70% {
        transform: translate(-2px, 2px);
    }
    80% {
        transform: translate(3px, -5px);
    }
    90% {
        transform: translate(-5px, 3px);
    }
}

/* ========================================
   SCAN LINE EFFECT
   ======================================== */

.glitch-scanline {
    position: relative;
    overflow: hidden;
}

.glitch-scanline::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 2px;
    background: rgba(0, 240, 255, 0.5);
    box-shadow: 0 0 10px rgba(0, 240, 255, 0.8);
    animation: scanline-move 3s linear infinite;
    z-index: 10;
}

@keyframes scanline-move {
    0% {
        top: 0;
    }
    100% {
        top: 100%;
    }
}

/* ========================================
   GLITCH PULSE
   ======================================== */

.glitch-pulse {
    animation: glitch-pulse 2s ease-in-out infinite;
}

@keyframes glitch-pulse {
    0%, 100% {
        opacity: 1;
        transform: scale(1);
    }
    10% {
        opacity: 0.9;
        transform: scale(1.02);
    }
    20% {
        opacity: 1;
        transform: scale(0.98);
    }
    30% {
        opacity: 0.95;
        transform: scale(1.01);
    }
    40% {
        opacity: 1;
        transform: scale(0.99);
    }
    50% {
        opacity: 0.92;
        transform: scale(1.03);
    }
}

/* ========================================
   DIGITAL DISTORTION
   ======================================== */

.glitch-distort {
    position: relative;
    display: inline-block;
}

.glitch-distort::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: linear-gradient(
        90deg,
        transparent 0%,
        rgba(0, 240, 255, 0.3) 25%,
        transparent 50%,
        rgba(255, 0, 110, 0.3) 75%,
        transparent 100%
    );
    animation: distort-slide 2s linear infinite;
    opacity: 0;
}

.glitch-distort:hover::before {
    opacity: 1;
}

@keyframes distort-slide {
    0% {
        transform: translateX(-100%);
    }
    100% {
        transform: translateX(100%);
    }
}

/* ========================================
   PIXEL CORRUPTION
   ======================================== */

.glitch-pixel {
    animation: pixel-corruption 0.5s steps(5) infinite;
}

@keyframes pixel-corruption {
    0% {
        clip-path: inset(0 0 0 0);
    }
    20% {
        clip-path: inset(10px 5px 15px 8px);
    }
    40% {
        clip-path: inset(5px 12px 8px 3px);
    }
    60% {
        clip-path: inset(15px 3px 5px 10px);
    }
    80% {
        clip-path: inset(3px 8px 12px 6px);
    }
    100% {
        clip-path: inset(0 0 0 0);
    }
}

/* ========================================
   STATIC NOISE
   ======================================== */

.glitch-static {
    position: relative;
    overflow: hidden;
}

.glitch-static::after {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='4' numOctaves='3' /%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.5'/%3E%3C/svg%3E");
    opacity: 0;
    pointer-events: none;
    animation: static-flicker 0.1s infinite;
}

@keyframes static-flicker {
    0%, 90%, 100% {
        opacity: 0;
    }
    91%, 99% {
        opacity: 0.15;
    }
}

/* ========================================
   CHROMATIC ABERRATION
   ======================================== */

.glitch-chromatic {
    position: relative;
    display: inline-block;
}

.glitch-chromatic::before,
.glitch-chromatic::after {
    content: attr(data-text);
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    opacity: 0.8;
}

.glitch-chromatic::before {
    color: var(--cyber-cyan);
    animation: chromatic-aberration-1 1.5s infinite;
}

.glitch-chromatic::after {
    color: var(--cyber-magenta);
    animation: chromatic-aberration-2 1.5s infinite;
}

@keyframes chromatic-aberration-1 {
    0%, 100% {
        transform: translate(0, 0);
    }
    33% {
        transform: translate(-2px, 0);
    }
    66% {
        transform: translate(2px, 0);
    }
}

@keyframes chromatic-aberration-2 {
    0%, 100% {
        transform: translate(0, 0);
    }
    33% {
        transform: translate(2px, 0);
    }
    66% {
        transform: translate(-2px, 0);
    }
}

/* ========================================
   FLICKER EFFECT
   ======================================== */

.glitch-flicker {
    animation: flicker 0.15s infinite;
}

@keyframes flicker {
    0%, 100% {
        opacity: 1;
    }
    41% {
        opacity: 1;
    }
    42% {
        opacity: 0.8;
    }
    43% {
        opacity: 1;
    }
    45% {
        opacity: 0.9;
    }
    46% {
        opacity: 1;
    }
}

/* ========================================
   HORIZONTAL GLITCH BARS
   ======================================== */

.glitch-bars {
    position: relative;
    overflow: hidden;
}

.glitch-bars::before,
.glitch-bars::after {
    content: '';
    position: absolute;
    left: 0;
    width: 100%;
    height: 3px;
    background: var(--cyber-cyan);
    box-shadow: 0 0 10px var(--cyber-cyan);
    animation: glitch-bars-move 3s linear infinite;
}

.glitch-bars::before {
    top: 20%;
}

.glitch-bars::after {
    top: 60%;
    animation-delay: 1.5s;
}

@keyframes glitch-bars-move {
    0% {
        transform: translateX(-100%);
        opacity: 0;
    }
    10% {
        opacity: 1;
    }
    90% {
        opacity: 1;
    }
    100% {
        transform: translateX(100%);
        opacity: 0;
    }
}

/* ========================================
   GLITCH ON HOVER
   ======================================== */

.glitch-hover {
    position: relative;
    transition: all 0.1s ease;
}

.glitch-hover:hover {
    animation: glitch-shake 0.3s;
}

/* ========================================
   BOOT SEQUENCE GLITCH
   ======================================== */

.boot-glitch {
    animation: boot-glitch 2s ease-in-out;
}

@keyframes boot-glitch {
    0% {
        opacity: 0;
        transform: scaleY(0.001);
        filter: blur(10px);
    }
    10% {
        opacity: 1;
        transform: scaleY(0.8);
    }
    20% {
        transform: scaleY(1.1) skew(2deg);
    }
    30% {
        transform: scaleY(0.9) skew(-1deg);
    }
    40% {
        transform: scaleY(1.05) skew(1deg);
    }
    50% {
        transform: scaleY(0.95);
        filter: blur(0px);
    }
    60%, 100% {
        opacity: 1;
        transform: scaleY(1) skew(0deg);
        filter: blur(0px);
    }
}

/* ========================================
   GLITCHABLE CLASS (Triggered by JS)
   ======================================== */

.glitchable {
    transition: all 0.1s ease;
}

.glitchable.active-glitch {
    animation: glitch-shake 0.3s, glitch-pulse 0.3s;
}

/* ========================================
   TEXT CORRUPTION
   ======================================== */

@keyframes text-glitch {
    0% {
        text-shadow: 
            0.05em 0 0 var(--cyber-cyan),
            -0.05em -0.025em 0 var(--cyber-magenta),
            -0.025em 0.05em 0 var(--cyber-yellow);
    }
    14% {
        text-shadow: 
            0.05em 0 0 var(--cyber-cyan),
            -0.05em -0.025em 0 var(--cyber-magenta),
            -0.025em 0.05em 0 var(--cyber-yellow);
    }
    15% {
        text-shadow: 
            -0.05em -0.025em 0 var(--cyber-cyan),
            0.025em 0.025em 0 var(--cyber-magenta),
            -0.05em -0.05em 0 var(--cyber-yellow);
    }
    49% {
        text-shadow: 
            -0.05em -0.025em 0 var(--cyber-cyan),
            0.025em 0.025em 0 var(--cyber-magenta),
            -0.05em -0.05em 0 var(--cyber-yellow);
    }
    50% {
        text-shadow: 
            0.025em 0.05em 0 var(--cyber-cyan),
            0.05em 0 0 var(--cyber-magenta),
            0 -0.05em 0 var(--cyber-yellow);
    }
    99% {
        text-shadow: 
            0.025em 0.05em 0 var(--cyber-cyan),
            0.05em 0 0 var(--cyber-magenta),
            0 -0.05em 0 var(--cyber-yellow);
    }
    100% {
        text-shadow: 
            -0.025em 0 0 var(--cyber-cyan),
            -0.025em -0.025em 0 var(--cyber-magenta),
            -0.025em -0.05em 0 var(--cyber-yellow);
    }
}

.text-glitch {
    animation: text-glitch 1s infinite;
}

/* ========================================
   HOLOGRAPHIC SHIMMER
   ======================================== */

.holographic-shimmer {
    position: relative;
    overflow: hidden;
}

.holographic-shimmer::before {
    content: '';
    position: absolute;
    top: -50%;
    left: -50%;
    width: 200%;
    height: 200%;
    background: linear-gradient(
        45deg,
        transparent 30%,
        rgba(0, 240, 255, 0.3) 50%,
        transparent 70%
    );
    animation: shimmer-rotate 3s linear infinite;
}

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

/* ========================================
   ACCESSIBILITY - REDUCED MOTION
   ======================================== */

@media (prefers-reduced-motion: reduce) {
    .glitch,
    .glitch-shake,
    .glitch-skew,
    .glitch-rgb,
    .glitch-scanline,
    .glitch-pulse,
    .glitch-distort,
    .glitch-pixel,
    .glitch-static,
    .glitch-chromatic,
    .glitch-flicker,
    .glitch-bars,
    .glitch-hover:hover,
    .boot-glitch,
    .glitchable.active-glitch,
    .text-glitch,
    .holographic-shimmer {
        animation: none !important;
    }
    
    .glitch[data-text]::before,
    .glitch[data-text]::after,
    .glitch-rgb::before,
    .glitch-rgb::after,
    .glitch-scanline::before,
    .glitch-distort::before,
    .glitch-static::after,
    .glitch-chromatic::before,
    .glitch-chromatic::after,
    .glitch-bars::before,
    .glitch-bars::after,
    .holographic-shimmer::before {
        display: none !important;
    }
}
