/* Explain: Promotional banner animations and effects. */
/* Animaciones del banner de promociones (Hack Ticket) */

.promo-animated-gradient {
    background-size: 300% 300%;
    animation: promoGradientShift 9s ease infinite;
}

@keyframes promoGradientShift {
    0% { background-position: 0% 50%; }
    50% { background-position: 100% 50%; }
    100% { background-position: 0% 50%; }
}

.promo-glow-border {
    animation: promoBorderGlow 3s ease-in-out infinite;
}

@keyframes promoBorderGlow {
    0%, 100% { box-shadow: 0 0 28px rgba(255, 87, 34, 0.35); }
    50% { box-shadow: 0 0 55px rgba(255, 87, 34, 0.75); }
}

.promo-float {
    animation: promoFloat 6s ease-in-out infinite;
}

@keyframes promoFloat {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-14px); }
}

.promo-shine {
    animation: promoShine 4.5s ease-in-out infinite;
}

@keyframes promoShine {
    0% { transform: translateX(-130%) skewX(-20deg); }
    60%, 100% { transform: translateX(320%) skewX(-20deg); }
}

.promo-badge {
    animation: promoBadgeSpin 4.5s ease-in-out infinite;
}

@keyframes promoBadgeSpin {
    0%, 100% { transform: rotate(-4deg) scale(1); }
    50% { transform: rotate(4deg) scale(1.05); }
}

.promo-text-glow {
    animation: promoTextGlow 2.6s ease-in-out infinite;
}

@keyframes promoTextGlow {
    0%, 100% { text-shadow: 0 0 12px rgba(255, 87, 34, 0.45); }
    50% { text-shadow: 0 0 26px rgba(255, 215, 0, 0.75); }
}

.promo-cta-pulse {
    animation: promoCtaPulse 2.2s ease-in-out infinite;
}

@keyframes promoCtaPulse {
    0%, 100% { box-shadow: 0 0 18px rgba(255, 215, 0, 0.45); }
    50% { box-shadow: 0 0 42px rgba(255, 215, 0, 0.85); }
}

@media (prefers-reduced-motion: reduce) {
    .promo-animated-gradient,
    .promo-glow-border,
    .promo-float,
    .promo-shine,
    .promo-badge,
    .promo-text-glow,
    .promo-cta-pulse {
        animation: none !important;
    }
}