UI showcase
Every shared component, split across dedicated pages by category.
Skeleton
Matches the real layout it stands in for, not a generic spinner — the loading state used by every card, table and chart.
Spinner
Inline loading indicator inside a button, used for every async submit in the app.
Progress
Determinate progress bar, used for usage meters and multi-step flows.
Import progress64%
Empty state
Icon, one-line explanation, primary action — matching the pattern in `CardList`'s default empty state.
No invoices yet
Your first invoice will appear here after the initial billing cycle.
Error state
Plain message plus retry — matches `WidgetErrorBoundary`'s fallback used to isolate a broken dashboard widget.
Couldn't load this widget
Something went wrong while rendering this data.