Foundations

Colour system

Core palette

Five named tokens. Light to dark:

offwhite
#f9f6f6
border
#e8e3e3
primary
#71b8b8
mid
#366867
dark
#2c3030
Why teal? SAMM's context is software security: technical, serious, trustworthy. Teal sits between blue (technical authority) and green (progress, validation), which suits a maturity model. It also gives the business function palette room to breathe: the five BF colors use distinct hues that don't compete with the UI chrome.
TokenValueContrast on offwhiteUsage
--color-offwhite#f9f6f6Page background. No plain white on the site.
--color-bg→ offwhiteSemantic alias for page background
--color-border#e8e3e3Borders and dividers
--color-primary#71b8b82.11:1Decoration only: backgrounds, accents, tints. Never text or links.
--color-primary-rgb113, 184, 184For rgba() usage
--color-mid#3668675.86:1 AA ✓The only teal safe for text or links
--color-dark#2c303012.43:1 AAA ✓Primary text and the site header background. Near-black with a slight cool cast, not a teal.
Why --color-mid exists. The brand teal (#71b8b8) fails WCAG AA contrast on the offwhite background (2.11:1 vs. the required 4.5:1). Rather than darken the brand color globally, we keep the brand teal for decorative use and introduce --color-mid (#366867, 5.86:1) for any text or interactive element that needs accessible contrast.

Teal tints

The brand teal is also used at reduced opacity for backgrounds. These are not named tokens; they are computed with rgba(var(--color-primary-rgb), alpha).

0.06
callout
0.07
nav hover
0.08
tags / rows
0.10
headers
AlphaUsage
0.06Rationale callout boxes
0.07Sidebar nav hover, docs active items
0.08Blog tag pills, mobile nav items, table row hover
0.10Table section headers, docs section header backgrounds
0.15Focus rings and tinted borders on interactive elements

All tints are decoration-only. Never use them as a background behind text that relies on contrast with the offwhite page background.


Text colors

TokenValueContrast on offwhiteUsage
--color-text→ dark12.43:1 AAA ✓Primary text (alias for --color-dark)
--color-text-light#4646468.78:1 AA ✓Secondary text
--color-text-muted#6b6b6b4.96:1 AA ✓Metadata, captions, de-emphasised labels

Business function colors

Each business function has a dedicated color used consistently across the model, sidebar navigation, and practice pages.

Governance #435b70 Design #ad4b00 Implementation #3a5f26 Verification #754858 Operations #5b5b62

Each has a -light variant for hover states and cell accents. These colors carry meaning; they are not decorative tints. Never use a BF color outside its business function context.


Surfaces

Three surface levels create depth without heavy shadows. Cards lift from the page background through color, not box-shadow.

Page background #f9f6f6 — offwhite
Card / content area #ffffff — no token yet
Border / divider #e8e3e3 — color-border
Dark surface #2c3030 — color-dark
Warm neutrals. Offwhite (#f9f6f6) gives the page a warm, natural quality that is easier on the eyes than pure white during extended reading sessions. The slight warm tint (red channel slightly higher than blue) is subtle but measurable.

Typography scale

Based on the golden ratio with half-power steps (√φ ≈ 1.272). The base is 1rem (typically 16px). Each step multiplies or divides by 1.272.

--text-3xl ≈ 67.8px SAMM Hero display
--text-2xl ≈ 41.9px Page title h1 hero
--text-xl ≈ 25.9px Section heading h2
--text-lg ≈ 19.8px Sub-heading h3, card title
--text-base 16px (base) Body text, nav items, button labels Body — φ⁰
--text-sm ≈ 14px Metadata, captions, sidebar nav, tags Small text
--text-xs ≈ 9.9px Fine print, overlays on dark surfaces only Minimum
Why √φ steps? Full φ steps (×1.618) jump from 16px straight to 25.9px with nothing between. Half-power steps (×1.272) give intermediate sizes that are still mathematically related but usable in real UI. The result: seven steps covering fine print to hero headings, all proportionally consistent.

Font stacks

TokenStackUsage
--font-brand“Days One”, sans-serifHeadings, logo, hero text
--font-sanssystem-ui, -apple-system, “Segoe UI”, sans-serifAll body text
--font-monoui-monospace, “SF Mono”, “Fira Code”, monospaceCode blocks, tokens
--line-height1.618 (φ)Body line height

Days One is loaded from Google Fonts and scoped strictly to headings and the logo. Body text uses system fonts for performance: no flash of unstyled text, no network dependency for readability.


Spacing scale

Pure golden ratio, base 1rem (16px). Each step multiplies by φ (1.618) going up or divides going down.

xs
sm
md
lg
xl
2xl
3xl
TokenValueRatioUsage
--space-xs0.382rem (≈6px)φ⁻²Icon-to-text gaps, tight inline spacing
--space-sm0.618rem (≈10px)φ⁻¹Button padding (vertical), badge padding
--space-md1rem (16px)φ⁰Base unit — body gaps, card padding
--space-lg1.618rem (≈26px)φ¹Section gaps, nav item padding, content padding
--space-xl2.618rem (≈42px)φ²Large section margins, hero padding
--space-2xl4.236rem (≈68px)φ³Hero spacing, page-level gaps
--space-3xl6.854rem (≈110px)φ⁴Logo sizes, large image containers
Why golden ratio for spacing? Unlike typography (where readability at specific pixel sizes matters), spacing is about proportional relationships between elements. Golden ratio spacing creates naturally harmonious layouts. Developers pick from a fixed scale instead of inventing arbitrary px values; the result looks intentional without manual tuning.