/** QASF Hero Motion Engine — composited-first effects, opt-in continuous motion. */
.qhero-root{--qhero-delay:80ms;--qhero-stagger:100ms;--qhero-media-x:0px;--qhero-media-y:0px;--qhero-tilt-x:0deg;--qhero-tilt-y:0deg}
.qhero-root .qasf-hero-slide{overflow:hidden;isolation:isolate}
.qhero-root .qasf-hero-media{z-index:0}
.qhero-root .qasf-hero-overlay{z-index:2;pointer-events:none}
.qhero-root .qhero-content{position:relative;z-index:4}
.qhero-root .qhero-bg-effects{position:absolute;inset:0;z-index:1;overflow:hidden;pointer-events:none}
.qhero-root .qhero-layers{position:absolute;inset:0;pointer-events:none}
.qhero-root .qhero-layers-back{z-index:3}.qhero-root .qhero-layers-front{z-index:5}
.qhero-root>.qasf-slider-arrows,.qhero-root>.qasf-slider-dots{z-index:8}

/* Media structure keeps the poster discoverable in HTML for LCP; video loads later. */
.qhero-media,.qhero-media-motion,.qhero-media-inner,.qhero-picture,.qhero-picture img,.qhero-video,.qhero-media-fallback{inline-size:100%;block-size:100%}
.qhero-media-motion,.qhero-media-inner{position:relative;overflow:hidden}
.qhero-picture{display:block;position:absolute;inset:0}
.qhero-picture img,.qhero-video{display:block;position:absolute;inset:0;object-fit:cover;object-position:var(--qasf-focus-x) var(--qasf-focus-y)}
.qhero-video{z-index:2;opacity:0;transition:opacity 420ms ease;background:transparent}
.qhero-video.is-ready{opacity:1}
.qhero-media-fallback{display:block;background:radial-gradient(circle at 18% 22%,var(--qasf-primary-soft),transparent 38%),radial-gradient(circle at 78% 64%,color-mix(in srgb,var(--qasf-secondary) 18%,transparent),transparent 42%),linear-gradient(145deg,var(--qasf-surface),var(--qasf-surface-alt))}
.qhero-media-inner{transform:translate3d(var(--qhero-media-x),var(--qhero-media-y),0) rotateX(var(--qhero-tilt-x)) rotateY(var(--qhero-tilt-y)) scale(1.025);transform-origin:center;transition:transform 180ms ease-out}

/* Entry/exit. Inactive is the exit state, so the same transform reverses cleanly. */
.qhero-root[data-qhero-motion="1"] [data-qhero-anim]{--qhero-order:0;transition-property:opacity,transform,filter,clip-path;transition-duration:620ms;transition-timing-function:cubic-bezier(.22,.75,.22,1);transition-delay:calc(var(--qhero-delay) + (var(--qhero-order) * var(--qhero-stagger)))}
.qhero-root[data-qhero-motion="1"] .qasf-hero-slide:not(.is-active) [data-qhero-anim]:not([data-qhero-anim="none"]){opacity:0}
.qhero-root[data-qhero-motion="1"] .qasf-hero-slide.is-active [data-qhero-anim]{opacity:1;transform:none;filter:none;clip-path:inset(0 0 0 0)}
.qhero-root [data-qhero-anim="none"]{opacity:1!important;transform:none!important;filter:none!important;clip-path:none!important;transition:none!important}
.qhero-root .qasf-hero-slide:not(.is-active) [data-qhero-anim="fade"]{transform:none}
.qhero-root .qasf-hero-slide:not(.is-active) [data-qhero-anim="fade_up"]{transform:translate3d(0,26px,0)}
.qhero-root .qasf-hero-slide:not(.is-active) [data-qhero-anim="slide_right"]{transform:translate3d(52px,0,0)}
.qhero-root .qasf-hero-slide:not(.is-active) [data-qhero-anim="slide_left"]{transform:translate3d(-52px,0,0)}
.qhero-root .qasf-hero-slide:not(.is-active) [data-qhero-anim="slide_up"]{transform:translate3d(0,34px,0)}
.qhero-root .qasf-hero-slide:not(.is-active) [data-qhero-anim="slide_down"]{transform:translate3d(0,-34px,0)}
.qhero-root .qasf-hero-slide:not(.is-active) [data-qhero-anim="zoom_in"]{transform:scale(.9)}
.qhero-root .qasf-hero-slide:not(.is-active) [data-qhero-anim="zoom_out"]{transform:scale(1.08)}
.qhero-root .qasf-hero-slide:not(.is-active) [data-qhero-anim="scale_soft"]{transform:scale(.96)}
.qhero-root .qasf-hero-slide:not(.is-active) [data-qhero-anim="rotate_subtle"]{transform:scale(.98) rotate(2.5deg)}
.qhero-root .qasf-hero-slide:not(.is-active) [data-qhero-anim="blur_reveal"]{transform:scale(1.015);filter:blur(12px)}
.qhero-root .qasf-hero-slide:not(.is-active) [data-qhero-anim="mask_reveal"]{transform:translate3d(0,14px,0);clip-path:inset(0 0 100% 0)}
.qhero-root .qasf-hero-slide:not(.is-active) [data-qhero-anim="pop"],.qhero-root .qasf-hero-slide:not(.is-active) [data-qhero-anim="bounce"],.qhero-root .qasf-hero-slide:not(.is-active) [data-qhero-anim="glow"]{transform:translate3d(0,14px,0) scale(.88)}

