@keyframes slideDown {
    0% {
        top: -12px;
        opacity: 0;
    }

    20% {
        opacity: 1;
    }

    80% {
        opacity: 1;
    }

    100% {
        top: 100%;
        opacity: 0;
    }
}

@keyframes slideUp {
    0% {
        bottom: -12px;
        opacity: 0;
    }

    20% {
        opacity: 1;
    }

    80% {
        opacity: 1;
    }

    100% {
        bottom: 100%;
        opacity: 0;
    }
}

@keyframes shimmer {
    0% {
        transform: translateX(-100%) skewX(-12deg);
    }

    100% {
        transform: translateX(200%) skewX(-12deg);
    }
}

@keyframes textShimmer {
    0% {
        background-position: -200% 0;
    }

    100% {
        background-position: 200% 0;
    }
}

@keyframes pulse {
    0% {
        opacity: 0.3;
        transform: translateX(-50%) scale(0.8);
    }

    50% {
        opacity: 1;
        transform: translateX(-50%) scale(1.2);
    }

    100% {
        opacity: 0.3;
        transform: translateX(-50%) scale(0.8);
    }
}

@keyframes slideRight {
    0% {
        left: -6px;
        opacity: 0;
    }

    20% {
        opacity: 1;
    }

    80% {
        opacity: 1;
    }

    100% {
        left: 100%;
        opacity: 0;
    }
}

@keyframes unlockKey {
    0% {
        transform: rotate(0deg) scale(1);
    }

    25% {
        transform: rotate(-5deg) scale(1.05);
    }

    50% {
        transform: rotate(0deg) scale(1);
    }

    75% {
        transform: rotate(5deg) scale(1.05);
    }

    100% {
        transform: rotate(0deg) scale(1);
    }
}

@keyframes unlockGlow {
    0% {
        box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.05);
    }

    50% {
        box-shadow: 0 0 0 1px rgba(34, 197, 94, 0.02);
    }

    100% {
        box-shadow: 0 0 0 0 rgba(34, 197, 94, 0);
    }
}

@keyframes connectingKey {
    0% {
        transform: rotate(0deg) scale(1);
    }

    25% {
        transform: rotate(-3deg) scale(1.02);
    }

    50% {
        transform: rotate(0deg) scale(1);
    }

    75% {
        transform: rotate(3deg) scale(1.02);
    }

    100% {
        transform: rotate(0deg) scale(1);
    }
}

@keyframes connectingGlow {
    0% {
        box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.4);
    }

    50% {
        box-shadow: 0 0 0 6px rgba(0, 0, 0, 0.1);
    }

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

@keyframes connectingGlowDark {
    0% {
        box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.4);
    }

    50% {
        box-shadow: 0 0 0 6px rgba(255, 255, 255, 0.1);
    }

    100% {
        box-shadow: 0 0 0 0 rgba(255, 255, 255, 0);
    }
}

@keyframes connectingGlowBlue {
    0% {
        box-shadow: 0 0 0 0 rgba(59, 130, 246, 0.4);
    }

    50% {
        box-shadow: 0 0 0 6px rgba(59, 130, 246, 0.1);
    }

    100% {
        box-shadow: 0 0 0 0 rgba(59, 130, 246, 0);
    }
}

@keyframes packetTravel {
    0% {
        left: -12px;
        opacity: 0;
        transform: scale(0.8);
    }

    5% {
        opacity: 1;
        transform: scale(1);
    }

    20% {
        transform: scale(1.1);
    }

    30% {
        transform: scale(1);
    }

    45% {
        left: calc(100% + 12px);
        transform: scale(0.9);
    }

    50% {
        transform: scale(1);
    }

    70% {
        transform: scale(1.1);
    }

    80% {
        transform: scale(1);
    }

    95% {
        left: -12px;
        opacity: 1;
        transform: scale(0.8);
    }

    100% {
        opacity: 0;
        transform: scale(0.6);
    }
}

