iOS Safari reports matchMedia('(any-pointer:fine)') as true on iPhone,
so _hasFinePointerCoexisting() wrongly vetoed the touch-device default
and plain Enter fell through to send().
- boot.js: _isTouchOnlyDevice() makes phone/tablet UA authoritative,
no longer vetoed by any-pointer:fine; iPadOS-as-Macintosh detected
via maxTouchPoints; media-query pair is fallback for non-phone touch
devices. Composer handler reads live window._sendKey on every keydown
so Settings changes take effect without reload.
- index.html: capture-phase interceptor removed; boot.js handler alone
covers the mobile newline case (initial _sendKey already synced from
localStorage synchronously, closing the async race).
- tests/test_send_key_preference_live_update.py: Playwright regression
test verifies all three send-key modes and all transitions work after
runtime preference change.