Empty States
An empty state replaces a list, table, or panel when there's
nothing to show. The recurring shape is a vertically-stacked
column with centered content -- an optional icon, a short
heading, a brief explanation, and sometimes an action that gets
the user past the empty state. brio composes this from
.center + .stack.is-centered +
.text-center; no dedicated component class needed.
Search with no results
<docs-resize>
<div class="center stack is-centered text-center" style="--center-max: 28rem; padding-block: var(--space-xl)">
<span class="text-subtle">
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<circle cx="11" cy="11" r="8"></circle>
<line x1="21" y1="21" x2="16.65" y2="16.65"></line>
</svg>
</span>
<h3>No results found</h3>
<p class="text-muted">Try adjusting your search terms or removing one of the filters.</p>
<a class="button is-primary" href="#">Clear filters</a>
</div>
</docs-resize>All caught up
You're all caught up
No new notifications since you last checked.
<docs-resize>
<div class="card">
<div class="center stack is-centered text-center" style="--center-max: 24rem">
<span class="text-subtle">
<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<path d="M20 6 9 17l-5-5"></path>
</svg>
</span>
<h3>You're all caught up</h3>
<p class="text-muted">No new notifications since you last checked.</p>
</div>
</div>
</docs-resize>First-run blank slate
Upload your first file
Drop a file anywhere on this page, or pick one from your computer to get started.
<docs-resize>
<div class="center stack is-centered text-center" style="--center-max: 32rem; padding-block: var(--space-2xl)">
<span class="text-subtle">
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path>
<polyline points="17 8 12 3 7 8"></polyline>
<line x1="12" y1="3" x2="12" y2="15"></line>
</svg>
</span>
<h2>Upload your first file</h2>
<p class="text-muted">Drop a file anywhere on this page, or pick one from your computer to get started.</p>
<div class="cluster is-center">
<a class="button is-primary" href="#">Choose a file</a>
<a class="button" href="#">Read the docs</a>
</div>
</div>
</docs-resize>Error recovery
The same shape covers error states -- a failed fetch, a broken
integration, a missing permission. Reach for
--color-danger on the icon when the empty state is
a problem the user might fix.
Couldn't load your projects
Something went wrong on our end. Try again, or come back in a few minutes.
<docs-resize>
<div class="center stack is-centered text-center" style="--center-max: 28rem; padding-block: var(--space-xl)">
<span class="text-danger">
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<circle cx="12" cy="12" r="10"></circle>
<line x1="12" y1="8" x2="12" y2="12"></line>
<line x1="12" y1="16" x2="12.01" y2="16"></line>
</svg>
</span>
<h3>Couldn't load your projects</h3>
<p class="text-muted">Something went wrong on our end. Try again, or come back in a few minutes.</p>
<button type="button" class="button">Retry</button>
</div>
</docs-resize>