Skip to main content
Executive Support by Beige Threat

Getting started

The Executive Support design system is token-led. Every colour, size, motion, and state ships as a W3C DTCG token, drawn from the magazine and exposed as plain CSS variables. No build step, no JavaScript runtime, no framework lock-in.

Most people landing here need three things in their first session – install, a token, and a button. This page covers all three, then points to where the rest lives.

Install in three lines

Drop these into your <head> in this order. Order matters – colour resolves first, typography references colour, spacing stands alone but ships last by convention.

<link rel="stylesheet" href="/styleguide/tokens/color.css" />
<link rel="stylesheet" href="/styleguide/tokens/typography.css" />
<link rel="stylesheet" href="/styleguide/tokens/spacing.css" />

That gives you every primitive and semantic CSS variable. Roughly 280 in total. Add motion.css, states.css, and icons.css as you reach for them – they’re independent and can land in any order after the first three.

If you use Tokens Studio in Figma, point it at the matching *.tokens.json files in the same folder. Mark the primitive set as Source, the semantic set as Enabled, then push to Figma Variables.

The full file map

Everything sits under /styleguide/tokens/. The *.tokens.json files are the W3C DTCG source of truth – a token editor or build pipeline reads these. The *.css files are generated from the JSON and are what you ship to the browser.

FileWhat it isWhen you’d need it
color.cssGenerated CSS variables for every primitive ramp and semantic roleAlways. First link in the head.
color.tokens.jsonDTCG source for the colour layerEditing tokens, syncing Figma, building a custom theme.
typography.cssType scale, line-heights, tracking, and the four semantic styles (display, editorial, body, UI)Always. Second link in the head.
typography.tokens.jsonDTCG source for the type systemAdjusting the scale, adding a weight, syncing Figma styles.
spacing.cssThe 4-px scale plus inline / stack / inset / section slots, radii, borders, elevationAlways. Third link in the head.
spacing.tokens.jsonDTCG source for spacing, radii, borders, shadowsTuning the rhythm of a layout, adjusting a radius globally.
motion.cssDurations, easings, and named transitions (fade, pop, slide)When something needs to move – hover, modal, accordion.
motion.tokens.jsonDTCG source for the motion layerEditing the easing curve or timing scale.
states.cssHover, focus-visible, active, disabled, selectedBuilding any interactive component.
states.tokens.jsonDTCG source for the state layerAdjusting focus-ring colour or disabled opacity globally.
icons.cssSizing tokens and a CSS-mask helper for the spriteWhen you reference the SVG sprite from CSS.
icons.svgThe 49-glyph sprite, one consistent line weightInline <use href="…#name"/> references in markup.
icons.tokens.jsonDTCG source mapping glyph names to viewBoxesGenerating typed bindings or syncing Figma component variants.
fonts.css@font-face declarations for Inter and FreightWhenever you want self-hosted fonts (skip if loading from Google Fonts).
_ramps.jsonInternal: raw colour ramps before semantic mappingRarely. Inspecting the maths behind a swatch.

The underscore on _ramps.json is deliberate – treat it as internal. It exists so the colour build can reason about ramps without re-walking the semantic tree.

First 30 minutes

A checklist for a designer or engineer landing here cold. If you finish all six in order, you’ll have wired the system into a real component, replaced the values that mattered, and met the voice rules before writing any UI copy.

TimeTask
0–5 minLink the three CSS files in your <head>. Confirm var(--es-color-text-primary) resolves in DevTools.
5–10 minReplace your colours with semantic tokens – var(--es-color-text-primary) for body copy, var(--es-color-surface-canvas) for the page background.
10–15 minReplace your spacing with var(--es-space-*) primitives, or better, the semantic stack / inset slots from spacing.
15–25 minRun a button through the contract – every state, every size, focus ring included. The full spec is on the buttons page.
25–30 minRead Voice & Tone before writing any UI copy. Most regressions in the system come from copy, not code.

If something on the list takes more than its budget, that’s a signal to open an issue rather than to push through. The system should make the easy thing easy.

The asset kit

Everything below is downloadable. Paths under /styleguide/assets/ are stubbed pending the asset pipeline – the routes are reserved, the binaries land in v1.3. Until then, the brand page has the working previews.

Brand mark – SVG

The lockup in light and dark, plus a wordmark-only variant. Stubbed pending final mark.

Favicon set

ICO, PNG (16, 32, 180, 512), and a maskable SVG for PWA installs.

Brand colour swatches

The four anchors plus extended ramps. Adobe ASE, Sketch palette, and a link to the Figma library.

Type – Inter

Free on Google Fonts and Adobe Fonts. Weights 400 / 500 / 600 / 700.

Type – Freight

Licensed family from Phil's Fonts. Required for editorial display and reading. Self-hosted via fonts.css.

Icon sprite

49 glyphs, single SVG, one consistent line weight. Reference by id with <use href='…#name'/>.

Inter ships free under the OFL. Freight needs a per-seat licence from Phil’s Fonts – pick that up before deploying any production page that uses the editorial scale. Until your licence lands, the typography fall-back chain resolves to a system serif and the page still reads.

Where to ask questions

Tagged comments in Figma for design queries, GitHub issues against the repo for bugs and token requests, email design@executivesupport.com for anything brand-shaped. The maintainer values plain bug reports over polite ones – open the issue with what broke, what you expected, and the smallest reproduction you can manage.

Versioning at a glance

The system follows semver. Breaking changes – a renamed token, a removed primitive, a shifted scale – land on a major. Additive work lands on a minor. Fixes and documentation land on a patch.

Currentv1.2.1 · May 2026
ChannelStable
Nextv1.3 – forms in progress, asset pipeline lands
HistoryChangelog

Stability matrix

Honest snapshot. Foundations are locked – the API won’t change inside v1. Components are mid-build; expect signature shifts on anything marked in progress.

LayerStatusNotes
ColourShipped · v1.0Nine ramps, five semantic tiers, AA-verified across every text/surface pair.
TypographyShipped · v1.0Inter and Freight, fifteen sizes, semantic styles for UI and editorial.
Spacing & layoutShipped · v1.0Seventeen-stop scale, four spacing slots, radii, borders, five-step elevation.
MotionShipped · v1.1Durations, easings, named transitions. Reduced-motion handled at source.
StatesShipped · v1.1Hover, focus-visible, active, disabled, selected. WCAG focus indicator.
IconographyShipped · v1.249 glyphs, single weight, sprite plus Figma component set.
ModesIn progressLight is shipped. Dark drafts behind a flag; ship target v1.4.
ButtonsShipped · v1.2Primary, secondary, tertiary, destructive. Five sizes. Loading and icon variants.
FormsIn progressInputs and selects in review; checkboxes and radios drafted. Target v1.3.
CardsPlannedSpecced, not built. Target v1.3.
TabsPlannedSpecced, not built. Target v1.4.
ModalPlannedAwaiting motion review. Target v1.4.

If a layer you need is “planned”, the foundations underneath are stable enough to compose your own. Open an issue describing the use case – that’s how the roadmap moves.

—es-color-text-primary
Foundations

Naming & tokens

How tokens are scoped, why we tier primitive into semantic, and the full naming grammar.

Save draftCancel
Components

Buttons

The first shipped component. Five sizes, four intents, the full state contract.

Plain.
Direct.
Earned.
Brand voice

Voice & Tone

Considered, specific, direct, warm. Read this before writing any UI copy.