Nautes Design System

Nautes Design System — Usage Guide

Version: 0.3.0 Last Updated: 2026-02-05 Direction: LIGHT MODE FIRST — NAVY + WARM CREAM Source of Truth: tokens/nautes.json & DESIGN-LANGUAGE.md


Quick Reference

Design Philosophy

One sentence: Authority through restraint — quiet modernism where navy is the brand, warm cream is the canvas, and negative space holds equal weight to content.

Key principles:

  • Earned Presence — Every element must justify its existence. If it does not serve the reader, it does not belong.
  • Quiet Authority — Confidence expressed through restraint, not volume. Evidence over claims. Show, do not tell.
  • Human Precision — Technical excellence that still feels warm. Nordic clarity with functional warmth.

Colors

Background Scale (Warm Cream)

Token Hex Usage
background.primary #FAF7F2 Page background — barely tinted warm white
background.secondary #F0ECE3 Cards, elevated surfaces
background.tertiary #E5E0D6 Hover backgrounds, active sections
background.elevated #D8D2C6 Dropdowns, tooltips

CSS Variables:

var(--background)
var(--background-secondary)
var(--background-tertiary)
var(--background-elevated)

Tailwind Classes:

bg-background
bg-secondary
bg-muted

Text Scale (Navy)

Token Hex Usage
text.primary #1E2B5A Main body text — deepest navy
text.secondary #4A5575 Supporting text, captions
text.muted #6E7694 Placeholders, hints
text.inverted #FAF7F2 Text on navy backgrounds

CSS Variables:

var(--foreground)
var(--foreground-secondary)
var(--foreground-muted)
var(--foreground-inverted)

Tailwind Classes:

text-foreground
text-muted-foreground

Accent (Navy = Brand)

Token Hex Usage
accent.default #2D3A6E Links, buttons, interactive elements — navy brand
accent.hover #3D4D85 Hover state — slightly lighter navy
accent.active #1E2B5A Pressed state — matches text.primary
accent.muted #8B96BE Badges, subtle indicators, disabled interactive

CSS Variables:

var(--primary)
var(--primary-hover)
var(--primary-active)
var(--accent)
var(--accent-muted)

Tailwind Classes:

bg-primary text-primary-foreground
bg-primary-hover
bg-accent text-accent-foreground

Key rule: Navy is both text and accent. Interactive elements are distinguished by treatment (underline, fill, weight change), not by using a different color.

Neutral Scale (Warm Undertones)

Level Hex Usage
50 #FDFBF7 Lightest — barely tinted
100 #FAF7F2 Page background
200 #F0ECE3 Card surfaces
300 #E5E0D6 Borders, dividers
400 #C4BDB0 Muted borders
500 #9A9488 Disabled states
600 #706B62 Muted warm text
700 #4A5575 Secondary text (bridges to navy)
800 #2D3A6E Brand navy
900 #1E2B5A Primary text, deepest navy
950 #141D42 Near-black navy

Tailwind Classes:

bg-neutral-100 (page background)
bg-neutral-200 (card surfaces)
text-neutral-900 (primary text)
border-neutral-300 (dividers)

Semantic Colors

Token Hex Usage
success #2D7D46 Confirmation, completion
successLight #3A9A5A Success hover
successDark #1F5E33 Success pressed
warning #B87A1E Caution states
warningLight #D49030 Warning hover
warningDark #966315 Warning pressed
error #C23B3B Errors, destructive actions
errorLight #D54E4E Error hover
errorDark #A02E2E Error pressed
info #2D3A6E Informational (= accent.default)

The 95/5 rule: A page should be almost entirely cream and navy. Semantic colors appear only in functional contexts (form validation, status indicators).


Typography

Font Philosophy

Typography is the primary design element. In quiet modernism, type does the work that decoration does in other systems. One typeface family (Barlow), used across its full range, creates the entire visual hierarchy. The drama comes from the contrast between condensed bold display and open regular body — not from mixing typeface families.

Font Families

Token Value Usage
font-display "Barlow Condensed", ui-sans-serif, system-ui, sans-serif Headlines, display text — condensed for impact
font-body "Barlow", ui-sans-serif, system-ui, sans-serif Body text, UI elements — regular width for reading
font-mono ui-monospace, "SFMono-Regular", Menlo, Monaco, Consolas, monospace Code, technical content

Font Characteristics:

  • Barlow Condensed (Variable, 100-900, italic): Geometric, low-contrast grotesk. Condensed proportions create impact without needing large sizes. Used at SemiBold (600) and Medium (500).
  • Barlow (Variable, 100-900, italic): Same family in regular width. Warm, open letterforms for comfortable reading. Used at Light (300), Regular (400), and Medium (500).

