Skip to content
Tokens

Ask for a role, never a hex.

The tokens come straight from tokens.json in the package, so this page cannot drift from it. Roles change with the theme; the named colors do not.

Named colors

The palette itself, for illustration, print and the places a role does not fit. Components use roles.

laser#BC2525

Laser, THE primary. Fills the main button and the New badge; draws path lines, the 8 and the dot in the wordmark, the inner focus ring, the active tab bar, link underlines and italic display emphasis at 24px or larger (18.7px bold). Never small text on dark: 3.22:1 on Void, 3.08:1 on Deck, so lines and large type only, each line with a partner. On light 5.61:1 on Paper. White on it 6.12:1, Frost on it 5.45:1. Use it through accent and accent-fill.

scanner#8C1B1B

Scanner, the deep red. The quiet (second) button and Live badge fill, the pressed main button, and the soft glow under a Laser line on dark. Only 1.50:1 from Laser, so never place the two as neighbors that must be told apart. White on it 9.18:1, Frost on it 8.17:1.

scanner-deep#6F1414

Pressed state of the quiet button (quiet-press). White on it 11.76:1.

ember#D97706

Ember, the outcome. A SHAPE color: the end node of the mark, the lit bulb, the one lit chart series, the sweep head, a highlight behind Ink. Never a word on light (2.92:1 on Paper); on light every Ember shape gets an Ink outline (2px on chart marks, 3px on larger shapes). Ink on it 5.71:1. 6.19:1 on Void.

amber#F0A64B

Lit words on dark: units, lit figures and lit labels (lit-text in the dark theme). 9.64:1 on Void, 7.85:1 on Rail, the lowest.

burnt#A34A05

Lit words on light (lit-text in the light theme). 5.43:1 on Paper, 4.57:1 on Shelf (the lowest), so it passes as text on every light surface. Prints as a deep orange that holds on uncoated stock.

void#0D0A0A

Void: the dark page, the well on light pages, social tiles, the cover band of the Map PDF. surface-0 in the dark theme.

deck#151010

Deck: cards on dark (surface-1).

plate#1E1616

Plate: raised panels, menus, toasts and tooltips on dark (surface-2, inverse-surface).

rail#2B1E1E

Rail: rails, hover rows and disabled fills on dark (surface-3).

frost#F4F1F0

Frost: headings and primary text on dark (text-1), the partner of every Laser line on dark, and the core of the sweep head. 17.55:1 on Void.

mist#D6D0CF

Mist: body text on dark (text-2). 10.54:1 on Rail, the lowest.

fog#9F9695

Fog: captions, metadata and disabled text on dark (text-3). 5.56:1 on Rail, the lowest.

paper#F8F4F3

Paper: the light page (surface-0 in the light theme), Substack web background, form pages.

sheet#FFFFFF

Sheet: cards, fields and menus on light (surface-1).

tray#F1EBEA

Tray: raised panels and placeholders on light (surface-2).

shelf#E8E0DF

Shelf: hover rows and disabled fills on light (surface-3).

ink#1A1414

Ink: headings and primary text on light (text-1), the partner of every Laser line on light, the outline on Ember shapes, the text on an Ember highlight. 16.66:1 on Paper.

slate#423939

Slate: body text on light (text-2). 8.61:1 on Shelf, the lowest.

ash#685E5D

Ash: captions, metadata and disabled text on light (text-3). 4.83:1 on Shelf, the lowest.

moss#27A555

Moss, success text on dark (success-text in the dark theme). Status only. 4.52:1 at the lowest, on its tint and on surface-0 to surface-3.

moss-deep#1B733B

Moss deep, success text on light (success-text in the light theme). Status only. 4.54:1 at the lowest, on its tint and on surface-0 to surface-3.

moss-night#10301C

Moss night, the success tint on dark (success-tint). Status only: the fill behind a success badge.

moss-mist#D9F2E2

Moss mist, the success tint on light (success-tint). Status only: the fill behind a success badge.

moss-rim#268348

Moss rim, the success border on dark (success). Status only. 3.03:1 at the lowest, on its tint and on surface-0 to surface-2.

moss-bright#2D9A55

Moss bright, the success border on light (success). Status only. 3.03:1 at the lowest, on its tint and on surface-0 to surface-2.

tide#428AE8

Tide, info text on dark (info-text in the dark theme). Status only. 4.53:1 at the lowest, on its tint and on surface-0 to surface-3.

tide-deep#1862C4

