/* The sole photo-hover implementation. No clones, wrappers, tilt or pointer JS. */
.photo-frame{overflow:hidden;position:relative}
body .hover-photo{transform:scale(1);transform-origin:50% 50%;transition:transform 300ms cubic-bezier(.23,1,.32,1),filter 300ms cubic-bezier(.23,1,.32,1)}
body[data-motion=expressive] .hover-photo{filter:grayscale(1)}
@media(hover:hover) and (pointer:fine){body .photo-frame:hover .hover-photo{transform:scale(1.025);filter:grayscale(0)}}
body .photo-frame:focus-visible .hover-photo{filter:grayscale(0)}
@media(hover:none),(prefers-reduced-motion:reduce){body .hover-photo,body .photo-frame:hover .hover-photo{transform:none;filter:none;transition:none;will-change:auto}}
/* Canvas mode bypasses the CSS hover path entirely. Original image retains alt/layout. */
.photo-canvas{position:absolute;pointer-events:none;transform:none;filter:none}
body .canvas-photo .hover-photo,body .canvas-photo:hover .hover-photo{opacity:0;transform:none;filter:none;transition:none;will-change:auto}
@media(hover:none),(prefers-reduced-motion:reduce){.photo-canvas{display:none}body .canvas-photo .hover-photo{opacity:1}}