Tailwind Classes:

font-display   → Barlow Condensed (condensed sans-serif)
font-body      → Barlow (regular sans-serif)
font-mono      → System monospace

Google Fonts Import:

@import url('https://fonts.googleapis.com/css2?family=Barlow+Condensed:ital,wght@0,100..900;1,100..900&family=Barlow:ital,wght@0,100..900;1,100..900&display=swap');

Type Scale

System: Perfect Fourth (1.333 ratio) from 18px base, grid-snapped for 8px baseline alignment.

Token Size Display LH Prose LH Usage
text-xs 0.625rem (10px) 1rem (16px) Fine print, labels (uppercase)
text-sm 0.875rem (14px) 1.5rem (24px) Labels, captions, nav
text-base 1.125rem (18px) 2rem (32px) 1.5rem (24px) Body text default
text-lg 1.5rem (24px) 2.5rem (40px) 2rem (32px) Large body, H5, H6
text-xl 2rem (32px) 3rem (48px) H4 headings
text-2xl 2.5rem (40px) 3.5rem (56px) H3 headings
text-3xl 3.5rem (56px) 4.5rem (72px) H2 display
text-4xl 4.5rem (72px) 5.5rem (88px) H1 hero display

Line Height Contexts

Display (default): Generous whitespace for headlines, hero text, marketing, and UI. Quiet modernism aesthetic. Ratio decreases as font size increases.

Prose: Tighter line heights (1.33 ratio) optimized for focused reading. Use for articles, essays, and long-form content.

<!-- Display context (default) -->
<p class="text-base">Marketing copy with generous line height.</p>

<!-- Prose context (articles) -->
<p class="text-base leading-prose-base">Article text with tighter line height.</p>
<p class="text-lg leading-prose-lg">Large article text.</p>

Tailwind utilities for prose:

  • leading-prose-base → 1.5rem (24px) for 18px text
  • leading-prose-lg → 2rem (32px) for 24px text

Font Weights

Weights are fixed (not theme-aware). Maximum weight is 600 — no bold (700) in the system.

Tier Weight Value Usage
Display SemiBold 600 H1, H2 headlines (Barlow Condensed)
Structural Medium 500 H3, H4, H5, H6, navigation, buttons, labels
Reading Regular 400 Body text default
Light Light 300 Subtitles, hero supporting text, body light

CSS Custom Properties:

var(--font-weight-light)     /* 300 */
var(--font-weight-regular)   /* 400 */
var(--font-weight-medium)    /* 500 */
var(--font-weight-semibold)  /* 600 */

Letter Spacing

Key insight: Barlow Condensed display uses negative letter-spacing for tight, editorial titling. Barlow body uses neutral or slightly positive spacing. Labels and overlines use wide spacing.

Token Value Usage
tracking-tighter -0.02em H1 Barlow Condensed display
tracking-tight -0.01em H2, H3 Barlow Condensed
tracking-normal 0 Body text, H4–H6
tracking-wide 0.01em Captions
tracking-wider 0.02em Navigation, buttons
tracking-widest 0.08em Labels, overlines (uppercase)

Type Hierarchy

Full hierarchy combining family, weight, spacing, and size:

Use Family Weight Spacing Size
H1 hero display Barlow Condensed 600 (SemiBold) -0.02em 72px (4xl)
H2 section heads Barlow Condensed 600 (SemiBold) -0.01em 56px (3xl)
H3 sub-sections Barlow Condensed 500 (Medium) -0.01em 40px (2xl)
H4 headings Barlow 500 (Medium) 0 32px (xl)
H5–H6 small heads Barlow 500 (Medium) 0 24px (lg)
Body text Barlow 400 (Regular) 0 18px (base)
Body light Barlow 300 (Light) 0 18px (base)
Navigation Barlow 500 (Medium) 0.02em 14px (sm)
Buttons Barlow 500 (Medium) 0.02em 16px
Labels, tags Barlow 500 (Medium) 0.08em 12px (xs, uppercase)
Captions Barlow 400 (Regular) 0.01em 14px (sm)

Heading Classes

/* Barlow Condensed display + negative tracking */
h1: font-display text-3xl md:text-4xl font-semibold tracking-tighter  /* 56px → 72px */
h2: font-display text-2xl md:text-3xl font-semibold tracking-tight    /* 40px → 56px */
h3: font-display text-xl md:text-2xl font-medium tracking-tight       /* 32px → 40px */

/* Barlow regular + neutral tracking */
h4: font-body text-lg md:text-xl font-medium tracking-normal          /* 24px → 32px */
h5: font-body text-base md:text-lg font-medium tracking-normal        /* 18px → 24px */
h6: font-body text-sm md:text-base font-medium tracking-normal        /* 14px → 18px */

