When a `dating.message.created` push arrives and the user is not on
the matching chat thread, the layout now surfaces:
- A floating toast (top-right on desktop, bottom on mobile so it
clears the bottom-tab bar) showing the counterpart's name and the
body preview, with click → `/dating/chat/<matchId>`. Stack capped
at 3, auto-dismisses after 5.5 s. Per-toast close button.
- A `(<n>) Nexo` document title with the total unread count across
matches, so the user notices the new message even when the tab is
not focused.
Self-sent broadcasts are filtered (the server fans out to every
match member, including the sender, so multi-device syncs work; the
sender's own UI doesn't toast itself). Visiting a chat clears the
unread count for that match.
`MessageToast.svelte` is pure presentation; the layout owns the
realtime subscription, the toast queue, the per-match unread counts
and the cached match list (used to fill in the counterpart name on
the toast title).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>