/* Text splitting is JS progressive enhancement. Original text remains intact before JS. */
.qhero-text-split{display:inline-block;max-inline-size:100%}
.qhero-text-split .qhero-token{display:inline-block;white-space:pre;opacity:0;transform:translate3d(0,.7em,0)}
.qasf-hero-slide.is-active .qhero-text-split[data-qhero-anim="typewriter"] .qhero-token,.qasf-hero-slide.is-active .qhero-text-split[data-qhero-anim="letter_stagger"] .qhero-token{animation:qhero-token-up 460ms cubic-bezier(.22,.75,.22,1) both;animation-delay:calc(var(--qhero-delay) + (var(--qhero-token-index) * 28ms))}
.qasf-hero-slide.is-active .qhero-text-split[data-qhero-anim="typewriter"] .qhero-token{animation-duration:260ms;animation-delay:calc(var(--qhero-delay) + (var(--qhero-token-index) * 42ms))}
.qhero-text-split[data-qhero-anim="split_text"] .qhero-token{transform:translate3d(var(--qhero-token-shift,32px),0,0)}
.qasf-hero-slide.is-active .qhero-text-split[data-qhero-anim="split_text"] .qhero-token{animation:qhero-token-split 560ms cubic-bezier(.22,.75,.22,1) both;animation-delay:calc(var(--qhero-delay) + (var(--qhero-token-index) * 55ms))}
@keyframes qhero-token-up{to{opacity:1;transform:none}}
@keyframes qhero-token-split{to{opacity:1;transform:none}}

/* CTA premium micro-interactions without animating layout. */
.qasf-hero-slide.is-active .qasf-hero-actions[data-qhero-anim="bounce"]{animation:qhero-cta-bounce 720ms cubic-bezier(.2,.8,.2,1) both;animation-delay:calc(var(--qhero-delay) + 3 * var(--qhero-stagger))}
@keyframes qhero-cta-bounce{0%{opacity:0;transform:translate3d(0,16px,0) scale(.88)}65%{opacity:1;transform:translate3d(0,-2px,0) scale(1.025)}100%{opacity:1;transform:none}}
.qasf-hero-actions[data-qhero-anim="glow"] .qasf-button{position:relative;isolation:isolate}
.qasf-hero-actions[data-qhero-anim="glow"] .qasf-button::after{content:"";position:absolute;inset:-5px;border:1px solid currentColor;border-radius:inherit;opacity:0;transform:scale(.96);pointer-events:none}
.qhero-inview .qasf-hero-slide.is-active .qasf-hero-actions[data-qhero-anim="glow"] .qasf-button::after{animation:qhero-cta-glow 4.8s ease-out 1.2s infinite}
@keyframes qhero-cta-glow{0%,72%,100%{opacity:0;transform:scale(.96)}82%{opacity:.28;transform:scale(1.08)}92%{opacity:0;transform:scale(1.14)}}

