/* Motion is visual, progressive and never a prerequisite for readable content. */
@keyframes apxShineBand{from{background-position:180% 0}to{background-position:-180% 0}}

@keyframes apxRisingInk{from{clip-path:inset(0 100% 0 0);transform:translateY(15px);filter:blur(5px)}to{clip-path:inset(0 0 0 0);transform:translateY(0);filter:blur(0)}}
@keyframes apxTextLift{from{opacity:.18;transform:translateY(20px);filter:blur(5px)}to{opacity:1;transform:none;filter:none}}
.apx-site [data-apx-scene]{--mx:60%;--my:30%;position:relative}
/* Section-level rectangular glow removed; continuous canvas is painted by main. */
.apx-site [data-apx-scene]::after{content:none}
.apx-site [data-apx-scene]>.apx-container{position:relative;z-index:1}
/* Transform layer hints for moving hero elements are owned by the desktop experience. */
.apx-site .apx-contact-scene :where(a,button),.apx-site .apx-related :where(a,button){-webkit-tap-highlight-color:transparent}
.apx-site [data-apx-revealed]{animation:apxTextLift .72s cubic-bezier(.19,.83,.22,1) both}
.apx-site [data-apx-revealed="headline"]{animation:apxRisingInk .85s cubic-bezier(.17,.85,.2,1) both}


/* v15 optical motion: ambient stage by semantic Drupal region, zero content manipulation. */
.apx-site{--apx-pointer-x:50vw;--apx-pointer-y:50vh}
.apx-cursor-halo{position:fixed;z-index:290;top:0;left:0;width:310px;height:310px;transform:translate3d(calc(var(--apx-pointer-x) - 50%),calc(var(--apx-pointer-y) - 50%),0);border-radius:50%;pointer-events:none;opacity:0;background:radial-gradient(circle,#76ffe730 0,#72caff14 36%,transparent 68%);mix-blend-mode:screen;transition:opacity .35s}
.apx-site.apx-pointer-active .apx-cursor-halo{opacity:.95}






/* Each layer has distinguishable animation; all geometry is pointer transparent. */
.apx-site [data-apx-scene]{isolation:isolate}
.apx-site [data-apx-scene]::after{pointer-events:none}
.apx-site .apx-hero__mesh{animation:apxStageMesh 26s linear infinite alternate}
@keyframes apxStageMesh{0%{translate:0 0}100%{translate:42px -32px}}
.apx-site .apx-service-story::after{content:none}

.apx-site .apx-offer-band::after{content:"";position:absolute;inset:-25%;pointer-events:none;z-index:-1;background:linear-gradient(115deg,transparent 33%,#ffffff52 47%,transparent 62%);transform:translateX(-90%);animation:apxPriceSweep 11s ease-in-out infinite}
@keyframes apxPriceSweep{0%,25%{transform:translateX(-110%)}65%,100%{transform:translateX(100%)}}


.apx-site .apx-intro-scene::after{content:"";position:absolute;inset:-40%;pointer-events:none;background:linear-gradient(108deg,transparent 35%,#a6f9ef16 49%,transparent 62%);transform:translateX(-90%);animation:apxIntroSweep 11s ease-in-out infinite}
@keyframes apxIntroSweep{0%,20%{transform:translateX(-115%)}58%,100%{transform:translateX(95%)}}

@media screen and (min-width:1121px) and (prefers-reduced-motion:no-preference){
  .apx-site :is(.apx-hero__mesh,.apx-hero__orbit,.apx-hero__orb,.apx-contact-scene__aurora),
  .apx-site .apx-cursor-halo{will-change:transform}
}
@media(hover:none),(pointer:coarse),(prefers-reduced-motion:reduce){.apx-cursor-halo{display:none}}
@media(prefers-reduced-motion:reduce){.apx-site .apx-hero__mesh,.apx-site .apx-service-story::after,.apx-site .apx-offer-band::after,.apx-site .apx-intro-scene::after{animation:none}}
