Detect Safari by its exact user agent tail instead of a "Safari/" token
plus an exclusion list, so third-party iOS browsers such as MQQBrowser
no longer get the hint. When storage cannot be read or written, keep the
hint visible and show an error banner with Retry instead of treating the
dismissal as saved.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
InstallHint shows "Tap Share, then Add to Home Screen to get notifications"
only in iOS and iPadOS Safari browser tabs (not when display-mode is
standalone or navigator.standalone is true), since iOS delivers Web Push
only to installed apps. Dismissing it is remembered per device in
localStorage; when storage is unavailable the hint still shows and
dismisses for the page's lifetime. Exported from src/pwa/InstallHint.tsx
for onboarding step 3 and the Notifications screen.
Maestro task: ad6b3d80-9f41-40ac-8e2a-f786e1fa9777
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>