/* Independent layers preserve the existing portrait lift, masks, and shine. */
.hero-parallax:before{content:'';position:absolute;inset:-50px -20px;pointer-events:none;background:radial-gradient(ellipse at 80% 58%,#53b6c54a,transparent 64%);transform:translate3d(0,var(--hero-backdrop-shift,0px),0)}
.hero-parallax .hero-grid{position:relative;z-index:1}
.hero-parallax.parallax-visible:before{will-change:transform}
.approach-parallax .approach-photo{inset:-90px 0;transform:translate3d(0,var(--approach-photo-shift,0px),0)}
.approach-parallax .approach-photo img{filter:blur(1px) saturate(.7)}
.approach-parallax.parallax-visible .approach-photo{will-change:transform}
/* Overscan inside a fixed frame keeps the image from exposing its edges. */
.practice-gallery .practice-photo-window{display:block;height:clamp(210px,21vw,285px);overflow:hidden;background:#eaf1f4}
.practice-gallery .practice-photo-window img{height:100%;transform:translate3d(0,var(--gallery-photo-shift,0px),0) scale(1.15);transition:transform .14s linear}
.practice-gallery figure:hover .practice-photo-window img{transform:translate3d(0,var(--gallery-photo-shift,0px),0) scale(1.18)}
.practice-photo-window.parallax-visible img{will-change:transform}
@media(max-width:680px){
 .approach-parallax .approach-photo{inset:-60px 0}
 .practice-gallery .practice-photo-window{height:auto;aspect-ratio:1.5}
 .practice-gallery .practice-photo-window img{height:100%;aspect-ratio:auto}
}
@media(prefers-reduced-motion:reduce){
 .hero-parallax:before,.approach-parallax .approach-photo,.practice-gallery .practice-photo-window img,.practice-gallery figure:hover .practice-photo-window img{transform:none;will-change:auto;transition:none}
}
@media print{.hero-parallax:before{display:none}.practice-gallery .practice-photo-window{height:180px}.practice-gallery .practice-photo-window img{transform:none}}
