Skip to content

No.362 · 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. Shown as soft, outline, solid and dot looks.

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: Light

Build a status badge (a span) for twelve states in four looks, 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 tint 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. Looks: soft is the tint with a 1px inset hairline in the tone and the word and mark in the strong ink; outline is a transparent pill with only the hairline; solid is the saturated tone (red #dc2626 / #e5484d, green #15803d / #238636, amber #f5a524, grey #5c5f66 / #4a4d54, blue #2563eb / #2f6bff, violet #7c3aed / #7c4dff) with white text, except amber, which takes near-black #241700; dot has no pill, just the mark in the tone and the word in plain body text (13.5px, 400) as in a presence list. Show a section per look with all twelve statuses, then a short order list (name, time, a small soft badge) on a white / #0b0b0c page. Selected variant — Light (light): Palette for this theme (Light): --stbg-amber #935f00; --stbg-amber-line #f1d697; --stbg-amber-soft #fdf3dc; --stbg-blue #1d4fd8; --stbg-blue-line #bfd0fb; --stbg-blue-soft #e9f0ff; --stbg-blue-solid #2563eb; --stbg-green #13703a; --stbg-green-line #b6e2c4; --stbg-green-soft #e7f6ec; --stbg-green-solid #15803d; --stbg-grey #5c5f66; --stbg-grey-line #d9dbe0; --stbg-grey-soft #f0f1f3; --stbg-grey-solid #5c5f66; --stbg-red #c4161c; --stbg-red-line #f6c1c2; --stbg-red-soft #fdecec; --stbg-red-solid #dc2626; --stbg-text #1d1e21; --stbg-violet #6b2fd6; --stbg-violet-line #d6c5fa; --stbg-violet-soft #f2ecff; --stbg-violet-solid #7c3aed. Treat these as the root colour tokens, one value per role, and name them to suit your code. Select it with the theme option set to "light". Keep every dimension, spacing value, state and motion from the brief unchanged, and keep text at 4.5:1 contrast or better on these surfaces. 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

425 components