navigator.userAgent ('' outside a browser).
navigator.platform ('' outside a browser). iPadOS reports MacIntel.
navigator.maxTouchPoints (0 outside a browser / on a mouse-only device).
matchMedia('(pointer: coarse)').matches — the primary pointer is a finger.
matchMedia('(any-hover: hover)').matches — at least one pointer can hover.
navigator.hardwareConcurrency (0 when unknown).
Raw browser signals the profile is derived from (injectable for tests).