/* Omaha Web SEO - animations (pairs with assets/js/animations.js)
   Safe by design: elements are only hidden while JS is running (html.js) and are revealed automatically if the script
   fails (html.o-fail after 3 s), in the Elementor editor (html.o-static / .elementor-editor-active) and for reduced motion. */

@property --a{syntax:"<angle>";inherits:false;initial-value:0deg}
:root{--o-anim-css:1}

/* ---- Scroll reveals (use translate/scale so they never fight the tilt transform) ---- */
.js .o-anim{opacity:0;translate:0 28px;
	transition:opacity .9s var(--ease,ease),translate .9s var(--ease,ease),scale .9s var(--ease,ease),transform .25s ease-out,border-color .35s,box-shadow .35s;
	transition-delay:var(--d,0s),var(--d,0s),var(--d,0s),0s,0s,0s}
.js .o-anim--left{translate:36px 0}
.js .o-anim--right{translate:-36px 0}
.js .o-anim--zoom{translate:0 0;scale:.92}
.js .o-anim--fade{translate:0 0}
.js .o-anim.is-in{opacity:1;translate:0 0;scale:1}

/* Image / illustration frames: wipe open + slow zoom */
.js .o-mask{clip-path:inset(0 0 100% 0 round 28px);transition:clip-path 1.2s var(--ease,ease)}
.js .o-mask.is-in{clip-path:inset(0 0 0 0 round 28px)}
.js .o-frame>svg,.js .o-frame>img{scale:1.12;transition:scale 1.8s var(--ease,ease)}
.js .o-frame.is-in>svg,.js .o-frame.is-in>img{scale:1}
.o-parallax-el{will-change:transform}

/* ---- Headline word reveal (JS wraps each word) ---- */
.o-w{display:inline-block;overflow:hidden;vertical-align:top;padding-bottom:.1em;margin-bottom:-.1em}
.o-w>span{display:inline-block}
.js .o-split-ready .o-w>span{transform:translateY(112%);opacity:0;filter:blur(10px);
	transition:transform .95s var(--ease,ease),opacity .7s ease,filter .8s ease;
	transition-delay:calc(var(--i,0) * 70ms + 120ms)}
.js .o-split-ready.o-split-in .o-w>span{transform:none;opacity:1;filter:none}
/* shimmering coral phrase */
.o-coral{color:var(--coral);white-space:nowrap}
@supports (background-clip:text) or (-webkit-background-clip:text){
	.o-coral,.o-coral .o-w>span{background:linear-gradient(100deg,var(--coral) 0%,var(--coral) 38%,var(--coral-light) 50%,var(--coral) 62%,var(--coral) 100%);background-size:250% 100%;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;animation:o-shimmer 5s ease-in-out infinite}
	.o-coral .o-w{background:none}
	.o-coral:has(.o-w){background:none;animation:none}
}
@keyframes o-shimmer{0%,35%{background-position:100% 0}80%,100%{background-position:0 0}}

/* ---- Hero: aurora, grid glow, cursor light ---- */
.o-hero{--mx:50%;--my:30%}
.o-hero::before,.o-hero::after{content:"";position:absolute;z-index:-1;border-radius:50%;filter:blur(70px);pointer-events:none;will-change:transform}
.o-hero::before{width:min(52vw,640px);height:min(52vw,640px);left:-10%;top:-18%;background:radial-gradient(circle,color-mix(in srgb,var(--coral) 34%,transparent),transparent 65%);animation:o-drift-a 16s ease-in-out infinite alternate}
.o-hero::after{width:min(46vw,560px);height:min(46vw,560px);right:-8%;bottom:6%;background:radial-gradient(circle,color-mix(in srgb,var(--mint) 20%,transparent),transparent 65%);animation:o-drift-b 19s ease-in-out infinite alternate}
.o-hero .o-hero__in{position:relative}
.o-hero__light{position:absolute;inset:0;z-index:-1;pointer-events:none;background:radial-gradient(420px circle at var(--mx) var(--my),color-mix(in srgb,var(--coral) 13%,transparent),transparent 70%);transition:opacity .4s}
@keyframes o-drift-a{from{transform:translate3d(0,0,0) scale(1)}to{transform:translate3d(14%,12%,0) scale(1.18)}}
@keyframes o-drift-b{from{transform:translate3d(0,0,0) scale(1.1)}to{transform:translate3d(-16%,-10%,0) scale(.9)}}

/* Eyebrow dot pulse */
.o-eyebrow::before{animation:o-pulse 2.6s ease-in-out infinite}
@keyframes o-pulse{0%,100%{box-shadow:0 0 0 0 color-mix(in srgb,var(--coral) 55%,transparent)}60%{box-shadow:0 0 0 8px color-mix(in srgb,var(--coral) 0%,transparent)}}

