Design System — Vol. 01

Interface patterns for the forest & the stars.

A component library built on the same restraint as the brand: one accent per composition, hairline structure, and the mark’s point of light carried through every interactive state.

Typefaces
DM Serif Display · DM Sans
Base tokens
7 colors · 9 spacing steps
Components
11 patterns · 2 themes
Foundations

Color

Forest Deep and Cream carry the system as primary ink and surface. Forest and Moss support mid-weight moments. Lime and Acid are seasoning — reserved for a single accent per composition, never a base.

Forest Deep
#172412
Primary ink, dark surfaces, sidebar
Forest
#276F27
Secondary surfaces, info state
Moss
#499A13
Success state, progress fill
Lime
#8ECA3C
Rare accent, toggle knob
Acid
#BBDC12
Focus ring, active dot, warning
Cream
#F4F1EB
Primary surface, text on dark

Semantic mapping

Surface
#FFFFFF
Card and input backgrounds
Rust
#A3402E
Danger, destructive actions, errors
Sunken
#F4F1EB
Page background
Foundations

Typography

Two faces, two jobs. The serif carries editorial weight; the sans carries function. Neither is ever asked to do the other’s work.

Aa
Display — DM Serif Display
The top-level headline (h1) only. Serif reads well at hero scale but loses legibility smaller, so nothing below h1 uses it. Regular weight only — never bold, never italic for emphasis.
Aa
UI / Body — DM Sans
Everything below the h1: section titles, card titles, pull quotes, buttons, labels, body copy, navigation, data. Weights 400 / 500 / 700 cover the full interface.

Type scale

Display XL44 / 1.08
Forest & Frontier
Display L32 / 1.1
Field Notes from Tynset
Heading22 / 1.3
Studio Journal — Entry 014
Body16 / 1.6
Set for long-form reading and interface text alike, at a comfortable measure.
Small13.5 / 1.5
Captions, helper text, and secondary metadata.
Micro11 / caps
Eyebrow & Label
Foundations

Spacing

A 4px base unit, scaled geometrically. Generous whitespace is part of the restraint — when in doubt, take the larger step.

space-1
4px
space-2
8px
space-3
12px
space-4
16px
space-5
24px
space-6
32px
space-7
48px
space-8
64px
space-9
96px
Foundations

Mark & motif

The mark’s circular counterform — a point of light above the tree line — is the one signature the system allows itself. It recurs as the single active indicator throughout, so it always means the same thing: attention, here.

Active nav & status
Section eyebrows
Selected input
Toggle knob, on
Foundations

Grid & layout

A 12-column grid on desktop, collapsing to 8 on tablet and 4 on mobile. Columns are fluid; gutters and margins come from the spacing scale, so layout and whitespace share one vocabulary.

Column grid — desktop

12
6
6
4
4
4
8
4

Specification

TierColumnsGutterOuter marginContainer
Desktop ≥ 960px1224px (space-5)56pxmax 1200px, content measure 920px
Tablet 640–959px816px (space-4)32pxfluid
Mobile < 640px416px (space-4)20pxfluid
Foundations

Responsive

Three breakpoints, mobile-content-first. Display type scales fluidly with the viewport; spacing steps down one token below the desktop tier so density rises gently, never abruptly.

Breakpoints

TokenRangeBehavior
bp-sm< 640px4-col grid, stacked layouts, full-width cards and modals
bp-md640–959px8-col grid, sidebar collapses to top navigation
bp-lg≥ 960px12-col grid, persistent sidebar, content measure 920px

Fluid typography

/* Display sizes interpolate between tiers — no jump cuts */ --display-xl: clamp(36px, 4.6vw, 52px); --display-l: clamp(26px, 3vw, 32px); /* Body, small and micro sizes stay fixed at every tier */

Spacing compression

Below bp-lg, section rhythm steps down one token (48 → 32) and page padding tightens. Component-internal spacing never changes — only the space between blocks compresses.

Foundations

Design tokens

The full sheet, ready to drop into CSS, Tailwind config, or a token pipeline. Components consume semantic aliases — never primitives — which is what makes the dark theme a pure token swap.

/* ---------- primitives ---------- */ --forest-deep: #172412; --forest: #276F27; --moss: #499A13; --lime: #8ECA3C; --acid: #BBDC12; --cream: #F4F1EB; --rust: #A3402E; /* ---------- semantic (light) ---------- */ --ink: var(--forest-deep); --surface: #FFFFFF; --surface-sunken: var(--cream); --border: rgba(23,36,18,.14); --border-strong: rgba(23,36,18,.28); --muted: rgba(23,36,18,.78); --faint: rgba(23,36,18,.65); --focus-ring: var(--forest); /* ---------- semantic (dark) — html[data-theme="dark"] ---------- */ --ink: var(--cream); --surface: #1B2A14; --surface-sunken: #10190C; --border: rgba(244,241,235,.14); --border-strong: rgba(244,241,235,.32); --muted: rgba(244,241,235,.78); --faint: rgba(244,241,235,.64); --focus-ring: var(--acid); /* ---------- spacing (4px base) ---------- */ --space-1: 4px; --space-2: 8px; --space-3: 12px; --space-4: 16px; --space-5: 24px; --space-6: 32px; --space-7: 48px; --space-8: 64px; --space-9: 96px; /* ---------- radius / type / motion ---------- */ --radius-sm: 2px; --radius-md: 4px; --radius-lg: 6px; --radius-pill: 999px; --serif: 'DM Serif Display', serif; --sans: 'DM Sans', sans-serif; --mono: 'DM Mono', monospace; --ease: cubic-bezier(.4,0,.2,1); --dur-fast: .15s; --dur-base: .2s; --dur-slow: .3s;
Foundations

