Repository navigation
Two bugs that made the map fail outright on older browsers, plus a documented support floor. No API changes — this is a drop-in patch.
Fixed
Crash on mount, Safari/iOS ≤13. useReducedMotion and usePixelRatio called addEventListener on the object returned by matchMedia. Safari only made MediaQueryList an EventTarget in 14, so below that this threw TypeError: query.addEventListener is not a function during mount and took the consumer's React tree down with it. Both hooks now feature-detect and fall back to addListener/removeListener.
Invisible map on browsers without CSS aspect-ratio (Safari/iOS <15, Chrome <88, Firefox <89). A <ThreatMap> given no height derived one solely from aspect-ratio. Where that property is unimplemented the declaration is dropped, and since both canvases are absolutely positioned nothing else contributed height — the wrapper collapsed to zero and nothing rendered. It now falls back to a width-derived min-height.
inset: 0 shorthand on both canvases replaced with top/left longhand, since inset is itself only Safari 14.1+.
Added
A Browser support section in the README: the floor (Chrome/Edge 88, Firefox 89, Safari 15), why aspect-ratio sets it, and what degrades quietly on Safari <16. The package previously declared no browser support anywhere.
Notes
On browsers below the floor the map now renders at a derived height rather than not at all — a visible behaviour change, though strictly a fix.
Verified with a new regression suite covering a Safari 13-shaped MediaQueryList and a browser without aspect-ratio, and by measuring the animation frame-by-frame in real Microsoft Edge 152 and Chrome 152.