/* Scroll changes imagery, never the position or legibility of the main copy. */
.motion-ready .hero h1{animation:headline-arrive .95s cubic-bezier(.22,1,.36,1) both}
.motion-ready .hero-copy>.actions{animation:action-arrive .75s .12s cubic-bezier(.22,1,.36,1) backwards}
.motion-ready .client-hero-image{animation:photo-arrive 1.2s cubic-bezier(.22,1,.36,1) both;overflow:hidden;clip-path:inset(0 round var(--photo-round,0px))}
.motion-ready .client-hero-image>img{scale:var(--photo-zoom,1);transform-origin:55% 55%;will-change:scale}
.motion-ready .client-reveal{opacity:0;transform:translateY(22px);transition:opacity .8s cubic-bezier(.22,1,.36,1),transform 1s cubic-bezier(.22,1,.36,1)}
.motion-ready .client-reveal.client-visible{opacity:1;transform:translateY(0)}
.motion-ready .gallery figure{transform:perspective(1200px) translateY(var(--gallery-y,0px)) rotateZ(var(--gallery-rotate,0deg)) rotateX(var(--hover-x,0deg)) rotateY(var(--hover-y,0deg)) scale(var(--gallery-scale,1));transform-origin:center;overflow:visible;will-change:transform}
.motion-ready .gallery figure img{transform:translateY(var(--image-y,0px));transition:filter .5s;border-radius:inherit}
.motion-ready .gallery figure:hover img{filter:saturate(1.1) contrast(1.04)}
.motion-ready .service-tabs button{transition:background .3s,color .3s,border-color .3s,box-shadow .3s;position:relative}
.motion-ready .service-tabs button[aria-selected=true]{box-shadow:inset 0 -4px 0 #ffffff38}
.motion-ready .tabbed-services,.motion-ready .booking{overflow:clip}
.motion-ready .button,.motion-ready .btn{transition:background .25s,color .25s,box-shadow .3s,transform .35s cubic-bezier(.22,1,.36,1)}
.motion-ready .button:hover,.motion-ready .btn:hover{transform:translateY(-3px)}
.motion-ready .button:active,.motion-ready .btn:active{transform:translateY(0) scale(.98)}
.motion-ready .mobile-cta:hover{transform:none}
.motion-ready details[open]>:not(summary){animation:action-arrive .45s cubic-bezier(.22,1,.36,1) both}
@keyframes headline-arrive{from{transform:translateY(22px);opacity:.45}to{transform:none;opacity:1}}
@keyframes action-arrive{from{transform:translateY(12px);opacity:.6}to{transform:none;opacity:1}}
@keyframes photo-arrive{from{opacity:.4;transform:perspective(1200px) rotateY(-7deg) scale(.96)}to{opacity:1;transform:perspective(1200px) rotateY(0) scale(1)}}
@media(max-width:800px){.motion-ready .gallery figure{transform:translateY(calc(var(--gallery-y,0px)*.4));will-change:auto}.motion-ready .client-hero-image>img{will-change:auto}.motion-ready .client-reveal{transform:translateY(12px)}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto!important}*,*:before,*:after{animation:none!important;transition:none!important}.client-reveal{opacity:1!important;transform:none!important}.gallery figure,.gallery figure img,.client-hero-image,.client-hero-image>img{transform:none!important;scale:1!important;clip-path:none!important}}
