Tangible Design System · @tangible/ui 0.2.29 · Interactive version · Markdown

Color Tokens

Contrast-Based Naming

Theme colors use a subtle → strong scale that works across light and dark modes:

Token Light Mode Dark Mode Use Case
subtlest Lightest tint Darkest shade Subtle backgrounds
subtle Light tint Dark shade Muted backgrounds
soft Medium-light Medium-dark Soft accents
base Core color Adjusted core Primary brand use
strong Medium-dark Medium-light Text on backgrounds
stronger Dark Light High-contrast text
strongest Darkest Lightest Maximum contrast

The key insight: "stronger" always means more contrast against the contextual background, regardless of light/dark mode.

Default Color Palettes

Tangible Design System ships with the following color defaults. When extending the system with new components these are the only allowed color tokens, and colors must never be hardcoded.

For deterministic identity colors (avatar initials, tags, category accents) see Generative Colors — those are intentionally outside the theme ladders.

Brand Colors


Visual swatches: see the interactive page. Token values are in the primitive token reference.

Semantic Colors


Neutral Colors


Neutrals use role names, not the contrast ladder. The background roles, from the canvas up:

Token Role
bg-surface The page canvas behind components — a light gray by design, so white component faces read as raised against it. Also the fill for bordered panels sitting on a white face.
bg Component faces (cards, inputs, menus) — white in light mode.
bg-muted Muted wells within a component face: readouts, submitted-text panels, disabled fills.
bg-elevated Overlaid faces (popovers, modals) — white, lifted by shadow rather than color.
bg-inverted Inverted panels (tooltips, dark callouts).
bg-overlay The translucent backdrop behind modals.

Foregrounds follow the same pattern: fg for body text, fg-secondary for supporting text, fg-muted for meta/hints, fg-on-accent for text on base-color fills, fg-inverted for text on inverted panels.

Customization

Color customization is fairly straightforward, since all colors consumed by components are attached to global CSS custom properties.

The default palettes can be overridden by re-defining the CSS custom properties. In most cases, this change will be scoped to tui-interface in order to impact all components within the defined Tangible frontend scope.

/* Re-map Primary colors to a calming sage green */
.tui-interface {
  --tui-theme-primary-strongest:  #242424;
  --tui-theme-primary-stronger:   #535249;
  --tui-theme-primary-strong:     #797762;
  --tui-theme-primary-base:       #a9ad7f;
  --tui-theme-primary-soft:       #b6c48b;
  --tui-theme-primary-subtle:     #c2dc9c;
  --tui-theme-primary-subtlest:   #d7f2c5;
}