---
name: designesy-design-system
version: 0.4.5
description: Design intelligence rules for building interfaces that match the Designesy contract. Use when building UI for Designesy, reviewing against the contract, or proposing design changes that must cite contract tokens.
---

# Designesy Design System: v0.4.5

> Designesy design doctrine: public surface carries operational values only

This is the portable SKILL.md export of the Designesy design system contract.
It encodes the same rules as the [human contract](https://www.designesy.org/contracts/design-system) and the
[machine JSON](https://www.designesy.org/contracts/design-system.json), reformatted as behavioral instructions for
AI coding agents. Updated 2026-10-12.

**Canonical source:** https://www.designesy.org/contracts/design-system
**Machine JSON:** https://www.designesy.org/contracts/design-system.json
**License:** https://creativecommons.org/licenses/by/4.0/

## When to Use

- When building or modifying UI for designesy.org or any Designesy surface
- When reviewing an interface against the Designesy contract
- When proposing design changes that must cite contract tokens or name open tensions
- When an agent needs to know which colors, radii, motion timings, or interaction rules Designesy uses

## Tokens

### Colors

| Token | Value | Role |
|---|---|---|
| `--ink` | #f5f5f7 | Primary text / foreground |
| `--muted` | #a0a0a0 | Secondary text |
| `--muted-dim` | #7d7d7d | Tertiary / meta text: 5.07:1 on paper and 4.54:1 on raised in dark (on lifted planes the dim tier rides --muted); light #686872, 5.33:1 on paper and 4.68:1 on lifted |
| `--paper` | #010102 | Page background |
| `--surface` | #0a0a0c | Card / panel base |
| `--surface-raised` | #121216 | Elevated surface |
| `--signal` | #0A94FF | Brand accent (internal token name; public products avoid this vocabulary) |
| `--signal-light` | #36A7FF | Accent hover / focus lift |
| `--activation` | #F56B00 | Activated Orange, the exact RGB inverse of --signal: live moments only (a scan running, the live monitor, the activated mark). Selection is blue |

### Surfaces and lines

| Token | Value | Role |
|---|---|---|
| `--surface-soft` | rgba(255, 255, 255, 0.03) | Soft fill / note background |
| `--surface-hover` | rgba(255, 255, 255, 0.06) | Hover wash |
| `--line` | rgba(255, 255, 255, 0.12) | Default border |
| `--line-strong` | rgba(255, 255, 255, 0.22) | Emphasized border |
| `--line-faint` | rgba(255, 255, 255, 0.06) | Subtle divider |
| `--signal-dim` | rgba(10, 148, 255, 0.14) · light: rgba(10, 148, 255, 0.08) | Accent wash / badge fill |

### Shadows

| Token | Value |
|---|---|
| `--shadow-sm` | 0 1px 3px rgba(0, 0, 0, 0.4) |
| `--shadow-md` | 0 8px 30px rgba(0, 0, 0, 0.35) |
| `--shadow-lg` | 0 24px 80px rgba(0, 0, 0, 0.5) |

### Radius

| Token | Value | Role |
|---|---|---|
| `--radius` | 6px | Default corner radius |
| `--radius-sm` | 4px | Compact controls / nav chips |

### Layout

- Max width: 1080px (Content shell max width)
- Shell horizontal padding: var(--shell-gutter): clamp(1rem, 4vw, 1.5rem), outside the --maxw-shell content box
- Section vertical rhythm: clamp(2.5rem, 5vw, 3.5rem) doctrine · clamp(3.5rem, 8vw, 6.5rem) bands
- Card padding: 1 to 1.5rem
- Grid gap: 1rem (--grid-gutter), one gutter
- Control min height: 44px buttons, sense toggles and preference switches
- Breakpoints: grids @container 64rem (mid tiers 34 to 48rem; 57rem for the inspection demo), topbar 720px, single column 560px viewport on older blocks; layouts stack on their own container width

### Motion

| Token | Value | Role |
|---|---|---|
| `--duration` | 0.6s | Primary entrance duration |
| `--ease` | cubic-bezier(0.22, 0.61, 0.36, 1) | Default ease |
| `--ease-out` | cubic-bezier(0.23, 1, 0.32, 1) | Exit / settle |
| `--ease-in-out` | cubic-bezier(0.77, 0, 0.175, 1) | Symmetric motion |
| `--ease-drawer` | cubic-bezier(0.32, 0.72, 0, 1) | Drawer / panel slide |

### Typography

- Body: 16px / 1.55, Schibsted Grotesk (system sans fallback for other scripts)
- Headings: Fraunces Variable, weight 700, line-height 1.08, letter-spacing -0.02em
- Hero wordmark: clamp(3.2rem, 9vw, 5.5rem), weight 800, tracking -0.04em
- Eyebrows: --text-label (0.8rem), weight 600, uppercase, letter-spacing 0.18em, muted-dim
- Lede: 1.1 to 1.5rem, weight 500, ink: one clear claim
- Supporting note: --text-body (1rem), muted, max-width ~520 to 580px
- Rule: Hybrid system: Fraunces serif for headlines (authority), Schibsted Grotesk for interface and reading (precision), Atkinson Hyperlegible Mono for data (systems). Three faces and no more; no single-sans: the 2026 anti-pattern.
- Scale: Major Third (x1.25) on a 16px root, no two adjacent steps closer than 25%: each step is 1.25 times the one below, 1.25^n rem rounded to three decimals. Text sizes come from these six tokens; below --text-lead, hierarchy comes from weight and colour, not more sizes. --text-label is the floor for all text, mono uppercase included. Display titles keep their fluid clamp() sizes. A fixed-size graphic whose words also reach assistive technology (the live badge, the role="img" instrument drawings) is exempt from the floor.
- Scale tokens: `--text-label` 0.8rem, `--text-body` 1rem, `--text-lead` 1.25rem, `--text-h3` 1.563rem, `--text-h2` 1.953rem, `--text-h1` 2.441rem

## Rules: Interaction (Poise, adopted v0.1.1)

- Wordmark mark may use opacity breath only; never blur, glow, or gradient decoration
- Interactive press settle: scale(0.97) at ~160ms with --ease-out
- Sound preference key designesy:sound; Designesy owns preference; audio engine only applies it
- Reduced motion disables non-essential animation and defaults sound off
- Hover translation only under fine pointer + hover-capable media
- Public product names stay human and premium; internal token names may differ
- If the response is louder than the action, it fails

## Rules: Interface Feel (Takt, adopted v0.1.2)

- Concentric border radius: outerRadius = innerRadius + padding on every nested pair
- Press scale 0.96 on cells and buttons and 0.985 on cards and rows, never below 0.95
- Image outlines: 1px at 0.1 opacity, pure black in light mode, pure white in dark mode (never tinted neutrals)
- Minimum hit area: 44px for touch, 40px for desktop (extend with pseudo-element when needed)
- Stagger enter animations: ~80 to 100ms per semantic chunk; skip animation on page load
- Soften exits: small fixed translateY, softer than enter (no full-height collapse)
- Never use transition: all (every transition names its specific properties)
- Spare will-change: only transform, opacity, or filter (only when a stutter was observed)

## Rules: Typography (Cadence, adopted v0.1.3)

- Font smoothing on root: -webkit-font-smoothing: antialiased + -moz-osx-font-smoothing: grayscale
- Rem-based scale: every text size is a rem multiple of the 16px root (never px)
- Line-height by role: headings 1.05 to 1.1, body 1.5 to 1.6, display 1 (never a single global line-height)
- Tracking by size: negative for headings (-0.02 to -0.04em), positive for labels (0.03 to 0.18em), zero for body
- Cap the measure: body text 520 to 580px max, layout shell 1080px (text wider than 75ch loses readers)
- Wrap deliberately: text-wrap: balance on headings, text-wrap: pretty on body
- Tabular numbers: font-variant-numeric: tabular-nums for all data, stats, and numerical tables
- Selection: ::selection styled with a token color (never default browser blue)
- user-select: none on UI chrome (buttons, labels, meta); body text stays selectable
- 16px input floor on mobile: inputs never below 16px to avoid iOS auto-zoom
- Three faces, no decorative display fonts: Fraunces for headlines, Schibsted Grotesk for interface and reading, Atkinson Hyperlegible Mono for data (amended from the v0.1.3 system-stack rule; the mono face changed in v0.4.5)

## Rules: Motion

- Entrance: fadeUp 0.6s --ease-out, rising 12px from scale(0.98), with staggered delays (0.08s steps)
- Interactive settle: scale(0.97) at ~160ms --ease-out (Poise · adopted v0.1.1)
- Hover is gated: reading-card contact (rim heat, contact light) runs only under (hover: hover) and (pointer: fine), other hover motion under (hover: hover), so touch gets no fake hover (Poise · adopted v0.1.1)
- Wordmark mark: opacity breath only (~3.2s --ease-in-out); no blur, glow, or gradient decoration (Poise · adopted v0.1.1)
- prefers-reduced-motion: reduce is tiered: travel stops, fades and transitions of 200ms or less stay, motion demos play on request; sound defaults off (Poise · adopted v0.1.1)

## Component states

- **Primary button**: default signal fill · hover signal-light · active scale(0.97) · focus-visible 2px signal-light
- **Ghost button**: transparent + line-strong · hover surface-hover · active scale(0.97)
- **Nav link**: muted · hover ink + surface-hover · sticky topbar blur when scrolled
- **Card / pillar**: reading material (--mat-reading) + top-lit rim + elev-1 · fine-pointer hover heats the rim and adds contact light, no lift · active scale(0.99)
- **Sound toggle**: switch with a visible Sound label and an On/Off state word · aria-pressed sync · Cuelume setEnabled(true|false)
- **Definition block**: reading material + top-lit rim + elev-1 · a copyable one heats its rim and draws a 3px signal edge on hover, focus or copy · label 12px uppercase muted

## Accessibility

- html lang="en"; meaningful page titles via metadata template
- Focus-visible: a 2px solid outline on every control, --signal-light at a 3px offset over a --signal-dim halo by default; cards and dense lists tune the offset, and reading cards draw it in --signal-access
- Sound control is named by its visible label and exposes aria-pressed
- Decorative glyphs use aria-hidden where text is already labeled
- Prefer semantic landmarks: sticky header, main, footer
- Do not rely on color alone for state
- Respect prefers-reduced-motion, tiered: travel stops, opacity fades and transitions of 200ms or less stay, and a motion demo plays on request
- Scroll padding-top 4.5rem (72px) for sticky topbar anchors

## Anti-patterns: do not

- Glowing blobs, random gradients, or sparkle decoration
- Hard-coded hex in components when a role token exists
- Using --activation as general decoration
- Publishing taste language without operational rules
- Multiple simultaneous accent colors competing with --signal
- Touch targets under ~32px
- Animation that cannot be reduced
- Public product names that sound like research demos or AI jargon
- Button text that is a bare noun without a verb ("Settings" alone for a destructive action)
- Generic error messages ("An error occurred", "Something went wrong") with no remediation
- Link text that is "click here", "learn more", "read more", or "here" without destination context
- ALL CAPS body text or button text (except eyebrow labels per typography contract)

## Implementation notes

- Single live token source of truth: no secondary theme framework
- Server-rendered by default; client only for sound, bind, and preference controls
- metadataBase is https://www.designesy.org (apex redirects); public label is Designesy
- Interaction audio via Cuelume with middle-click guard
- Sitemap and robots follow standard site conventions
- Production deploys from the main branch
- Drift rule: every new public UI change cites a contract token or open tension

## Verification: evidence requirements

Before shipping, verify:

- Token values match the live site :root foundation
- Routes render without horizontal overflow at 375px, 720px, 860px, 1080px+
- Primary interactive elements show focus-visible rings
- Sound toggle flips aria-pressed and applies the audio preference
- prefers-reduced-motion disables entrance and wordmark breath
- Contrast remains readable for ink, muted, and accent on paper
- No public surface displays internal control-plane naming
- Poise interaction rules match live /labs/poise and contract.interaction
- Poise keyboard-path verification remains published and current
- Takt interface-feel rules match live CSS and contract.takt
- No transition:all in the live stylesheet
- will-change restricted to transform and opacity only
- Press scale 0.96 on cells, 0.985 on cards/rows, both above the 0.95 floor
- Cadence typography rules match live CSS and contract.cadence
- Font smoothing: antialiased + grayscale on :root confirmed
- Rem-based scale: all text sizes in rem, root at 16px confirmed
- Line-height by role: headings 1.08, body 1.55 confirmed
- text-wrap: balance + pretty both present in live CSS
- tabular-nums: 8 instances across the live CSS
- ::selection styled with var(--signal) instead of the browser default
- Core Web Vitals plausible: LCP < 2.5s, INP < 200ms, CLS < 0.1 (Taste Skill pre-flight)
- Primary button text passes WCAG AA 4.5:1 contrast against --signal fill (Taste Skill pre-flight)
- Duration tokens --duration-quick through --duration-slow present in :root (transitions.dev cross-ref)
- Button text is a verb phrase or recognized command, never a bare noun (copywriting v38)
- No trailing period on button text, labels, or tab text (copywriting v39)
- Link text is descriptive, never bare "click here", "learn more", "here" (copywriting v40)
- No ALL CAPS UI text except eyebrow labels (copywriting v41)

## Open tensions: unresolved

These are known gaps. If you encounter them, name the tension instead of inventing policy:

- Light theme is partly contracted: materials, field and instrument tokens carry light values, the color roles do not; the dark technical foundation is provisional
- --activation exists but has limited public surface usage
- Four ways cards keep their flat line borders, no elevation and their hover tilt; whether they take the rim, --elev-3 and a floor pool is still open
- Two score controls (the action button and the engine tile) still rise 1px on hover, outside the no-lift rule
- The row and check-cell arrows nudge under (hover: hover) alone, without the fine-pointer gate Poise asks for
- Human contract page and machine export remain dual sources until a single generator owns both
- Keyboard-path verification packets cover Poise only; other public routes have none yet
- Inline-axis logical properties (margin-inline, padding-inline) applied; block-axis and border-inline remain physical (Cadence partial migration)
- Block-axis logical properties (margin-block-start/end) not yet migrated; only inline-axis is done
- border-left decorative accents not yet migrated to border-inline-start; the visual regression risk needs testing

## Semantic roles

- **Surfaces:** paper = page void · surface = default panel · surface-raised = hover/emphasis · surface-soft = quiet note · surface-hover = interactive wash
- **Lines:** line = default structure · line-strong = active/emphasis · line-faint = quiet subdivision
- **Accents:** signal = brand action and wordmark mark · signal-light = hover/focus · signal-dim = badge/wash · activation = reserved highlight · signal-glow/signal-gradient = border/focus effects only (never button fill)
- **Types:** ink = primary claim · muted = supporting body · muted-dim = eyebrows, meta, footers

## Provenance

- Implementation: designesy.org (Next.js App Router)
- Token source: Live site design tokens (:root)
- Interaction audio: Cuelume v0.2.2; preference owned by Designesy
- Motion references: Short settle and easing language adapted into --ease-out, --ease-in-out, --ease-drawer. Frequency gate, press scale 0.97, and unseen-details-compound principle cross-referenced against Kowalski /emil-design-eng (Linear, ex-Vercel). Spring physics (damping 1.0, response 0.3 to 0.4) and interruptibility principles cross-referenced against Kowalski /apple-design (Apple WWDC Designing Fluid Interfaces). Anti-over-animation Gate (Frequency, Purpose, Speed, Function) cross-referenced against Kowalski /find-animation-opportunities. Animation authoring: 7-step build sequence, Never Ship table (13 auto-blocks), tool selection hierarchy, and tooltip-instant pattern cross-referenced against Kowalski /animate (the authoring complement to /review-animations).

### Source labs

- [Lab One · Poise](https://www.designesy.org/labs/poise): Source lab for interaction rules adopted in v0.1.1
- [Lab Two · Takt](https://www.designesy.org/labs/takt): Source lab for interface-feel rules adopted in v0.1.2
- [Lab Three · Cadence](https://www.designesy.org/labs/cadence): Source lab for typography rules adopted in v0.1.3

### Field checks

- https://www.designesy.org/labs/poise
- https://www.designesy.org/review/poise
- https://www.designesy.org/review/poise/keyboard
- https://www.designesy.org/labs/takt
- https://www.designesy.org/review/takt
- https://www.designesy.org/labs/cadence
- https://www.designesy.org/review/cadence

### External ingests

- [Amicro](https://amicro.vercel.app) by Kiyotaka (@SubhanHQ): Micro-transitions library: informed Takt stagger and press rules
- [better-ui skill](https://github.com/jakubkrehel/skills) by Jakub Krehel (@jakubkrehel): 13 interface polish principles: source for concentric radii, press scale, image outlines, hit areas (MIT)
- [better-typography skill](https://github.com/jakubkrehel/skills) by Jakub Krehel (@jakubkrehel): 18 typography principles: source for font smoothing, scale, leading, tracking, measure, wrapping, numbers, selection (MIT)
- [agent-skills](https://github.com/addyosmani/agent-skills) by Addy Osmani (@addyosmani): Anti-rationalization table pattern + verification checklist methodology: informed Design Review kit rationalization section (MIT)
- [Taste Skill](https://github.com/Leonxlnx/taste-skill) by Leon (@Leonxlnx): Pre-flight checklist methodology: gap audit against our 8-dimension review; Core Web Vitals and button contrast checks adopted (MIT)
- [transitions.dev](https://transitions.dev) by Jakub Antalik (@Jakubantalik): Transition gallery: duration scale cross-referenced; press scale values validated (0.96/0.97 match); easing curves confirmed compatible. A gallery reference rather than a formal standard.
- [detail.design](https://detail.design) by detail.design: Copywriting gap source: pattern catalog organizing UI decisions by discipline (Design, Accessibility, Copywriting, Motion, Optimization). The Copywriting discipline gap triggered the v0.4.0 contract section. Patterns are inspiration; the taxonomy structure is the value.
- [NN/g UI Copy Guidelines](https://www.nngroup.com/articles/ui-copy/) by Nielsen Norman Group: Button text 2 to 4 words, verb-first, remove articles, ellipsis convention, avoid generic OK/Submit. Error message guidelines: what happened + what to do + what to expect. Source for copywriting checks v38 to v41.
- [Polaris Content Guidelines](https://polaris.shopify.com/content/error-messages) by Shopify: Error messages: explain what's wrong + what to do, be specific, don't overapologize, avoid "invalid" jargon. Source for error-message copywriting principle.
- [IBM Carbon Writing Style](https://carbondesignsystem.com/guidelines/content/writing-style/) by IBM: Sentence case for all UI text, second person (you/your), active voice, no please/thank you, simplest term. Source for sentence-case and voice principles.
- [better-colors skill](https://github.com/jakubkrehel/skills) by Jakub Krehel (@jakubkrehel): OKLCH palette generation, contrast checking, gamut mapping, and theming principles: cross-referenced against contract color tokens. Confirms OKLCH-first approach for wide-gamut color discipline. (MIT)
- [better-accessibility skill](https://github.com/jakubkrehel/skills) by Jakub Krehel (@jakubkrehel): Focus management, keyboard navigation, ARIA patterns, form accessibility, screen-reader semantics, hit area floors, and motion reduction: cross-referenced against contract accessibility rules and WCAG 2.2 AA verification checks. (MIT)
- [better-layout skill](https://github.com/jakubkrehel/skills) by Jakub Krehel (@jakubkrehel): Structure, grouping, alignment, reading order, progressive disclosure, and breakpoint discipline: cross-referenced against contract layout tokens and grid rules. (MIT)
- [better-writing skill](https://github.com/jakubkrehel/skills) by Jakub Krehel (@jakubkrehel): 12 UX writing principles: verb-first buttons (source for copywriting check v38), descriptive link text (source for check v40), one capitalization policy with sentence-case default (source for check v41), errors that say how to fix next to where it broke (no blame, no oops, no exclamation marks), empty states that orient and point forward with one clear next action, placeholders as examples not labels, settings that describe the ON state, consistent flow vocabulary (Get Started → Continue → Done), plain words over clever ones, address the reader directly as you. Cross-referenced against contract copywriting checks v38-v41 and NN/g + Polaris error-message sources. Complements better-typography (which owns how text renders; better-writing owns what text says). (MIT)
- [emil-design-eng skill](https://github.com/emilkowalski/skills) by Emil Kowalski (@emilkowalski): Animation philosophy and motion craft: frequency gate (never animate keyboard-initiated or high-frequency actions), custom Bézier over bare ease, origin-aware animations, press scale 0.97, unseen-details-compound principle. Cross-referenced against contract ten_standards and motion rules. Kowalski is on the Web team at Linear (ex-Vercel design team). (MIT)
- [review-animations skill](https://github.com/emilkowalski/skills) by Emil Kowalski (@emilkowalski): Strict animation review rules: correct curve selection, duration bounds, property restriction (transform/opacity/filter only), interruptibility, and reduced-motion mandatory handling. Cross-referenced against contract motion verification and anti-patterns. Complements Krehel /better-ui for the motion-specific dimension. (MIT)
- [apple-design skill](https://github.com/emilkowalski/skills) by Emil Kowalski (@emilkowalski): Apple WWDC design principles distilled for web: spring physics (damping 1.0 critically damped, response 0.3 to 0.4), interruptibility, velocity handoff, momentum projection, rubber-banding, translucent materials, multimodal feedback (causality + harmony + utility), and reduced-motion as gentler feedback not a kill switch. Spring values cross-referenced against contract springs (default damping 1.0, response 0.4). Source: Designing Fluid Interfaces (WWDC 2018) + Principles of Great Design (WWDC 2026). (MIT)
- [find-animation-opportunities skill](https://github.com/emilkowalski/skills) by Emil Kowalski (@emilkowalski): Anti-over-animation discipline: the 4-question Gate (Frequency, Purpose, Speed, Function). Frequency gate: 100+/day or keyboard-initiated = never animate. Purpose must be named: feedback, spatial consistency, state indication, preventing jarring change, explanation, or delight (rare-tier only). Speed budget: press 100 to 160ms, tooltips 125 to 200ms, dropdowns 150 to 250ms, modals 200 to 500ms. Function: decoration on functional data hinders. Cross-referenced against contract ten_standards keyboard-still rule and anti-patterns_caution. (MIT)
- [animate skill](https://github.com/emilkowalski/skills) by Emil Kowalski (@emilkowalski): Animation authoring: the 7-step build sequence (should it animate? → purpose → tool → properties → easing/duration → interruption/exit → reduced-motion/hover gating). Tool selection hierarchy: CSS transition → @starting-style → CSS animation → WAAPI → Motion (cheapest that works). Never Ship table: 13 auto-block items including transition:all, scale(0), ease-in on UI, keyframes on rapidly-triggered elements, Motion x/y/scale shorthands (not hardware-accelerated; use full transform string), ungated :hover motion. Tooltip-instant pattern: once one tooltip is open, neighbors open at 0ms duration. RECIPES.md: 12 ready-to-build component implementations (button press, dropdown, tooltip, modal, drawer, toast, accordion, stagger, hold-to-confirm, tab indicator, scroll reveal, drag-to-dismiss). The authoring complement to review-animations (the checking skill). (MIT)

### Adoption history

- **v0.1.0** (2026-07-12): First public design system contract: tokens, motion, components, verification
- **v0.1.1** (2026-07-12): Adopted Lab One · Poise interaction rules: wordmark breath, press settle, sound preference, reduced motion, hover media, naming discipline: from Lab Poise
  Evidence: https://www.designesy.org/labs/poise, https://www.designesy.org/review/poise, https://www.designesy.org/review/poise/keyboard
- **v0.1.2** (2026-07-13): Adopted Lab Two · Takt interface-feel rules: concentric radii, press scale (0.96/0.985), image outlines, hit area floor, stagger rhythm, no transition:all, spare will-change. Rules compiled from external design intelligence (Amicro, Krehel /better-ui, /better-accessibility for hit area floors) and verified on live CSS.: from Lab Takt
  Evidence: https://www.designesy.org/labs/takt, https://www.designesy.org/review/takt
- **v0.1.3** (2026-07-13): Adopted Lab Three · Cadence typography rules: font smoothing on root, rem-based scale, line-height by role, tracking by size, measure cap, text-wrap balance+pretty, tabular numbers, ::selection with --signal, user-select on UI chrome, 16px input floor. Rules compiled from external typography intelligence (Krehel /better-typography, /better-layout for reading order and measure) and verified on live CSS. Three open tensions documented: font-synthesis, logical properties, underline-from-font.: from Lab Cadence
  Evidence: https://www.designesy.org/labs/cadence, https://www.designesy.org/review/cadence
- **v0.1.4** (2026-07-13): Adopted duration scale (transitions.dev cross-ref), Core Web Vitals + button contrast verification (Taste Skill gap audit), anti-rationalization methodology (agent-skills pattern). Duration tokens --duration-quick (150ms) through --duration-slow (400ms) added to :root. Three external ingests added to provenance: agent-skills (Osmani), Taste Skill (Leon), transitions.dev (Antalik). No lab source: this is a direct contract refinement from external source ingests.
  Evidence: https://www.designesy.org/contracts/design-system.json, https://www.designesy.org/contracts/skill
- **v0.3.0** (2026-07-15): Reconciled with on-disk core contract v0.4.0. Spring physics tokens added (default + momentum). Full acoustic cue enumeration added (19 cues via custom $type: sound). Ten Non-Negotiable Motion Standards added as §16. Motion anti-patterns formalized (6 block-on-sight + 4 caution). Entrance scale tokens added (min 0.9, default 0.95). Stagger interval token added (30ms lower bound). font-synthesis: none and text-underline-position: from-font confirmed fixed and removed from open tensions. W3C DTCG 2025.10 token format alignment documented.
  Evidence: https://www.designesy.org/contracts/design-system.json, https://www.designesy.org/contracts#design-system-contract
- **v0.4.0** (2026-07-30): Added copywriting section from detail.design gap source + NN/g, Polaris, IBM Carbon, Microsoft Fluent, Apple HIG, Atlassian research. 16 principles across button text, error messages, empty states, link text, general microcopy, and voice & tone. 4 codifiable principles become verification checks (v38 to v41): button verb phrase, no trailing period on buttons, descriptive link text, no ALL CAPS. 12 non-codifiable principles are governance. Tooling: Vale, textlint, alex. detail.design added to provenance as gap-signal source. 4 anti-patterns added (bare-noun buttons, generic errors, bare link text, ALL CAPS). Copywriting category weight: 8.
  Evidence: https://www.designesy.org/contracts/design-system.json, https://www.nngroup.com/articles/ui-copy/, https://polaris.shopify.com/content/error-messages, https://carbondesignsystem.com/guidelines/content/writing-style/, https://learn.microsoft.com/en-us/windows/apps/design/style/writing-style, https://detail.design
- **v0.4.1** (2026-09-28): Editorial revision. The contract text follows the public-copy rules: a colon or parentheses in place of em dashes, the positive claim in place of rhetorical negation pivots, and number ranges written with "to". No rule, value, token or check changed. The sibling contracts took the same pass and keep their versions.
  Evidence: https://www.designesy.org/contracts/design-system.json, https://www.designesy.org/changelog
- **v0.4.2** (2026-10-04): Alignment pass. One shell edge at every width so the header, the wrappers and the footer share the content edges; a 12-column grid with a named 7|5 seam for the instrument and page layouts; the material, elevation and floor recipes as tokens instead of per-component values; the accessibility tint tokens and the `--signal-text` text-safe role the WCAG 2.2 AA pass required; and the reduced-motion tiering reworded to state what it now does (movement stops, fades and short transitions stay). Adds public tokens; removes no check.
  Evidence: https://www.designesy.org/contracts/design-system.json, https://www.designesy.org/contracts/a11y.json, https://www.designesy.org/changelog
- **v0.4.3** (2026-10-09): Text-contrast pass. A rendered sweep of every public page in both themes found 230 text elements under WCAG AA in the light theme and 11 in the dark, nearly all a colour meant for marks used as text. Every status, grade and activation hue now has a text token, --<hue>-ink: equal to the hue in the dark theme and mixed toward --ink in oklab in the light theme (--warn-ink, --ok-ink, --error-ink, --grade-a-ink to --grade-f-ink, --activation-ink), each at least 4.5:1 on paper, surface, raised and lifted. Light --muted-dim moves from #70707a to #686872. Hues stay for dots, bars, borders and tints. No check, weight or verdict changed.
  Evidence: https://www.designesy.org/contracts/design-system.json, https://www.designesy.org/changelog
- **v0.4.4** (2026-10-11): Identity v1 colour system. Azure #0A94FF replaces #0133cb as --signal; light text, links, focus and selected states take Deep Azure #016ABB (--signal-access, --signal-deep); text on an Azure fill is ink #010102 (--paper-on-signal, 6.65:1); --paper-white #FFFFFF is the constant white for the increase-contrast ink, text on red fills and highlights. Activated Orange #F56B00 replaces #fecc34 (light text #B04D00). New tokens: --signal-deep, --signal-teal, --action, --on-action, --action-pressed, --paper-white. Grade D moves to rose (#FB7185 dark, #C9216C light; light text #BE1F67); the light grade text tokens are measured values, each at least 4.6:1 on paper, surface, raised and lifted. The instrument pass gradient and inspection head move to the Azure family. Shimmer stops, glows and light navy shadows move to Azure's 251 degree hue. No check, weight or verdict changed.
  Evidence: https://www.designesy.org/contracts/design-system.json
- **v0.4.5** (2026-10-12): Type pass. Atkinson Hyperlegible Mono, the Braille Institute's low-vision face (SIL OFL 1.1), replaces Geist Mono as the mono face (--font-mono) for labels, URLs, timestamps, score units and code: every confusable pair (0/O, 1/l/I, 5/S, 8/B) is drawn distinct. Its advance is 0.632em against 0.6em, so tight mono surfaces were re-fitted. The type scale enters :root and the contract as six tokens on a Major Third (x1.25) over a 16px root, no two adjacent steps closer than 25%: --text-label 0.8rem (the floor for all text, mono uppercase included), --text-body 1rem, --text-lead 1.25rem, --text-h3 1.563rem, --text-h2 1.953rem, --text-h1 2.441rem. The eyebrow and supporting-note entries now name the label and body steps the site already sets. No check, weight or verdict changed.
  Evidence: https://www.designesy.org/contracts/design-system.json, https://www.designesy.org/brand