Accessibility

Every ratio below is computed, not estimated, against the actual composited backgrounds. Body and secondary text meet WCAG 2.1 AA (4.5:1); large display text and non-text indicators meet 3:1.

Contrast — measured

PairLightDarkRequirement
Ink on surface12.5 : 111.8 : 14.5 : 1 — AA body
Muted text on surface7.9 : 17.2 : 14.5 : 1 — AA body
Faint labels on surface5.1 : 15.0 : 14.5 : 1 — AA body
Cream on Forest Deep12.5 : 14.5 : 1 — AA body
Focus ring on surface3.6 : 1 (Forest)9.3 : 1 (Acid)3 : 1 — non-text
Badge & alert text5.2–8.8 : 1≥ 5 : 14.5 : 1 — AA body

The focus ring is theme-aware on purpose: Acid fails 3:1 on white, so light mode uses Forest — the brand’s point of light appears at full strength only where it can actually be seen, in the dark.

Keyboard & focus order

Focus order follows DOM order, which matches visual order: sidebar, then content, top to bottom. Every interactive element — including tabs, tooltips and the modal close — is a native focusable element with a visible ring. Tooltips open on keyboard focus, not only hover. Reduced-motion preferences disable the spinner and all transitions.

ARIA in practice

<!-- Tooltip: described-by, native button --> <button type="button" aria-describedby="tip1">?</button> <div role="tooltip" id="tip1">1× mark height, every side</div> <!-- Toggle: labelled input, decorative parts hidden --> <label class="toggle"> <input type="checkbox" aria-labelledby="theme-label"> … </label> <!-- Decorative SVGs never reach the accessibility tree --> <svg class="orbit" aria-hidden="true">…</svg>

Touch targets

On coarse pointers, all interactive elements enforce a 44px minimum height and selection controls grow to 22px — no layout change needed on precision devices.

Components

Buttons

One primary action per view. Secondary and ghost styles recede on purpose — they should never compete with the primary button for attention. Buttons and CTAs are the system’s brand UI: fully rounded pills, the organic shape reserved for invitations to act.

Variants

Sizes

On dark surface

Components

Form controls

Focus states use the acid ring rather than a generic blue — the same point of light that marks an active nav item marks an active field.

Text inputs

Shown on your public profile.
Enter a complete email address.

Selection controls

Components

Badges

Square corners, not pills — deliberately. Badges, inputs, tables and alerts are system UI: tight geometry for dense information. The pill shape stays reserved for actions, so form alone tells you whether something is an invitation or a control.

Draft In review Shipped Needs input Blocked Archived
Components

Cards

A lift on hover — 2px of translation, a soft shadow — is the only motion a card needs to feel touchable.

Brand — 2025
Nordlys Identity
A full identity system for a Tromsø-based aurora tourism collective.
6 min read04 Jun 2026
Print — 2025
Fjellrom Editorial
Layout and type system for a quarterly print journal on mountain living.
8 min read02 May 2026
Type — 2024
Aurora Type Study
An in-progress display face exploring the same forest-and-cosmos duality.
Ongoing2024 —
Components

Navigation

The top bar carries the mark; tabs and breadcrumbs carry the wayfinding. Neither ever fights for the same job.

Tabs

A short summary of the pattern, its intent, and when to reach for it instead of a neighboring component.
Live specimens showing every supported variant, state, and size side by side.
Guidance on composition — spacing, pairing, and the one thing to never do with this component.

Breadcrumb

Components

Alerts

Brand-toned, not traffic-light. Every alert stays inside the palette — even danger is the rust already established in the guidelines, not a generic red.

i
Draft saved
Your changes are stored locally until you publish.
Published
Field Notes from Tynset is now live on the journal.
!
Missing cover image
Entries without a cover fall back to the default gradient.
×
Publish failed
Check your connection and try publishing again.
Components

Table

Hairline rules do the separating — no zebra striping, no heavy borders.

ProjectDisciplineStatusUpdated
Nordlys IdentityBrandShipped04 Jun 2026
Fjellrom EditorialPrintIn review02 May 2026
Aurora Type StudyTypeDraft21 Apr 2026
Studio Proposal 2026DeckNeeds input18 Apr 2026
Components

Modal

Reserved for decisions that need full attention — an overlay that dims everything else to Forest Deep at partial opacity.

Components

Tooltip

A quiet second voice — brief, dark, and dismissed the instant the cursor moves on.

Clearspace
Hover the mark for its meaning
Components

Progress & loading

The spinner is the motif in motion — a point of light in orbit, not a generic ring.

Progress

72% — uploading assets
35% — accent variant

Spinner

Components

Avatar

The status dot borrows directly from the mark — online is the same acid point of light used everywhere else in the system.

MH
Magnus H.
Online now
AK
Aksel K.
Offline — 3h ago