/* HS Motion for Elementor 1.8.0 */

/* GSAP owns these properties. Elementor/theme CSS transitions must never interpolate them. */
.hsm-anim,
.hsm-motion-target,
.hsm-anim-scrub,
.hsm-parallax,
.hsm-parallax-media,
.hsm-text-reveal,
.hsm-text-target,
.hsm-text-gradient,
.hsm-text-unit,
.hsm-fluid-type,
.egs-anim-left,
.egs-anim-right,
.egs-anim-up,
.egs-anim-down,
.egs-anim-fade,
.egs-bg-parallax {
    transition: none !important;
}

html.hsm-loading .hsm-anim,html.hsm-loading .egs-anim-left,html.hsm-loading .egs-anim-right,html.hsm-loading .egs-anim-up,html.hsm-loading .egs-anim-down,html.hsm-loading .egs-anim-fade{visibility:hidden!important}
.hsm-parallax,.egs-bg-parallax{overflow:hidden!important}
.hsm-parallax>.hsm-parallax-media,.egs-bg-parallax>.hsm-parallax-media{position:absolute;inset:0;pointer-events:none;background-repeat:no-repeat;background-position:center center;background-size:cover;border-radius:inherit;transform-origin:50% 50%;backface-visibility:hidden;will-change:auto}
.hsm-parallax.hsm-parallax-ready,.egs-bg-parallax.hsm-parallax-ready{background-image:none!important}
.hsm-parallax>.elementor-element:not(.elementor-background-overlay):not(.hsm-parallax-media),.egs-bg-parallax>.elementor-element:not(.elementor-background-overlay):not(.hsm-parallax-media){z-index:2}
.hsm-fluid-target-heading .elementor-heading-title,.hsm-fluid-target-heading h1,.hsm-fluid-target-heading h2,.hsm-fluid-target-heading h3,.hsm-fluid-target-heading h4,.hsm-fluid-target-heading h5,.hsm-fluid-target-heading h6{font-size:var(--hsm-fluid-size)!important}
.hsm-fluid-target-text>.elementor-widget-container,.hsm-fluid-target-text>.elementor-widget-container p,.hsm-fluid-target-text>.elementor-widget-container li{font-size:var(--hsm-fluid-size)!important}.hsm-fluid-target-text>.elementor-widget-container :is(a,span,strong,em,b,i){font-size:inherit!important}.hsm-fluid-target-all :is(h1,h2,h3,h4,h5,h6,p,li){font-size:var(--hsm-fluid-size)!important}.hsm-fluid-target-all :is(h1,h2,h3,h4,h5,h6,p,li) :is(a,span,strong,em,b,i){font-size:inherit!important}.hsm-fluid-target-wrapper{font-size:var(--hsm-fluid-size)!important}
/* Text Reveal */
.hsm-text-gradient{--hsm-text-progress:0%;background-image:linear-gradient(90deg,var(--hsm-text-end-color) 0%,var(--hsm-text-end-color) var(--hsm-text-progress),var(--hsm-text-start-color) var(--hsm-text-progress),var(--hsm-text-start-color) 100%)!important;background-clip:text!important;-webkit-background-clip:text!important;color:transparent!important;-webkit-text-fill-color:transparent!important;background-repeat:no-repeat!important;background-size:100% 100%!important}
.hsm-text-unit{display:inline;white-space:pre-wrap}.hsm-text-word{white-space:pre-wrap}.hsm-text-char{white-space:pre}
@media(prefers-reduced-motion:reduce){.hsm-parallax>.hsm-parallax-media,.egs-bg-parallax>.hsm-parallax-media{position:absolute;inset:0;pointer-events:none;background-repeat:no-repeat;background-position:center center;background-size:cover;border-radius:inherit;transform-origin:50% 50%;backface-visibility:hidden;will-change:auto}.hsm-text-gradient{background:none!important;color:inherit!important;-webkit-text-fill-color:currentColor!important}}

[data-hsm-editor-clamp="1"]{transition:none!important}

.hsm-atomic-linked, .hsm-atomic-linked * { transition: none !important; }


/* HS Motion 1.5.2 — unified Clamp engine.
   The wrapper owns the formula; only the intended real text node receives it. */
