# Announcer + Toast

G5 embodied: announce() renders the one quiet transient line per surface region (Undo lives in the line); the toast viewport is for async outcomes only, max two.

Install: `npx candlelight-ds add announcer`

Category: primitive · Grammar: G4, G5

## Use when

Announcer: confirming a direct manipulation. Toast: an async job finished or failed while the user was elsewhere.

## Don't use when

Celebration toasts for direct actions — the change itself is the confirmation.

## States

- announcement visible (5.5s wall)
- announcement with Undo
- toast ready/danger/warn/info
- two toasts (the cap)

## Keyboard

- (none — pointer/semantic only)

## Acceptance tests

- One announcement at a time, in a fixed spot, in voice.
- Max two toasts; the oldest yields.
- Every destructive outcome carries Undo.

## Files

- components/ui/Announcer.tsx
- components/ui/Toast.tsx
- hooks/useAnnouncer.ts

npm dependencies: @candlelight-ds/tokens, zustand, lucide-react, clsx, tailwind-merge

Rendered twin: https://candlelight-docs.vercel.app/components/announcer · Full spec: https://candlelight-docs.vercel.app/spec.md
