/* Les Fleurs · movimiento de nivel "sobrio" (estandares v1.1 §6)
   - Solo transform y opacity. Las fotos de flores nunca se escalan ni se recortan.
   - El estado oculto solo existe con html.lf-motion (lo pone un script en <head> si no hay reduced-motion).
   - Red de seguridad: si el JS no llega a revelar, todo aparece a los 2,5 s. */

html.lf-motion [data-lf-reveal]:not(.is-in),
html.lf-motion [data-lf-reveal-group]:not(.is-in)>*{opacity:0;transform:translateY(var(--lf-reveal-y));animation:lf-failsafe 0s linear 2.5s forwards}
[data-lf-reveal],[data-lf-reveal-group]>*{transition:opacity var(--lf-dur-4) var(--lf-ease-silk),transform var(--lf-dur-4) var(--lf-ease-silk)}
[data-lf-reveal-group]>*{transition-delay:calc(var(--lf-i,0) * var(--lf-stagger))}
@keyframes lf-failsafe{to{opacity:1;transform:none}}

/* Entrada del hero: el texto en cascada al cargar; la foto (LCP) no se anima nunca */
html.lf-motion [data-lf-hero]>*{animation:lf-hero-in var(--lf-dur-4) var(--lf-ease-silk) both;animation-delay:calc(var(--lf-i,0) * var(--lf-stagger))}
@keyframes lf-hero-in{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}

/* Enlaces de texto: subrayado que se dibuja */
.lf-draw{background:linear-gradient(currentColor,currentColor) 0 100%/0 1px no-repeat;transition:background-size var(--lf-dur-2) var(--lf-ease-out)}
.lf-draw:hover,.lf-draw:focus-visible{background-size:100% 1px}

/* Usuarios que piden menos movimiento: estado final, sin transiciones ni animaciones */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:0s!important;animation-delay:0s!important;transition-duration:0s!important;transition-delay:0s!important;scroll-behavior:auto!important}
}