/* ---- Rotating light border on stat cards ---- */
.e-con.o-stat::before{content:"";position:absolute;inset:0;border-radius:inherit;padding:1.5px;pointer-events:none;
	background:conic-gradient(from var(--a),transparent 0 62%,color-mix(in srgb,var(--coral) 95%,transparent) 82%,transparent 100%);
	-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;
	mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask-composite:exclude;
	animation:o-rot 7s linear infinite}
@keyframes o-rot{to{--a:360deg}}

/* ---- Cards: 3D tilt + cursor spotlight (pointer devices) ---- */
.o-tilt{transform:perspective(900px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg));transform-style:preserve-3d}
.o-tilt::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .35s;
	background:radial-gradient(360px circle at var(--mx,50%) var(--my,50%),color-mix(in srgb,var(--coral) 20%,transparent),transparent 60%)}
.o-card--light.o-tilt::after{background:radial-gradient(360px circle at var(--mx,50%) var(--my,50%),color-mix(in srgb,var(--coral) 13%,transparent),transparent 60%)}
.o-tilt:hover::after{opacity:1}
.o-tilt:hover{z-index:2}

/* ---- Buttons: shine sweep ---- */
.o-btn::before,.elementor-widget.o-btn-wrap .elementor-button::before{content:"";position:absolute;inset:0;z-index:-1;transform:translateX(-120%) skewX(-18deg);background:linear-gradient(90deg,transparent,rgba(255,255,255,.35),transparent);transition:transform .8s var(--ease,ease)}
.o-btn:hover::before,.elementor-widget.o-btn-wrap .elementor-button:hover::before{transform:translateX(120%) skewX(-18deg)}
.o-magnet{transition:transform .35s var(--ease,ease)}

/* ---- Scroll progress bar ---- */
.o-progress{position:fixed;left:0;top:0;right:0;height:3px;z-index:300;transform-origin:0 50%;transform:scaleX(0);background:linear-gradient(90deg,var(--coral),var(--coral-light));pointer-events:none}

/* ---- Marquee reacts to scroll speed ---- */
.o-marquee__stage{transform:rotate(-2.5deg) skewX(var(--skew,0deg)) scale(1.04);transition:transform .15s linear}

/* ---- Process: progress line + step activation ---- */
.e-con.o-steps-el{--p:0}
.e-con.o-steps-el::before{content:"";position:absolute;left:25px;top:50px;bottom:50px;width:2px;background:var(--line-d);border-radius:2px}
.e-con.o-steps-el::after{content:"";position:absolute;left:25px;top:50px;bottom:50px;width:2px;background:linear-gradient(var(--coral),var(--coral-light));border-radius:2px;transform-origin:50% 0;transform:scaleY(var(--p));box-shadow:0 0 14px color-mix(in srgb,var(--coral) 70%,transparent)}
.e-con.o-step{z-index:1}
.o-step__no{background:var(--teal-d)}

/* ---- Floating decorative badge ---- */
.o-badge{animation:o-float 5s ease-in-out infinite}
@keyframes o-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-9px)}}

/* ---- Always-visible states ---- */
.o-fail .o-anim,.o-static .o-anim,.elementor-editor-active .o-anim{opacity:1!important;translate:0 0!important;scale:1!important}
.o-fail .o-mask,.o-static .o-mask,.elementor-editor-active .o-mask{clip-path:none!important}
.o-fail .o-split-ready .o-w>span,.o-static .o-split-ready .o-w>span,.elementor-editor-active .o-split-ready .o-w>span{transform:none!important;opacity:1!important;filter:none!important}
.o-fail .o-frame>svg,.o-fail .o-frame>img,.o-static .o-frame>svg,.o-static .o-frame>img{scale:1!important}

/* If the site owner turns on Customize > Omaha Site Settings > Animations > respect reduced motion (html.o-respect), visitors whose OS asks for reduced motion get a calm fade-in only. Off by default, so everyone sees the full animations.
   Add ?motion=full to a page address to preview the full effects regardless of that setting. */
@media (prefers-reduced-motion:reduce){
	html.o-respect{scroll-behavior:auto}
	html.o-respect:not(.o-full-motion) *,html.o-respect:not(.o-full-motion) *::before,html.o-respect:not(.o-full-motion) *::after{animation-duration:.01ms!important;animation-iteration-count:1!important}
	html.o-respect:not(.o-full-motion) .o-progress,html.o-respect:not(.o-full-motion) .o-hero__light{display:none}
}
.o-reduced .o-anim{translate:0 0!important;scale:1!important;transition:opacity .8s ease var(--d,0s)!important}
.o-reduced .o-mask{clip-path:none!important}
.o-reduced .o-frame>svg,.o-reduced .o-frame>img{scale:1!important}
.o-reduced .o-progress,.o-reduced .o-hero__light{display:none}
@media (max-width:860px){
	.o-hero::before,.o-hero::after{filter:blur(50px)}
}
