/* --- ANIMATIONS --- */
.fade-in {
    animation: fadeIn 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards;
    opacity: 0;
    transform: translateY(20px);
}

@keyframes fadeIn {
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* Snow */
@keyframes fall {
    to {
        transform: translateY(100vh);
    }
}

.snowflake {
    position: absolute;
    color: rgba(255, 255, 255, 0.8);
    text-shadow: 0 0 2px rgba(0, 0, 0, 0.5);
    animation: fall linear infinite;
}

/* Glitch Effect */
#error-404 {
    height: 100vh;
    display: none;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    text-align: center;
    overflow: hidden;
    background: #000;
    position: relative;
    z-index: 5;
}

.glitch-text {
    font-family: 'Rajdhani', sans-serif;
    font-size: 8rem;
    color: var(--text-main);
    text-shadow: 0.05em 0 0 var(--glitch-color-1), -0.05em 0 0 var(--glitch-color-2);
    animation: glitch 1s linear infinite;
    z-index: 10;
}

@keyframes pulse {
    0% {
        box-shadow: 0 0 0 0 rgba(52, 152, 219, 0.4);
    }

    70% {
        box-shadow: 0 0 0 15px rgba(52, 152, 219, 0);
    }

    100% {
        box-shadow: 0 0 0 0 rgba(52, 152, 219, 0);
    }
}

.ip-badge {
    animation: pulse 2s infinite;
    border: 1px solid rgba(52, 152, 219, 0.3);
}

@keyframes glitch {
    0% {
        transform: translate(0);
        text-shadow: -2px 2px var(--glitch-color-1), 2px -2px var(--glitch-color-2);
    }

    25% {
        transform: translate(-2px, 2px);
    }

    50% {
        transform: translate(2px, -2px);
    }

    75% {
        transform: translate(-2px, -2px);
    }

    100% {
        transform: translate(0);
    }
}