Feedback and loading

Licence issued

Every action gets an answer

People should never wonder whether something worked. Every click, save and AI task answers in a predictable way: instantly acknowledged, honestly in progress, clearly finished.

How long it takes decides the feedback

DurationFeedbackComponent
< 100msJust the pressed state and the resultButton pressed state
100ms – 1sPressed state; show a spinner only if it passes 300ms, to avoid flickerButton loading state
1 – 3sSpinner in place of the content or in the button, with what is happening: “Saving…”Spinner, dots
3 – 10sIndeterminate progress bar or skeleton, plus a status lineProgress (indeterminate), skeleton
> 10sDeterminate progress or named steps, time estimate, cancel, and the option to leave and be notifiedProgress (determinate), stepper, agent activity
Minutes (AI analyses)Run in the background with a status chip; notify on completion with a toast and a badgeAgent pulse, toast, count badge

Instant feedback

Press, loading, success, failure

  • Press: 1px down shift and a darker fill within one frame.
  • Toggle: the switch moves immediately (220ms) and applies; an error moves it back with a message.
  • Busy button: spinner replaces the label, width stays, clicks are ignored (aria-busy="true").
  • Done: past-tense label with a check for 1.5s (“Sent”), then back to normal or the surface closes.

Waiting

Loaders

Uploading residency report0%
Shaheen is running 6 lenses

Step 3 of 5 · about 2 minutes · you can leave this page

LoaderUse
Spinner (20 / 32px)Inside buttons and small areas; 1–3s waits. Ring in the action colour, 700ms per turn
Dots (bouncer)Inline “typing” or “thinking” in chat (Mai) and short waits next to text
Progress, indeterminatePage or panel loading of unknown length; the Horizon gradient sweeps
Progress, determinateUploads, installs, exports: show percent or count (“34 of 120 files”)
SkeletonFirst load of content with known layout. See Skeletons
Agent pulseAn AI agent is working: soft Oasis glow, 2.4s breathing, with a status line
  • Never rotate, spin or bounce the North star or the logo as a loader.
  • Never show a spinner for more than ~10s without words; never show an indefinite spinner for an AI task.
  • Respect reduced motion: loaders slow down but keep moving, so progress is still visible.

Success

  • Prefer showing the result itself: the new row appears highlighted for 2s, the saved field shows a check.
  • Use a toast when the result is off-screen or the surface closes: “Licence issued”. Past tense, 3–6 words, with Undo when possible.
  • Never use a modal to say “Success”.

Failure

Say what happened and what to do

  • Put the error where the problem is: next to the field, in the table, in the card.
  • Message pattern: what happened + how to fix it. “Couldn't reach NorthStar Admiral Server. Check your network, then try again.”
  • Offer Retry for transient failures, and keep the user's input.
  • Use a danger alert for page-level problems, a toast only for background failures, a dialog only when work would be lost.
  • Never show raw error codes alone; put technical details behind “Show details” for support.
Sync failed

3 licences couldn't be pushed to NorthStar Admiral Server.

Export failed. The file was too large.

Alerts, banners and toasts

Alerts, banner, toasts

Maintenance on Sunday

NorthStar Admiral Server restarts at 02:00 GST for about 10 minutes.

Pilot ready

All 120 users can sign in.

Licence expires in 9 days

Renew it in NorthStar Admiral Console to avoid interruption.

You are viewing a classified analysis. Cloud models are disabled. Learn more
ComponentPlacementLifetimeUse
Inline alertIn the content, above what it concernsUntil resolved or dismissedPage or section status
BannerFull width under the headerUntil dismissed or condition endsSystem-wide notices: maintenance, classified mode, offline
ToastBottom right (bottom left in RTL; bottom centre on mobile), stacked, max 35s; errors and toasts with actions stay until dismissedConfirmation of background or off-screen results
DialogCentre, with scrimUntil answeredDecisions that block: confirm delete, unsaved changes

Toasts and alerts use role="status" (polite) or role="alert" (errors) so screen readers announce them.

Empty and error states

Empty states

No analyses yet

Start one from a file, an organisation or a question.

You don't have access

Ask your NorthStar Admiral operator to add Shaheen to your licence.

  • Empty states explain what will appear here and offer the first action. A library illustration may appear on first-use screens.
  • No-results states repeat the query and offer to clear filters.
  • Permission and offline states say who can help and what still works.

Code

<button class="n-btn n-btn--primary" aria-busy="true">Saving</button>
<span class="n-spinner" role="status" aria-label="Loading"></span>
<div class="n-progress" role="progressbar" aria-valuenow="34" aria-valuemin="0" aria-valuemax="100"><div class="n-progress__bar" style="width:34%"></div></div>
<div class="n-toast n-toast--success" role="status">…</div>
<div class="n-alert n-alert--danger" role="alert">…</div>

Dos and don'ts

Do

  • Acknowledge every action within 100ms.
  • Match the loader to the wait.
  • Put errors where the problem is, with a fix.
  • Let people leave long AI tasks and notify them.

Don't

  • Show endless spinners for AI tasks.
  • Use modals for success messages.
  • Animate the logo or the star as a loader.
  • Show raw error codes without explanation.

Last updated on 14 October 2026