.md

Colors

The docs share the 2026 website's palette: black and white ink, a hard 1.5px rule, mint for the answer you copy and the active thing, yellow for gotchas, and a dark editor surface for code in both themes. Every color is a semantic token, named by role, and most of them switch with the theme.

Watch out
Build with the tokens. Never hard-code a hex value or reach for Tailwind's default palette; it is cleared in styles.css. The only non-semantic colors are the brand fills mint, yellow, black and white, and the white-* opacities for text on the editor surface.

Surfaces

Page and panel backgrounds. surface-muted is a tint overlay: header strips, inset panels, chips and hover states.

TokenLightDark
surface

Page and panel

#ffffff#0b0b0b
surface-muted

Header strips, chips, hover

black 4.5%white 6%
surface-elevated

Menus, dialogs, popovers

#ffffff#161616

Ink

Text by emphasis. Inverted is text on an ink fill (a primary button).

TokenLightDark
text-primary

Headings and body

#000000#ffffff
text-secondary

Descriptions, leads

#5c5c5c#b4b4b4
text-muted

Meta, captions

#707070#8f8f8f
text-inverted

Text on an ink fill

#ffffff#000000

Lines

The rule is the website’s hard line, always drawn at 1.5px (2px on top of columns). Hairlines separate quietly: table rows, header strips.

TokenLightDark
rule

Frames, h2 rules, column tops

#000000#ffffff
border

Hairline separator

black 10%white 13%
border-strong

Stronger hairline

black 22%white 28%

Brand accents

Mint and yellow fills are constant and always carry black text; the soft tints switch with the theme.

TokenLightDark
mint

Copy, active, the answer

#b5edbd#b5edbd
mint-strong

Mint hover

#a2e3ac#a2e3ac
yellow

Watch out, demo data

#ffe58a#ffe58a
mint-soft

Highlighted column, link hover

#ddfde8mint 14%
yellow-soft

Warning callout

#fff3c8yellow 12%

State

accent is ink in light and mint in dark. The status colors are for real status only.

TokenLightDark
accent

Ink / mint highlight

#000000#b5edbd
accent-muted

Fill paired with text-accent

#b5edbdmint 16%
success

Passed, confirmed

#15803d#6fdc8c
warning

Caution

#8a5a00#ffe58a
error

Failed, destructive

#c81e1e#ff7b72

Usage

Apply tokens as Tailwind utilities: bg-, text-, border-. The rule is always drawn at 1.5px (border-[1.5px] border-rule); 2px rules top columns (border-t-2 border-rule).

text-text-primary

text-text-secondary, for descriptions and leads

text-text-muted, for meta and captions

Panel header strip

bg-surface-muted strip, border-border hairline, framed by the rule.

A 2px rule tops a column

Brand fills

Mint and yellow are constant in both themes and always carry black text. Mint marks the thing you copy, the active item and confirmations; yellow marks gotchas and demo data. Their -soft tints switch with the theme and work as backgrounds and hover states.

bg-mintbg-yellowbg-surface-mutedbg-mint-softbg-yellow-soft

State colors

accent is ink in light mode and mint in dark mode, like the website's dark sections; pair bg-accent-muted with text-accent. success, warning and error (each with a -muted tint) are for real status only, never decoration.

accentsuccesswarningerror

Editor surface

Code blocks, the scripted terminal and CLI chips sit on bg-editor, framed by the rule. It stays dark in both themes: #202020 on the light page, #161616 on the dark one. The white-* opacities are its foreground palette. They don't switch with the theme, because the surface is dark either way: use them only on that surface, and a semantic text-* token everywhere else.

editor#202020 / #161616
white-50#fff
white-1004%
white-2008%
white-30016%
white-40032%
white-50048%
white-60064%

CSS variables

Tokens are declared in src/styles.css: registered with Tailwind under @theme, given light values on :root and dark values under .dark (set on <html>). Switching the theme flips the variables; no utility class changes. Radii, the rule width and motion live there too.

src/styles.css
@theme {
  --color-mint: #b5edbd;
  --color-mint-strong: #a2e3ac;
  --color-yellow: #ffe58a;
  --color-rule: var(--color-rule);
  --color-editor: var(--color-editor);
  /* …every semantic token is registered the same way */
}

:root {
  --radius-sm: 3px;   /* chips, kbd */
  --radius-lg: 6px;   /* panels, code blocks */
  --rule-width: 1.5px;
  --duration-fast: 0.15s;

  --color-surface: #ffffff;
  --color-editor: #202020;
  --color-rule: #000000;
  --color-text-primary: #000000;
  --color-text-secondary: #5c5c5c;
  --color-accent: #000000;
}

.dark {
  --color-surface: #0b0b0b;
  --color-editor: #161616;
  --color-rule: #ffffff;
  --color-text-primary: #ffffff;
  --color-text-secondary: #b4b4b4;
  --color-accent: #b5edbd;
}

Accessibility

  • Text on surface: primary, secondary and muted text all clear WCAG AA (4.5:1) on surface in both themes (muted is the floor: 4.9:1 light, 6.1:1 dark).
  • Brand fills: mint and yellow always carry black text, never white.
  • Focus: the global :focus-visible outline is 2px in the rule color. Don't remove it; move it inside a clipped container with a negative offset instead.