/**
 * FT Effects — libreria estandar de revelado (aparecer / zoom / slide).
 *
 * Uso en HTML:
 *   data-ft-reveal              → fade-up + zoom suave (default)
 *   data-ft-fx="fade-up"        → sube y aparece
 *   data-ft-fx="fade"           → solo opacity
 *   data-ft-fx="zoom"           → zoom-in
 *   data-ft-fx="zoom-out"       → desde mas grande
 *   data-ft-fx="fade-left"      → entra desde la izquierda
 *   data-ft-fx="fade-right"     → entra desde la derecha
 *   data-ft-fx-delay="120"      → delay en ms
 *   data-ft-fx-stagger="70"     → en el padre: atrasar hijos con data-ft-reveal/fx
 *
 * JS:
 *   FTEffects.reveal(rootOrSelector)
 *   FTEffects.refresh()
 */

[data-ft-fx],
[data-ft-reveal] {
  --ft-fx-duration: 0.65s;
  --ft-fx-ease: cubic-bezier(0.22, 1, 0.36, 1);
  --ft-fx-from: translateY(1.15rem) scale(0.96);
  transition:
    opacity var(--ft-fx-duration) var(--ft-fx-ease),
    transform var(--ft-fx-duration) var(--ft-fx-ease),
    filter var(--ft-fx-duration) var(--ft-fx-ease);
}

[data-ft-fx="fade"] {
  --ft-fx-from: none;
}

[data-ft-fx="fade-up"] {
  --ft-fx-from: translateY(1.35rem);
}

[data-ft-fx="fade-down"] {
  --ft-fx-from: translateY(-1.1rem);
}

[data-ft-fx="fade-left"] {
  --ft-fx-from: translateX(-1.6rem);
}

[data-ft-fx="fade-right"] {
  --ft-fx-from: translateX(1.6rem);
}

[data-ft-fx="zoom"],
[data-ft-fx="zoom-in"] {
  --ft-fx-from: scale(0.88);
}

[data-ft-fx="zoom-out"] {
  --ft-fx-from: scale(1.08);
}

[data-ft-fx="rise-zoom"] {
  --ft-fx-from: translateY(1.25rem) scale(0.92);
}

[data-ft-fx]:not(.is-visible),
[data-ft-reveal]:not(.is-visible) {
  opacity: 0 !important;
  transform: var(--ft-fx-from) !important;
  pointer-events: none;
}

[data-ft-fx].is-visible,
[data-ft-reveal].is-visible {
  opacity: 1;
  pointer-events: auto;
}

/* Contenedores stagger: no animar el padre, solo hijos marcados */
[data-ft-fx-stagger]:not([data-ft-fx]):not([data-ft-reveal]) {
  opacity: 1 !important;
  transform: none !important;
  pointer-events: auto;
  transition: none;
}

@media (prefers-reduced-motion: reduce) {
  [data-ft-fx],
  [data-ft-reveal],
  [data-ft-fx-stagger] > [data-ft-fx],
  [data-ft-fx-stagger] > [data-ft-reveal] {
    --ft-fx-duration: 0.01ms !important;
    transition: none !important;
    opacity: 1 !important;
    transform: none !important;
    pointer-events: auto !important;
    filter: none !important;
  }
}