.hsm-fluid-type.hsm-fluid-target-wrapper {
	font-size: var(--hsm-fluid-size) !important;
}
.hsm-fluid-type.hsm-fluid-target-heading .elementor-heading-title,
.hsm-fluid-type.hsm-fluid-target-heading h1,
.hsm-fluid-type.hsm-fluid-target-heading h2,
.hsm-fluid-type.hsm-fluid-target-heading h3,
.hsm-fluid-type.hsm-fluid-target-heading h4,
.hsm-fluid-type.hsm-fluid-target-heading h5,
.hsm-fluid-type.hsm-fluid-target-heading h6 {
	font-size: var(--hsm-fluid-size) !important;
}
.hsm-fluid-type.hsm-fluid-target-text .elementor-widget-container p,
.hsm-fluid-type.hsm-fluid-target-text .elementor-widget-container li,
.hsm-fluid-type.hsm-fluid-target-text p,
.hsm-fluid-type.hsm-fluid-target-text li {
	font-size: var(--hsm-fluid-size) !important;
}
.hsm-fluid-type.hsm-fluid-target-all h1,
.hsm-fluid-type.hsm-fluid-target-all h2,
.hsm-fluid-type.hsm-fluid-target-all h3,
.hsm-fluid-type.hsm-fluid-target-all h4,
.hsm-fluid-type.hsm-fluid-target-all h5,
.hsm-fluid-type.hsm-fluid-target-all h6,
.hsm-fluid-type.hsm-fluid-target-all p,
.hsm-fluid-type.hsm-fluid-target-all li {
	font-size: var(--hsm-fluid-size) !important;
}
/* Auto: classic Heading + common Atomic heading/text output. */
.hsm-fluid-type.hsm-fluid-target-auto .elementor-heading-title,
.hsm-fluid-type.hsm-fluid-target-auto > h1,
.hsm-fluid-type.hsm-fluid-target-auto > h2,
.hsm-fluid-type.hsm-fluid-target-auto > h3,
.hsm-fluid-type.hsm-fluid-target-auto > h4,
.hsm-fluid-type.hsm-fluid-target-auto > h5,
.hsm-fluid-type.hsm-fluid-target-auto > h6,
.hsm-fluid-type.hsm-fluid-target-auto > p,
.hsm-fluid-type.hsm-fluid-target-auto .elementor-widget-container > p {
	font-size: var(--hsm-fluid-size) !important;
}


/* HS Motion 1.5.3 — actual detected text carriers.
   Inline !important is the primary enforcement; these rules are the fallback. */
.hsm-fluid-node {
	font-size: var(--hsm-fluid-size) !important;
	transition: none !important;
}
.hsm-fluid-node .hsm-fluid-child,
.hsm-fluid-child {
	font-size: inherit !important;
	transition: none !important;
}

/* Rich text formatting must never reintroduce a fixed Elementor font-size. */
.hsm-fluid-node > span,
.hsm-fluid-node > strong,
.hsm-fluid-node > b,
.hsm-fluid-node > em,
.hsm-fluid-node > i,
.hsm-fluid-node > a,
.hsm-fluid-node > small,
.hsm-fluid-node > mark,
.hsm-fluid-node > code {
	font-size: inherit !important;
}


/* Final text shadow is controlled by HS Motion/GSAP, never Elementor transitions. */
.hsm-text-reveal,
.hsm-text-target,
.hsm-text-gradient,
.hsm-text-unit,
[data-hsm-editor-shadow="1"] {
	transition: none !important;
}

.hsm-visual-effects, .hsm-visual-effects * { transition: none !important; }


/* Text Reveal final effect now uses filter:drop-shadow(). */
.hsm-text-target,
.hsm-text-gradient,
.hsm-text-unit,
[data-hsm-editor-shadow="1"] {
	transition: none !important;
}

/* Final reveal drop shadow is applied to the painted text/glyph layer, not the Elementor wrapper. */
.hsm-text-unit[data-hsm-text-base-filter],.hsm-text-gradient[data-hsm-text-base-filter],.elementor-heading-title[data-hsm-text-base-filter]{transition:none!important;}




/* Units must remain breakable exactly like normal inline text. */
.hsm-text-unit {
	display: inline !important;
	white-space: pre-wrap !important;
	word-break: inherit !important;
	overflow-wrap: inherit !important;
	transition: none !important;
}

/* Word-fill units may wrap between words. */
.hsm-text-word {
	white-space: normal !important;
}

/* Character spans must never force the full heading onto one line. */
.hsm-text-char {
	white-space: pre-wrap !important;
}

