Toast
Transient, non-blocking, dismissible. The left border carries the tone so the whole surface stays neutral — four brightly tinted cards stacking up in a corner is an alarm, not a notification system.
Tones
Batch reconciled42 invoices written. 1 retry.
Run failedocr.extract_text timed out after 12s.
Approaching budget84% of the monthly cap used.
New agent versionDataAgent v4 is staged for rollout.
Live stack
Push a few. They enter with the spring easing from the bottom-right and each one is individually dismissible.
Announcement politeness
Errors use role="alert" with aria-live="assertive"; everything else uses status and polite. An error should interrupt whatever a screen reader is currently saying. A success message should wait its turn.
Making every toast assertive is a common and genuinely hostile default — it means a “Saved” confirmation cuts off the sentence someone was in the middle of reading.