Tide deep, info text on light (info-text in the light theme). Status only. 4.51:1 at the lowest, on its tint and on surface-0 to surface-3.

tide-night#0F233E

Tide night, the info tint on dark (info-tint). Status only: the fill behind an info badge.

tide-mist#DEE9F7

Tide mist, the info tint on light (info-tint). Status only: the fill behind an info badge.

tide-rim#216BCB

Tide rim, the info border on dark (info). Status only. 3.03:1 at the lowest, on its tint and on surface-0 to surface-2.

tide-bright#4085E0

Tide bright, the info border on light (info). Status only. 3.03:1 at the lowest, on its tint and on surface-0 to surface-2.

brass#B4900C

Brass, warning text on dark (warning-text in the dark theme). Status only. 4.51:1 at the lowest, on its tint and on surface-0 to surface-3.

brass-deep#7A6108

Brass deep, warning text on light (warning-text in the light theme). Status only. 4.56:1 at the lowest, on its tint and on surface-0 to surface-3.

brass-night#362D0A

Brass night, the warning tint on dark (warning-tint). Status only: the fill behind a warning badge.

brass-mist#F6EDCB

Brass mist, the warning tint on light (warning-tint). Status only: the fill behind a warning badge.

brass-rim#8E7310

Brass rim, the warning border on dark (warning). Status only. 3.00:1 at the lowest, on its tint and on surface-0 to surface-2.

brass-bright#A48412

Brass bright, the warning border on light (warning). Status only. 3.03:1 at the lowest, on its tint and on surface-0 to surface-2.

Color roles

Each role resolves to a different named color in each theme. The swatches below are pinned to data-theme="light" and data-theme="dark", whatever mode the page is in.

RoleLightDarkUse
surface-0Paper
#F8F4F3
Void
#0D0A0A

Page background: Paper (light), Void (dark).

surface-1Sheet
#FFFFFF
Deck
#151010

Cards, fields, tables: Sheet (light), Deck (dark).

surface-2Tray
#F1EBEA
Plate
#1E1616

Raised panels and placeholders; on dark also menus and skeleton blocks: Tray (light), Plate (dark).

surface-3Shelf
#E8E0DF
Rail
#2B1E1E

Rails, hover and selected rows in menus and tables, disabled fills; on light also skeleton blocks: Shelf (light), Rail (dark).

line
#DED4D3

#382828

Hairlines: card borders, table rows, dividers, tab list rule. Decorative only; never the only edge of a control.

edge
#847978

#756B6A

Borders that must be seen: field outlines, the ghost button, checkbox and radio rings, switch track, dashed placeholders. At least 3.57:1 on light surfaces 0 to 2 and 3.44:1 on dark surfaces 0 to 2 (3:1 floor for control borders); on Rail it drops to 3.11:1, so controls do not sit on Rail.

text-1Ink
#1A1414
Frost
#F4F1F0

Headings, labels, primary text, icons, button text on quiet and ghost: Ink (light), Frost (dark). Lowest across surface-0 to surface-3: 14.00:1 light, 14.30:1 dark.

text-2Slate
#423939
Mist
#D6D0CF

Body copy on surface-0 to surface-3: Slate (light), Mist (dark). Lowest: 8.61:1 light, 10.54:1 dark.

text-3Ash
#685E5D
Fog
#9F9695

Captions, metadata, placeholders, Courier labels and disabled text on surface-0 to surface-3: Ash (light), Fog (dark). Lowest: 4.83:1 light, 5.56:1 dark.

accentLaser
#BC2525
Laser
#BC2525

Laser as a line or mark: path lines, the 8 and the dot, the inner focus ring, link underlines, the active tab bar, italic display emphasis at 24px or larger. Not small text (rule 1).

accent-fillLaser
#BC2525
Laser
#BC2525

The main button and the New badge. One main button per view.

accent-ink
#FFFFFF
Frost
#F4F1F0

Text and icons on accent-fill: white 6.12:1 (light), Frost 5.45:1 (dark).

accent-pressScanner
#8C1B1B
Scanner
#8C1B1B

The main button while pressed, with a dark inset and a light edge. accent-ink on it 9.18:1 light, 8.17:1 dark.

accent-quietScanner
#8C1B1B
Scanner
#8C1B1B

The quiet (second) button and the Live badge.

quiet-ink
#FFFFFF
Frost
#F4F1F0

Text on accent-quiet: white 9.18:1 (light), Frost 8.17:1 (dark).

quiet-pressScanner-deep
#6F1414
Scanner-deep
#6F1414