Mixed-Italic Headlines

Headlines can mix upright and italic text within the same line to create emphasis. The italic words keep the same weight (600 SemiBold) — differentiation comes from style alone.

<h1 class="font-display text-4xl font-semibold tracking-tighter">
  Extend what <em class="italic">your team</em> can do
</h1>

Use italic for the human element, the key differentiator, or the action word. Never italicize more than half the headline.


Spacing

Base Unit: 8px

All spacing follows an 8px grid for visual consistency.

Token Value Tailwind
0.5 4px p-0.5, m-0.5
1 8px p-1, m-1
1.5 12px p-1.5, m-1.5
2 16px p-2, m-2
2.5 20px p-2.5, m-2.5
3 24px p-3, m-3
4 32px p-4, m-4
5 40px p-5, m-5
6 48px p-6, m-6
7 56px p-7, m-7
8 64px p-8, m-8
9 72px p-9, m-9
10 80px p-10, m-10
12 96px p-12, m-12
14 112px p-14, m-14
16 128px p-16, m-16
20 160px p-20, m-20
24 192px p-24, m-24
28 224px p-28, m-28
32 256px p-32, m-32

Layout Spacing

Purpose Mobile Tablet Desktop
Page gutters 32px (p-4) 48px (md:p-6) 64px (lg:p-8)
Section gap (small) 80px 80px 80px
Section gap (medium) 96px 128px 128px
Section gap (large) 128px 192px 192px
Card padding 24px 32px 32px
Card gap 16px 24px 24px

Border Radius

Token Value Usage
rounded-none 0px Sharp edges
rounded-sm 4px Subtle rounding
rounded 8px Default (1 spacing unit)
rounded-md 12px Medium rounding
rounded-lg 16px Large components
rounded-xl 24px Cards, modals
rounded-2xl 32px Large cards
rounded-full 9999px Circles, pills

Shadows

Shadows are subtle — elevation comes primarily through spacing and borders, not heavy shadows.

Token Value Usage
shadow-sm 0 1px 2px 0 rgb(0 0 0 / 0.05) Subtle lift
shadow 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1) Default elevation
shadow-md 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1) Cards, dropdowns
shadow-lg 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1) Modals, popovers

Animation

Duration

Token Value Usage
duration-fast 150ms Color changes, opacity shifts
duration-default 200ms Most state transitions
duration-slow 300ms Layout shifts, content reveals
duration-slower 400ms Page transitions, modal entries

Easing

Token Value Usage
ease ease Default timing
ease-in ease-in Elements exiting
ease-out ease-out Elements entering
ease-in-out ease-in-out Continuous motion

Common Transitions

/* Standard hover transition */
transition: all 200ms ease;

/* Button hover */
.btn-interactive:hover {
  transform: translateY(-1px);
}

/* Card hover */
.card-interactive:hover {
  transform: translateY(-2px);
}

Motion rules: Maximum 2px translation, 2% scale. Respect prefers-reduced-motion: reduce. One property at a time where possible.


Breakpoints

Token Value Usage
sm 640px Small tablets
md 768px Tablets
lg 1024px Laptops
xl 1280px Desktops
2xl 1440px Large screens

Container

  • Max width: 1440px
  • Prose max width: 65ch (optimal reading)
  • Center aligned with responsive gutters

Component Patterns

Cards

<div class="bg-secondary border border-neutral-300 rounded-lg p-6 md:p-8
            hover:border-primary/30 hover:shadow-sm transition-all">
  <span class="font-body text-xs uppercase tracking-widest font-medium text-muted-foreground">
    Category
  </span>
  <h3 class="font-display text-xl font-medium tracking-tight text-foreground">
    Card Title
  </h3>
  <p class="font-body text-base text-foreground-secondary">
    Description text goes here.
  </p>
  <a class="text-primary font-medium tracking-wider hover:underline transition-colors">
    View Details
    <svg class="inline-block w-4 h-4 ml-1">...</svg>
  </a>
</div>

Buttons

<!-- Primary (navy background, cream text) -->
<button class="bg-primary text-primary-foreground hover:bg-primary-hover
               active:bg-primary-active px-4 py-2 rounded font-medium
               tracking-wider transition-all btn-interactive">
  Button Text
</button>

<!-- Secondary (navy border, navy text) -->
<button class="bg-transparent text-primary border-[1.5px] border-primary
               hover:bg-primary hover:text-primary-foreground
               px-4 py-2 rounded font-medium tracking-wider
               transition-all btn-interactive">
  Button Text
</button>

<!-- Ghost (navy text, cream hover background) -->
<button class="bg-transparent text-primary hover:bg-muted
               px-4 py-2 rounded font-medium tracking-wider
               transition-all">
  Button Text