/* Ambient media effects run only while the hero intersects the viewport. */
.qhero-media-inner[data-qhero-ambient] .qhero-picture,.qhero-media-inner[data-qhero-ambient] .qhero-video{transform-origin:center;animation-play-state:paused}
.qhero-inview .qhero-media-inner[data-qhero-ambient] .qhero-picture,.qhero-inview .qhero-media-inner[data-qhero-ambient] .qhero-video{animation-play-state:running}
.qhero-media-inner[data-qhero-ambient="ken_burns"] .qhero-picture,.qhero-media-inner[data-qhero-ambient="ken_burns"] .qhero-video{animation:qhero-ken-burns 14s ease-in-out alternate infinite}
.qhero-media-inner[data-qhero-ambient="float"] .qhero-picture,.qhero-media-inner[data-qhero-ambient="float"] .qhero-video{animation:qhero-media-float 7s ease-in-out alternate infinite}
.qhero-media-inner[data-qhero-ambient="rotate"] .qhero-picture,.qhero-media-inner[data-qhero-ambient="rotate"] .qhero-video{animation:qhero-media-rotate 9s ease-in-out alternate infinite}
.qhero-media-inner[data-qhero-ambient="drift"] .qhero-picture,.qhero-media-inner[data-qhero-ambient="drift"] .qhero-video{animation:qhero-media-drift 11s ease-in-out alternate infinite}
@keyframes qhero-ken-burns{from{transform:scale(1.01) translate3d(-.4%,0,0)}to{transform:scale(1.075) translate3d(.8%,-.5%,0)}}
@keyframes qhero-media-float{from{transform:translate3d(0,-.35%,0) scale(1.015)}to{transform:translate3d(0,.45%,0) scale(1.025)}}
@keyframes qhero-media-rotate{from{transform:scale(1.02) rotate(-1deg)}to{transform:scale(1.03) rotate(1deg)}}
@keyframes qhero-media-drift{from{transform:scale(1.035) translate3d(-.8%,0,0)}to{transform:scale(1.035) translate3d(.8%,0,0)}}

