Background tabs, timers and reduced motion
Browsers throttle hidden tabs: setTimeout/setInterval fire at most once per second (once per minute after 5 minutes in Chrome), requestAnimationFrame does not fire at all, and the whole tab may be frozen. Signals, effects and DOM updates keep working synchronously; only time-based helpers are affected:
debounced(),throttled(),interval(),timeout(),@input.debounce.N— fire late, in order, never twice.poll()sleeps in a hidden tab by default ({ background: true }to keep polling);resource({ refetch: { focus } })refetches when the tab becomes visible.- Transitions and
spring()/tween()are rAF-driven; a 40 ms timer fallback finishes the CSS contract sohiddenand classes never get stuck. virtualScroll({ mode: 'window' })recomputes its window onvisibilitychange.resource({ offline: true })yields its IndexedDB connection when another tab upgrades the database and reports a blocked upgrade instead of hanging.
prefers-reduced-motion (an OS setting) turns every transition into an instant state change (defaults.motion === 'auto'). Tests and demos should pin defaults.motion = true or false explicitly.