/* ==========================================================================
   1. ANIMACIONES DE ENTRADA (HERO BANNER)
   ========================================================================== */
@keyframes fadeInUp {
    from {
        opacity: 0;
        transform: translateY(30px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* Clase para aplicar al título, subtítulo o botones del Hero */
.animate-fade-up {
    animation: fadeInUp 0.8s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}

/* Delays para una entrada escalonada en el Hero */
.delay-100 { animation-delay: 0.1s; }
.delay-200 { animation-delay: 0.2s; }
.delay-300 { animation-delay: 0.3s; }


/* ==========================================================================
   2. LATIDO CONTINUO (BOTÓN DE WHATSAPP)
   ========================================================================== */
@keyframes whatsappPulse {
    0% {
        transform: scale(1);
        box-shadow: 0 0 0 0 rgba(37, 211, 102, 0.7);
    }
    70% {
        transform: scale(1.05);
        box-shadow: 0 0 0 15px rgba(37, 211, 102, 0);
    }
    100% {
        transform: scale(1);
        box-shadow: 0 0 0 0 rgba(37, 211, 102, 0);
    }
}

.animate-whatsapp-pulse {
    animation: whatsappPulse 2s infinite;
}


/* ==========================================================================
   3. EFECTOS AL HACER SCROLL (INTERSECTION OBSERVER)
   ========================================================================== */
/* Estado inicial de los elementos ocultos */
.reveal {
    opacity: 0;
    transform: translateY(40px);
    transition: opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1), 
                transform 0.8s cubic-bezier(0.16, 1, 0.3, 1);
    will-change: transform, opacity;
}

/* Estado cuando entran en pantalla */
.reveal.active {
    opacity: 1;
    transform: translateY(0);
}

/* Variación: Revelar desde la izquierda o derecha */
.reveal-left {
    opacity: 0;
    transform: translateX(-40px);
    transition: opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1), 
                transform 0.8s cubic-bezier(0.16, 1, 0.3, 1);
}
.reveal-left.active {
    opacity: 1;
    transform: translateX(0);
}

.reveal-right {
    opacity: 0;
    transform: translateX(40px);
    transition: opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1), 
                transform 0.8s cubic-bezier(0.16, 1, 0.3, 1);
}
.reveal-right.active {
    opacity: 1;
    transform: translateX(0);
}

.slide {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    /* Ajusta los segundos (0.8s) si quieres que pase más rápido o más lento */
    transition: transform 0.8s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.8s ease-in-out;
}

/* Estado 1: Slide Activo (Visible en pantalla) */
.slide-active {
    transform: translateX(0);
    opacity: 1;
    z-index: 20;
}

/* Estado 2: Slide Siguiente (Espera a la derecha) */
.slide-next {
    transform: translateX(100%);
    opacity: 0;
    z-index: 10;
}

/* Estado 3: Slide Anterior (Se fue hacia la izquierda) */
.slide-prev {
    transform: translateX(-100%);
    opacity: 0;
    z-index: 10;
}

/* ==========================================================================
   EFECTO DE FRANJA REVELADORA EN EL TÍTULO
   ========================================================================== */
.franja-animada {
    width: 0%;
    /* El 0.3s al final es un pequeño retraso para que la veas crecer al hacer scroll */
    transition: width 1.2s cubic-bezier(0.16, 1, 0.3, 1) 0.3s; 
}

.reveal.active .franja-animada {
    width: 100%;
}