Empty and error states

Generated from DESIGN_SYSTEM.md

Rules

Empty → illustration or icon + descriptive title + CTA button. Never blank. Error → inline message + retry button. Never full-screen block for recoverable errors. Success → brief confirmation (toast/checkmark overlay). Never silent.

Toast placement is decided by viewport, not by habit. Under md a toast rises from the bottom center, where the thumb already is and where it hides no top bar. From md up it lands top-right, where the eye is after an action and where every desktop OS and mainstream app puts it; a bottom toast on a desktop viewport sits outside the reader's field of view. One component holds both (ToastProvider); a surface never repositions it.

Live specimens

Empty stateAn icon, a descriptive title and the action that fills it.

No hubs yet

A hub collects your pages, posts and widgets in one place.

Inline errorThe message and a retry, where it failed, never a full-screen block.

Could not load this list.

Success toastBottom center on phones, top right from md. Never silent.