Tokens Typography Buttons Cards Layout Interactive Rules

Your Organisation · Style Guide v1

Design System

Tokens, type, and components — all in one place.

The single source of truth for every page, course, and learning experience your team builds. Follow these patterns and every project will feel consistent, accessible, and on-brand.

Explore tokens Jump to interactive
Section 01

Design Tokens

All colours, spacing, and motion live as CSS custom properties. Copy the :root block into every new file. Dark mode remaps every token automatically — no extra code.

Core — text / surface / divider
--text
#1c1c1e
--text-2
#56565b
--text-3
#6e6e74
--bg
#ffffff
--bg-2
#f4f4f6
--divider
#e4e4e8
Actions — primary teal · link terracotta
--blue (primary)
#0f6b5d teal
--blue-hover
#127a6a
--blue-active
#0c5b4f
--link
#a8552c terra
--accent
#c2562f
Accent palette — one colour per content category. WCAG AA on white and --bg-2.
--c-blue
Cobalt
--c-teal
Teal
--c-green
Emerald
--c-gold
Amber
--c-orange
Coral
--c-red
Signal red
--c-purple
Indigo
--c-pink
Magenta
Shape — border-radius scale
--r-sm · 8px
Nav links, badges
--r-pill · 12px
Buttons
--r-card · 16px
Cards
--r-panel · 24px
Modals
--r-chip · 999px
Tags, seg control
Elevation — shadow tokens
--sh-rest · Cards at rest
--sh-hover · Cards on hover
--sh-floating · Modals / overlays
Motion

--ease: cubic-bezier(.4,0,.2,1) — use for all transitions. Duration: 200ms micro-interactions · 350ms panels · 600ms scroll reveals.

Section 02

Typography

Two fonts. One rule: always use class names, never override heading tags globally. Include the Google Fonts link in every file's <head>.

Font families — Google Fonts

Fraunces

--font-display · Headlines, H2, H3, card titles, pull quotes
Fraunces:opsz,wght@9..144,400;9..144,600;9..144,700

Hanken Grotesk

--font · Body copy, UI, nav, buttons, labels, captions
Hanken+Grotesk:wght@400;500;600;700

.display — Fraunces · clamp(36→72px) · wt 600 · hero H1 only — one per page

Display Headline

.h2 — Fraunces · clamp(36→60px) · wt 600 · section headings

Section Headline

.h3 — Fraunces · clamp(21→27px) · wt 600 · card and subsection headings

Card Headline

.lead — Hanken · clamp(17→20px) · wt 400 · --text-2 · intro paragraphs only

Twenty years translating complex tools and workflows into clear, accessible learning for every kind of audience.

body — Hanken · 17px / 1.55 line-height · standard paragraph copy

Body copy at 17px with comfortable line-height. Used for all general prose, descriptions, and paragraph content across every page and course.

.small — 14px / --text-2 · supplemental detail, footnotes, card body

Smaller text for card descriptions, footnotes, and secondary information. Never use for body-length paragraphs.

.eyebrow — 12px / uppercase / --ls-label-lg / --blue · section labels above headings

Section Label

.tail — --text-2 · grey continuation of a headline, not a separate element

Seven roles, three continents.

.grad — gradient text · one word maximum · never on body copy

Learning that performs.

Section 03

Button Hierarchy

Five types. Each has a defined role. Pick by the action's importance — never by decoration. Never underline.

A — Primary .btn · Solid teal pill · ONE per section max · The most important action

Hover lifts 1px; active presses down. Box-shadow uses teal shadow tokens. Min-width: 120px.

B — Outlined .btn.btn-secondary · Same pill shape, no fill · Pair with .btn when two actions are needed side-by-side

Border and text use --btn-bg so they swap correctly in dark mode. Never use two solid .btn side by side.

C — Chevron .chev · Terracotta text + animated › · Navigation, drill-down, learn-more — NEVER underline

Arrow slides 4px on hover. The › IS the affordance — never add underline. Use everywhere you'd normally underline a link.

D — Footnote .arr-link · "Find a resource ↗" style · Use rarely · No decoration
E — Segmented control .seg · Filter / category switch · One active at a time · Near-black active pill

Active pill uses --ink (near-black). In dark mode it flips to near-white automatically. Use for filtering, not navigation.

Section 04

Cards & Tiles

The standard card, flip card, hover tile, and expertise tile — the four ways to present clickable content blocks.

Standard .card.is-link — Fraunces heading · .tool-pill tag · hover lifts 4px · .chev at bottom Flip cards — hover flips on desktop · tap on touch · "Tap to flip" affordance auto-shown on mobile only
🎯

Front Card Title

Hover or tap to flip

Back Card Title

This is the revealed content. Use flip cards for concepts that have a brief definition on front and deeper explanation on back — skills, theories, principles.

Another Flip Card

Hover or tap to flip

Another Flip Card

The grid is 2-column on desktop, 1-column on mobile. min-height: 210px ensures all cards in a row are the same height.

🌐

Third Flip Card

Hover or tap to flip

Third Flip Card

On desktop, CSS :hover handles the flip — no JS needed. On touch devices, a tap toggles the .flipped class via JavaScript.

