Human Register
Warm, pedagogical, tactile.
Used for education, ethics, community, invitation, and voice.
--color-terracotta
--color-amber
--color-burgundy
A reference surface for work that moves between human pedagogy and digital precision. Every specimen below is bound to tokens/design-tokens.css, so the showcase changes when the system changes.
Human Register
Used for education, ethics, community, invitation, and voice.
--color-terracotta
--color-amber
--color-burgundy
The Membrane
Warm cream and neutral grays hold the tension without flattening it into white space.
--color-cream
--color-neutral-200
--gradient-membrane
Digital Register
Used for code, structure, navigation, analytical surfaces, and technical clarity.
--color-teal
--color-sage
--color-charcoal
01 / Palette
The palette is organized around what a surface is doing: warming a human moment, clarifying a digital one, or holding the membrane between them.
Neutral Scale
Ambient System
--bg-glow-terracotta
--bg-glow-teal
--bg-glow-sage
02 / Typography
Fraunces carries human authority, Instrument Sans keeps reading precise, and JetBrains Mono makes the builder layer visible without becoming the whole personality.
.type-display
.type-h2
.type-body
.type-code
03 / Components
This is not a component library. The showcase demonstrates how product surfaces should assemble buttons, cards, forms, and code panels using the same underlying vocabulary.
Interface Specimen
Example Card
Cards use warm surfaces, small radii, restrained borders, and a terracotta accent only when the content asks for emphasis.
Status Semantics
--color-success-text
--color-warning-text
--color-error-text
Code Specimen
/* Human to digital */ :root { --color-terracotta: #B35530; --color-cream: #FAF6EE; --color-teal: #1B756D; }
04 / Rhythm
The 4px spacing base gives the system a measured cadence. Motion is modest, accessible, and only used to clarify interaction.
Spacing Scale
--space-28px--space-416px--space-832px--space-1664px--space-2496pxMotion Tokens
150ms250ms400msease-springDark Mode
Warm cream, warm neutrals, terracotta emphasis, teal navigation.
Charcoal depth, lightened accents, borders instead of heavy shadow.
05 / Reference
The table and the contrast matrix below are rendered directly from tokens/membrane.tokens.json by the same build script that writes the CSS. There is no second copy to fall out of sync.
Do / Don't
Do
background: var(--color-action-primary);
Retheme is automatic — the semantic token already carries its light-dark() pair.
Don't
background: var(--color-terracotta);
Reaches into a Tier 1 primitive directly — the exact pattern that once forced dark mode to redefine primitives per theme.
Do
color: var(--color-warning-text);
5.0:1 on --color-bg-primary — passes WCAG AA for body text.
Don't
color: var(--color-warning);
2.3:1 as text on cream — this token is a fill/badge color, not a text color.
Do
min-height: var(--size-touch-target);
Meets the 44px WCAG 2.5.5 minimum by construction.
Don't
min-height: 44px;
Same value today, but a literal — it silently drifts the moment the token changes.
Token Table
| Token | Category | Description | |
|---|---|---|---|
--bg-glow-focal |
Glow | ||
--bg-glow-focal-loaded |
Glow | ||
--bg-glow-sage |
Glow | ||
--bg-glow-teal |
Glow | ||
--bg-glow-terracotta |
Glow | ||
--blur-backdrop |
Blur | Backdrop blur for translucent surfaces (nav bars, veils). | |
--border-accent |
Border | ||
--border-default |
Border | ||
--border-emphasis |
Border | ||
--border-width-medium |
Border-width | ||
--border-width-thick |
Border-width | ||
--border-width-thin |
Border-width | ||
--code-bg |
Code | ||
--code-border |
Code | ||
--code-comment |
Code | ||
--code-function |
Code | ||
--code-keyword |
Code | ||
--code-number |
Code | ||
--code-string |
Code | ||
--code-text |
Code | ||
--color-action-primary |
Color / Semantic | Primary CTAs and key interactive accents. Replaces direct use of --color-terracotta on interactive elements. | |
--color-action-secondary |
Color / Semantic | Secondary/navigational actions. | |
--color-amber |
Color / Primitive | Builder energy. Fill/badge use only — fails text contrast on cream; use semantic warning-text for text. | |
--color-amber-10 |
Color / Tint | ||
--color-amber-light |
Color / Primitive | ||
--color-bg-primary |
Color / Semantic | ||
--color-bg-secondary |
Color / Semantic | ||
--color-bg-tertiary |
Color / Semantic | ||
--color-border-default |
Color / Semantic | ||
--color-border-emphasis |
Color / Semantic | ||
--color-burgundy |
Color / Primitive | Heritage depth. | |
--color-burgundy-10 |
Color / Tint | ||
--color-burgundy-light |
Color / Primitive | ||
--color-charcoal |
Color / Primitive | Dark canvas. Never pure black. | |
--color-cream |
Color / Primitive | Light canvas. Never pure white. | |
--color-error |
Color / Semantic | ||
--color-error-text |
Color / Semantic | ||
--color-focus |
Color / Semantic | Focus indicator color. v2.0: dark mode now remaps to teal-light (raw teal was ~3:1 on charcoal). | |
--color-info |
Color / Semantic | ||
--color-neutral-100 |
Color / Neutral | ||
--color-neutral-200 |
Color / Neutral | ||
--color-neutral-300 |
Color / Neutral | ||
--color-neutral-400 |
Color / Neutral | ||
--color-neutral-50 |
Color / Neutral | ||
--color-neutral-500 |
Color / Neutral | ||
--color-neutral-600 |
Color / Neutral | ||
--color-neutral-700 |
Color / Neutral | ||
--color-neutral-800 |
Color / Neutral | ||
--color-neutral-900 |
Color / Neutral | ||
--color-overlay-bg |
Color / Semantic | Scrims and image-readability layers. Intentionally identical in both modes. | |
--color-sage |
Color / Primitive | Growth. Fill/icon use; use semantic success-text for text on light surfaces. | |
--color-sage-10 |
Color / Tint | ||
--color-sage-light |
Color / Primitive | ||
--color-selection |
Color / Semantic | Text selection highlight. | |
--color-success |
Color / Semantic | Fills, icons, large text (≥3:1). For body-size text use success-text. | |
--color-success-text |
Color / Semantic | ||
--color-teal |
Color / Primitive | Secondary brand. The digital register: technology, depth, Rio's ocean. | |
--color-teal-08 |
Color / Tint | ||
--color-teal-10 |
Color / Tint | ||
--color-teal-12 |
Color / Tint | ||
--color-teal-20 |
Color / Tint | ||
--color-teal-dark |
Color / Primitive | ||
--color-teal-light |
Color / Primitive | ||
--color-terracotta |
Color / Primitive | Primary brand. The human register: earth, hands, making, Brazilian clay. | |
--color-terracotta-10 |
Color / Tint | ||
--color-terracotta-20 |
Color / Tint | ||
--color-terracotta-dark |
Color / Primitive | ||
--color-terracotta-light |
Color / Primitive | ||
--color-text-accent |
Color / Semantic | ||
--color-text-on-accent |
Color / Semantic | v2.0: flips to charcoal in dark mode — white on the lightened terracotta was 3.3:1. | |
--color-text-primary |
Color / Semantic | ||
--color-text-secondary |
Color / Semantic | ||
--color-text-tertiary |
Color / Semantic | Metadata, placeholders. v2.0: darkened from neutral-400 (2.5:1) to pass WCAG AA 4.5:1 on bg-primary and bg-secondary. | |
--color-warning |
Color / Semantic | Fills and badges with dark text on top. Never use as text on light surfaces — 2.3:1. | |
--color-warning-text |
Color / Semantic | ||
--container-full |
Container | ||
--container-lg |
Container | ||
--container-md |
Container | ||
--container-sm |
Container | ||
--container-xl |
Container | ||
--duration-fast |
Duration | ||
--duration-normal |
Duration | ||
--duration-slow |
Duration | ||
--duration-slower |
Duration | ||
--ease-default |
Ease | ||
--ease-in |
Ease | ||
--ease-out |
Ease | ||
--ease-spring |
Ease | ||
--elevation-modal |
Elevation | ||
--elevation-overlay |
Elevation | ||
--elevation-raised |
Elevation | ||
--focus-ring |
Focus | ||
--focus-ring-offset |
Focus | ||
--font-mono |
Font | ||
--font-sans |
Font | ||
--font-serif |
Font | ||
--gradient-depth |
Gradient | ||
--gradient-divider |
Gradient | ||
--gradient-membrane |
Gradient | Signature gradient, human → digital. v2.0: endpoints now lighten in dark mode per spec §12.2. | |
--gradient-subtle |
Gradient | ||
--gradient-warmth |
Gradient | ||
--leading-body |
Leading | ||
--leading-body-lg |
Leading | ||
--leading-code |
Leading | ||
--leading-display |
Leading | ||
--leading-heading |
Leading | ||
--leading-label |
Leading | ||
--leading-small |
Leading | ||
--leading-subheading |
Leading | ||
--opacity-heavy |
Opacity | ||
--opacity-light |
Opacity | ||
--opacity-medium |
Opacity | ||
--opacity-overlay |
Opacity | ||
--opacity-subtle |
Opacity | ||
--photo-border-radius |
Photo | ||
--photo-dim-dark |
Photo | Recommended brightness() factor for photos on dark surfaces (spec §12.2 rule 6). Applied by the consumer, not automatically. | |
--photo-shadow |
Photo | ||
--photo-warmth |
Photo | ||
--radius-full |
Radius | ||
--radius-lg |
Radius | ||
--radius-md |
Radius | ||
--radius-sm |
Radius | ||
--radius-xl |
Radius | ||
--shadow-glow-teal |
Shadow | v2.0: dark variant added (was unmapped). | |
--shadow-glow-warm |
Shadow | ||
--shadow-lg |
Shadow | ||
--shadow-md |
Shadow | ||
--shadow-sm |
Shadow | ||
--site-margin |
Layout | ||
--size-icon-lg |
Size | Feature icons. | |
--size-icon-md |
Size | Standard icons. | |
--size-icon-sm |
Size | Inline icons. | |
--size-icon-xl |
Size | Hero icons. | |
--size-nav |
Size | Navigation bar height, desktop. | |
--size-nav-mobile |
Size | Navigation bar height, mobile. | |
--size-touch-target |
Size | WCAG 2.5.5 minimum interactive target. | |
--space-1 |
Space | ||
--space-10 |
Space | ||
--space-12 |
Space | ||
--space-16 |
Space | ||
--space-2 |
Space | ||
--space-20 |
Space | ||
--space-24 |
Space | ||
--space-3 |
Space | ||
--space-32 |
Space | ||
--space-4 |
Space | ||
--space-5 |
Space | ||
--space-6 |
Space | ||
--space-8 |
Space | ||
--state-disabled-opacity |
State | ||
--text-base |
Text | Compatibility alias. | |
--text-body |
Text | ||
--text-body-lg |
Text | ||
--text-code |
Text | ||
--text-display |
Text | ||
--text-h1 |
Text | ||
--text-h2 |
Text | ||
--text-h3 |
Text | ||
--text-h4 |
Text | ||
--text-lg |
Text | Compatibility alias. | |
--text-md |
Text | Compatibility alias. | |
--text-sm |
Text | Compatibility alias. | |
--text-small |
Text | ||
--text-xl |
Text | Compatibility alias. | |
--text-xs |
Text | ||
--tracking-body |
Tracking | ||
--tracking-display |
Tracking | ||
--tracking-heading |
Tracking | ||
--tracking-label |
Tracking | ||
--tracking-small |
Tracking | ||
--tracking-subheading |
Tracking | ||
--transition-default |
Transition | ||
--transition-fast |
Transition | ||
--transition-slow |
Transition | ||
--weight-bold |
Weight | ||
--weight-medium |
Weight | ||
--weight-regular |
Weight | ||
--weight-semibold |
Weight | ||
--z-base |
Z | ||
--z-dropdown |
Z | ||
--z-modal |
Z | ||
--z-nav |
Z | ||
--z-overlay |
Z | ||
--z-sticky |
Z | ||
--z-toast |
Z | ||
--z-tooltip |
Z |
Contrast Matrix
Generated from the exact same computation that fails npm run build:tokens if a pair regresses — see scripts/build-tokens.mjs.
| Mode | Foreground | Background | Ratio | Minimum | Status |
|---|---|---|---|---|---|
| light | --color-text-primary |
--color-bg-primary |
13.93:1 | 7.0:1 | Pass |
| light | --color-text-primary |
--color-bg-secondary |
12.64:1 | 7.0:1 | Pass |
| light | --color-text-secondary |
--color-bg-primary |
6.73:1 | 4.5:1 | Pass |
| light | --color-text-secondary |
--color-bg-secondary |
6.10:1 | 4.5:1 | Pass |
| light | --color-text-tertiary |
--color-bg-primary |
5.12:1 | 4.5:1 | Pass |
| light | --color-text-tertiary |
--color-bg-secondary |
4.64:1 | 4.5:1 | Pass |
| light | --color-text-accent |
--color-bg-primary |
5.11:1 | 4.5:1 | Pass |
| light | --color-text-on-accent |
--color-action-primary |
4.93:1 | 4.5:1 | Pass |
| light | --color-action-primary |
--color-bg-primary |
4.57:1 | 3.0:1 | Pass |
| light | --color-action-secondary |
--color-bg-primary |
5.11:1 | 3.0:1 | Pass |
| light | --color-focus |
--color-bg-primary |
5.11:1 | 3.0:1 | Pass |
| light | --color-focus |
--color-bg-secondary |
4.64:1 | 3.0:1 | Pass |
| light | --color-success |
--color-bg-primary |
3.68:1 | 3.0:1 | Pass |
| light | --color-success-text |
--color-bg-primary |
5.68:1 | 4.5:1 | Pass |
| light | --color-success-text |
--color-bg-secondary |
5.15:1 | 4.5:1 | Pass |
| light | --color-warning-text |
--color-bg-primary |
4.96:1 | 4.5:1 | Pass |
| light | --color-warning-text |
--color-bg-secondary |
4.50:1 | 4.5:1 | Pass |
| light | --color-error |
--color-bg-primary |
4.69:1 | 3.0:1 | Pass |
| light | --color-error-text |
--color-bg-primary |
5.47:1 | 4.5:1 | Pass |
| light | --color-error-text |
--color-bg-secondary |
4.97:1 | 4.5:1 | Pass |
| dark | --color-text-primary |
--color-bg-primary |
14.48:1 | 7.0:1 | Pass |
| dark | --color-text-primary |
--color-bg-secondary |
13.00:1 | 7.0:1 | Pass |
| dark | --color-text-secondary |
--color-bg-primary |
6.39:1 | 4.5:1 | Pass |
| dark | --color-text-secondary |
--color-bg-secondary |
5.74:1 | 4.5:1 | Pass |
| dark | --color-text-tertiary |
--color-bg-primary |
5.23:1 | 4.5:1 | Pass |
| dark | --color-text-tertiary |
--color-bg-secondary |
4.69:1 | 4.5:1 | Pass |
| dark | --color-text-accent |
--color-bg-primary |
6.45:1 | 4.5:1 | Pass |
| dark | --color-text-on-accent |
--color-action-primary |
5.18:1 | 4.5:1 | Pass |
| dark | --color-action-primary |
--color-bg-primary |
5.18:1 | 3.0:1 | Pass |
| dark | --color-action-secondary |
--color-bg-primary |
6.45:1 | 3.0:1 | Pass |
| dark | --color-focus |
--color-bg-primary |
6.45:1 | 3.0:1 | Pass |
| dark | --color-focus |
--color-bg-secondary |
5.79:1 | 3.0:1 | Pass |
| dark | --color-success |
--color-bg-primary |
7.78:1 | 3.0:1 | Pass |
| dark | --color-success-text |
--color-bg-primary |
7.78:1 | 4.5:1 | Pass |
| dark | --color-success-text |
--color-bg-secondary |
6.98:1 | 4.5:1 | Pass |
| dark | --color-warning-text |
--color-bg-primary |
9.06:1 | 4.5:1 | Pass |
| dark | --color-warning-text |
--color-bg-secondary |
8.13:1 | 4.5:1 | Pass |
| dark | --color-error |
--color-bg-primary |
5.14:1 | 3.0:1 | Pass |
| dark | --color-error-text |
--color-bg-primary |
5.14:1 | 4.5:1 | Pass |
| dark | --color-error-text |
--color-bg-secondary |
4.61:1 | 4.5:1 | Pass |
Human intelligence, amplified with technological intentionality.
This showcase is a working reference for that proposition: the same CSS custom properties shape color, type, spacing, state, code, and atmosphere.