/* Global defaults. Add mvm-animate (rise), mvm-animate-fade or
   mvm-animate-left/right to a block; mvm-no-motion opts out a subtree. */
:root{--mvm-motion-duration:680ms;--mvm-motion-distance:20px;--mvm-motion-ease:cubic-bezier(.22,.61,.36,1)}
/* Retire legacy load animations that conflict with scroll reveals. */
html body .mvm-site :is(.mvm-section,.mvm-strip,.mvm-card,.mvm-project-highlight,.mvm-project-step,.mvm-project-gallery figure,.mvm-footer-main,.mvm-footer-bottom,.mvm-reveal),
html body .mvm-site :is(.mvm-hero,.mvm-page-hero,.mvm-project-hero) .mvm-wrap,
html body .mvm-site :is(.mvm-hero,.mvm-page-hero,.mvm-project-hero) .mvm-wrap > *,
html body .mvm-site :is(.mvm-hero-bg,.mvm-project-hero-bg){animation:none!important;animation-timeline:auto!important}
html body .mvm-site .mvm-reveal{opacity:1!important;transform:none!important}
html body .mvm-motion-target{animation:none!important;opacity:1!important;translate:0 0;transition:opacity var(--mvm-motion-duration) var(--mvm-motion-ease),translate var(--mvm-motion-duration) var(--mvm-motion-ease),transform .35s ease,box-shadow .35s ease!important;transition-delay:var(--mvm-motion-delay,0ms),var(--mvm-motion-delay,0ms),0ms,0ms!important}
html body .mvm-motion-target.mvm-motion-pending{opacity:0!important;translate:0 var(--mvm-motion-distance)}
html body .mvm-motion-target.mvm-motion-pending:not(.mvm-motion-armed){transition:none!important}
html body .mvm-motion-target.mvm-motion-pending.mvm-animate-fade{translate:0 0}
html body .mvm-motion-target.mvm-motion-pending.mvm-animate-left{translate:calc(-1 * var(--mvm-motion-distance)) 0}
html body .mvm-motion-target.mvm-motion-pending.mvm-animate-right{translate:var(--mvm-motion-distance) 0}
html body .mvm-motion-target:focus-within{opacity:1!important;translate:0 0!important;transition:none!important}
@media(max-width:782px){:root{--mvm-motion-distance:14px;--mvm-motion-duration:560ms}}
@media(prefers-reduced-motion:reduce){
 html{scroll-behavior:auto!important}
}
/* Keep entrances in reduced mode, using a short fade with no spatial movement. */
html[data-mvm-motion="reduced"] body .mvm-motion-target,
html[data-mvm-motion="reduced"] body .mvm-motion-target.mvm-motion-pending{
 translate:0 0!important;
 transition:opacity .35s ease-out!important;
 transition-delay:0ms!important;
}
html[data-mvm-motion="reduced"] body .mvm-motion-target.mvm-motion-pending:not(.mvm-motion-armed){transition:none!important}
html[data-mvm-motion="reduced"] body .mvm-motion-target:focus-within{opacity:1!important;translate:0 0!important;transition:none!important}
/* Only an explicit diagnostic opt-in overrides the operating-system preference. */
html[data-mvm-motion="forced"] body .mvm-motion-target{
 opacity:1!important;translate:0 0!important;
 transition:opacity var(--mvm-motion-duration) var(--mvm-motion-ease),translate var(--mvm-motion-duration) var(--mvm-motion-ease),transform .35s ease,box-shadow .35s ease!important;
 transition-delay:var(--mvm-motion-delay,0ms),var(--mvm-motion-delay,0ms),0ms,0ms!important;
}
html[data-mvm-motion="forced"] body .mvm-motion-target.mvm-motion-pending{opacity:0!important;translate:0 var(--mvm-motion-distance)!important}
html[data-mvm-motion="forced"] body .mvm-motion-target.mvm-motion-pending:not(.mvm-motion-armed){transition:none!important}
html[data-mvm-motion="forced"] body .mvm-motion-target.mvm-motion-pending.mvm-animate-fade{translate:0 0!important}
html[data-mvm-motion="forced"] body .mvm-motion-target.mvm-motion-pending.mvm-animate-left{translate:calc(-1 * var(--mvm-motion-distance)) 0!important}
html[data-mvm-motion="forced"] body .mvm-motion-target.mvm-motion-pending.mvm-animate-right{translate:var(--mvm-motion-distance) 0!important}
html[data-mvm-motion="forced"] body .mvm-motion-target:focus-within{opacity:1!important;translate:0 0!important;transition:none!important}