📊

Fourth Flip Card

Hover or tap to flip

Fourth Flip Card

Keyboard users can Tab to focus and press Enter or Space to flip. The ↻ hint rotates on flip as a visual cue.

Hover tiles .tile — 3-col grid · plus circle scales on hover · opens modal or section
Expertise tiles — accent left-border · colour auto-cycles per nth-child · opens modal or overlay
Section 05

Layout Patterns

Bands divide the page into chapters. Impact items surface numbers. The tool list organises dense catalogues of resources.

Band anatomy — auto-numbered kicker · alternating bg · Fraunces band-title · lead band-sub
04Chapter Name

Band title goes here

Supporting sentence that adds context. Keep it under two lines. Bands have alternating bg-2 / bg backgrounds.

↑ .band — divides major page chapters. Each band gets a unique --band-accent colour. Content section follows immediately after.

Impact items — accent left-border cycles per nth-child · Fraunces metric · use for stats and outcomes
Metric or outcomeOne sentence explaining what this number means and why it matters.
Another resultContext that makes the number meaningful. Avoid jargon — write for the reader, not the org.
A third statShort, clear, and specific. Each item gets its own accent colour automatically via nth-child.
And a fourthNo extra classes needed — just add another .impact-item and the system handles the colour.
Tool / resource list .tool-cols — 3-column · hover shows terracotta · category label in --text-3
Authoring
Design & Media
LMS & Standards
Section 06

Interactive Patterns

Band accordion, inline accordion, course-style tabs, STAR expand cards, testimonial carousel, and modal — the full interactive toolkit.

Band accordion .bacc — coloured left-border and chev per nth-child · multiple can be open · grid-rows animation

Expanded content goes here. Can contain any HTML — paragraphs, grids, flip cards, tool lists. Height animates via grid-template-rows: 0fr → 1fr.

Use band accordions to group subsections — portfolio by tool, design practice by principle, foundations by framework.

Multiple items can be open simultaneously. Each is fully independent.

Add more .bacc-item elements and the system handles colours and animation automatically.

Inline accordion .acc — hairline borders · role + year layout · chevron rotates · one open at a time

A brief description of the role, responsibilities, and impact. Keep to three to five sentences. Focus on outcomes, not tasks. Opening this item closes any other open item.

Use inline accordion for career history, reading lists, or any content where a list of items each has a short expandable body. One open at a time.

The chevron rotates 90° when open. Closing happens automatically when another item is opened.

Course tabs .tabnav — each tab gets its own accent colour · panel fades in · keyboard accessible

Tab A — Overview

Tabs let you pack multiple views into one section without a long scroll. Use when you have 2–5 categories of equal importance.

Tab B — Details

Each panel can hold any content. The active pill gets the nth-child accent colour — cobalt, indigo, teal, coral cycling.

Tab C — Resources

Fully keyboard accessible. Tab to focus a button, then use Left/Right arrows to move between tabs and Enter to select.

Tab D — Examples

In the portfolio this holds Impact, Career, Case Studies, Industries, and Education in one compact section.

STAR expand cards .star-card — accent border + chev cycles · coloured tag label · STAR row layout inside
SituationWhat was the context or starting point? One or two sentences.
TaskWhat was the goal or problem to solve?
ActionWhat did you specifically do? Own your contribution clearly.
ResultWhat was the measurable outcome? Numbers beat adjectives every time.
SituationEach card automatically gets its own accent colour via nth-child — blue, teal, purple, orange.
ResultNo extra classes needed. Just add another .star-card and the system handles colour and animation.
Testimonial carousel — two per view desktop · swipe on touch · Fraunces quote · teal context dot Modal — backdrop blur · scale-in entrance · dark close button · Esc and backdrop-click to close
Open example modal

Close with ✕ button, Escape key, or clicking the backdrop. All three must be implemented in every modal.

Section 07

Rules & Anti-patterns

Follow these and every page your team builds will feel like it came from the same hand. Break them and the system starts to fracture.

✓ Always

  • Use class names on every element — .display, .h2, .lead — never override tags globally
  • Use var(--token-name) for every colour — never hard-code hex values in component CSS
  • Use dvh or svh — never plain vh — for any full-height layout (iOS Safari breaks it)
  • One .btn per visual section maximum — use .chev for all other links
  • Minimum 44px touch targets on all interactive elements
  • Test in dark mode — toggle your OS or use the nav button on this page
  • Add aria-expanded, aria-label, and role on all interactive controls
  • Left-align body text — centred multi-line paragraphs are an accessibility risk for dyslexia and low-vision users

✗ Never

  • Underline links — the on .chev is the affordance. No underlines anywhere.
  • Use .display more than once per page — it's for the hero H1 only
  • Hard-code hex values in CSS — every colour must come from a var() token
  • Invent new class names — extend the token list or use the existing classes
  • Apply .grad to more than one word — it loses all impact immediately
  • Use vh for full-height layouts — iOS Safari collapses them when the toolbar shows
  • Skip focus rings — every interactive element must have a visible keyboard focus state (--focus-ring)
  • Place two .btn side-by-side without one being .btn-secondary — one is always primary