/* Granular entrance (js/focus.js): each readable element comes into focus once as it enters the viewport.
   Opacity 0→1 and blur 4px→0 (photos 5px) over 440ms, no delay, no movement. The classes are removed
   when the animation ends, so no filter or stacking context lingers. Without JS nothing here applies;
   with reduced motion everything is visible at once, even if the preference changes mid-animation. */
.fx-pending{opacity:0;filter:blur(4px)}
.fx-pending.fx-photo{filter:blur(5px)}
.fx-in{animation:fx-focus 440ms cubic-bezier(.25,.5,.35,1) both}
.fx-in.fx-photo{animation-name:fx-focus-photo}
@keyframes fx-focus{from{opacity:0;filter:blur(4px)}to{opacity:1;filter:blur(0)}}
@keyframes fx-focus-photo{from{opacity:0;filter:blur(5px)}to{opacity:1;filter:blur(0)}}
@media(prefers-reduced-motion:reduce){.fx-pending,.fx-in{opacity:1!important;filter:none!important;animation:none!important}}