@keyframes packetTravel2 {
    0% {
        left: -12px;
        opacity: 0;
        transform: scale(0.8);
    }

    8% {
        opacity: 1;
        transform: scale(1);
    }

    25% {
        transform: scale(1.1);
    }

    35% {
        transform: scale(1);
    }

    48% {
        left: calc(100% + 12px);
        transform: scale(0.9);
    }

    52% {
        transform: scale(1);
    }

    72% {
        transform: scale(1.1);
    }

    82% {
        transform: scale(1);
    }

    97% {
        left: -12px;
        opacity: 1;
        transform: scale(0.8);
    }

    100% {
        opacity: 0;
        transform: scale(0.6);
    }
}

@keyframes packetTravel3 {
    0% {
        left: -12px;
        opacity: 0;
        transform: scale(0.8);
    }

    12% {
        opacity: 1;
        transform: scale(1);
    }

    30% {
        transform: scale(1.1);
    }

    40% {
        transform: scale(1);
    }

    52% {
        left: calc(100% + 12px);
        transform: scale(0.9);
    }

    56% {
        transform: scale(1);
    }

    76% {
        transform: scale(1.1);
    }

    86% {
        transform: scale(1);
    }

    98% {
        left: -12px;
        opacity: 1;
        transform: scale(0.8);
    }

    100% {
        opacity: 0;
        transform: scale(0.6);
    }
}

@keyframes packetTrail {
    0% {
        opacity: 0;
        transform: scale(0.5);
    }

    20% {
        opacity: 0.6;
        transform: scale(1);
    }

    100% {
        opacity: 0;
        transform: scale(1.5);
    }
}

@keyframes iconPing {
    0% {
        transform: scale(1);
        box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.3);
    }

    50% {
        transform: scale(1.1);
        box-shadow: 0 0 0 5px rgba(34, 197, 94, 0.15);
    }

    100% {
        transform: scale(1);
        box-shadow: 0 0 0 0 rgba(34, 197, 94, 0);
    }
}

@keyframes shimmerIntensify {
    0% {
        background-position: -200% 0;
        filter: brightness(1);
    }

    25% {
        filter: brightness(1.3);
    }

    50% {
        background-position: 200% 0;
        filter: brightness(1);
    }

    75% {
        filter: brightness(1.3);
    }

    100% {
        background-position: -200% 0;
        filter: brightness(1);
    }
}

@keyframes connectionBeam {
    0% {
        opacity: 0.1;
        transform: scaleX(0);
    }

    10% {
        opacity: 0.3;
        transform: scaleX(1);
    }

    90% {
        opacity: 0.3;
        transform: scaleX(1);
    }

    100% {
        opacity: 0.1;
        transform: scaleX(1);
    }
}

@keyframes reactivePing {
    0% {
        transform: scale(1);
        box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.3);
    }

    50% {
        transform: scale(1.15);
        box-shadow: 0 0 0 6px rgba(34, 197, 94, 0.15);
    }

    100% {
        transform: scale(1);
        box-shadow: 0 0 0 0 rgba(34, 197, 94, 0);
    }
}

@keyframes subtleGlow {
    0% {
        box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.2);
    }

    50% {
        box-shadow: 0 0 0 4px rgba(34, 197, 94, 0.1);
    }

    100% {
        box-shadow: 0 0 0 0 rgba(34, 197, 94, 0);
    }
}

@keyframes beamEndpointPulse {
    0% {
        opacity: 0.3;
        box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.1);
    }

    25% {
        opacity: 0.5;
        box-shadow: 0 0 0 2px rgba(34, 197, 94, 0.2);
    }

    50% {
        opacity: 0.3;
        box-shadow: 0 0 0 0 rgba(34, 197, 94, 0);
    }

    75% {
        opacity: 0.5;
        box-shadow: 0 0 0 2px rgba(34, 197, 94, 0.2);
    }

    100% {
        opacity: 0.3;
        box-shadow: 0 0 0 0 rgba(34, 197, 94, 0);
    }
}