/* Dynamic backgrounds use transformed pseudo-layers rather than layout properties. */
.qhero-bg-effects i,.qhero-bg-effects b{position:absolute;display:block;pointer-events:none;animation-play-state:paused}
.qhero-inview .qhero-bg-effects i,.qhero-inview .qhero-bg-effects b{animation-play-state:running}
.qhero-bg-gradient .qhero-bg-effects i{inset:-30%;background:radial-gradient(circle at 25% 35%,color-mix(in srgb,var(--qasf-primary) 34%,transparent),transparent 35%),radial-gradient(circle at 75% 65%,color-mix(in srgb,var(--qasf-accent) 26%,transparent),transparent 38%);opacity:.7;mix-blend-mode:soft-light;animation:qhero-gradient-drift 10s ease-in-out alternate infinite}
.qhero-bg-light_sweep .qhero-bg-effects i{inset-block:-20%;inset-inline-start:-45%;inline-size:28%;background:linear-gradient(90deg,transparent,color-mix(in srgb,#fff 30%,transparent),transparent);transform:skewX(-14deg) translate3d(-160%,0,0);opacity:.7;animation:qhero-light-sweep 7s ease-in-out 1s infinite}
.qhero-bg-noise .qhero-bg-effects i{inset:-12%;background-image:repeating-radial-gradient(circle at 20% 20%,rgba(255,255,255,.45) 0 1px,transparent 1px 4px);background-size:7px 7px;opacity:.055;mix-blend-mode:soft-light;animation:qhero-noise-drift 8s steps(6,end) infinite}
.qhero-bg-parallax .qhero-bg-effects i{inset:-10%;background:radial-gradient(circle at 30% 35%,color-mix(in srgb,var(--qasf-primary) 18%,transparent),transparent 40%);opacity:.75}
@keyframes qhero-gradient-drift{from{transform:translate3d(-2%,-1%,0) rotate(-2deg) scale(1)}to{transform:translate3d(2%,1%,0) rotate(2deg) scale(1.04)}}
@keyframes qhero-light-sweep{0%,62%,100%{transform:skewX(-14deg) translate3d(-160%,0,0);opacity:0}72%{opacity:.7}88%{transform:skewX(-14deg) translate3d(620%,0,0);opacity:0}}
@keyframes qhero-noise-drift{0%{transform:translate3d(0,0,0)}25%{transform:translate3d(1.5%,-1%,0)}50%{transform:translate3d(-1%,1.5%,0)}75%{transform:translate3d(.5%,-1.5%,0)}100%{transform:none}}

/* Media reflection/glow/shadow are separate opacity layers so the image itself stays composited. */
.qhero-media::after,.qhero-media::before{content:"";position:absolute;z-index:4;pointer-events:none;opacity:0}
.qhero-media-effect-reflect .qhero-media::after{inset-block:-12%;inset-inline-start:-38%;inline-size:24%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.26),transparent);transform:skewX(-16deg) translate3d(-170%,0,0);mix-blend-mode:screen}
.qhero-inview .qhero-media-effect-reflect.is-active .qhero-media::after{animation:qhero-reflect 7.5s ease-in-out 1.4s infinite}
@keyframes qhero-reflect{0%,68%,100%{transform:skewX(-16deg) translate3d(-170%,0,0);opacity:0}76%{opacity:.7}92%{transform:skewX(-16deg) translate3d(720%,0,0);opacity:0}}
.qhero-media-effect-glow .qhero-media::before{inset:3%;border:1px solid color-mix(in srgb,var(--qasf-primary) 46%,transparent);border-radius:inherit;box-shadow:inset 0 0 44px color-mix(in srgb,var(--qasf-primary) 18%,transparent);opacity:.7}
.qhero-media-effect-shadow .qhero-media::before{inset:0;background:linear-gradient(90deg,rgba(0,0,0,.16),transparent 18%,transparent 82%,rgba(0,0,0,.16));opacity:.55}

/* Split hero: half media, half content on tablet/desktop; mobile falls back to safe overlay. */
@media(min-width:48rem){
  .qhero-layout-split .qasf-hero-media{inset-block:0;inline-size:50%}
  .qhero-layout-split.qhero-split-media-left .qasf-hero-media{left:0;right:auto}
  .qhero-layout-split.qhero-split-media-right .qasf-hero-media{right:0;left:auto}
  .qhero-layout-split .qhero-content{inline-size:50%;max-inline-size:none;padding-inline:clamp(2rem,5vw,5.5rem)}
  .qhero-layout-split.qhero-split-media-left .qhero-content{margin-left:auto;margin-right:0}
  .qhero-layout-split.qhero-split-media-right .qhero-content{margin-right:auto;margin-left:0}
  .qhero-layout-split.qhero-split-media-left .qasf-hero-overlay{left:50%;right:0}
  .qhero-layout-split.qhero-split-media-right .qasf-hero-overlay{left:0;right:50%}
  .qhero-layout-split .qasf-hero-overlay{background:linear-gradient(145deg,color-mix(in srgb,var(--qasf-hero-overlay-base) var(--qasf-overlay-strength,56%),transparent),color-mix(in srgb,var(--qasf-hero-overlay-base) 22%,transparent))}
}

/* Decorative layers. Pointer offsets are CSS vars updated once per animation frame. */
.qhero-layer{position:absolute;left:var(--qhero-layer-x);top:var(--qhero-layer-y);inline-size:var(--qhero-layer-width);opacity:var(--qhero-layer-opacity);transform:translate3d(calc(-50% + var(--qhero-layer-dx,0px)),calc(-50% + var(--qhero-layer-dy,0px)),0);transition:transform 160ms ease-out}
.qhero-layer-motion{display:block;inline-size:100%;transform:rotate(var(--qhero-layer-rotate));transform-origin:center;animation-play-state:paused}
.qhero-layer-image{display:block;inline-size:100%;block-size:auto;object-fit:contain;filter:drop-shadow(0 12px 24px rgba(0,0,0,.12))}
.qhero-inview .qhero-layer-motion{animation-play-state:running}
.qhero-layer-motion[data-qhero-layer-ambient="float"]{animation:qhero-layer-float 5.5s ease-in-out alternate infinite}
.qhero-layer-motion[data-qhero-layer-ambient="drift"]{animation:qhero-layer-drift 8s ease-in-out alternate infinite}
.qhero-layer-motion[data-qhero-layer-ambient="rotate"]{animation:qhero-layer-rotate 7s ease-in-out alternate infinite}
@keyframes qhero-layer-float{from{transform:rotate(var(--qhero-layer-rotate)) translate3d(0,-5px,0)}to{transform:rotate(var(--qhero-layer-rotate)) translate3d(0,7px,0)}}
@keyframes qhero-layer-drift{from{transform:rotate(var(--qhero-layer-rotate)) translate3d(-7px,0,0)}to{transform:rotate(var(--qhero-layer-rotate)) translate3d(8px,-3px,0)}}
@keyframes qhero-layer-rotate{from{transform:rotate(calc(var(--qhero-layer-rotate) - 2deg))}to{transform:rotate(calc(var(--qhero-layer-rotate) + 2deg))}}

@media(max-width:47.99rem){
  .qhero-picture img,.qhero-video{object-position:var(--qasf-focus-m-x) var(--qasf-focus-m-y)}
  .qhero-layout-split .qasf-hero-media{inset:0;inline-size:100%}
  .qhero-layout-split .qhero-content{inline-size:100%;margin-inline:auto}
  .qhero-layout-split .qasf-hero-overlay{inset:0}
  .qhero-layer-hide-mobile{display:none}
  .qhero-root[data-qhero-mobile="lite"] .qhero-bg-effects,.qhero-root[data-qhero-mobile="lite"] .qhero-layer-motion,.qhero-root[data-qhero-mobile="lite"] .qhero-media-inner[data-qhero-ambient] .qhero-picture,.qhero-root[data-qhero-mobile="lite"] .qhero-media-inner[data-qhero-ambient] .qhero-video{animation:none!important}
  .qhero-root[data-qhero-mobile="lite"] .qhero-media-inner{transform:none!important;transition:none!important}
  .qhero-root[data-qhero-mobile="off"] [data-qhero-anim]{opacity:1!important;transform:none!important;filter:none!important;clip-path:none!important;transition:none!important;animation:none!important}
  .qhero-root[data-qhero-mobile="off"] .qhero-bg-effects,.qhero-root[data-qhero-mobile="off"] .qhero-layer-motion,.qhero-root[data-qhero-mobile="off"] .qhero-media-inner{animation:none!important;transform:none!important;transition:none!important}
}

@media(prefers-reduced-motion:reduce){
  .qhero-root [data-qhero-anim],.qhero-root .qhero-token{opacity:1!important;transform:none!important;filter:none!important;clip-path:none!important;transition:none!important;animation:none!important}
  .qhero-root .qhero-bg-effects,.qhero-root .qhero-layer-motion,.qhero-root .qhero-media-inner,.qhero-root .qhero-picture,.qhero-root .qhero-video{animation:none!important;transform:none!important;transition:none!important}
  .qhero-root .qhero-video{display:none!important}
}

/* Explicit editor switch: keep the layout/media, remove all decorative motion. */
.qhero-root[data-qhero-motion="0"] [data-qhero-anim],
.qhero-root[data-qhero-motion="0"] .qhero-token{opacity:1!important;transform:none!important;filter:none!important;clip-path:none!important;transition:none!important;animation:none!important}
.qhero-root[data-qhero-motion="0"] .qhero-bg-effects,
.qhero-root[data-qhero-motion="0"] .qhero-layer-motion,
.qhero-root[data-qhero-motion="0"] .qhero-media-inner,
.qhero-root[data-qhero-motion="0"] .qhero-picture{animation:none!important;transform:none!important;transition:none!important}
.qhero-root[data-qhero-motion="1"] .qasf-hero-slide:not(.is-active) [data-qhero-anim]{transition-delay:0ms}
