Design system

One set of named values for color, type, space and motion, owned by Exprezoe, measured on every build. This site is built from it today; the product moves onto it phase by phase.

Last updated

Principles

  • Measured before believed. A claim about the interface is a number a script can reproduce, or it is not made. Contrast, consistency and layout are counted on every build.
  • One name, one value. A color or a size has one name that says what it is for, and one value in each theme. Components use names, never raw values.
  • Meaning never rides on color alone. Status and priority carry a shape or a word as well.
  • The keyboard is a first-class way in. What can be done with a pointer can be reached from the keys, and the interface shows how.
  • Change is staged and reversible. Defects are fixed first, pixels change last, and every release can be put back.

Tokens

The source of truth is a set of token files in the Design Tokens Community Group format (2025.10). A build step turns them into CSS custom properties with the prefix --tg-, checks every color’s two notations against each other, and refuses to build if a text and surface pair falls below its contrast threshold.

TierExampleRule
Reference--tg-ref-neutral-950Raw ramps. Never used by a component.
Semantic--tg-color-text-secondaryNamed by role. The only tier components use.
Component--tg-button-heightOnly where a component needs a documented hook.

Themes are value sets on the same names. This page follows your system’s light or dark setting; the tables below show both.

Color

The accent comes from the Tridge mark. The teal end of the mark is kept for the logo and for illustration, never for the state of a control.

Surfaces

TokenLightDark
--tg-color-bg-canvas#F6F7FA#0E0F12
--tg-color-bg-surface#FFFFFF#16171A
--tg-color-bg-sunken#EFF0F4#1D1E22
--tg-color-bg-hover#E8E9EE#23252A
--tg-color-bg-selected#DCDFE8#2A2D38

Borders

TokenLightDark
--tg-color-border-subtle#DCDEE2#27292D
--tg-color-border-default#C8CAD0#36383D
--tg-color-border-strong#777A82#777A82

Text

TokenLightDark
--tg-color-text-primary#181A20#EAEBEF
--tg-color-text-secondary#4A4D55#B5B7BE
--tg-color-text-tertiary#5D6069#9598A0
--tg-color-text-disabled#9C9EA5#616369
--tg-color-text-on-accent#FFFFFF#FFFFFF

Accent

TokenLightDark
--tg-color-accent-solid#4D4BD1#5252D8
--tg-color-accent-solid-hover#423BC0#5F62E9
--tg-color-accent-text#4641C7#96A2FC
--tg-color-accent-subtle#EAEEFE#222546

Focus

TokenLightDark
--tg-color-focus-ring#5A5CE2#8893FA

Status

TokenLightDark
--tg-color-status-danger-text#B71824#F7857D
--tg-color-status-danger-subtle#FEE9E6#3B1C1A
--tg-color-status-danger-solid#C50220#C50220
--tg-color-status-warning-text#825100#E9B452
--tg-color-status-warning-subtle#FFF1CC#332710
--tg-color-status-warning-solid#F0B135#F0B135
--tg-color-status-success-text#056A3B#59D38C
--tg-color-status-success-subtle#DAF7E3#152C1E
--tg-color-status-success-solid#02703F#02703F
--tg-color-status-info-text#02629C#72B8F2
--tg-color-status-info-subtle#E2F1FE#152839

Brand

TokenLightDark
--tg-color-brand-indigo#8B93F8#8B93F8
--tg-color-brand-teal#5EEAD4#5EEAD4
--tg-color-brand-ink#12131A#12131A

Contrast, measured

78 measurements: every pair below in both themes, by the WCAG 2.x contrast formula. Text needs 4.5 to 1; the boundary of a control and the focus ring need 3 to 1. All of them pass, and the build that produced this page would have failed otherwise.

