Default card
rounded-2xl border border-border bg-card shadow-soft hover-lift
Design system
The colors, gradients, typography and components that keep every page on-brand. Use the tokens below — never hard-coded values — when extending the site.
01 — Color
Tokens are defined in src/styles.css using OKLCH. Always reference the semantic name, not the raw color.
--teal · bg-teal · text-tealPrimary brand cyan from the logo. Use sparingly as accent or for icons.
--teal-deepDarker teal used in gradients.
--purple · bg-purple · text-purplePrimary brand purple. Safe for body-size text on light surfaces (7.4:1).
--purple-softMid-tone purple used in accents and shadows.
--background · bg-backgroundWarm off-white. Default page surface.
--cream · bg-creamSlightly tinted alternate section background.
--card · bg-cardPure white card surface.
--secondary · bg-secondarySoft chip / pill background.
--foreground · text-foregroundBody text. 15.3:1 on background — AAA.
--navy · bg-navy · text-navyHeadlines and primary button surface. 11:1 on background.
--muted-foregroundSecondary text. 5.9:1 — meets AA.
--borderDecorative dividers only.
02 — Gradients
Use the bold gradient for accents and hero moments; the soft gradient for backgrounds and large surfaces.
--gradient-brand · bg-gradient-brand · text-gradient-brandTeal → teal-deep → purple. Use on small surfaces (icons, rules, metric numbers, text-clip headers) — not as a page-wide background.
--gradient-brand-soft · bg-gradient-brand-softPale teal → pale purple. Safe behind text. Use for callouts, image placeholders and feature tiles.
--gradient-page · bg-gradient-page (layer over bg-background)Two soft radial glows used behind hero sections. Keeps the page feeling airy without darkening text.
03 — Typography
Fraunces for display, Inter for body. Tight tracking on headings; generous line-height on copy.
Display H1 · Fraunces 500 · -0.02em
Display H2 · Fraunces 500
Display H3 · Fraunces 500
Body large · Inter 400 · 1.7 lh
We help leaders untangle marketing, finance and technology so the next quarter — and the next decade — actually compound. Small senior teams, clear scopes, work you can point to.
Body · Inter 400
Default body copy. Use text-foreground/85 for hero paragraphs and text-muted-foreground for secondary metadata.
Eyebrow · 0.18em tracking
The .eyebrow utility — uppercase, semibold, purple. Used above every section title and hero.
05 — Cards & surfaces
Use rounded-2xl, border-border and shadow-soft for content cards. Reserve shadow-elegant for hero moments.
rounded-2xl border border-border bg-card shadow-soft hover-lift
Highlight
Use bg-gradient-brand-soft for callouts and quoted moments.
“Senior practitioners. Outcomes that compound.”
06 — Patterns
Every page section follows the same rhythm: eyebrow → display headline → supporting paragraph → content grid.
Eyebrow tag
Supporting paragraph in text-foreground/75, max-w-2xl, leading-relaxed. Keep it to 2–3 lines.
bg-background — defaultbg-cream with border-y border-border/60 — alternatingbg-gradient-brand-soft — feature momentsNever stack two cream sections back-to-back — alternate to keep contrast.
py-24 md:py-32 — sectionmt-12 / mt-14 / mt-16 — header → gridgap-5 / gap-6 — card gridsp-7 / p-8 — card padding07 — Accessibility
Contrast was computed in OKLCH for every text/background pair. Use these guarantees when picking tokens.
| Pair | Ratio | Grade |
|---|---|---|
| Body text on background | 15.25:1 | AAA |
| Headlines (navy) on background | 11.02:1 | AAA |
| Purple on background | 7.79:1 | AAA |
| Gold-foreground on teal button | 7.96:1 | AAA |
| Navy-foreground on navy button | 10.86:1 | AAA |
| Muted text on background | 5.86:1 | AA |
| Focus ring vs all surfaces | ≥4.84:1 | PASS (≥3:1) |
| Input border vs background | 3.52:1 | PASS (≥3:1) |
text-purple for accent text — it clears AA.text-muted-foreground for secondary copy.text-teal for body text — it fails AA.styles.css.text-foreground/60 or lower for important text.