/* Final drop shadow is placed once on the semantic text element. */
.hsm-text-target[data-hsm-text-base-filter],
.hsm-text-gradient[data-hsm-text-base-filter],
.elementor-heading-title[data-hsm-text-base-filter],
h1[data-hsm-text-base-filter],
h2[data-hsm-text-base-filter],
h3[data-hsm-text-base-filter],
h4[data-hsm-text-base-filter],
h5[data-hsm-text-base-filter],
h6[data-hsm-text-base-filter],
p[data-hsm-text-base-filter] {
	transition: none !important;
}


/* HS Motion 1.6.5
   Native text wrapping for Word/Character Reveal. */

/* Visible letters/words stay inline. */
.hsm-text-unit {
	display: inline !important;
	transition: none !important;
}

/* Never manufacture an unbreakable whitespace run. */
.hsm-text-char {
	white-space: normal !important;
}

/* Words stay intact internally, but the REAL text-node spaces between them
   are native browser wrap opportunities. */
.hsm-text-word {
	display: inline !important;
	white-space: nowrap !important;
}

/* The semantic text target keeps Elementor's own width and wrapping rules. */
.hsm-text-target {
	white-space: normal !important;
	overflow-wrap: normal !important;
	word-break: normal !important;
}

/* Final drop shadow lives only once on the semantic text target. */
.hsm-text-target[data-hsm-text-base-filter],
.hsm-text-gradient[data-hsm-text-base-filter],
.elementor-heading-title[data-hsm-text-base-filter],
h1[data-hsm-text-base-filter],
h2[data-hsm-text-base-filter],
h3[data-hsm-text-base-filter],
h4[data-hsm-text-base-filter],
h5[data-hsm-text-base-filter],
h6[data-hsm-text-base-filter],
p[data-hsm-text-base-filter] {
	transition: none !important;
}


/* HS Motion 1.6.6
   DOM-preserving Text Reveal: authored <br> elements remain real line breaks. */
.hsm-text-target br,
.hsm-text-reveal br {
	display: block !important;
	content: "" !important;
}

/* Formatting wrappers stay inline and do not destroy authored breaks. */
.hsm-text-target :is(strong, b, em, i, a, span):not(.hsm-text-unit) {
	white-space: inherit;
}


/* 1.7 stable editor preview / parallax safety */
.hsm-editor-parallax-preview>.hsm-parallax-media{pointer-events:none!important}
.hsm-fluid-node{font-size:var(--hsm-fluid-size)!important}
.hsm-fluid-node :is(span,strong,b,em,i,a,small,mark,code){font-size:inherit!important}


/* 1.8 audited parallax layer */
.hsm-parallax-static{position:relative!important}
.hsm-parallax>.hsm-parallax-media,
.egs-bg-parallax>.hsm-parallax-media{
	position:absolute!important;
	inset:0!important;
	pointer-events:none!important;
	background-repeat:no-repeat;
	transform-origin:50% 50%;
	backface-visibility:hidden;
	border-radius:inherit;
	transition:none!important;
}
/* Do not alter Elementor overlay/content opacity or z-index. */


/* =========================================================
   HS Motion 1.11 — Elementor-native Fluid Typography
   In the editor Elementor adds hsm-fluid-enabled-yes and the
   hsm-fluid-target-* class via prefix_class.
   On the frontend the legacy PHP-rendered hsm-fluid-type classes
   remain supported for backwards compatibility.
========================================================= */

.hsm-fluid-enabled-yes.hsm-fluid-target-wrapper {
	font-size: var(--hsm-fluid-size) !important;
}

.hsm-fluid-enabled-yes.hsm-fluid-target-heading .elementor-heading-title,
.hsm-fluid-enabled-yes.hsm-fluid-target-heading h1,
.hsm-fluid-enabled-yes.hsm-fluid-target-heading h2,
.hsm-fluid-enabled-yes.hsm-fluid-target-heading h3,
.hsm-fluid-enabled-yes.hsm-fluid-target-heading h4,
.hsm-fluid-enabled-yes.hsm-fluid-target-heading h5,
.hsm-fluid-enabled-yes.hsm-fluid-target-heading h6 {
	font-size: var(--hsm-fluid-size) !important;
}

.hsm-fluid-enabled-yes.hsm-fluid-target-text .elementor-widget-container > p,
.hsm-fluid-enabled-yes.hsm-fluid-target-text .elementor-widget-container > div > p,
.hsm-fluid-enabled-yes.hsm-fluid-target-text .elementor-widget-container li,
.hsm-fluid-enabled-yes.hsm-fluid-target-text p,
.hsm-fluid-enabled-yes.hsm-fluid-target-text li {
	font-size: var(--hsm-fluid-size) !important;
}

