The screens every app needs and nobody designs: empty states, skeleton loaders, error and offline states, and the banners in between. Pure CSS — no JavaScript, no dependencies — and the motion stops for anyone who asks it to.
Projects hold your forecasts and the people who can see them. Make the first one and you can invite the rest of the team.
Nothing matched that search. Try a shorter term, or clear the filters — three are active.
The request failed after three attempts. This is usually temporary — if it keeps happening, the status page will say so.
Changes you make now are saved locally and will sync as soon as the connection returns.
Everything is handled. New items land here as they arrive.
This workspace is private. Ask an admin for an invite — they'll see your request straight away.
Shapes only — never a spinner where the layout is already known.
<link rel="stylesheet" href="states.css"> <div class="st-empty is-first"> <div class="st-art"><svg>…</svg></div> <h3>No projects yet</h3> <p>Say what this is for, and what happens next.</p> <div class="st-actions"><a class="st-btn primary">New project</a></div> </div>
Put .st on a wrapper (or
<body>) so the tokens resolve. Flavours: is-first,
is-error, is-warn, is-good.