Notifications
One card for everything the room should notice. Top-right, newest on top, gone after four seconds.
Tones — the badge and the hold bar carry the colour
Rules
Title says who and what, in one line: “Mira solved Part 1”. Body says where, muted.
Badge: a person gets their avatar (their animal, or their initial on a colour taken from the name); room messages get an icon.
Stack: at most four; a fifth pushes the oldest out. On slide views it starts below the sync pill. Peek frames show none.
Motion: slides in 1.5rem from the right, 400ms, cubic-bezier(0.22, 1, 0.36, 1); leaves with a 200ms fade; the cards below glide up. The bar runs out over the hold time. A click dismisses.
Code: useToasts().push({ title, body, tone, name }). Never build a one-off notification.