Theme & Style Guide
Brand mark & logo
The brand-mark is a 34 × 34 round badge with a gradient from --clay to --clay-deep, a steady cream centre dot, and a slow 1.8 s wave that radiates outward — a "live data" pulse. The wordmark is set in Fraunces 500 italic-ready.
Voice & tone
Calm, editorial, plainspoken. Italic emphasis on a single word per headline gives the brand its signature lilt. Never shouty, never marketingese.
Use serif-italic emphasis on the word that carries the most weight. Body stays in DM Sans, calm and readable.
Colour palette
5 soft hues spaced ~70° apart on the wheel — each in a tonal trio of tint, base, deep. Primary is --clay (periwinkle blue).
Clay · primary brand (blue)
Sage · cool calm
Dusk · cool slate-blue
Butter · warm gold
Blush · soft mauve
Neutrals & surfaces
Cool, never stark. The background is a soft blue-tinted off-white that aligns with the primary clay.
Semantic tokens
Components reference these instead of raw hues, so a rebrand is a one-line change.
| Role | Token | → resolves to |
|---|---|---|
| Brand primary | --brand | --clay (#5d8bc1) |
| Cool / calm accent | --accent-cool | --sage |
| Tech / data accent | --accent-tech | --dusk |
| Warm accent | --accent-warm | --butter |
| Soft accent | --accent-soft | --blush |
Typography
Two families: Fraunces (variable, with SOFT axis) for display + emphasis, DM Sans for everything else. JetBrains Mono for data, code, keyboard shortcuts.
Families
Type scale
Weights & tracking
Spacing
8-pt-aligned scale used for padding, gaps and margins. Derived from token names --space-*.
Layout
Border radius
Shadows
Cool-tinted (deep navy alpha) — never grey. Used sparingly.
Motion
Slow, deliberate, easing-out. Reduced-motion users get instant transitions everywhere except the brand-mark heartbeat.
Buttons
Pills, tags & badges
Forms & inputs
Cards
Tool card
Used in the toolkit grid. Soft tint icon, serif title, body description.
Use-case card
Use-case cards stack a tag, serif title, description, and a meta line.
Feedback & status
Interactive states
Every interactive element has the same five states. Hover lifts, focus shows a clay ring, active dips, disabled fades.
Hover delays — --motion-fast (0.15s) for color · --motion-base (0.22s) for transforms.
Iconography
All icons are inline SVGs at 1.8 px stroke, round caps + joins, no fill. Sized 16/18/22/26 px depending on context. They live next to text, never alone.
Icon-tinted chips
Use currentColor on the SVG stroke so the icon inherits its parent text colour.
Imagery & gradients
No raw photos used in marketing. Every "image" is a soft 5-hue gradient. Three patterns: hero blob, card thumb, panel glow.
Hero blobs (background ambient)
Card thumbnails (5-hue cycle)
Panel glows (full bleed)
Animation gallery
Live previews of every named animation. All respect prefers-reduced-motion except the brand-mark heartbeat.
Font lab · live comparator
Compare the same headline rendered in every font we have loaded. Easy to A/B before committing in --font-display / --font-body.
Display candidates · headline test
Body candidates · paragraph test
queries: ["Coffee Brooklyn"],
language: "en", region: "US"
});
Lock in a pairing
In styles.css :root, set:
Breakpoints
Five mobile-first breakpoints. Resize your browser and watch every layout fold.
| Width ≤ | What changes |
|---|---|
| 1180 px | Container padding tightens to 24 px |
| 1024 px | Nav gap shrinks · "Sign in" hides · footer drops to 4 cols |
| 820 px | Hamburger drawer · all multi-col grids collapse · sticky bottom CTA appears |
| 640 px | Hero CTA stacks full-width · stats single-column |
| 420 px | Smallest pass — 28 px h1, smaller logo, mega panel narrows |
Accessibility & keyboard
Site is keyboard- and mouse-friendly.
- ⌘ K opens the global command palette from any page.
- ↑ ↓ navigate the palette · ↵ opens · esc closes.
- Skip-to-main-content link is the first focusable element on every page.
- Focus rings use a 2 px clay outline + offset; visible on every interactive element.
- All interactive elements have
aria-labels where text isn't enough (FAB, mobile toggle, sparkle decorations). prefers-reduced-motiondisables all animations except the brand-mark heartbeat.- Mobile drawer locks scroll, traps focus, closes when any nav link is tapped.
Try pressing tab — every focused element gets a clay 2 px outline.
How to edit
All tokens live in one place. Future branding tweaks are one-line edits.
- Open
new design/styles.css - Find the
:rootblock at the top. - Change any token. The whole site updates on next page-load.
- Bump the cache-bust query (e.g.
?v=4) if visitors might have cached CSS.
Common rebrand recipes
- Change primary colour → edit
--clay,--clay-deep,--clay-tint(andtheme-colormeta +favicon.svgstops to match). - Switch display font → edit
--font-display+ replace the Google Fonts<link>in each page's<head>. - Tighten / loosen layout → edit
--container-maxand--container-pad. - Make corners sharper → reduce all
--radius*tokens. - Adjust shadow softness → edit the
rgba(29,42,60,.X)alpha in the four--shadow*tokens.