Basic empty
Icon + heading + supporting copy + primary CTA. Centered.
.state-frame.state-stackNo messages yet
When someone reaches out, their message will land here. Until then, take a breath.
Every real app spends most of its life in one of these six states. Six variants per state — 36 ready-to-drop blocks for empty, loading, error, success, unauthorized, and offline conditions.
When there's nothing to show — first run, no results, missing permissions. Give the user a path forward.
Icon + heading + supporting copy + primary CTA. Centered.
.state-frame.state-stackWhen someone reaches out, their message will land here. Until then, take a breath.
CSS-painted illustrative scene + heading + CTA.
.state-empty-illuConnect a project to start streaming data. Setup takes about ninety seconds.
"No results for {query}" + suggested searches as chips + try-different-keywords CTA.
.state-suggest-chips.lsd-chipTry one of these popular searches, or refine your keywords.
Three numbered steps + Get started CTA.
.state-steps.state-step"You don't have access" + Request access CTA.
.state-icon--warnAsk the owner to invite you, or request access — they'll get a notification.
"Nothing here yet" + Get notified email signup.
.state-notify-formThis area is under construction. Drop your email and we'll ping you the moment it ships.
The user is waiting. Tell them something is happening, and ideally how long it will take.
SVG spinner with text below.
.state-spinnerFetching your latest projects…
Five skeleton rows with shimmer-sweep animation.
.state-sk-list.state-sk-rowSix skeleton cards with stagger animation.
.state-sk-grid.state-sk-cardBar with % + supporting text.
.state-progressYou can keep working — we'll let you know when it's done.
Three dots pulse-fade in sequence.
.state-dotsThinking…
Full-page LSD-flair loader with rotating galaxy + center pulse.
.state-galaxyBooting the runtime — packing tokens, surfaces, and aurora timelines.
Something failed. Tell the user what, why if it helps, and how to recover.
Error icon + "Something went wrong" + Try again CTA.
.state-icon--errorWe hit an unexpected bump loading this page. Refresh, or try again in a moment.
Small "Not found" inline state (not full page).
.state-frameIt may have been moved or deleted. Try refreshing the panel.
Offline icon + "No connection" + Retry CTA.
.state-icon--errorWe can't reach our servers. Check your network and we'll try again.
Red-tinted card listing form errors.
.state-err-listApologetic copy + Status page link.
.lsd-chip--errorOur servers tripped over their own shoelaces. The team has been pinged automatically. Check our status page for live updates.
"Too many requests" + cooldown timer.
.state-timerYou've hit the rate limit. You can try again in:
Need higher limits? Contact support about a Pro plan.
Confirmation that the user's action landed. Make it feel earned.
Draw-in checkmark + "Done" + Continue CTA.
.state-check"Message sent" + Send another CTA.
.state-icon--successOrder summary chips + receipt CTA.
.lsd-chip--successReceipt #LSD-2026-04891 is on its way to your inbox.
Confetti burst + headline + CTA.
.state-confetti-wrapSmall toast-style saved confirmation.
.state-toastFile chip + Done CTA.
.state-file-chipYour tokens have been parsed and applied to the active workspace.
Auth walls, expired sessions, locked accounts. The user can't pass — but make the next step obvious.
Email/password + social signin.
.state-signin-form.state-socialThis area is for members. Sign in to keep going.
Upgrade CTA + feature list.
.state-feature-listYou're on the Free tier. Upgrade to unlock:
"Session expired" + Sign in again CTA.
.state-icon--warnFor your security, we signed you out after 24 hours of inactivity. Sign back in to pick up where you left off.
Code input field + Resend code CTA.
.state-mfaWe sent a code to your authenticator app. It expires in 5 minutes.
Suspension notice + Contact support CTA.
.state-icon--errorThis account has been suspended pending review. If you believe this is a mistake, contact support — we'll get back to you within one business day.
Locked after failed attempts + Reset password CTA.
.state-icon--warnToo many failed sign-in attempts. To protect your account, reset your password to unlock it.
Connectivity is unreliable. Tell the user what's degraded and what still works.
Basic offline + Retry CTA.
.state-icon--warnCheck your network connection — we'll reconnect automatically when you're back.
Cached badge + Reconnect CTA.
.lsd-chip--mutedYou're offline, so we're displaying a snapshot from your last visit. Reconnect to refresh.
"3 changes will sync when online" + spinner chip.
.state-pendingYour edits are safe on this device. They'll sync to the cloud as soon as you're back online.
Waiting for connection…"New version available" + Reload CTA.
.lsd-chip--softReload to get the latest blocks, motion presets, and bug fixes. Your unsaved work will be preserved.
ETA + Subscribe to updates.
.state-notify-formWe're rolling out database upgrades. Expected back online by 21:00 UTC.
"Some features unavailable" + per-service status chips.
.state-status-chipsSome features are temporarily unavailable. Core editing still works.
Connect a project to start streaming data.
Try one of these popular searches.
Ask the owner to invite you, or request access.
This area is under construction.
Fetching your latest projects…
You can keep working — we'll let you know when it's done.
Thinking…
Booting the runtime — packing tokens, surfaces, and aurora timelines.
It may have been moved or deleted.
We can't reach our servers. Check your network.
Our servers tripped. The team has been pinged automatically.
You've hit the rate limit. You can try again in:
Receipt #LSD-2026-04891 is on its way to your inbox.
Your tokens have been parsed and applied.
This area is for members.
Upgrade to unlock:
We sent a code to your authenticator app.
Check your network connection.
You're offline, so we're displaying a snapshot from your last visit.
Your edits are safe on this device.
Waiting for connection…Reload to get the latest blocks and bug fixes.
Expected back online by 21:00 UTC.
Some features are temporarily unavailable.