/* Short, compositor-friendly motion on controls rather than every DOM update. */
:root{--motion-press:90ms;--motion-hover:140ms;--motion-ease:cubic-bezier(.2,.8,.2,1)}
:where(button,.button,.practice-nav a,summary,.booking-event,.patient-list-card,.imported-medicine){transition:translate var(--motion-hover) var(--motion-ease),scale var(--motion-press) var(--motion-ease);}
button,.button,.practice-nav a,summary,.booking-event,.patient-list-card,.imported-medicine{transition-property:translate,scale;transition-duration:var(--motion-hover),var(--motion-press);transition-timing-function:var(--motion-ease);}
@media(hover:hover) and (pointer:fine){
 button:not(:disabled):not([aria-busy="true"]):hover,.button:not([aria-disabled="true"]):hover,.practice-nav a:hover,summary:hover,.booking-event:hover,.patient-list-card:hover,.imported-medicine:hover{translate:0 -2px}
}
button:not(:disabled):not([aria-busy="true"]):active,.button:not([aria-disabled="true"]):active,.practice-nav a:active,.booking-event:active{scale:.98;translate:0 0}
button:disabled,button[aria-busy="true"],.button[aria-disabled="true"]{translate:none;scale:none}
.motion-closing{pointer-events:none}
/* Keep geometrically positioned controls on their existing transforms. */
.ios-date-trigger,.agenda-manage{transition-property:scale}.ios-date-trigger:hover,.agenda-manage:hover{translate:none}
.quick-prescription-widget{transition-property:translate,scale;transition-duration:var(--motion-hover),var(--motion-press)}
.pen-dose>span{transition:scale var(--motion-press) var(--motion-ease)}
@media(hover:hover) and (pointer:fine){.pen-dose:has(input:not(:disabled)):hover>span{scale:1.025}}
@media(prefers-reduced-motion:reduce){
 button,.button,.practice-nav a,summary,.booking-event,.patient-list-card,.imported-medicine,.pen-dose>span{transition:none!important;translate:none!important;scale:none!important}
}
/* Opening and closing use transform/opacity; backdrop blur stays at its fixed value. */

@media print{*,*::before,*::after{animation:none!important;transition:none!important}}
