Derive the profile from raw signals. Pure — this is the unit-test surface.
hoverCapable is anyHover || !coarsePointer: a fine primary pointer is a
mouse or trackpad and can hover even where matchMedia is unavailable, so
the no-signal default (node, jsdom, old browsers) stays "desktop".
Derive the profile from raw signals. Pure — this is the unit-test surface.
hoverCapableisanyHover || !coarsePointer: a fine primary pointer is a mouse or trackpad and can hover even wherematchMediais unavailable, so the no-signal default (node, jsdom, old browsers) stays "desktop".