/* Shared motion styles. Duration/easing tokens live in css/site.css.
   js/motion.js adds finite entrances and the existing navigation springs.
   See SHELL.md, Motion. */

/* Navigation keeps the established shell timing and spring response. */
.site-header .logo img{transform-origin:0 50%}
.nav-list a,.nav-list button.nav-tab{transition:background-color var(--menu-fade) var(--ease-standard)}
.menu{transform-origin:0 0}
.has-menu[data-leaving]>.menu{display:block;pointer-events:none}
.menu__card img,.menu__lab .arr{transition:none}
.nav-list .menu .menu__card::after{transition:border-color var(--dur-fast) var(--ease-standard)}
.nav-tab .chev{transform-origin:50% 50%}
.mbar{z-index:90}

/* ---------- mobile menu: sheet is moved by motion.js; accordion rows use the grid-rows technique on spring.smooth ---------- */
.nav-leaving .site-nav{display:block}
@media (max-width:1279.98px){
  .site-nav .has-menu>.menu,.site-nav .has-menu.open>.menu{display:grid;grid-template-rows:0fr;padding:0;visibility:hidden;overflow:hidden;transition:none}
  .site-nav .has-menu.open>.menu{grid-template-rows:1fr;visibility:visible;transition-delay:0s,0s}
  .site-nav .menu__list{min-height:0;overflow:hidden;opacity:0;transition:opacity var(--menu-fade) var(--ease-exit)}
  .site-nav .has-menu.open .menu__list{opacity:1;transition:opacity var(--menu-rows) var(--ease-standard) 50ms}
  .site-nav .menu__list>li:first-child{margin-top:14px}
  .site-nav .menu__list>li:last-child{margin-bottom:18px}
}

/* ---------- stars fill left to right on first view ---------- */
.has-reveal .stars svg{fill:var(--line)}
.has-reveal .stars.is-in svg{fill:var(--orange);transition:fill var(--dur-base) var(--ease-standard) calc(var(--k,0) * var(--stagger-tight))}
.has-reveal .stars.is-instant svg{transition:none}

/* ---------- stepped forms ---------- */
.hq,.est{position:relative}
.hq__bar i,.est__bar i{position:relative;overflow:hidden;background:var(--line)}
.hq__bar i.is-on,.est__bar i.is-on{background:var(--line)}
.hq__bar i::before,.est__bar i::before{content:"";position:absolute;inset:0;border-radius:inherit;background:var(--orange);transform:scaleX(var(--fill,0));transform-origin:0 50%}
.est__bar i::before{background:var(--orange)}
.hq__bar i.is-on:not([style*="--fill"])::before,.est__bar i.is-on:not([style*="--fill"])::before{transform:scaleX(1)}
.hq__tile span,.hq .field input,.est .field input,.est .field select,.est .field textarea,.hq__in{transition:border-color var(--dur-fast) var(--ease-standard),background-color var(--dur-fast) var(--ease-standard)}
.m-check{display:block;width:56px;height:56px;margin:0 0 14px;overflow:visible}
.m-check circle{stroke:var(--orange)}
.m-check path{stroke:var(--ink)}

/* ---------- testimonial quotes and carousels: crossfade on dur.slow (the slide itself is a spring in motion.js) ---------- */
.h-rev__q{visibility:hidden;transition:opacity var(--dur-slow) var(--ease-standard)}
.h-rev__q.is-on{visibility:visible;transition:opacity var(--dur-slow) var(--ease-standard)}
.carousel__slide,.mx-slide{transition:opacity var(--dur-slow) var(--ease-standard)}

/* ---------- hover lifts only where a pointer can hover ---------- */
@media (hover:none){.menu__card:hover img,.svc:hover,.svc:hover img{transform:none}}


/* Shared motion contract. The resting document is always complete and visible.
   Reveal/hero opacity is owned exclusively by finite WAAPI animations. */
