Skip to content

No.348 · Feedback· New

Status Badge

Small, quiet status pills for the states a product shows all day: live, online, away, busy, offline, confirmed, pending, cancelled, warning, failed, beta and new. Each has its own mark and word, so colour is never the only signal.

The prompt

Copy this text

Automatic copying is unavailable. Copy the selected text using your device’s copy command.

Written for the variant you picked above: Soft

Build a status badge (a span) for twelve states, in the one look selected below, at two sizes: 24px tall (12.5px Inter 500, 12px mark) and 20px (11.5px, 10px mark), fully rounded, a 6px gap between the mark and the word. States, tone and mark: Live (red, a dot with a copy that pings out to 2.4× and fades every 1.6s), Online (green, a solid 7px dot), Away (amber, a crescent), Busy (red, a dot with a short bar cut through it), Offline (grey, a hollow ring), Confirmed (green, a tick), Pending (blue, a 10px spinner, 0.9s a turn), Cancelled (grey, a cross), Warning (amber, a triangle with a stroke and dot), Failed (red, a cross), Beta (violet, a four-point spark), New (blue, the spark). The word can be overridden ('Processing' for pending). Tones (light / dark), strong ink then soft fill then hairline: red #c4161c #fdecec #f6c1c2 / #ff8a8d #2c1214 #5a2226; green #13703a #e7f6ec #b6e2c4 / #6fdc93 #0f2416 #1f4a2c; amber #935f00 #fdf3dc #f1d697 / #f8c45c #2a1f08 #574117; grey #5c5f66 #f0f1f3 #d9dbe0 / #b3b6bd #1d1e21 #34363b; blue #1d4fd8 #e9f0ff #bfd0fb / #8db3ff #0f1b33 #23396a; violet #6b2fd6 #f2ecff #d6c5fa / #c4a6ff #1d1430 #3d2b66. All pass 4.5:1 for the word on its fill. Show all twelve, then a short order list (name, time, a small badge) on a white panel and a #0b0b0c panel side by side. Selected variant — Soft (soft): Soft: the tone's pale fill with a 1px inset hairline in the tone and the word and mark in the tone's strong ink. This selection takes precedence over references to other themes or options in the general brief. Implement this selected appearance; do not add a variant picker or alternative appearances unless requested. Implementation requirements: Use React and TypeScript. Keep the component self-contained, with uniquely scoped CSS and no animation libraries. Include required imports, styles and font setup in the result. Interaction: None; badges are labels. Put them next to the thing they describe. Motion: Only Live pings and Pending spins; reduced motion stops the ping and slows the spinner. Accessibility: The word is real text and the mark is aria-hidden, so the state reads the same without colour. If a status changes live, wrap it in a polite live region. Responsive behavior: Badges wrap in rows and never wrap their own text. Touch: Nothing to tap. Preserve keyboard access, visible focus and reduced-motion behavior. Keep fictional demo data and simulated service calls in a separate usage example; expose callbacks for real actions and recover from rejected requests. Keep usage-example links inside the demo: use local buttons or prevent navigation. Demonstration links must not navigate to Vitrine routes or open other pages; preserve real URL support in the reusable component itself. Verify the result at narrow and wide viewport sizes, with keyboard input and reduced motion enabled.

Notes

Interaction
None; badges are labels. Put them next to the thing they describe.
Motion
Only Live pings and Pending spins; reduced motion stops the ping and slows the spinner.
Accessibility
The word is real text and the mark is aria-hidden, so the state reads the same without colour. If a status changes live, wrap it in a polite live region.
Responsive
Badges wrap in rows and never wrap their own text.
On touch
Nothing to tap.

Featured

402 components