The quiet button while pressed. quiet-ink on it 11.76:1 light, 10.46:1 dark.

litEmber
#D97706
Ember
#D97706

The outcome as a shape: the mark's end node, the bulb, the one lit chart series, the sweep head, the first item in a plan. On light, give it an Ink outline.

lit-ink
#1A0E00

#1A0E00

Strokes and glyphs drawn on a lit fill (the bulb filament, a number on an Ember chip). 5.96:1 on Ember.

lit-textBurnt
#A34A05
Amber
#F0A64B

Lit words: units, lit figures, the lit label in a chart. Burnt on light (lowest 4.57:1), Amber on dark (lowest 7.85:1). Never Ember as text.

glowScanner
#8C1B1B
Scanner
#8C1B1B

The soft glow under a Laser line: Scanner, 16 to 18px wide, blurred 5 to 6px, at 90%. Dark grounds only. In the light theme use it only inside a well; light never glows on paper.

partnerInk
#1A1414
Frost
#F4F1F0

The partner of every Laser line and the outer focus ring: Ink (light), Frost (dark). Carries the shape for red-blind viewers: Laser on Void falls to 2.33:1 in a protanopia simulation, Frost on Void stays 17.53:1.

wellVoid
#0D0A0A
Void
#0D0A0A

The dark well that anything giving off light sits in on a light page: the mark at hero size, the trace, the sweep track, hero bands, the Map cover band.

errorLaser
#BC2525
Laser
#BC2525

Error borders (2px). Always with an icon and the word Error in text-1; the red never carries the message alone. Among status messages only errors are red.

successMoss-bright
#2D9A55
Moss-rim
#268348

The success border (status only), always with its icon and word in a badge. 3.03:1 light, 3.03:1 dark at the lowest on its tint and surface-0 to surface-2.

success-textMoss-deep
#1B733B
Moss
#27A555

The success word and icon (status only): Moss deep on light, Moss on dark. Lowest 4.54:1 light, 4.52:1 dark, on its tint and surface-0 to surface-3.

success-tintMoss-mist
#D9F2E2
Moss-night
#10301C

The success fill (status only), behind success-text and inside the success border.

infoTide-bright
#4085E0
Tide-rim
#216BCB

The info border (status only), always with its icon and word in a badge. 3.03:1 light, 3.03:1 dark at the lowest on its tint and surface-0 to surface-2.

info-textTide-deep
#1862C4
Tide
#428AE8

The info word and icon (status only): Tide deep on light, Tide on dark. Lowest 4.51:1 light, 4.53:1 dark, on its tint and surface-0 to surface-3.

info-tintTide-mist
#DEE9F7
Tide-night
#0F233E

The info fill (status only), behind info-text and inside the info border.

warningBrass-bright
#A48412
Brass-rim
#8E7310

The warning border (status only), always with its icon and word in a badge. 3.03:1 light, 3.00:1 dark at the lowest on its tint and surface-0 to surface-2.

warning-textBrass-deep
#7A6108
Brass
#B4900C

The warning word and icon (status only): Brass deep on light, Brass on dark. Lowest 4.56:1 light, 4.51:1 dark, on its tint and surface-0 to surface-3.

warning-tintBrass-mist
#F6EDCB
Brass-night
#362D0A

The warning fill (status only), behind warning-text and inside the warning border.

inverse-surfaceInk
#1A1414
Plate
#1E1616

Toasts and tooltips: Ink on light pages, Plate on dark pages (with an edge border).

inverse-text
#FFFFFF
Frost
#F4F1F0

Text on inverse-surface: white on Ink 18.20:1, Frost on Plate 15.82:1.

inverse-text-2Mist
#D6D0CF
Mist
#D6D0CF

Secondary text and the close icon on inverse-surface: 11.94:1 on Ink, 11.66:1 on Plate.

scrim
rgba(13, 10, 10, 0.55)

rgba(13, 10, 10, 0.72)

Backdrop behind a dialog: Void at 55% (light), 72% (dark).

chart-contextAsh
#685E5D

#6E6463

Context series in charts (everything that is not the one lit series): Ash on light (6.27:1 on Sheet), a deeper Fog on dark (3.29:1 on Deck), so the Ember series is the brightest thing in the chart.

tile-edge
#5E5B5A

#5E5B5A

1px edge on dark social tiles, share images, carousels and quote cards: Frost at 35% on Void. It keeps a Void tile visible in a dark feed (2.78:1 against a typical dark feed).

Type