</button>
<!-- Navigation link -->
<a class="text-primary font-medium tracking-wider hover:underline transition-colors">
  Link Text
</a>

<!-- Prose link (underline by default) -->
<a class="text-primary underline decoration-primary/30 hover:decoration-primary transition-colors">
  Link Text
</a>

Future: Dark Mode

Note: Dark mode is deferred. Light mode (warm cream + navy) is the primary brand identity. Ship one mode well first.

When dark mode is added, the palette will invert:

  • background.primary#1E2B5A (deep navy)
  • text.primary#FAF7F2 (warm cream)
  • accent.default#8B96BE (lighter navy for visibility on dark)
  • Font weights shift lighter (body 300) to compensate for luminous screens

Design principle: Dark mode should maintain the Quiet Modernism identity. Navy backgrounds with warm cream text, not arbitrary dark grays.

Status: Dark mode token values TBD. Implementation follows light mode launch.


Usage Guidelines

DO

  • Use semantic tokens (bg-background, text-foreground) over raw colors
  • Maintain minimum 4.5:1 contrast ratio for text (all cream/navy combinations exceed this)
  • Use the 8px grid for all spacing decisions
  • Apply subtle hover states (1-2px lift, border opacity change)
  • Let negative space breathe — aim for 60% negative space per viewport
  • Use navy for both text and interactive elements, differentiating by treatment
  • Keep to warm cream backgrounds — never cool grays or pure white

DON'T

  • Use pure white (#FFFFFF) or cool grays (#F5F5F5) for backgrounds
  • Use pure black (#000000) for text — always use navy
  • Add competing accent colors — navy and cream are the entire palette
  • Mix tokens from different semantic contexts
  • Add unnecessary borders or decorative elements
  • Use flashy animations or excessive motion (max 2px, max 200ms for most transitions)
  • Crowd elements without adequate spacing
  • Use font-bold (700) — maximum weight is semibold (600)

File Locations

Nautes Design System (Source)

File Purpose
~/Hanlon/design/nautes/tokens/nautes.json Single Source of Truth
~/Hanlon/design/nautes/tokens/dist/nautes.css Generated CSS custom properties
~/Hanlon/design/nautes/tokens/dist/nautes.ts Generated TypeScript exports
~/Hanlon/design/nautes/tokens/dist/nautes-tailwind.js Generated Tailwind config
~/Hanlon/design/nautes/research/ Design research and references

hanlon.agency Website (Synced)

File Purpose
~/Projects/hanlon.agency/src/tokens/nautes.css CSS custom properties (synced)
~/Projects/hanlon.agency/src/tokens/nautes.ts TypeScript exports (synced)
~/Projects/hanlon.agency/src/tokens/nautes-tailwind.js Tailwind config (synced)
~/Projects/hanlon.agency/tailwind.config.mjs Tailwind configuration

PAI Art Integration

File Purpose
~/Hanlon/design/nautes/nautes.ts CLI tool (build, sync, check, init, projects, pai, all)
~/.claude/skills/_HANLON/tools/nautes-brand.json Brand data for Art skill
~/.claude/skills/CORE/USER/SKILLCUSTOMIZATIONS/Art/PREFERENCES.md Art preferences

Workflow

# After editing nautes.json, run:
bun ~/Hanlon/design/nautes/nautes.ts all

Version History

Version Date Changes
3.0.0 2026-02-05 QUIET MODERNISM v3 — Complete direction change: light mode first, navy + warm cream palette. Barlow type system (Condensed display + regular body) replaces Cormorant Garamond + Work Sans. Negative letter-spacing for condensed display. Fixed weights (max 600, no theme-aware switching). Navy serves as both text and accent color. Warm undertone neutral scale. Muted light-appropriate semantic colors. Dark mode deferred.
2.0.1 2026-01-22 NAUT INFRASTRUCTURE — Migrated to Nautes Design System. Single source of truth (nautes.json), CLI tool for build/sync/pai, PAI Art integration. Updated file locations.
2.0.0 2026-01-21 VIOLET FORWARD PALETTE — Complete color overhaul. Deep purple-black base (#1A1625), soft violet accent (#A78BFA), purple undertones throughout neutral scale. Bold AI-forward positioning.
1.3.0 2026-01-21 Type scale: Perfect Fourth (1.333) from 18px base. Display vs Prose line heights. 8px baseline grid.
1.2.0 2026-01-21 Theme-aware font weights: dark mode (headline 400, body 300) / light mode (headline 500, body 400)
1.1.0 2026-01-21 Typography overhaul: Cormorant Garamond + Work Sans (variable fonts), positive letter spacing for serif headlines
1.0.0 2026-01-21 Initial dark mode first implementation