/*
  Herrera Inmobiliaria — Sistema de movimiento (inspirado en AnimatiSS, adaptado a mano)
  animations.css: SOLO tokens, clase base, keyframes, stagger y utilidades de
  movimiento. No contiene layout ni estilos de componentes — esos viven en
  layout.css / components.css / home.css. Sin dependencias externas, sin CDN.
*/

:root {
    --motion-duration-fast: 500ms;
    --motion-duration-base: 750ms;
    --motion-duration-slow: 900ms;
    --motion-ease: cubic-bezier(0.22, 1, 0.36, 1);
    --motion-distance-y: 64px;
    --motion-distance-x: 72px;
    --motion-stagger-scale: 1;
}

@media (max-width: 599px) {
    :root {
        --motion-distance-y: 44px;
        --motion-distance-x: 36px;
        --motion-stagger-scale: 0.5;
    }
}

/* ---------- Base: visible por defecto ----------
   .motion-item es siempre visible. Solo se oculta cuando <html> tiene
   .motion-enabled (agregada por motion.js únicamente si el observer va a
   funcionar de verdad) y se revela al agregarse .is-animated. Sin JS, o si
   motion.js no llega a correr, el contenido nunca queda oculto: esto es la
   red de seguridad, no el <noscript>. */
.motion-item {
    opacity: 1;
}

.motion-enabled .motion-item {
    opacity: 0;
}

.motion-enabled .motion-item.is-animated {
    opacity: 1;
}

/* ---------- Keyframes (carácter tomado de AnimatiSS, valores propios) ---------- */
@keyframes herrera-slide-bottom {
    0% { opacity: 0; transform: translateY(calc(-1 * var(--motion-distance-y))); }
    100% { opacity: 1; transform: translateY(0); }
}

@keyframes herrera-slide-left {
    0% { opacity: 0; transform: translateX(var(--motion-distance-x)); }
    100% { opacity: 1; transform: translateX(0); }
}

@keyframes herrera-slide-right {
    0% { opacity: 0; transform: translateX(calc(-1 * var(--motion-distance-x))); }
    100% { opacity: 1; transform: translateX(0); }
}

@keyframes herrera-scale-up-bottom {
    0% { opacity: 0; transform: translateY(calc(var(--motion-distance-y) * 0.875)) scale(0.9); transform-origin: bottom center; }
    100% { opacity: 1; transform: translateY(0) scale(1); transform-origin: bottom center; }
}

@keyframes herrera-tracking-in-expand {
    0% { opacity: 0; letter-spacing: -0.35em; }
    40% { opacity: 0.6; }
    100% { opacity: 1; letter-spacing: normal; }
}

/* ---------- Variantes ----------
   El delay se resuelve dentro del propio shorthand `animation` (no como
   declaración aparte) para que no quede pisado por animation-name. Un mismo
   --motion-delay sirve tanto para las clases .motion-delay-N (secuencias de
   texto) como para el valor inline usado en grillas de cards; se multiplica
   por --motion-stagger-scale para que el stagger se reduzca en mobile. */
.motion-enabled .motion-slide-bottom.is-animated {
    animation: herrera-slide-bottom var(--motion-duration-base) var(--motion-ease)
        calc(var(--motion-delay, 0ms) * var(--motion-stagger-scale)) both;
}

.motion-enabled .motion-slide-left.is-animated {
    animation: herrera-slide-left var(--motion-duration-base) var(--motion-ease)
        calc(var(--motion-delay, 0ms) * var(--motion-stagger-scale)) both;
}

.motion-enabled .motion-slide-right.is-animated {
    animation: herrera-slide-right var(--motion-duration-base) var(--motion-ease)
        calc(var(--motion-delay, 0ms) * var(--motion-stagger-scale)) both;
}

.motion-enabled .motion-scale-up-bottom.is-animated {
    animation: herrera-scale-up-bottom var(--motion-duration-fast) var(--motion-ease)
        calc(var(--motion-delay, 0ms) * var(--motion-stagger-scale)) both;
}

.motion-enabled .motion-tracking-in-expand.is-animated {
    animation: herrera-tracking-in-expand var(--motion-duration-slow) var(--motion-ease)
        calc(var(--motion-delay, 0ms) * var(--motion-stagger-scale)) both;
}

/* ---------- Stagger fijo (secuencias de texto: hero, servicios) ---------- */
.motion-delay-1 { --motion-delay: 100ms; }
.motion-delay-2 { --motion-delay: 200ms; }
.motion-delay-3 { --motion-delay: 300ms; }
.motion-delay-4 { --motion-delay: 400ms; }

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
    .motion-enabled .motion-item {
        opacity: 1;
        transform: none;
        animation: none;
        transition: none;
    }
}