Email-safe system fonts only: font-display is Georgia, "Times New Roman", serif; font-body is Verdana, Geneva, sans-serif; font-wordmark is Verdana, Geneva, sans-serif; font-mono is "Courier New", Courier, monospace.

Display

19%
t-hero4.5rem / 1.05 / 700 / -0.02em

Big stat numerals and quote heroes. Georgia has no 900; bold is the heaviest.

Many tools. One path.
t-display3rem / 1.1 / 700 / -0.02em

Page H1 and slide titles. One italic Laser phrase allowed (24px+).

Map first. Then build.
t-h12.25rem / 1.15 / 700 / -0.02em
The ranked list
t-h21.75rem / 1.15 / 700 / -0.02em
Send this inquiry?
t-h31.375rem / 1.2 / 700 / -0.01em

Body

The quick brown fox jumps over the lazy dog.
t-lead1.125rem / 1.6 / 400 / 0em
The quick brown fox jumps over the lazy dog.
t-body1rem / 1.65 / 400 / 0em

Long reading: offer pages, Substack, the Map.

The quick brown fox jumps over the lazy dog.
t-ui0.875rem / 1.5 / 400 / 0em

Fields, menus, tables, alerts.

The quick brown fox jumps over the lazy dog.
t-small0.8125rem / 1.55 / 400 / 0em

Secondary text in cards and alerts.

SIGNAL · ISSUE 04
t-eyebrow0.75rem / 1.5 / 700 / 0.24em

Uppercase eyebrows in text-3, with a 28px Laser tick before them. Never Laser text.

NEW
t-badge0.6875rem / 1.2 / 700 / 0.1em

Badge capitals. Nothing smaller than this.

Label

G8N•AI / SIGNAL / 04
t-label0.75rem / 1.5 / 700 / 0.04em

Courier New bold labels: captions, series markers, table headers, timestamps.

3.5 h
t-figure0.8125rem / 1.5 / 700 / 0.04em

Numbers in tables and charts.

Spacing

TokenValueSampleUse
space-00

Zero: reset a margin or gap.

space-10.25rem

4px, the base step.

space-20.5rem

8px: icon gaps, chip padding.

space-30.75rem

12px: control gaps, alert and toast gaps.

space-41rem

16px: alert padding, menu padding.

space-51.5rem

24px: card padding, grid gutter.

space-62rem

32px: section padding inside cards.

space-73rem

48px: between page sections on phones.

space-84rem

64px: board and hero padding.

space-96rem

96px: between page sections on desktop.

Radius

TokenValueSampleUse
radius-xs5px

Checkbox corners.

radius-sm8px

Tooltips, menu items, small chips.

radius-md12px

Buttons, fields, alerts, toasts, menus, tables, swatches.

radius-lg16px

Cards, dialogs, panels, the PDF cover art.

radius-pill999px

Badges, chips, the sweep track, the eyebrow tick.

Shadow

Neutral shadows; the only colored one is the Scanner glow, and only on dark.

TokenValueSampleUse
shadow-smlight 0 1px 2px rgba(26, 20, 20, 0.08) · dark 0 1px 2px rgba(0, 0, 0, 0.40)

Smallest lift: the switch thumb.

shadow-mdlight 0 6px 18px rgba(0, 0, 0, 0.06) · dark 0 6px 18px rgba(0, 0, 0, 0.35)

Raised cards.

shadow-lglight 0 16px 40px rgba(0, 0, 0, 0.12) · dark 0 16px 40px rgba(0, 0, 0, 0.50)

Menus and toasts.

shadow-xllight 0 24px 60px rgba(0, 0, 0, 0.50) · dark 0 24px 60px rgba(0, 0, 0, 0.50)

Dialogs, above the scrim.

shadow-glowlight 0 0 0 0 rgba(0, 0, 0, 0) · dark 0 0 0 1px rgba(140, 27, 27, 0.60), 0 8px 32px rgba(140, 27, 27, 0.55)

The soft Scanner glow around the one focal element on dark. Empty in the light theme (a zero shadow, so it can be listed beside another): light never glows on paper; put the element in a well instead.

Border

TokenValueUse
border-width1px

Hairlines, cards, menus, tables, the toast and tooltip edge.

border-width-bold2px

Fields, the ghost button, checkbox and radio rings, the switch track, error borders, each ring of the focus ring.

border-width-tab3px

The active tab bar, the AccentHeadline underline, the eyebrow tick.

Breakpoints

TokenValueUse
bp-sm640px

Large phone. Reference value: media queries use the literal.

bp-md768px

