Badge

Compact, non-interactive label for status and metadata — a pill at radius.full in font.size.caption at font.weight.medium. If it filters, navigates, or dismisses, it is a button or link wearing different clothes.

Sizes

One sm/md/lg dialect. Heights ride the icon scale until large, which steps onto the control scale and up to font.size.copy-sm.

ExampleSizeModifierHeightUsage
SmallSmall--smsize.icon.mdDense metadata: table cells, list rows
MediumMediumds-badgesize.icon.lgThe default — cards, headers, detail rows
LargeLarge--lgsize.control.smHigher-emphasis labels, feature areas

Intents

The unmarked badge is neutral. Four functional statuses take complete pairs from status.*. Extended semantic channels such as Disputed use category.accent, never a borrowed functional status hue. Inverted is the high-emphasis neutral.

ExampleIntentModifierRolesUsage
NeutralNeutralmetadata.bgmetadata.textThe default — categories, counts, plain metadata
SuccessSuccess--successstatus.success.bgstatus.success.textCompleted, active, healthy
WarningWarning--warningstatus.warning.bgstatus.warning.textDegraded, expiring, needs attention
ErrorError--errorstatus.error.bgstatus.error.textFailed, blocked, invalid
InfoInfo--infostatus.info.bgstatus.info.textIn progress, informational
DisputedCategory accent--accentcategory.accent.bgcategory.accent.textExtended semantic channel beyond the functional four
InvertedInverted--invertedtext.primarytext.inverseHigh-emphasis neutral: "New", version tags

Emphasis

Subtle is the default tier; --solid compounds with functional statuses and --accent for moments that must not be missed. Neutral has no solid tier — its high-emphasis form is --inverted.

ExampleEmphasisModifierRolesUsage
SuccessSubtlestatus.{intent}.bgstatus.{intent}.textThe default status treatment
SuccessSolid--solidstatus.{intent}.solid-bgstatus.{intent}.solid-textMust-not-miss: destructive outcomes, live states

Icons

Same leading/trailing vocabulary as Button: the modifier pulls the icon-side padding in one spacing step below the text side. Badge and Chip share the dedicated size.pill-icon 12/14/16px ladder, keeping metadata glyphs quieter than the general icon scale; icons are decorative here and the label carries the meaning.

Intent, emphasis, and size
Neutral Neutral Neutral
Success Success Success
Success Success Success
Warning Warning Warning
Warning Warning Warning
Error Error Error
Error Error Error
Info Info Info
Info Info Info
Inverted Inverted Inverted

Functional rows descend through solid large/medium/small, then build through subtle small/medium/large; neutral and inverted each have one supported emphasis. Category accent remains in the intents table because the unbranded starter maps that extension point to neutral. Toggle the page theme to compare the same role pairs on light and dark UI.

ExampleSizeModifierIconPaddingUsage
SuccessSmall--sm--leading-iconsize.pill-icon.smspace.1-5space.2Dense status rows
WarningMedium--leading-iconsize.pill-icon.mdspace.1-5space.2The default iconed badge
ErrorLarge--lg--leading-iconsize.pill-icon.lgspace.2space.3Feature-area labels
PrivateSmall--sm--trailing-iconsize.pill-icon.smspace.2space.1-5Dense rows: a locked or private marker
PrivateMedium--trailing-iconsize.pill-icon.mdspace.2space.1-5The default trailing qualifier — a fact after the label
PrivateLarge--lg--trailing-iconsize.pill-icon.lgspace.3space.2Feature-area labels with a qualifying glyph

Usage notes

A badge is a statement, not a control.

VerdictRule
DoTake status colors as a pair from the status roles — background and text arrive together.
DoDefault to subtle; reserve --solid for states that must not be missed, and expect few per view.
DoKeep the label to one or two words, sentence case — a badge that needs a sentence is an Alert.
DoMark badge icons decorative (aria-hidden="true") — the label carries the meaning.
Don’tMake a badge interactive — a removable filter or clickable tag is Chip, which shares the pill recipe, never this contract.
Don’tPair a status background with a foreground it wasn’t issued with, or reach into raw ramps.
Don’tShip an icon-only badge — there is none; a lone glyph with meaning is an icon, not a badge.