Feedback
| Component | Role | Dashboard pair |
|---|---|---|
ErrorPanel | Cause-chain + next-steps failure card | alert-destructive |
WarningPanel | Non-fatal caution card | alert (warning) |
SuccessCelebration | Typewriter + ASCII-art delight | toast-success |
StickyBanner | Viewport-pinned upgrade / notice banner | sticky |
DidYouKnow | Pure render of a tier hint | DYK widget |
TierBadge | Shape-based tier indicator (FREE / ★ PREMIUM) | tier chip |
EmptyState | ”Nothing here yet” affordance | empty-state pane |
All feedback components are pure: they depend only on primitives + tokens
and do not touch IPC, disk, or domain state. The animation in
SuccessCelebration is driven by external tick() calls — never
thread::sleep.