/* =========================================================
   ANIMACIONES Y ESTADOS DE REVELADO
========================================================= */

/* Evita mostrar textos antes de que GSAP los prepare */

.js-animation-ready [data-reveal-title],
.js-animation-ready [data-reveal],
.js-animation-ready [data-reveal-card] {
    visibility: hidden;
}


/* Cada línea generada por SplitText utiliza máscara */

.reveal-line-mask {
    display: block;
    overflow: hidden;
    padding-bottom: 0.08em;
    margin-bottom: -0.08em;
}

.reveal-line {
    display: block;
    transform-origin: left bottom;
    will-change: transform, opacity, filter;
}


/* Palabras del texto */

.reveal-word {
    display: inline-block;
    will-change: transform, opacity, filter;
}


/* Entrada alternativa sin SplitText */

[data-reveal] {
    will-change: transform, opacity, filter;
}


/* Línea decorativa animada */

.animated-heading-line {
    position: relative;
}

    .animated-heading-line::after {
        content: "";
        position: absolute;
        left: 0;
        bottom: -10px;
        width: 100%;
        height: 2px;
        background: linear-gradient( 90deg, #ef252d, #4db8ff, transparent );
        transform: scaleX(0);
        transform-origin: left;
        transition: transform 0.7s cubic-bezier(.16, 1, .3, 1);
    }

    .animated-heading-line.is-visible::after {
        transform: scaleX(1);
    }


/* Resplandor lento de fondos */

.ambient-gradient {
    animation: ambientGradientMovement 9s ease-in-out infinite alternate;
}

@keyframes ambientGradientMovement {
    0% {
        background-position: 0% 50%;
    }

    100% {
        background-position: 100% 50%;
    }
}


/* Pulso de iconos */

.icon-pulse-soft {
    animation: iconPulseSoft 2.8s ease-in-out infinite;
}

@keyframes iconPulseSoft {
    0%, 100% {
        transform: scale(1);
        filter: brightness(1);
    }

    50% {
        transform: scale(1.06);
        filter: brightness(1.2);
    }
}


/* Línea luminosa viajando */

.route-light {
    position: relative;
    overflow: hidden;
}

    .route-light::after {
        content: "";
        position: absolute;
        top: 0;
        bottom: 0;
        left: -40%;
        width: 35%;
        background: linear-gradient( 90deg, transparent, rgba(77, 184, 255, 0.5), rgba(239, 37, 45, 0.36), transparent );
        transform: skewX(-20deg);
        animation: routeLightTravel 4.4s ease-in-out infinite;
    }

@keyframes routeLightTravel {
    0% {
        left: -45%;
        opacity: 0;
    }

    20% {
        opacity: 1;
    }

    70% {
        opacity: 1;
    }

    100% {
        left: 115%;
        opacity: 0;
    }
}


/* Estados del preloader */

body.preloader-active {
    overflow: hidden;
}

body.preloader-complete .lam-preloader {
    pointer-events: none;
}


/* Accesibilidad */

@media (prefers-reduced-motion: reduce) {
    .ambient-gradient,
    .icon-pulse-soft,
    .route-light::after {
        animation: none;
    }

    .js-animation-ready [data-reveal-title],
    .js-animation-ready [data-reveal],
    .js-animation-ready [data-reveal-card] {
        visibility: visible;
    }
}