.hsm-fluid-enabled-yes.hsm-fluid-target-all :is(h1,h2,h3,h4,h5,h6,p,li),
.hsm-fluid-enabled-yes.hsm-fluid-target-auto .elementor-heading-title,
.hsm-fluid-enabled-yes.hsm-fluid-target-auto :is(h1,h2,h3,h4,h5,h6),
.hsm-fluid-enabled-yes.hsm-fluid-target-auto .elementor-widget-container > p,
.hsm-fluid-enabled-yes.hsm-fluid-target-auto .elementor-widget-container > div > p,
.hsm-fluid-enabled-yes.hsm-fluid-target-auto .elementor-widget-container li {
	font-size: var(--hsm-fluid-size) !important;
}

/* Inline formatting must follow the actual text node size. */
.hsm-fluid-enabled-yes :is(
	.elementor-heading-title,
	h1,h2,h3,h4,h5,h6,p,li
) :is(span,strong,b,em,i,a,small,mark,code) {
	font-size: inherit !important;
}


/* =========================================================
   HS Motion 1.11.1 — Motion initial-state guard
   Prevents a late-rendered animated element from flashing visible
   before GSAP has applied its FROM state.
========================================================= */
html.hsm-motion-js .hsm-anim:not([data-hsm-motion-initialized="1"]),
html.hsm-motion-js .egs-anim-left:not([data-hsm-motion-initialized="1"]),
html.hsm-motion-js .egs-anim-right:not([data-hsm-motion-initialized="1"]),
html.hsm-motion-js .egs-anim-up:not([data-hsm-motion-initialized="1"]),
html.hsm-motion-js .egs-anim-down:not([data-hsm-motion-initialized="1"]),
html.hsm-motion-js .egs-anim-fade:not([data-hsm-motion-initialized="1"]) {
	visibility: hidden !important;
}

/* Once the FROM state is ready, GSAP owns opacity/visibility. */
html.hsm-motion-js [data-hsm-motion-initialized="1"] {
	transition: none !important;
}


/* =========================================================
   HS Motion 1.15 — Element Parallax / Scroll Transform
   Individual transform properties compose with the existing
   GSAP `transform` used by Entrance Motion.
========================================================= */
.hsm-scroll-transform,
.hsm-clip-reveal {
	transition: none !important;
}

.hsm-scroll-transform[data-hsm-scroll-use-translate="1"] {
	translate: var(--hsm-scroll-x, 0px) var(--hsm-scroll-y, 0px);
}

.hsm-scroll-transform[data-hsm-scroll-use-scale="1"] {
	scale: var(--hsm-scroll-scale, 1);
}

.hsm-scroll-transform[data-hsm-scroll-use-rotate="1"] {
	rotate: var(--hsm-scroll-rotate, 0deg);
}

/* Clip Reveal anti-flash guard. */
html.hsm-motion-js .hsm-clip-reveal:not([data-hsm-clip-initialized="1"]) {
	visibility: hidden !important;
}

html.hsm-motion-js .hsm-clip-reveal[data-hsm-clip-initialized="1"] {
	transition: none !important;
}


/* =========================================================
   HS Motion 1.15.1 — LCP / Above-the-Fold Safe
   Explicitly selected hero/LCP elements must be paintable immediately.
========================================================= */
html.hsm-loading .hsm-lcp-safe,
html.hsm-loading [data-hsm-lcp-safe="1"],
html.hsm-motion-js .hsm-lcp-safe:not([data-hsm-motion-initialized="1"]),
html.hsm-motion-js [data-hsm-lcp-safe="1"]:not([data-hsm-motion-initialized="1"]) {
	visibility: visible !important;
}

/* LCP-safe content is never hidden by the Clip Reveal startup guard. */
html.hsm-motion-js .hsm-lcp-safe.hsm-clip-reveal:not([data-hsm-clip-initialized="1"]),
html.hsm-motion-js [data-hsm-lcp-safe="1"].hsm-clip-reveal:not([data-hsm-clip-initialized="1"]) {
	visibility: visible !important;
}


/* =========================================================
   HS Motion 1.15.3 — LCP Native-First Parallax
   A deferred LCP-safe parallax deliberately keeps Elementor's
   native background image. No .hsm-parallax-ready class is added
   until the visitor starts interacting/scrolling.
========================================================= */
.hsm-parallax[data-hsm-parallax-lcp-deferred="1"],
.egs-bg-parallax[data-hsm-parallax-lcp-deferred="1"] {
    /* documentation/state hook only — native background remains untouched */
}
