/*! RM Animate presets — custom-property parameter sets. One class per preset,
    bound in both contexts: .rm-anim (RM controls path) and .animated (native dropdown path). */

/* -- parameter sets (from the Registry table, verbatim) ------------------- */
.rm-fade { }
.rm-fade-up { --rm-y: var(--rm-distance, 2.5rem); }
.rm-fade-down { --rm-y: calc(-1 * var(--rm-distance, 2.5rem)); }
.rm-fade-left { --rm-x: calc(-1 * var(--rm-distance, 2.5rem)); }
.rm-fade-right { --rm-x: var(--rm-distance, 2.5rem); }
.rm-rise { --rm-y: var(--rm-distance, 4.5rem); --rm-scale: .985; --rm-ease: var(--rm-ease-out-expo); }
.rm-rise-soft { --rm-y: var(--rm-distance, 2rem); --rm-duration: 1.2s; }
.rm-zoom-in { --rm-scale: .94; }
.rm-zoom-out { --rm-scale: 1.06; }
.rm-zoom-rise { --rm-scale: .96; --rm-y: var(--rm-distance, 2rem); }
.rm-reveal-up { --rm-clip: 0 0 100% 0; --rm-y: 1.5rem; --rm-kf: rm-in-clip; }
.rm-reveal-down { --rm-clip: 100% 0 0 0; --rm-y: -1.5rem; --rm-kf: rm-in-clip; }
.rm-reveal-left { --rm-clip: 0 100% 0 0; --rm-x: 1.5rem; --rm-kf: rm-in-clip; }
.rm-reveal-right { --rm-clip: 0 0 0 100%; --rm-x: -1.5rem; --rm-kf: rm-in-clip; }
.rm-blur-in { --rm-from-f: blur(var(--rm-blur, 8px)); }
.rm-blur-rise { --rm-from-f: blur(var(--rm-blur, 6px)); --rm-y: var(--rm-distance, 2rem); }
.rm-slide-up { --rm-y: var(--rm-distance, 100%); }
.rm-slide-down { --rm-y: calc(-1 * var(--rm-distance, 100%)); }
.rm-slide-left { --rm-x: calc(-1 * var(--rm-distance, 100%)); }
.rm-slide-right { --rm-x: var(--rm-distance, 100%); }
.rm-skew-up { --rm-y: var(--rm-distance, 3rem); --rm-skew: 3deg; }
.rm-rotate-in { --rm-rot: -6deg; --rm-y: 1.5rem; --rm-scale: .98; }
.rm-pop { --rm-scale: .5; --rm-ease: var(--rm-ease-spring); }

/* -- native-dropdown binding (Elementor's runtime adds .animated + slug) --- */
.animated.rm-fade, .animated.rm-fade-up, .animated.rm-fade-down, .animated.rm-fade-left,
.animated.rm-fade-right, .animated.rm-rise, .animated.rm-rise-soft, .animated.rm-zoom-in,
.animated.rm-zoom-out, .animated.rm-zoom-rise, .animated.rm-reveal-up, .animated.rm-reveal-down,
.animated.rm-reveal-left, .animated.rm-reveal-right, .animated.rm-blur-in, .animated.rm-blur-rise,
.animated.rm-slide-up, .animated.rm-slide-down, .animated.rm-slide-left, .animated.rm-slide-right,
.animated.rm-skew-up, .animated.rm-rotate-in, .animated.rm-pop {
  animation-name: var(--rm-kf, rm-in);
  animation-duration: var(--rm-duration, 0.9s);
  animation-timing-function: var(--rm-ease, var(--rm-ease-out-quint));
  animation-fill-mode: both;
}

/* -- path separation: one animation system per element -------------------- */
/* The two paths share preset classes but not lifecycles: the native-dropdown path
   is CSS-driven (Elementor stamps .animated), the controls path is Anime.js-driven
   and carries .rm-anim[data-rm]. If Elementor's GlobalHandler ever stamps .animated
   on a runtime-owned element anyway, the binding above would replay the very same
   --rm-* keyframes a second time — identical motion, arriving whenever that handler
   initialises. Server-side neutralisation (Controls::before_render +
   Controls::scrub_native_animation) is the fix; this is the standing guarantee that
   the CSS lifecycle can never start on an element Anime.js owns.
   Specificity 0-3-0 beats the 0-2-0 binding above without !important, and stays
   below the inline gate's failsafe so a stalled runtime still fails open. */
.rm-anim[data-rm].animated { animation-name: none; }
