Design System Guidelines

This document outlines the systematic design principles for this Eleventy site, inspired by Swiss design methodology (Otl Aicher, Josef Müller-Brockmann), web-native design (Frank Chimero), and typographic clarity (Erik Spiekermann).

Core Principles

  1. Systematic over arbitrary - All spacing, typography, and layout decisions follow a mathematical foundation
  2. Content-first design - Work with the web's grain, not against it
  3. Functional hierarchy - Visual relationships communicate meaning
  4. Comfortable, not rigid - Systems serve readability, not academic perfection

Typography

Type Scale

Uses a Minor Second (1.067) ratio - subtle, readable progression.

--type-size-9: 1.793rem    (~28.7px) - Large headlines
--type-size-7: 1.476rem    (~23.6px) - Section headings
--type-size-3: 1.138rem    (~18.2px) - Subheadings
--type-size-1: 1rem        (16px)    - Body text
--type-size-small: 0.878rem (~14px)  - Captions, metadata

Line Heights

Key rule: Use unitless line-heights (e.g., 1.5 not 1.5rem) so they scale with font size changes.

Fluid Font Sizing

Base font size scales fluidly with viewport:

font-size: clamp(100%, 2vw, 137.5%);

Optimal Line Length


Spacing System

All spacing uses multiples of a base unit system for visual consistency.

Spacing Scale

--space-3xs: 0.25rem   (4px)   - Micro adjustments
--space-2xs: 0.5rem    (8px)   - Tight coupling
--space-xs:  0.75rem   (12px)  - Close relationships
--space-s:   1rem      (16px)  - Related content
--space-m:   1.5rem    (24px)  - Default rhythm (baseline)
--space-l:   2rem      (32px)  - Section spacing
--space-xl:  2.5rem    (40px)  - Larger sections
--space-2xl: 3rem      (48px)  - Major breaks
--space-3xl: 4rem      (64px)  - Page sections
--space-6xl: 8rem      (128px) - Page regions

Spacing Classes

Modern (recommended for new work)

<div class="flow">        <!-- Default 1.5rem spacing -->
<div class="flow-tight">  <!-- 0.5rem - tight coupling -->
<div class="flow-s">      <!-- 1rem - related content -->
<div class="flow-l">      <!-- 2rem - section spacing -->

Legacy (backward compatibility)

<div class="stack-xs">    <!-- 0.5rem / 8px -->
<div class="stack-s">     <!-- 1rem / 16px -->
<div class="stack-m">     <!-- 1.5rem / 24px -->
<div class="stack-l">     <!-- 2rem / 32px -->

Spacing Hierarchy Rules

Tight coupling (0.5–1rem) - Elements that belong together:

Medium spacing (1.5–2rem) - Related but distinct:

Large spacing (3–4rem) - Section breaks:

Visual example:

Heading                    ← Title
↕ 0.5rem (tight)          ← Belongs to heading
Content starts here...     ← Content

↕ 1.5rem (medium)         ← Paragraph separation

Next paragraph here...     ← Related content

↕ 4rem (large)            ← Section break

## New Section               ← Distinct topic

Grid & Layout

Container

Content Measure

Grid System

12-column grid for complex layouts:

.grid {
    display: grid;
    grid-template-columns: repeat(12, 1fr);
    column-gap: 1.5rem;
    row-gap: 2.5rem;
}

Vertical Rhythm

Article Spacing

article > * + *           → 3rem (48px) - Default article spacing
article > p + p           → 1.5rem (24px) - Paragraph flow
article > h2 + *          → 1rem (16px) - Heading to content (tight)
article > p + h3          → 2rem (32px) - Content to heading (space)

Why this matters:

Section Spacing

.main > section + section → 5rem mobile, 8rem desktop

Clear visual breaks between major page regions.


Color System

Semantic Naming

--color-text:           #141f0a  - Primary text
--color-text-secondary: #374d21  - Links, accents
--color-text-muted:     #000000  - Secondary text
--color-border:         #d5d5d5  - Borders, separators
--color-surface:        #FAF9F7  - Cards, backgrounds
--color-canvas:         #FFFEFC  - Page background

Legacy Aliases (for compatibility)

--color-100 → --color-text
--color-70  → --color-text-muted
--color-30  → --color-border
--color-10  → --color-surface

Design note: Semantic names (text, border, surface) are clearer than numeric scales (100, 70, 30).


Breakpoints

Three systematic breakpoints cover most responsive needs:

--bp-sm: 40rem   (640px)  - Tablet
--bp-md: 60rem   (960px)  - Small desktop
--bp-lg: 80rem   (1280px) - Large desktop

Why only three?

Avoid:


Component Patterns

Cards

<div class="card">
    <!-- Consistent padding: 2.5rem/1rem mobile, 3.5rem/2.5rem desktop -->
</div>

Buttons

<button class="button">Primary</button>
<button class="button secondary">Secondary</button>
<button class="button button-small">Compact</button>

Forms

<form class="form-horizontal">
    <!-- Stack vertically on mobile, horizontal on tablet+ -->
</form>

Accessibility Considerations

Focus States

:focus-visible {
    outline: 2px solid var(--focus-color);
    outline-offset: 0.25em;  /* Visible gap */
}

Touch Targets

Motion Preferences

@media (prefers-reduced-motion: reduce) {
    * {
        animation-duration: 0.01ms !important;
        transition-duration: 0.01ms !important;
    }
}

Design Philosophy References

Otl Aicher (1972 Munich Olympics)

Applied here: Spacing scale based on mathematical progression, not arbitrary values.

Erik Spiekermann (Stop Stealing Sheep)

Applied here: 50ch max width, unitless line-heights, minor second scale.

Frank Chimero (The Web's Grain)

Applied here: Fluid font sizing with clamp(), flexible grids, rem-based spacing.

37signals (Getting Real)

Applied here: Minimal color palette, clear spacing hierarchy, purposeful components.


Common Patterns

Heading + Content

<section class="stack-xs">
    <h3>Section Title</h3>
    <p>Tight coupling (0.5rem) shows relationship</p>
</section>

Related Content

<article>
    <p>First paragraph</p>
    <!-- 1.5rem spacing (automatic in article) -->
    <p>Second paragraph flows naturally</p>
</article>

Major Sections

<main>
    <section>First major section</section>
    <!-- 5rem mobile / 8rem desktop spacing -->
    <section>Second major section</section>
</main>

Migration Notes

From Original to Proposed System

What changed:

What stayed the same:

Backward compatible: All existing classes still work. New classes are additions, not replacements.


Quick Reference

Typography

Common Spacing

Breakpoints


Last updated: 2025-10-08