Skip to content

Colors

This page documents the color foundations for the FDIC design system and the stable public color token contract.

Color tokens use a three-layer model — palette, role, and semantic — so that consumers can choose the right level of abstraction for their context.

Color foundations

The color system is organized in three layers: palette, role, and meaning. Most consumers should reach for role or semantic tokens rather than raw palette values.

Stable public contract

  • Stable stylesheet entrypoint: @jflamb/fdic-ds-tokens/styles.css
  • Stable color prefixes: palette --fdic-color-[family]-[step], role --fdic-color-[role]-[variant], and semantic status --fdic-color-semantic-*
  • Dark mode behavior: semantic role tokens adapt through light-dark() and the active color-scheme

New integrations should treat those names as the supported public API.

Color anatomy

The token inventory defines three practical layers:

  • palette tokens for source color families
  • role tokens for where color is applied
  • semantic tokens for status and meaning
Neutral
Neutral palette
The default backbone for text, surfaces, borders, and mode support.
Primary brand
Brand primary palette
Reserved for institutional emphasis, key actions, and trust markers.
Secondary brand
Brand secondary palette
Supports secondary emphasis without competing with semantic meaning.
Semantic
Meaning-bearing colors
Success, warning, error, and information states belong in the semantic layer.

Applying color with tokens

  1. Does the color carry meaning?

    If yes, use a semantic token such as --fdic-color-semantic-bg-success.

  2. If not, where is it applied?

    Choose a role token for background, text, border, or icon.

  3. Use palette tokens only as source values

    Palette tokens define the system. They are not the first choice for most consumers.

Examples of the naming model:

  • palette: --fdic-color-neutral-300
  • role: --fdic-color-text-primary
  • semantic: --fdic-color-semantic-bg-error

Color roles

RoleToken prefixUsage
Neutral--fdic-color-neutral-*Text, surfaces, borders, and structural UI
Brand--fdic-color-primary-*Institutional emphasis, key actions, trust markers
Secondary--fdic-color-secondary-*Supporting emphasis without semantic meaning
Success--fdic-color-success-*Favorable outcomes, confirmations
Warning--fdic-color-warning-*Caution, prevention, review needed
Error--fdic-color-error-*Errors, destructive actions, serious alerts
Info--fdic-color-info-*Informational context, guidance
Link--fdic-color-link-*Hyperlinks and visited state
Inverse--fdic-color-*-invertedElements on inverted or brand backgrounds
Input--fdic-color-border-input-*Form field borders and interaction states

Palette tokens

Palette tokens are source values for the system. They should be documented visually, but used sparingly in consumer guidance.

Neutral

Default system backbone

Use the neutral ramp to support text hierarchy, borders, surfaces, and dark-mode mapping.

000
#FFFFFF--fdic-color-neutral-000
050
#FAFAFC--fdic-color-neutral-050
100
#F5F5F7--fdic-color-neutral-100
200
#E0E0E2--fdic-color-neutral-200
300
#D6D6D8--fdic-color-neutral-300
400
#BDBDBF--fdic-color-neutral-400
500
#9E9EA0--fdic-color-neutral-500
700
#595961--fdic-color-neutral-700
800
#424244--fdic-color-neutral-800
900
#212123--fdic-color-neutral-900
1000
#000000--fdic-color-neutral-1000
Primary brand

Institutional emphasis

Use for key actions, official identifiers, and moments where FDIC ownership should be explicit.

050
#E6F4FA--fdic-color-primary-050
100
#C8EBF9--fdic-color-primary-100
200
#84DBFF--fdic-color-primary-200
400
#38B6FF--fdic-color-primary-400
500
#0D6191--fdic-color-primary-500
700
#09496D--fdic-color-primary-700
800
#073C5B--fdic-color-primary-800
900
#003256--fdic-color-primary-900
Secondary brand

Secondary emphasis

Use more sparingly than the primary brand. It should support hierarchy without becoming semantic status color.

050
#F8EFDA--fdic-color-secondary-050
300
#EBD49B--fdic-color-secondary-300
400
#E1C16E--fdic-color-secondary-400
500
#D9AF45--fdic-color-secondary-500
600
#88691C--fdic-color-secondary-600
800
#88691C--fdic-color-secondary-800
900
#60511B--fdic-color-secondary-900
Success

Favorable outcomes

Confirmations, successful submissions, and positive status.

050
#E8F5E9--fdic-color-success-050
200
#A5D6A7--fdic-color-success-200
500
#2E7D32--fdic-color-success-500
600
#1B5E20--fdic-color-success-600
800
#204520--fdic-color-success-800
900
#1B3A1B--fdic-color-success-900
Warning

Caution and prevention

Review steps, potential issues, and time-sensitive guidance.

050
#FCF7EE--fdic-color-warning-050
200
#FFCC80--fdic-color-warning-200
500
#8B5E00--fdic-color-warning-500
600
#6D4A00--fdic-color-warning-600
800
#663D00--fdic-color-warning-800
900
#4D2E00--fdic-color-warning-900
Error

