/* Animations & Effects */

/* Spinner Animation */
@keyframes spin {
    0% {
        transform: rotate(0deg);
    }

    100% {
        transform: rotate(360deg);
    }
}

/* Skeleton Loading Animation */
@keyframes rvl-shimmer {
    0% {
        background-position: -468px 0;
    }

    100% {
        background-position: 468px 0;
    }
}

/* Button Animations */
@keyframes rvl-shine-anim {
    0% {
        left: -100%;
    }

    50%,
    100% {
        left: 100%;
    }
}

@keyframes rvl-pulse-anim {
    0% {
        transform: scale(1);
        box-shadow: 0 0 0 0 rgba(var(--rvl-btn-rgb, 40, 167, 69), 0.7);
    }

    70% {
        transform: scale(1.03);
        box-shadow: 0 0 0 10px rgba(var(--rvl-btn-rgb, 40, 167, 69), 0);
    }

    100% {
        transform: scale(1);
        box-shadow: 0 0 0 0 rgba(var(--rvl-btn-rgb, 40, 167, 69), 0);
    }
}

@keyframes rvl-glowing {
    0% {
        background-position: 0 0;
    }

    50% {
        background-position: 400% 0;
    }

    100% {
        background-position: 0 0;
    }
}

@keyframes rvl-neon-anim {
    from {
        box-shadow: 0 0 5px #007bff, 0 0 10px #007bff;
    }

    to {
        box-shadow: 0 0 10px #00c6ff, 0 0 20px #00c6ff;
    }
}

@keyframes rvl-heartbeat-anim {
    0% {
        transform: scale(1);
    }

    50% {
        transform: scale(1.03);
    }

    100% {
        transform: scale(1);
    }
}

/* Effect Classes */
.rvl-btn-effect-shine {
    position: relative;
    overflow: hidden;
}

.rvl-btn-effect-shine::after {
    content: '';
    position: absolute;
    top: 0;
    left: -100%;
    width: 100%;
    height: 100%;
    background: linear-gradient(to right, transparent, rgba(255, 255, 255, 0.4), transparent);
    transform: skewX(-25deg);
    animation: rvl-shine-anim 3s infinite;
}

.rvl-btn-effect-pulse {
    animation: rvl-pulse-anim 2s infinite;
}

.rvl-btn-effect-lift {
    transition: transform 0.2s, box-shadow 0.2s;
}

.rvl-btn-effect-lift:hover {
    transform: translateY(-3px);
    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
}

.rvl-btn-effect-border-flow {
    position: relative;
    overflow: hidden;
    z-index: 1;
}

.rvl-btn-effect-border-flow::before {
    content: '';
    position: absolute;
    top: -2px;
    left: -2px;
    right: -2px;
    bottom: -2px;
    background: linear-gradient(45deg, #ff0000, #ff7300, #fffb00, #48ff00, #00ffd5, #002bff, #7a00ff, #ff00c8, #ff0000);
    z-index: -1;
    background-size: 400%;
    border-radius: inherit;
    animation: rvl-glowing 20s linear infinite;
    opacity: 0;
    transition: opacity 0.3s ease-in-out;
}

.rvl-btn-effect-border-flow:hover::before {
    opacity: 1;
}

.rvl-btn-effect-neon {
    animation: rvl-neon-anim 1.5s ease-in-out infinite alternate;
}

.rvl-btn-effect-heartbeat {
    animation: rvl-heartbeat-anim 1.5s infinite;
}