PairUsed forNeedsLightDark
color-text-primary on color-bg-canvastext4.5:116.24:116.09:1
color-text-primary on color-bg-surfacetext4.5:117.39:115.05:1
color-text-primary on color-bg-sunkentext4.5:115.27:113.98:1
color-text-primary on color-bg-hovertext4.5:114.35:112.87:1
color-text-primary on color-bg-selectedtext4.5:113.06:111.51:1
color-text-secondary on color-bg-canvastext4.5:17.89:19.57:1
color-text-secondary on color-bg-surfacetext4.5:18.45:18.95:1
color-text-secondary on color-bg-sunkentext4.5:17.42:18.31:1
color-text-secondary on color-bg-hovertext4.5:16.97:17.65:1
color-text-secondary on color-bg-selectedtext4.5:16.35:16.85:1
color-text-tertiary on color-bg-canvastext4.5:15.86:16.64:1
color-text-tertiary on color-bg-surfacetext4.5:16.28:16.21:1
color-text-tertiary on color-bg-sunkentext4.5:15.52:15.77:1
color-text-tertiary on color-bg-hovertext4.5:15.18:15.31:1
color-text-tertiary on color-bg-selectedtext4.5:14.72:14.75:1
color-accent-text on color-bg-canvaslink4.5:16.90:18.10:1
color-accent-text on color-bg-surfacelink4.5:17.39:17.57:1
color-accent-text on color-bg-sunkenlink4.5:16.49:17.03:1
color-text-on-accent on color-accent-solidbutton text4.5:16.48:15.90:1
color-text-on-accent on color-accent-solid-hoverbutton text, hover4.5:18.02:14.76:1
color-accent-text on color-accent-subtletext on the accent tint4.5:16.39:16.24:1
color-status-danger-text on color-bg-canvasstatus text4.5:16.18:17.85:1
color-status-danger-text on color-bg-surfacestatus text4.5:16.63:17.35:1
color-status-warning-text on color-bg-canvasstatus text4.5:16.27:110.14:1
color-status-warning-text on color-bg-surfacestatus text4.5:16.72:19.49:1
color-status-success-text on color-bg-canvasstatus text4.5:16.26:110.15:1
color-status-success-text on color-bg-surfacestatus text4.5:16.71:19.49:1
color-status-info-text on color-bg-canvasstatus text4.5:16.07:18.99:1
color-status-info-text on color-bg-surfacestatus text4.5:16.50:18.41:1
color-status-danger-text on color-status-danger-subtlestatus text on its tint4.5:15.68:16.30:1
color-status-warning-text on color-status-warning-subtlestatus text on its tint4.5:15.98:17.73:1
color-status-success-text on color-status-success-subtlestatus text on its tint4.5:15.87:17.88:1
color-status-info-text on color-status-info-subtlestatus text on its tint4.5:15.65:17.07:1
color-border-strong on color-bg-canvascontrol boundary3:14.01:14.46:1
color-border-strong on color-bg-surfacecontrol boundary3:14.29:14.17:1
color-border-strong on color-bg-sunkencontrol boundary3:13.77:13.88:1
color-focus-ring on color-bg-canvasfocus ring3:14.82:16.94:1
color-focus-ring on color-bg-surfacefocus ring3:15.17:16.49:1
color-focus-ring on color-bg-sunkenfocus ring3:14.54:16.03:1

Type

IBM Plex Sans for the interface, IBM Plex Mono for code and identifiers. The product uses nine roles; this site adds larger display sizes for headlines.

RoleSize / lineWeightSpecimen
--tg-type-display32 / 40600Plan it. Write it. Talk it through.
--tg-type-title-lg24 / 32600Plan it. Write it. Talk it through.
--tg-type-title-md20 / 28600Plan it. Write it. Talk it through.
--tg-type-title-sm16 / 24600Plan it. Write it. Talk it through.
--tg-type-body-lg16 / 24400Plan it. Write it. Talk it through.
--tg-type-body14 / 20400Plan it. Write it. Talk it through.
--tg-type-body-sm13 / 20400Plan it. Write it. Talk it through.
--tg-type-label12 / 16500Plan it. Write it. Talk it through.
--tg-type-caption11 / 16500Plan it. Write it. Talk it through.

Space and radius

  • space-0502 px
  • space-1004 px
  • space-1506 px
  • space-2008 px
  • space-25010 px
  • space-30012 px
  • space-40016 px
  • space-50020 px
  • space-60024 px
  • space-70028 px
  • space-80032 px
  • space-100040 px
  • space-120048 px
  • space-160064 px

Radius

  • radius-xs2 px
  • radius-sm4 px
  • radius-md6 px
  • radius-lg8 px
  • radius-xl12 px
  • radius-2xl16 px

Motion

Five durations, from 0 to 300 milliseconds, and three easing curves. Hover and press are fast; menus enter in 150 ms; nothing that is triggered from the keyboard many times a day is animated. When your system asks for reduced motion, movement stops and only short fades remain.

Where the program stands

  1. Defects and instruments: twenty fixes, the contrast gate, the visual baselinesfirst release live, November 11, 2026
  2. Token source and alias layer: one source, no pixel changednext
  3. Color, type, elevation, motion and themesplanned
  4. Icon system: one grid, one stroke, names by meaningplanned
  5. Primitives, states and the command modelplanned
  6. Shell, Home and navigationplanned
  7. Attention and viewsplanned
  8. Assistance and the published conformance reportplanned

What each release changed for the people who use Tridge is in the changelog.