/* Shared, restrained motion. Gradients are painted once; only transforms/opacity animate. */
.im-cursor{position:fixed;top:0;left:0;width:36px;height:36px;border:1px solid rgba(var(--motion-color),.55);border-radius:50%;pointer-events:none;z-index:100;opacity:0;transition:opacity .2s;background:transparent}
.im-cursor:after{content:'';position:absolute;inset:5px;border-radius:50%;background:rgba(var(--motion-color),.1);transition:transform .25s}.im-cursor-link:after{transform:scale(1.65)}
.im-progress{position:fixed;top:0;left:0;right:0;height:2px;z-index:101;background:rgb(var(--motion-color));transform:scaleX(0);transform-origin:left;pointer-events:none}
.im-scene{position:relative;overflow:hidden;isolation:isolate}.im-ambient{position:absolute;inset:0;pointer-events:none;z-index:-1;overflow:hidden;contain:paint}
.im-ambient:before{content:'';position:absolute;inset:-40px;background:linear-gradient(90deg,transparent 46%,rgba(var(--motion-color),.13) 50%,transparent 54%),repeating-linear-gradient(90deg,rgba(var(--motion-color),.045) 0 1px,transparent 1px 88px),repeating-linear-gradient(0deg,rgba(var(--motion-color),.045) 0 1px,transparent 1px 88px);transform:translate3d(-20px,0,0);animation:im-drift 18s ease-in-out infinite alternate;animation-play-state:paused}
.im-motion-on .im-in-view .im-ambient:before{animation-play-state:running}.im-motion-paused .im-ambient:before{animation-play-state:paused!important}
@keyframes im-drift{to{transform:translate3d(24px,-18px,0)}}
.im-motion-toggle{grid-column:1/-1;justify-self:start;display:inline-flex;align-items:center;gap:8px;background:none;border:1px solid #b4c4bb;border-radius:4px;padding:9px 12px;font:inherit;font-size:12px;line-height:1.4;min-height:40px;color:#435b50;cursor:pointer}.im-motion-toggle:before{content:'';width:6px;height:6px;border:1px solid currentColor;border-radius:50%}.im-motion-toggle[aria-pressed=false]:before{background:currentColor}.im-motion-toggle:focus-visible{outline:2px solid currentColor;outline-offset:3px}
/* Replace the older per-page reveal animations with the shared observer. */
.reveal{animation:none!important}.im-motion-on .brand-contact span,.im-motion-on .hub-arrow,.im-motion-on .button>span{transition:transform .3s cubic-bezier(.2,.7,.2,1)}
@media(hover:hover) and (pointer:fine){.im-motion-on .hub-option,.im-motion-on .service-card{translate:var(--im-x,0px) var(--im-y,0px);transition:translate .3s ease-out}.im-motion-on .brand-contact:hover span,.im-motion-on .button:hover>span{transform:translate(2px,-2px)}.im-motion-on .hub-option:hover .hub-arrow{transform:translate(3px,-3px)}.brand-nav a{position:relative}.brand-nav a:before{content:'';position:absolute;height:1px;bottom:7px;left:0;right:0;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform .25s}.brand-nav a:hover:before,.brand-nav a:focus-visible:before{transform:scaleX(1)}}
@media(hover:none),(pointer:coarse){.im-cursor{display:none}.im-ambient:before{animation:none!important}}
.im-motion-paused .im-cursor{display:none}.im-motion-paused .hero-photo,.im-motion-paused .hero-image,.im-motion-paused .hub-option,.im-motion-paused .service-card{translate:none!important;transform:none!important}
@media(prefers-reduced-motion:reduce){.im-cursor,.im-ambient{display:none}html{scroll-behavior:auto!important}*,*:before,*:after{animation:none!important;transition:none!important}.reveal{opacity:1!important;transform:none!important;translate:none!important}}

/* Two halves of the title photograph open around their outer edges. */
.im-window-entry{position:absolute;inset:0;z-index:-1;pointer-events:none;perspective:1400px;overflow:hidden;contain:paint}
.im-window-leaf{position:absolute;top:0;bottom:0;width:50%;overflow:hidden;backface-visibility:hidden;box-shadow:inset 0 0 0 1px #d6eae044;will-change:transform,opacity}
.im-window-left{left:0;transform-origin:left center}.im-window-right{right:0;transform-origin:right center}
.im-window-photo{position:absolute;top:0;bottom:0;width:200%;background-position:center;background-size:cover}.im-window-left .im-window-photo{left:0}.im-window-right .im-window-photo{right:0}
@media(prefers-reduced-motion:reduce){.im-window-entry{display:none}}
