/* ERRP motion layer: animated vector scenes built from the client's illustrations */
.motion-scene{position:relative;width:100%;aspect-ratio:3/2;border-radius:inherit;overflow:hidden}
.motion-scene svg{display:block;width:100%;height:100%}
.hero-art .motion-scene{border-radius:18px;box-shadow:0 30px 60px -30px rgba(22,35,61,.45)}
.sec-art .motion-scene{border-radius:16px}
.sec-art-wide .motion-scene{aspect-ratio:2/1}
@media(max-width:920px){.sec-art-wide .motion-scene{aspect-ratio:3/2}}
.has-motion>img{display:none}

.motion-scene *{transform-box:fill-box;transform-origin:center}
.motion-scene [transform]{transform-box:view-box;transform-origin:0 0}
.motion-scene .px{transition:transform .9s cubic-bezier(.2,.8,.2,1);transform:translate(calc(var(--mx,0)*var(--d,0)*1px),calc(var(--my,0)*var(--d,0)*1px))}

/* draw-on strokes (pathLength=1) */
.motion-scene .draw{stroke-dasharray:1;stroke-dashoffset:1;transition:stroke-dashoffset var(--dur,1.8s) cubic-bezier(.65,0,.25,1) var(--del,0s)}
.motion-scene.is-in .draw{stroke-dashoffset:0}
/* fade / pop / slide entrances */
.motion-scene .fade{opacity:0;transition:opacity var(--dur,1.2s) ease var(--del,0s)}
.motion-scene.is-in .fade{opacity:var(--o,1)}
.motion-scene .pop{opacity:0;transform:scale(.4);transition:opacity .9s ease var(--del,0s),transform 1.3s cubic-bezier(.2,1.25,.3,1) var(--del,0s)}
.motion-scene.is-in .pop{opacity:var(--o,1);transform:none}
.motion-scene .slide-l,.motion-scene .slide-r,.motion-scene .slide-u,.motion-scene .slide-d{opacity:0;transition:opacity 1s ease var(--del,0s),transform var(--dur,1.6s) cubic-bezier(.16,1,.3,1) var(--del,0s)}
.motion-scene .slide-l{transform:translateX(calc(var(--s,90)*-1px))}
.motion-scene .slide-r{transform:translateX(calc(var(--s,90)*1px))}
.motion-scene .slide-u{transform:translateY(calc(var(--s,60)*1px))}
.motion-scene .slide-d{transform:translateY(calc(var(--s,60)*-1px))}
.motion-scene.is-in :is(.slide-l,.slide-r,.slide-u,.slide-d){opacity:var(--o,1);transform:none}
.motion-scene .grow{transform-origin:bottom center;transform:scaleY(0);transition:transform 1.4s cubic-bezier(.16,1,.3,1) var(--del,0s)}
.motion-scene.is-in .grow{transform:none}

/* ambient loops (only run while visible) */
.motion-scene .float{animation:m-float var(--t,7s) ease-in-out var(--del,0s) infinite alternate;animation-play-state:paused}
.motion-scene .pulse{animation:m-pulse var(--t,4s) ease-in-out infinite;animation-play-state:paused}
.motion-scene .breathe{animation:m-breathe var(--t,6s) ease-in-out infinite alternate;animation-play-state:paused}
.motion-scene .sway{transform-origin:bottom center;animation:m-sway var(--t,8s) ease-in-out infinite alternate;animation-play-state:paused}
.motion-scene .drift{animation:m-drift var(--t,12s) ease-in-out infinite alternate;animation-play-state:paused}
.motion-scene .spin{transform-origin:center;transform-box:view-box;animation:m-spin var(--t,40s) linear infinite;animation-direction:var(--dir,normal);animation-play-state:paused}
.motion-scene .twinkle{animation:m-twinkle var(--t,3s) ease-in-out var(--del,0s) infinite;animation-play-state:paused}
.motion-scene .shimmer{animation:m-shimmer var(--t,5s) ease-in-out infinite alternate;animation-play-state:paused}
.motion-scene.is-playing :is(.float,.pulse,.breathe,.sway,.drift,.spin,.twinkle,.shimmer){animation-play-state:running}
@keyframes m-float{to{transform:translate(var(--fx,6px),var(--fy,-14px))}}
@keyframes m-pulse{0%,100%{transform:scale(1);opacity:var(--o,1)}50%{transform:scale(var(--k,1.35));opacity:calc(var(--o,1)*.55)}}
@keyframes m-breathe{to{transform:scale(var(--k,1.03))}}
@keyframes m-sway{from{transform:rotate(calc(var(--a,1.2)*-1deg))}to{transform:rotate(calc(var(--a,1.2)*1deg))}}
@keyframes m-drift{from{transform:translateX(calc(var(--x,30)*-1px)) scaleY(.92)}to{transform:translateX(calc(var(--x,30)*1px)) scaleY(1.08)}}
@keyframes m-spin{to{transform:rotate(360deg)}}
@keyframes m-twinkle{0%,100%{opacity:.25}50%{opacity:1}}
@keyframes m-shimmer{from{opacity:.18;transform:scaleY(.94)}to{opacity:.42;transform:scaleY(1.04)}}

/* word-by-word heading reveal */
.mw{display:inline-block;overflow:hidden;vertical-align:top;padding:0 .06em .12em 0;margin:0 -.06em -.12em 0}
.mw>span{display:inline-block;transform:translateY(110%);transition:transform 1s cubic-bezier(.16,1,.3,1);transition-delay:calc(var(--i,0)*60ms + .1s)}
.on .mw>span,.mw.on>span{transform:none}

/* 4R progress rail */
.fw-wrap{position:relative}
.fw-rail{position:absolute;left:0;right:0;top:-1px;height:3px;z-index:2;pointer-events:none;background:rgba(191,155,48,.18)}
.fw-rail i{position:absolute;inset:0 auto 0 0;width:calc(var(--p,0)*100%);background:linear-gradient(90deg,#BF9B30,#E8705E);box-shadow:0 0 18px rgba(232,112,94,.55)}
.fw-phase{transition:background .6s ease,transform .6s cubic-bezier(.16,1,.3,1),box-shadow .6s ease}
.fw-phase .fw-no{transition:color .5s ease,transform .6s cubic-bezier(.2,1.3,.3,1);display:inline-block}
.fw-phase.lit .fw-no{transform:scale(1.35);transform-origin:left center}
.fw-phase.lit{box-shadow:inset 0 3px 0 #E8705E}
.program .fw-phase.lit{background:#fffdf8}
.evidence .fw-phase.lit{background:#1d2c4b}
.fw-phase .fw-name{transition:letter-spacing .8s ease}
.fw-phase.lit .fw-name{letter-spacing:.01em}

/* magnetic buttons */
.magnet{transition:transform .35s cubic-bezier(.2,.8,.2,1)!important}

@media (prefers-reduced-motion:reduce){
  .motion-scene *,.mw>span,.fw-phase,.fw-phase .fw-no{transition:none!important;animation:none!important}
  .mw>span{transform:none}
}
@media(max-width:920px){.fw-rail{display:none}}
