Koala logo Design
Esc
No matches for “
↑↓ navigate open Esc close
Foundations

Foundations

The visual primitives every Koala component composes from. Read this once; the rest of the system follows from these rules.

DESIGN.md

Principles

Warm, restrained, editorial

Plum is the 10%. The other 90% is cream, slate, and white space.

Borders, not shadows

Containers use hairline borders. Shadows are reserved for floating UI.

Sentence case throughout

No uppercase headings. The eyebrow style is the one sanctioned exception.

No inline glyph separators

No middot, bullet, pipe, or en-dash inside UI text. Stack or use a wider gap.

Every colour is a token

No alpha syntax. No raw hex. If a new soft brand surface is needed, tokenise it.

Pair container with on-container

bg-primary-container pairs with text-on-primary-container. Always.

Mobile first

Components collapse to phone width before they bloom on desktop.

Shared components first

If a koala-* helper exists, use it. Don't reach for raw markup.

Colour

Brand — plum

primary
Filled CTAs, focus rings
on-primary
Text on plum
primary-container
Soft plum surface
on-primary-container
Text on soft plum
primary-hover
Filled-button hover

Surface ladder

surface
Page
surface-dim
Sidebar, banded
surface-container-low
Inset row
surface-container
Card, modal, tray

Ink ladder

on-surface
Headings, emphasis
on-surface-variant
Body copy, links
on-surface-muted
Captions, metadata
on-surface-hint
Placeholders, dividers

Status families

success
accent + container
danger
accent + container
warning
accent + container
info
accent + container
neutral
accent + container

Typography

Families

font-sans — Plus Jakarta Sans
Save quote
Headings, body, every UI label.
font-mono — system stack
QT-2026-04891
References, postcodes, monetary amounts, code.

Type scale

text-5xl
Save quote
text-4xl
Save quote
text-3xl
Save quote
text-2xl
Save quote
text-xl
Save quote
text-lg
Save quote
text-base
Save quote
text-sm
Save quote
text-xs
Save quote

Eyebrow

Section header

The single sanctioned uppercase style. 11px / 600 weight / 0.16em tracking. Used to mark section starts and table-of-contents-style labels. Never on body text.

Weights

Normal — body copy
Medium — labels
Semibold — emphasis
Bold — headings

Radius

One radius for everything. Every rounded-* utility resolves to 5px.

5px
5px
5px
5px
Sanctioned circles
HR Avatar
Spinner
Notification dot

Motion

motion-fast 120ms
Hover transitions, focus ring fade-in.
motion-default 200ms
Tabs, segmented thumb slide, dropdown open.
motion-slow 300ms
Side tray slide-in, scrim fade.
Easing
ease-out — default, cubic-bezier(0.1, 0.5, 0.1, 1)
ease-in-out — reversible transitions only
No bouncing — the active stepper tick is the only exception

Spacing

4px grid. gap-1 = 4px, gap-12 = 48px.

gap-1
4px
gap-2
8px
gap-3
12px
gap-4
16px
gap-5
20px
gap-6
24px
gap-8
32px
gap-10
40px
gap-12
48px

Focus & elevation

Focus ring
Elevation
card
popover
modal

Cards never shadow. Floating UI (dropdowns, popovers, modals) does.

Dark mode

Single toggle in the top header. Adds .dark to <html>, persists to localStorage, fires a View Transition circle-reveal animation.

Every token flips automatically — surfaces, ink, status families, brand. No dark: partner classes needed on most utilities; the token does the work.

Light
surface-container
Dark
surface-container

Page widths

Three container scales for centred page content.

max-w-3xl
768px
max-w-5xl
1024px
max-w-7xl
1280px

Mobile: px-4. Tablet: sm:px-6. Desktop: lg:px-8.

Reference