﻿/* Our mixin positions a copy of our text
directly on our existing text, while
also setting content to the appropriate
text set in the data-text attribute. */
.glitch {
    position: relative;
    color: white;
    /* Animation provies a slight random skew. Check bottom of doc
	for more information on how to random skew. */
    animation: glitch-skew 1s infinite linear alternate-reverse;
}

    .glitch::before {
        content: attr(data-text);
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        left: 2px;
        text-shadow: -2px 0 #ff00c1;
        /* Creates an initial clip for our glitch. This works in
		a typical top,right,bottom,left fashion and creates a mask
		to only show a certain part of the glitch at a time. */
        clip: rect(44px, 450px, 56px, 0);
        /* Runs our glitch-anim defined below to run in a 5s loop, infinitely,
		with an alternating animation to keep things fresh. */
        animation: glitch-anim 5s infinite linear alternate-reverse;
    }

    .glitch::after {
        content: attr(data-text);
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        left: -2px;
        text-shadow: -2px 0 #00fff9, 2px 2px #ff00c1;
        animation: glitch-anim2 1s infinite linear alternate-reverse;
    }

/* Creates an animation with 20 steaps. For each step, it calculates 
a percentage for the specific step. It then generates a random clip
box to be used for the random glitch effect. Also adds a very subtle
skew to change the 'thickness' of the glitch.*/
@keyframes glitch-anim {
    0% {
        clip: rect(48px, 9999px, 26px, 0);
        transform: skew(0.01deg);
    }

    5% {
        clip: rect(56px, 9999px, 94px, 0);
        transform: skew(0.66deg);
    }

    10% {
        clip: rect(96px, 9999px, 51px, 0);
        transform: skew(0.91deg);
    }

    15% {
        clip: rect(15px, 9999px, 34px, 0);
        transform: skew(0.94deg);
    }

    20% {
        clip: rect(35px, 9999px, 66px, 0);
        transform: skew(0.94deg);
    }

    25% {
        clip: rect(66px, 9999px, 72px, 0);
        transform: skew(0.49deg);
    }

    30% {
        clip: rect(13px, 9999px, 81px, 0);
        transform: skew(0.36deg);
    }

    35% {
        clip: rect(97px, 9999px, 1px, 0);
        transform: skew(0.56deg);
    }

    40% {
        clip: rect(6px, 9999px, 29px, 0);
        transform: skew(0.11deg);
    }

    45% {
        clip: rect(86px, 9999px, 95px, 0);
        transform: skew(0.47deg);
    }

    50% {
        clip: rect(35px, 9999px, 88px, 0);
        transform: skew(0.12deg);
    }

    55% {
        clip: rect(47px, 9999px, 13px, 0);
        transform: skew(0.3deg);
    }

    60% {
        clip: rect(91px, 9999px, 12px, 0);
        transform: skew(0.18deg);
    }

    65% {
        clip: rect(5px, 9999px, 64px, 0);
        transform: skew(0.01deg);
    }

    70% {
        clip: rect(28px, 9999px, 33px, 0);
        transform: skew(0.57deg);
    }

    75% {
        clip: rect(42px, 9999px, 9px, 0);
        transform: skew(0.55deg);
    }

    80% {
        clip: rect(83px, 9999px, 91px, 0);
        transform: skew(0.2deg);
    }

    85% {
        clip: rect(33px, 9999px, 40px, 0);
        transform: skew(0.91deg);
    }

    90% {
        clip: rect(53px, 9999px, 29px, 0);
        transform: skew(0.5deg);
    }

    95% {
        clip: rect(96px, 9999px, 10px, 0);
        transform: skew(0.57deg);
    }

    100% {
        clip: rect(31px, 9999px, 1px, 0);
        transform: skew(0.39deg);
    }
}

@keyframes glitch-anim2 {
    0% {
        clip: rect(37px, 9999px, 95px, 0);
        transform: skew(0.61deg);
    }

    5% {
        clip: rect(87px, 9999px, 3px, 0);
        transform: skew(0.82deg);
    }

    10% {
        clip: rect(17px, 9999px, 74px, 0);
        transform: skew(0.42deg);
    }

    15% {
        clip: rect(3px, 9999px, 44px, 0);
        transform: skew(0.04deg);
    }

    20% {
        clip: rect(16px, 9999px, 10px, 0);
        transform: skew(0.45deg);
    }

    25% {
        clip: rect(14px, 9999px, 72px, 0);
        transform: skew(0.01deg);
    }

    30% {
        clip: rect(85px, 9999px, 6px, 0);
        transform: skew(0.36deg);
    }

    35% {
        clip: rect(85px, 9999px, 2px, 0);
        transform: skew(0.29deg);
    }

    40% {
        clip: rect(3px, 9999px, 8px, 0);
        transform: skew(0.82deg);
    }

    45% {
        clip: rect(20px, 9999px, 26px, 0);
        transform: skew(0.93deg);
    }

    50% {
        clip: rect(96px, 9999px, 46px, 0);
        transform: skew(0.2deg);
    }

    55% {
        clip: rect(19px, 9999px, 51px, 0);
        transform: skew(0.58deg);
    }

    60% {
        clip: rect(96px, 9999px, 78px, 0);
        transform: skew(0.54deg);
    }

    65% {
        clip: rect(71px, 9999px, 45px, 0);
        transform: skew(0.97deg);
    }

    70% {
        clip: rect(50px, 9999px, 49px, 0);
        transform: skew(0.7deg);
    }

    75% {
        clip: rect(90px, 9999px, 6px, 0);
        transform: skew(0.42deg);
    }

    80% {
        clip: rect(69px, 9999px, 73px, 0);
        transform: skew(0.42deg);
    }

    85% {
        clip: rect(81px, 9999px, 8px, 0);
        transform: skew(0.6deg);
    }

    90% {
        clip: rect(3px, 9999px, 25px, 0);
        transform: skew(0.35deg);
    }

    95% {
        clip: rect(68px, 9999px, 11px, 0);
        transform: skew(0.54deg);
    }

    100% {
        clip: rect(64px, 9999px, 86px, 0);
        transform: skew(0.71deg);
    }
}

@keyframes glitch-skew {
    0% {
        transform: skew(-2deg);
    }

    10% {
        transform: skew(-4deg);
    }

    20% {
        transform: skew(-3deg);
    }

    30% {
        transform: skew(5deg);
    }

    40% {
        transform: skew(-3deg);
    }

    50% {
        transform: skew(-1deg);
    }

    60% {
        transform: skew(-4deg);
    }

    70% {
        transform: skew(2deg);
    }

    80% {
        transform: skew(1deg);
    }

    90% {
        transform: skew(5deg);
    }

    100% {
        transform: skew(-4deg);
    }
}