Problems and destructive actions

Validation errors, failed operations, and irreversible actions.

050
#FDEDEA--fdic-color-error-050
200
#F5A3A3--fdic-color-error-200
500
#B10B2D--fdic-color-error-500
600
#D80E3A--fdic-color-error-600
800
#442121--fdic-color-error-800
900
#331919--fdic-color-error-900
Info

Informational context

Guidance, context, and non-urgent information.

050
#F1F8FE--fdic-color-info-050
200
#90CAF9--fdic-color-info-200
500
#0B4F82--fdic-color-info-500
600
#0D4B7A--fdic-color-info-600
800
#1E3A5F--fdic-color-info-800
900
#162D4A--fdic-color-info-900

Role tokens

Role tokens are the main implementation layer for non-semantic UI.

Background

Surface and emphasis

Background tokens describe where color sits: base surface, container surface, or brand surface.

base
container
brand
Text

Reading hierarchy

Text tokens should support primary, secondary, inverse, and brand-linked content without weakening readability.

Primary text

Secondary text

Brand-linked text

Border

Structure and control states

Border tokens define separation, input affordance, and focus visibility.

divider
input
focus
Icon

Supporting emphasis

Icon tokens should align with surrounding text and status cues rather than invent separate meaning.

● primary● secondary● brand

Role token families:

  • --fdic-color-bg-*
  • --fdic-color-text-*
  • --fdic-color-icon-*
  • --fdic-color-border-*
  • --fdic-color-overlay-*
  • --fdic-color-effect-*

Interaction states

Role tokens support state suffixes for interactive elements:

Derived from a base role token

rest
--fdic-color-bg-interactive
hovered
--fdic-color-bg-interactive-hovered
pressed
--fdic-color-bg-interactive-pressed

Standalone state tokens

selected
--fdic-color-bg-selected
readonly
--fdic-color-bg-readonly

Supported state suffixes: -hovered, -pressed, -focused, -disabled, -readonly

Semantic tokens

Semantic tokens are the only color tokens that should carry status meaning.

Success

Your information was submitted.

Use semantic success tokens only when the message communicates a favorable outcome.

Warning

Review this section before continuing.

Warnings should help prevent mistakes before they become errors.

Error

There is a problem with this entry.

Errors need explicit recovery guidance, not color alone.

Info

We ask for this information to protect your account.

Informational states should add clarity without reading as success or warning.

Semantic token families:

  • --fdic-color-semantic-bg-success / warning / error / info
  • --fdic-color-semantic-fg-success / warning / error / info
  • --fdic-color-semantic-border-success / warning / error / info
Do

Use semantic colors to reinforce meaning that is already communicated by labels, headings, helper text, and icons.

Do not

Do not use primary or secondary brand colors to imply warning, error, or other status meaning.

Accessibility in color

Colors alone do not make an interface accessible.

When documenting or implementing color usage, preserve these expectations:

  • text and interactive states must meet contrast requirements
  • status meaning must not rely on color alone
  • focus indicators must remain visible against surrounding surfaces
  • disabled and muted states must remain understandable without reducing legibility too far
  • semantic colors must remain distinct in both default and dark modes

Current validation note:

  • token values are authored with contrast targets in mind, but repository component tests do not currently enforce rendered contrast automatically because the shared happy-dom axe run disables color-contrast
  • Storybook browser accessibility audits now run against every shipped story in Chromium and fail on rendered contrast violations
  • confirm contrast again in real browser contexts after token overrides, dark-mode tuning, or downstream page-level composition changes

Trust and content guidance

This system serves government and financial-sector workflows, so color usage should support clarity and trust.

When semantic colors are used in content:

  • pair status colors with text, icons, or labels
  • use explicit error, warning, and success wording
  • explain sensitive steps with text rather than visual emphasis alone
  • avoid decorative color choices that weaken clarity

Modes

The public runtime includes light and dark appearance behavior today.

Use role tokens instead of hard-coded palette values so that:

  • the same role token may map to different values by mode
  • contrast must hold in every supported mode
  • consumers should not hard-code palette values for theme behavior
Default mode
Role tokens on light surfaces

Neutral surfaces and brand emphasis should feel clear, restrained, and document-oriented.

--fdic-color-bg-base
Dark mode
Role tokens remapped for dark surfaces

Dark mode should preserve legibility and focus visibility rather than simply inverting values.

--fdic-color-bg-base

What not to rely on yet

Do not assume:

  • component-level color tokens exist unless a component page documents them
  • palette tokens are safe substitutes for semantic status roles
  • an app-specific alias layer is part of the supported contract

Known gaps

  • Semantic hue ramp intermediate steps (200/600/900) are placeholder values pending OKLCH refinement. OKLCH is a perceptually uniform color space that produces evenly spaced lightness ramps without the hue shifts common in sRGB or HSL interpolation.
  • Component-level color tokens are deferred.
  • Contrast validation for every individual component pairing is still being expanded in component docs and tests.