.rv,[data-motion="reveal"]{opacity:1}
.site-header{grid-template-rows:100px;transition:none}
.site-header.is-stuck{grid-template-rows:72px}
.site-header .logo img{transition:none}
.site-header.is-stuck .logo img{transform:scale(.86)}
.btn,.menu-toggle{transition:background-color var(--dur-1) var(--ease-out),color var(--dur-1) var(--ease-out),filter var(--dur-1) var(--ease-out)}
.btn:hover,.menu-toggle:hover{filter:brightness(.94)}
.on-dark .btn--dark:hover{filter:brightness(1.06)}
.btn:active,.menu-toggle:active{transform:translateY(1px);transition:filter var(--dur-1) var(--ease-out)}
main a:not(.btn):not(:has(img)),.link-under,.more{background-image:linear-gradient(currentColor,currentColor);background-repeat:no-repeat;background-position:0 100%;background-size:0 1px;text-decoration:none;transition:background-size var(--dur-2) var(--ease-out)}
main a:not(.btn):not(:has(img)):hover,.link-under:hover,.more:hover{background-size:100% 1px}
.motion-tile{transition:box-shadow var(--dur-2) var(--ease-out)}
.motion-tile img{transition:none}
@media(hover:hover){
  .motion-tile:is(a:not(.cta-text),button,.card--link,[role=button]):hover{transform:translateY(-4px);box-shadow:0 12px 24px rgb(20 20 20 / .16)}
  .motion-tile:is(a:not(.cta-text),button,.card--link,[role=button]):hover img{transform:scale(1.04)}
}
m-acc,.motion-acc-panel,.acc-js .acc__panel{display:grid;grid-template-rows:0fr;transition:none}
m-in,.motion-acc-panel>:is(.ab-acc__body,.mx-acc__panel){display:block;min-height:0;overflow:hidden;opacity:1}
.motion-acc-panel>:is(.ab-acc__body,.mx-acc__panel){margin:0;padding:0}
.motion-acc-panel>:is(.ab-acc__body,.mx-acc__panel)>p{padding:18px 22px}
details[data-m-open]>m-acc,.motion-acc-panel.is-open,.acc-js .acc__item.is-open .acc__panel{grid-template-rows:1fr}
.acc-js .acc__panel>div{min-height:0;visibility:visible;opacity:1;transition:none}
main details>summary,main .acc__btn,main .ab-acc__btn,main .mx-acc__btn{background:var(--surface)!important;color:var(--ink)!important;border-left:4px solid var(--orange);min-height:48px;transition:background-color var(--dur-2) var(--ease-out)}
main details[data-m-open]>summary,main .acc__item.is-open .acc__btn,main .ab-acc__btn[aria-expanded="true"],main .mx-acc__btn[aria-expanded="true"]{background:var(--orange)!important;color:var(--ink)!important}
main details>summary::after{content:"";display:block;flex:none;width:10px;height:10px;border:0;background:none;mask:none;-webkit-mask:none;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg)!important;margin:0!important;transition:none}
main details[data-m-open]>summary::after{transform:rotate(225deg)!important;margin:0!important}
.acc__btn svg,.ab-acc__btn svg,.mx-acc__chev{transition:none}
.motion-counter{font-variant-numeric:tabular-nums}
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .rv,[data-motion="reveal"]{opacity:1!important;translate:none!important;animation:none!important}
  .motion-tile,.motion-tile img,.site-header,.site-header .logo img{transition:none}
  .motion-tile:is(a:not(.cta-text),button,.card--link,[role=button]):hover,.motion-tile:is(a:not(.cta-text),button,.card--link,[role=button]):hover img{transform:none!important}
  m-acc,.motion-acc-panel,.acc-js .acc__panel{transition:none}
  .acc__btn svg,.ab-acc__btn svg,.mx-acc__chev,main details>summary::after{transition:none}
  .site-nav .has-menu>.menu,.site-nav .has-menu.open>.menu{transition:none}
}

/* Spring values write these properties each frame, including during reversal. */
.site-header{transition:none}.site-header .logo img{transition:none}
.has-menu[data-leaving]>.menu{visibility:visible}
.menu__list>li,.has-menu.open .menu__list>li{opacity:1;transform:none;transition:none}
.btn:active,.menu-toggle:active{transform:none}
@media(hover:hover){.motion-tile:is(a:not(.cta-text),button,.card--link,[role=button]):hover{transform:none}.motion-tile:is(a:not(.cta-text),button,.card--link,[role=button]):hover img{transform:none}}
main details>summary::after{display:none}
m-acc{transition:none}
.menu,.site-nav,.carousel-engine,.est__step,.hq__pane{transition-property:opacity!important;transition-duration:0s!important}

/* The benefits track is a constant 40px/s linear scrub; reduced motion wraps. */
.motion-marquee{overflow:hidden}
.motion-marquee .h-ben__list{display:flex;position:relative;max-width:none;width:max-content;margin:0;padding-inline:24px;gap:40px}
.motion-marquee .h-ben__list>li{flex:none;align-items:center;min-height:32px}
.has-reveal .h-sys__fig .lyr{opacity:1;transform:none;animation:none}
@media(prefers-reduced-motion:reduce){.motion-marquee .h-ben__list{display:grid;width:auto;max-width:var(--wrap);margin:auto;transform:none!important}.motion-marquee [data-motion-clone]{display:none}}

.nav-tab .ico-plus::after{transform:rotate(var(--plus-angle,0deg))!important}
.menu-toggle .ico-plus::after,main summary .ico-plus::after{transform:none!important}
.m-check path{stroke:var(--orange)}
