Status indicators
On this page
Status indicators are persistent descriptive metadata attached to entities - a program’s acquisition milestone, a build’s release tier, a system’s operational availability, a user account’s state, a territory’s tactical status. They round out the “labels on things” story that started with classification strips and notifications.
| Kind | What it describes | Lifecycle |
|---|---|---|
| Classification strip | Security / program context of a surface | Structural, always visible |
| Notification | A change that happened or needs attention | Announcing (ephemeral or persistent) |
| System state | The system is broken, empty, or waiting | Replaces surface content |
| Status indicator | The state of a specific entity - program, user, sector, record | Persistent, sits on the entity |
A status indicator rides with the item it describes. It’s on the program card, in the table row, next to the user’s name. It doesn’t demand action; it provides context at a glance.
Three shapes
| Shape | Use | Primitive |
|---|---|---|
| Tag | Dense metadata - multiple items per entity, filterable, removable in filter contexts | wa-tag |
| Pill | Singular declarative status - one per entity attribute. Medium prominence. | Composed from wa-tag |
| Badge | Small count or single-letter state, anchored to an icon or avatar | wa-badge |
Pick by prominence and quantity: a tag is quiet and plural, a pill is singular and declarative, a badge is attached to something else.
Tag - anatomy
- Height: 22px
- Padding: 2px 8px
- Radius: 2px (square - keeps with FDT’s geometric precision)
- Font: Inter 500 11px UC tracked 0.06em
- Background: 15% opacity of semantic color
- Border: 1px in full semantic color
- Text color: in semantic color on dark backgrounds;
fog-100for danger/brand where contrast demands
Tags cluster in rows with 6px gap between them. Maximum 4 visible per entity; if more apply, collapse to +N that expands on hover.
Pill - anatomy
- Height: 24px
- Padding: 3px 10px
- Radius: 12px (fully rounded - the visual distinguisher from a tag)
- Font: Barlow Condensed 700 10px UC tracked 0.08em
- Background: 15% opacity of semantic color
- Border: 1px in full semantic color
- Text color: in semantic color (caution, electric) or
fog-100(danger, brand) - Optional leading icon: FA Sharp Regular 10px in semantic color - for
FIELDEDacheck, forTERMINATEDanxmark
Pills are the default for program lifecycle, build tier, account state. The rounded silhouette distinguishes them at-a-glance from tags in a mixed-metadata row.
Badge - anatomy
- Shape: circular (8–12px) for single-letter/count; capsule for short text (
NEW,BETA) - Fill: solid semantic color
- Font: JetBrains Mono 500 10px,
fog-100(ornavy-900on caution/success for contrast) - Border (optional): 2px
navy-900when the badge is anchored on top of another element (icon, avatar) so it reads as separate from the element underneath
Badges carry the least information - a count, a single letter, a three-letter label. They announce that something exists/is new, not what it is.
Standard vocabularies
The system ships a fixed set of status labels. New statuses require a design-system change, not a per-product improvisation. Consistent labels across products mean an operator reading a GRIDWATCH program list and a GHOST GRID program list sees the same words meaning the same things.
Program lifecycle - DoD acquisition milestones
| Label | Variant | Stage |
|---|---|---|
CONCEPT |
steel | Pre-milestone A - materiel solution analysis |
EMD PHASE |
electric | Engineering & Manufacturing Development (MS-B → MS-C) |
IN TEST / IOT&E |
caution | Initial Operational Test & Evaluation |
LRIP |
caution | Low-Rate Initial Production (milestone C) |
FIELDED |
neutral | Full-rate production, in customer service |
SUSTAINMENT |
neutral | Long-term operational support, no active development |
ARCHIVED |
steel | No longer active; records preserved |
TERMINATED |
hostile | Program ended - cancelled or killed |
The program status badge on a program card uses this vocabulary. A program is in exactly one stage at a time - never LRIP + FIELDED.
Software release tier
| Label | Variant | Use |
|---|---|---|
ALPHA |
caution | Pre-beta, internal only |
BETA |
electric | External testing, feature-complete |
RC |
electric | Release candidate |
GA |
neutral | Generally available |
LEGACY |
steel | Still supported, not current |
EOL |
hostile | End of life, no further support |
Applies to individual product builds, feature flags, and API versions.
Operational availability
| Label | Variant | Use |
|---|---|---|
ONLINE |
neutral | Fully operational |
DEGRADED |
caution | Partial operation, reduced capability |
OFFLINE |
hostile | Not operational |
MAINTENANCE |
caution | Scheduled downtime |
UNKNOWN |
steel | State not yet reported |
Applies to services, integrations, field systems, radio networks.
Record / account state
| Label | Variant | Use |
|---|---|---|
ACTIVE |
neutral | Active, current |
INACTIVE |
steel | Dormant - no action needed |
SUSPENDED |
caution | Paused, recoverable |
ARCHIVED |
steel | No longer active, preserved |
REVOKED |
hostile | Access removed |
Applies to users, API keys, sessions, issued credentials.
Tactical state (product-specific)
Tactical state labels are product-specific - GRIDWATCH and QRF use them differently, and they describe territory rather than entities. These extend the vocabulary, they don’t replace the above.
| Label | Variant | Use |
|---|---|---|
SECURED |
neutral | Controlled, no active threats |
CONTESTED |
hostile | Active engagement / disputed control |
DENIED |
caution | Cannot access; no control but no active presence |
UNKNOWN |
steel | Intelligence gap; state not observed |
Applies to sectors, AOs, zones. Used on the QRF sector card and GRIDWATCH overlay legends.
Composition on entities
- Program card - program-lifecycle pill in the top-right of the card header. One pill. Classification strip at top is structural, separate from the lifecycle pill.
- Table row - pill in a dedicated
Statuscolumn, left-aligned. Count badges inline with the count value in other columns. - Avatar / user row - small badge bottom-right of the avatar for account state (green dot for
ACTIVE, amber forSUSPENDED, red forREVOKED). Label-pill alongside the name if space permits. - Filter chip rows (above tables) - tags with an
xmarkdismiss affordance. These are the only status indicators that are interactive. - Menu items / feature flags - small capsule badge with
NEW,BETA, orEOLanchored to the menu label.
Color and meaning
Status indicators use the same semantic palette as every other system element:
neutral(green) → successful, current, fully operationalelectric(blue) → active, brand-aligned, in progresscaution(amber) → recoverable warning, low-rate, degraded, scheduled downtimehostile(red) → failed, terminated, revoked, offlinesteel(gray) → inactive, archived, unknown, muted
An operator reading a program list sees the green/red scan first - the label is the confirmation, not the discovery. Status indicators are designed to answer “what’s the state of this?” from five feet away.
Accessibility
- Color never alone - every status indicator has a text label. Color reinforces; text defines.
- Icons (where used) reinforce color but aren’t the sole signal. A
checkinside a green pill forFIELDEDis decoration, not meaning. - Screen readers announce the label as body text - a pill is an inline span containing the label, no special ARIA beyond what
wa-tagprovides. - Tags with dismiss controls carry
aria-label="Remove filter: {label}"on the dismiss button. - Badges with count values carry
aria-label="{count} {item type}"on the badge container - “7 unread notifications” rather than just “7.”
Anti-patterns
- Inventing local statuses. If a product needs a status not in the vocabulary, raise it to the design system. Do not improvise
SEMI-FIELDED,IN-FIELD-TRIAL,DEPRECATED-BUT-USEDbecause the existing list “doesn’t quite fit.” Expand the system or use the nearest approved label. - Multiple lifecycle indicators on one entity. A program isn’t
LRIP + FIELDED. It’s one or the other. Multi-status is a sign the data model is wrong, not that you need multiple pills. - Using all three shapes for the same attribute. A program has a lifecycle pill, not a pill AND a tag AND a badge for the same state. Pick one shape per attribute.
- Status indicators carrying action. A clickable
TERMINATEDpill that opens a termination dialog is a notification pretending to be a status. Status describes; actions go through buttons and menu items. - Electric-blue everywhere. When every status is
electric, nothing stands out. Reserve electric for active / in-progress states (EMD PHASE,BETA,RC). Historic and archival states areneutral(current / stable) orsteel(dormant / archived). - Animation. Status indicators describe persistent state. They don’t pulse, glow, or fade in. Animation on a status indicator reads as “this is changing” - which contradicts what a status indicator is.
- Pill without a semantic color. A pill in
steelornavy-700with no semantic tint is just an uncolored label - use a tag or drop it. Every pill carries meaning through color.