/* Finite animations are owned by WAAPI. No permanent GPU promotion or blur. */
.motion-title{display:block;position:relative}
.motion-pending{opacity:0}
.node-detail.is-changing{animation:none}
.button,.portal-projection .button{transition:background-color .2s,border-color .2s,color .2s,box-shadow .25s,translate .35s cubic-bezier(.16,1,.3,1)}
.button.is-pointed{translate:0 -3px}
.contact-card>a>svg,.contact-dock svg,.portal-mode svg,.round-button svg{transition:transform .35s cubic-bezier(.16,1,.3,1)}
.contact-card>a.is-pointed>svg,.contact-card>a:focus-visible>svg{transform:translateY(-3px) scale(1.07)}
.contact-dock>a:hover svg,.contact-dock>a:focus-visible svg,.portal-mode:hover svg{transform:scale(1.09)}
.gallery-controls #prevCase:is(:hover,:focus-visible) svg{transform:translateX(-2px)}
.gallery-controls #nextCase:is(:hover,:focus-visible) svg{transform:translateX(2px)}
.case-filters button,.portal-mode,.round-button{transition:background-color .25s,border-color .25s,color .25s,scale .2s}
.case-filters button:active,.portal-mode:active,.round-button:active{scale:.94}
@media(hover:none) and (pointer:coarse){.button.is-pointed{translate:none}.contact-dock>a:hover svg,.portal-mode:hover svg{transform:none}}
@media(prefers-reduced-motion:reduce){
 .motion-pending{opacity:1!important}
 .button,.portal-projection .button,.contact-card>a>svg,.contact-dock svg,.portal-mode svg,.round-button svg,.case-filters button,.portal-mode,.round-button{transition:none}
 .button.is-pointed{translate:none}.contact-card>a.is-pointed>svg{transform:none}
}
@media(forced-colors:active){.motion-pending{opacity:1!important}}