Tablet. The grid collapses to 6 columns.

bp-lg1024px

Laptop.

bp-xl1280px

Desktop.

Layout

TokenValueUse
grid-columns12

Columns in .g8n-grid; it collapses to 6 on tablet and 2 on phone.

grid-gutter1.5rem

24px gap in .g8n-grid; matches space-5.

measure66ch

Ideal reading width for body copy.

container-max1120px

Maximum width of .g8n-container.

Stacking

TokenValueUse
z-base0

Stacking base.

z-raised10

Cards lifted off the page.

z-sticky100

The sticky site header.

z-dropdown1000

Menus and selects.

z-overlay2000

The scrim behind a dialog.

z-modal2100

Dialogs.

z-toast3000

Toasts.

z-tooltip4000

Tooltips, always on top.

Font weight

Georgia, Verdana and Courier New ship regular and bold only.

TokenValueUse
fw-regular400

Body copy; italic display emphasis.

fw-bold700

Headlines, labels, buttons, the wordmark, Courier labels and numbers.

Font size

TokenValueUse
fs-hero4.5rem

72px: big stat and quote hero.

fs-display3rem

48px: page H1 and slide titles.

fs-h12.25rem

36px.

fs-h21.75rem

28px.

fs-h31.375rem

22px: dialog titles.

fs-lg1.125rem

18px: lead.

fs-base1rem

16px: body.

fs-sm0.875rem

14px: buttons, fields, secondary text.

fs-xs0.75rem

12px: eyebrows, Courier labels, captions.

fs-badge0.6875rem

11px: badges, the smallest text in the system (bold capitals only).

Line height

TokenValueUse
lh-tight1.05

Big numerals and the hero.

lh-snug1.15

Headlines.

lh-normal1.5

UI text and labels.

lh-relaxed1.65

Long-form reading.

Letter spacing

TokenValueUse
ls-tight-0.02em

Georgia headlines.

ls-normal0em

Default tracking.

ls-label0.04em

Courier New labels and numbers.

ls-badge0.1em

Badge capitals.

ls-eyebrow0.24em

Uppercase Verdana eyebrows.

ls-wordmark-0.03em

The G8N•AI wordmark.

Motion

Motion timings and easing, so code matches the boards. Every moving part has a reduced-motion state.

TokenValueUse
dur-press80ms

Button press: a 1px drop and the inset appear.

dur-hover120ms

Hover: the edge fades in.

dur-ui200ms

Menus, dialogs and toasts opening and closing; tab and accordion changes.

dur-sweep1.6s

Sweep B and the Frost-only sweep, back and forth (alternate).

dur-sweep-ambient2s

Sweep A, the plain ambient sweep, back and forth.

dur-signal4s

The signal trace loop: red pulses in, one Ember pulse with a Frost core out, the bulb lights.

ease-outcubic-bezier(0.22, 1, 0.36, 1)

The one easing for UI: settled, never springy, no bounce.

ease-sweepease-in-out

The sweeps, so the head slows at each end.

1.x to 2.0 token map

Every 1.x name that 2.0 renames or retires, and what to use now. The 1.x dark-mode class is now data-theme="dark", and the Tailwind layer is gone: read the --* variables through styles.css.

1.x2.0
surface-page, color-surface, g8n-cream / g8n-charcoalsurface-0
surface-card, surface-raised, color-surface-raisedsurface-1 (raised panels: surface-2)
surface-rule, border-subtle, color-border, g8n-ruleline
border-ink, color-border-strongedge (control borders) or text-1
text-strong, color-text, g8n-navytext-1
text-body, color-text-mutedtext-2
text-muted, text-faint, color-text-fainttext-3
text-on-accentaccent-ink
accent, color-focal, g8n-orangeaccent (the path, focus, emphasis) or lit (the outcome, the end node)
accent-hover, color-focal-hover, g8n-orange-hoveraccent-press (hover is now an edge, not a color)
accent-glow, g8n-orange-glowglow (dark only)
accent-wash, color-focal-wash, tint-orangeretired; to make a figure pop on light, Ink on lit
g8n-orange-softamber (lit-text on dark)
color-surface-inverse / color-text-inverseinverse-surface / inverse-text
status-danger, color-danger (and its tint, border, text)error for the 2px border; the icon and text stay text-1
status-success, status-warning, status-info (and tints, borders, texts)success, warning, info (border) with -text and -tint; the status icon and word stay
g8n-chalk-100 / -300 / -500frost / mist / fog
ink-*, g8n-ink-*ink, slate, ash (light)