/* Alampharm FX layer. Everything is scoped under html.ap-fx (added by fx.js) and gated for reduced motion.
   Revert: set AP_FX to false in functions.php (files can then be deleted). */
@media (prefers-reduced-motion:no-preference){

/* scroll progress bar */
#ap-prog{position:fixed;left:0;top:0;height:3px;width:100%;transform:scaleX(0);transform-origin:0 50%;background:linear-gradient(90deg,var(--ap-teal),var(--ap-cyan));z-index:100001;pointer-events:none}
body.admin-bar #ap-prog{top:32px}
@media (max-width:782px){body.admin-bar #ap-prog{top:46px}}

/* page fade in / out */
html.ap-fx body{animation:ap-pagein .55s var(--ap-ease) both}
html.ap-fx.ap-leaving body{opacity:0;transition:opacity .25s ease}
@keyframes ap-pagein{from{opacity:0}to{opacity:1}}

/* hero headline: word by word */
.ap-fx .ap-w{display:inline-block;overflow:hidden;vertical-align:top;padding-bottom:.14em;margin-bottom:-.14em}
.ap-fx .ap-wi{display:inline-block;transform:translateY(112%);animation:ap-wup .9s var(--ap-ease) forwards;animation-delay:calc(var(--i,0)*85ms + 200ms)}
@keyframes ap-wup{to{transform:none}}
.ap-fx h1 .ap-reveal,.ap-fx h1.ap-reveal{transition-delay:0s}

/* curtain reveal for image containers (overlay slides away; clip-path would hide the element from the observer) */
.ap-fx .e-con.ap-img.ap-reveal{overflow:hidden}
.ap-fx .e-con.ap-img.ap-reveal::after{content:"";position:absolute;inset:-1px;background:var(--ap-cover,#fff);transform-origin:100% 50%;transition:transform 1.2s var(--ap-ease) .1s;z-index:3;pointer-events:none}
.ap-fx .e-con.ap-img.ap-reveal.ap-right::after{transform-origin:0 50%}
.ap-fx .e-con.ap-img.ap-reveal.ap-zoom::after{transform-origin:50% 100%}
.ap-fx .e-con.ap-img.ap-reveal.is-in::after{transform:scaleX(0)}
.ap-fx .e-con.ap-img.ap-reveal.ap-zoom.is-in::after{transform:scaleY(0)}

/* pop-in icons (stats row, mission/vision) */
.ap-fx .ap-stats.is-in .elementor-icon{animation:ap-pop .75s cubic-bezier(.3,1.6,.5,1) both}
.ap-fx .ap-stats.is-in>.e-con:nth-child(2) .elementor-icon{animation-delay:.14s}
.ap-fx .ap-stats.is-in>.e-con:nth-child(3) .elementor-icon{animation-delay:.28s}
.ap-fx .ap-stats.is-in>.e-con:nth-child(4) .elementor-icon{animation-delay:.42s}
.ap-fx .ap-mv .ap-reveal.is-in .elementor-icon{animation:ap-spinin .9s cubic-bezier(.3,1.4,.5,1) both}
@keyframes ap-pop{0%{transform:scale(.3);opacity:0}100%{transform:scale(1);opacity:1}}
@keyframes ap-spinin{0%{transform:scale(.35) rotate(-28deg);opacity:0}100%{transform:none;opacity:1}}

/* brand cards enter one after another */
.ap-fx .ap-brand-grid.is-in .e-loop-item{animation:ap-cardin .75s var(--ap-ease) both;animation-delay:calc(var(--n,0)*70ms)}
@keyframes ap-cardin{from{opacity:0;transform:translateY(26px) scale(.97)}to{opacity:1;transform:none}}

/* cursor spotlight + 3D tilt */
.ap-fx .ap-bcard::after,.ap-fx .e-con.ap-brand::after,.ap-fx .e-con.ap-feat::after,.ap-fx .e-con.ap-xcard::after,.ap-fx .e-con.ap-ch::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .35s;background:radial-gradient(420px circle at var(--mx,50%) var(--my,50%),rgba(23,179,209,.16),transparent 62%)}
.ap-fx .ap-tilting::after{opacity:1}
.ap-fx .ap-tilting{transition:transform .12s linear,box-shadow .35s,border-color .3s!important;transform:perspective(900px) translateY(-6px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg))!important;will-change:transform}

/* magnetic buttons */
.ap-fx .ap-btn .elementor-button{transition:transform .25s var(--ap-ease),background-color .3s,box-shadow .3s;transform:translate(var(--bx,0),var(--by,0))}
.ap-fx .ap-btn .elementor-button:hover{box-shadow:0 10px 26px rgba(0,102,127,.3)}


/* ---------- Home hero: pinned, cinematic, with a live network ---------- */
.ap-fx .e-con.ap-hero{position:sticky;top:0;z-index:0;overflow:hidden;background-image:none!important}
.ap-fx .e-con.ap-hero~.e-con{position:relative;z-index:1}
.ap-fx .e-con.ap-hero+.e-con{border-radius:clamp(28px,4vw,64px) clamp(28px,4vw,64px) 0 0;box-shadow:0 -24px 60px rgba(0,30,45,.25)}
.ap-hero-media{position:absolute;inset:0;z-index:0;will-change:transform;transform-origin:50% 40%}
.ap-hero-media-in{position:absolute;inset:0;background-size:cover;background-position:center;animation:ap-hzoom 3.2s cubic-bezier(.16,.8,.2,1) both}
@keyframes ap-hzoom{from{transform:scale(1.24);filter:brightness(.55) saturate(.8)}to{transform:scale(1);filter:none}}
.ap-hero-dim{position:absolute;inset:0;z-index:1;background:#021c2a;opacity:0;pointer-events:none}
.ap-hero-fx{position:absolute;inset:0;z-index:1;pointer-events:none;will-change:transform,opacity;animation:ap-hfade 2s ease .5s both}
.ap-hero-fx canvas{width:100%;height:100%;display:block}
@keyframes ap-hfade{from{opacity:0}to{opacity:1}}
.ap-hero-cue{position:absolute;left:50%;bottom:clamp(28px,5vh,52px);transform:translateX(-50%);z-index:2;display:flex;flex-direction:column;align-items:center;gap:10px;color:#fff;font:500 12px/1 var(--ap-font-body);letter-spacing:.32em;text-transform:uppercase;pointer-events:none;animation:ap-hfade 1s ease 1.6s both}
.ap-hero-cue i{width:24px;height:38px;border:2px solid rgba(255,255,255,.85);border-radius:14px;position:relative;display:block}
.ap-hero-cue i::after{content:"";position:absolute;left:50%;top:7px;width:4px;height:8px;margin-left:-2px;border-radius:3px;background:#5ce0ee;animation:ap-wheel 1.8s ease-in-out infinite}
@keyframes ap-wheel{0%{opacity:0;transform:translateY(0)}30%{opacity:1}100%{opacity:0;transform:translateY(14px)}}
@media (max-width:767px){.ap-hero-cue{font-size:10px}}
}

@media (prefers-reduced-motion:no-preference){
.ap-fx .ap-bcard.ap-refilter,.ap-fx .ap-jcard.ap-refilter{animation:ap-cardin .6s var(--ap-ease) both;animation-delay:calc(var(--n,0)*55ms)}
}

/* ---------- Careers page motion ---------- */
@media (prefers-reduced-motion:no-preference){
/* hero panels drift (translate is separate from the reveal's transform) and carry a soft light sweep */
.ap-fx .ap-chero .ap-cimg.is-in,.ap-fx .ap-chero .ap-cteal.is-in{animation:ap-float 6.5s ease-in-out 1.4s infinite alternate}
.ap-fx .ap-chero .ap-cimg+.e-con.is-in,.ap-fx .ap-chero .ap-cteal.is-in{animation-duration:7.5s;animation-direction:alternate-reverse}
.ap-fx .ap-chero .ap-cimg:nth-of-type(1).is-in{animation-delay:2s}
@keyframes ap-float{from{translate:0 -8px}to{translate:0 10px}}
.ap-fx .ap-chero .ap-cimg{position:relative;overflow:hidden}
.ap-fx .ap-chero .ap-cimg::before{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;background:linear-gradient(110deg,transparent 35%,rgba(23,179,209,.16) 50%,transparent 65%);background-size:260% 100%;background-position:130% 0;animation:ap-sweep 5.5s ease-in-out 1.8s infinite}
@keyframes ap-sweep{0%{background-position:130% 0}55%,100%{background-position:-60% 0}}
/* icon in the teal card pulses */
.ap-fx .ap-cteal .elementor-icon{border-radius:50%;animation:ap-pulse 2.6s ease-out infinite}
@keyframes ap-pulse{0%{box-shadow:0 0 0 0 rgba(255,255,255,.45)}70%,100%{box-shadow:0 0 0 22px rgba(255,255,255,0)}}
/* stats rule draws itself */
.ap-fx .e-con.ap-cstats{border-top:0;position:relative}
.ap-fx .e-con.ap-cstats::before{content:"";position:absolute;left:0;top:0;height:2px;width:100%;background:#9aa5a8;transform:scaleX(0);transform-origin:0 50%;transition:transform 1.3s var(--ap-ease) .3s}
.ap-fx .e-con.ap-cstats.is-in::before{transform:none}
/* job cards: icon tile pops, arrow slides, accent bar */
.ap-fx .ap-jcard{position:relative;overflow:hidden}
.ap-fx .ap-jcard::before{content:"";position:absolute;left:0;top:0;height:4px;width:100%;background:linear-gradient(90deg,var(--ap-teal),var(--ap-cyan));transform:scaleX(0);transform-origin:0 50%;transition:transform .5s var(--ap-ease)}
.ap-fx .ap-jcard:hover::before{transform:none}
.ap-fx .ap-jicon{transition:transform .45s cubic-bezier(.3,1.6,.5,1),background-color .3s,color .3s}
.ap-fx .ap-jcard:hover .ap-jicon{transform:rotate(-8deg) scale(1.12);background:var(--ap-teal);color:#fff}
.ap-fx .ap-japply::after{content:" \2192";display:inline-block;transition:transform .3s var(--ap-ease)}
.ap-fx .ap-japply:hover::after{transform:translateX(6px)}
.ap-fx .ap-jcard.is-in .ap-jicon{animation:ap-pop .7s cubic-bezier(.3,1.6,.5,1) .25s backwards}
.ap-fx .ap-jteams .ap-jteam{transition:background-color .25s,color .25s,padding-left .25s var(--ap-ease),transform .25s}
/* how to join: circles ripple in one after another */
.ap-fx .ap-reveal.is-in .ap-cstep-n{animation:ap-ring 1.4s var(--ap-ease) both}
.ap-fx .ap-reveal.ap-d2.is-in .ap-cstep-n{animation-delay:.25s}
.ap-fx .ap-reveal.ap-d3.is-in .ap-cstep-n{animation-delay:.5s}
@keyframes ap-ring{0%{transform:scale(.3);opacity:0;box-shadow:0 0 0 0 rgba(255,255,255,.6)}50%{transform:scale(1.12);opacity:1}100%{transform:none;opacity:1;box-shadow:0 0 0 20px rgba(255,255,255,0)}}
/* closing CTA button breathes */
.ap-fx .ap-cta-plain .elementor-button{animation:ap-breathe 2.8s ease-out 1.5s infinite}
@keyframes ap-breathe{0%{box-shadow:0 0 0 0 rgba(0,102,127,.4)}70%,100%{box-shadow:0 0 0 18px rgba(0,102,127,0)}}
}

/* ---------- Contact page motion ---------- */
@media (prefers-reduced-motion:no-preference){
.ap-fx .ap-mapbox iframe{transform:scale(1.18);transition:transform 2.2s var(--ap-ease) .15s}
.ap-fx .ap-mapbox.is-in iframe{transform:none}
.ap-fx .ap-mapbox::before,.ap-fx .ap-mapbox::after{content:"";position:absolute;left:50%;top:50%;width:16px;height:16px;margin:-8px 0 0 -8px;border-radius:50%;border:2px solid #e53935;pointer-events:none;z-index:2;opacity:0}
.ap-fx .ap-mapbox.is-in::before{animation:ap-ripple 2.6s ease-out 1.6s infinite}
.ap-fx .ap-mapbox.is-in::after{animation:ap-ripple 2.6s ease-out 2.9s infinite}
@keyframes ap-ripple{0%{opacity:.9;transform:scale(.4)}100%{opacity:0;transform:scale(5)}}
.ap-fx .ap-formcard.is-in .elementor-field-group{animation:ap-cardin .7s var(--ap-ease) both}
.ap-fx .ap-formcard.is-in .elementor-field-group:nth-child(1){animation-delay:.25s}
.ap-fx .ap-formcard.is-in .elementor-field-group:nth-child(2){animation-delay:.32s}
.ap-fx .ap-formcard.is-in .elementor-field-group:nth-child(3){animation-delay:.4s}
.ap-fx .ap-formcard.is-in .elementor-field-group:nth-child(4){animation-delay:.47s}
.ap-fx .ap-formcard.is-in .elementor-field-group:nth-child(5){animation-delay:.55s}
.ap-fx .ap-formcard.is-in .elementor-field-group:nth-child(6){animation-delay:.62s}
.ap-fx .ap-formcard.is-in .elementor-field-group:nth-child(7){animation-delay:.7s}
.ap-fx .ap-formcard.is-in .elementor-field-group:nth-child(8){animation-delay:.78s}
.ap-fx .ap-infocard.is-in .ap-crow,.ap-fx .ap-infocard.is-in .ap-cpart{animation:ap-cardin .7s var(--ap-ease) both}
.ap-fx .ap-infocard.is-in .ap-crow:nth-child(1){animation-delay:.35s}
.ap-fx .ap-infocard.is-in .ap-crow:nth-child(2){animation-delay:.5s}
.ap-fx .ap-infocard.is-in .ap-crow:nth-child(3){animation-delay:.65s}
.ap-fx .ap-infocard.is-in .ap-cpart{animation-delay:.8s}
.ap-fx .ap-infocard.is-in .ap-cicon{animation:ap-pop .7s cubic-bezier(.3,1.6,.5,1) .5s backwards}
.ap-fx .ap-cform .elementor-field-type-submit .elementor-button{animation:ap-breathe 2.8s ease-out 2s infinite}
}
