Design System | John D. Saunders
johndsaunders.co

Design system.

Every rule this site follows, on one page. Two typefaces, five purples, one easing curve. If a new page can't be built from what's here, the page is wrong, not the system.

01 · Color

Five purples. Two grounds. Never pure black.

Purple 700 is the brand. Lavender 300 is the accent: numerals, one highlighted word, active nav. Grounds are deep plum, not black. Light mode swaps grounds and inks; accent becomes Purple 700 for contrast.

#2A0B52
Purple 900Hover on solid, text on lavender
#561A9C
Purple 700Brand. Light-mode accent
#8347D1
Purple 500Links on hover
#C69DF6
Purple 300Accent, numerals, active state
#EFE6FA
Purple 100Tint, solid-button hover
#12091F
GroundPage background
#1A0E2E
Ground 2Cards, alternate sections
#0D0617
Ground 0Deepest panel (FAQ on Home)
#F9F5FF
BoneThesis sections. Inverts to Purple 700 in light mode
02 · Type

Figtree speaks. Forum reads.

Figtree (variable) for every heading, label, button and numeral. Forum Regular for paragraphs and list items only, never bold or italic. Uppercase tracked labels at 12–13px carry the eyebrows, nav and buttons.

Display 900
Section heading 700
Card title 700
Eyebrow · 13px · .18em
Nav · 16px · .14em · Light

Lead paragraph, Forum 20–23px, line-height 1.55. Used directly under a heading.

Body paragraph, Forum 20–22px, line-height 1.6, ink at 88%. Short paragraphs, one idea each. Emphasis is a lavender word, never bold.

Small, Forum 18px at 70%. Captions and footnotes.

SansFigtree, weights 300 / 600 / 700 / 900
SerifForum Regular only
WordmarkSatoshi Bold, logo files only
Min sizesBody 18px · labels 12px · buttons 14px
03 · Layout

1200 wide. 720 to read. Breathe.

One container, fluid gutters, generous section padding. Anything that holds text reflows; nothing has a fixed height. Grids use auto-fit with a 300–460px minimum so rows never orphan a single tile.

Containermax-width 1200px, centered
Reading measure720–800px
Guttersclamp(20px, 5vw, 64px)
Section paddingclamp(80px, 10vh, 128px) top and bottom
Group spacingclamp(56px, 7vh, 88px) between groups, hairline + clamp(40px, 5vh, 56px) above each
Grid gap20–28px tiles · 24–64px columns
Nav wrap1000px and under: links wrap, mega menu off
Grid collapse860px: 4-col → 2-col · 720px: 3-col → 1-col
04 · Surfaces

Squared feel. Hairlines, not shadows.

Cards are Ground 2 with a 12% ink hairline. Image tiles keep dark-mode chrome in both themes: dark ground, white 14% hairline, purple-tinted shadow. Shadows otherwise appear only on hover-lift, menus and the slideshow.

01

Content card

14px radius, 18px padding, image on top, numeral + title, one paragraph.

Group eyebrow chip
Radius4 chips · 6 buttons · 8 inner image · 12 tile · 14 card · 16 price card
Hairlinergba(ink, .12–.18)
Tile chrome#1A0E2E ground · white .14 line · 0 20px 50px rgba(18,9,31,.25)
Aspect ratios16/10 cards · 16/9 screens · 4/5 portraits · 1/1 squares
05 · Buttons & links

Uppercase, tracked, two weights.

Solid lavender for the one action that matters on a page. Outline for everything else. Nav links fill with a lavender circle on hover and bold up; there is exactly one active link per page.

SolidPurple 300 fill · Purple 900 text · 600 · hover Purple 100
Outline1.5px ink .8 · 300 weight · hover lavender fill, Purple 900 text
Sizing14px · .12em · 15px 28px padding · 6px radius
Pressscale(.98)
Text linkAccent color, no underline · hover Purple 500
ExternalAlways target=_blank rel=noopener
06 · Motion & texture

One curve. Quiet texture.

Everything eases with cubic-bezier(.2,.7,.2,1). Reveals rise 36px over .9s, staggered .15s. No bounces, no parallax. Film grain and a dot grid sit over dark grounds only and switch off in light mode.

Easecubic-bezier(.2,.7,.2,1)
Micro.2–.3s hover · .55s icon swap
RevealheroRise .9s, stagger .15s
Navsticky · compacts past 40px scroll · frosted rgba(ground,.78) + 16px blur
GrainSVG turbulence, overlay blend, .85 opacity, dark only
Dots.8px ink dots, 14–22px grid, masked fade, .12–.2 opacity
Glowradial lavender / Purple 500 at .16–.32, one per section max
07 · Voice

First person. Plain words. Short lines.

Speak to a business owner, not an agency. Sentence case everywhere except labels. Numbers are concrete. Emphasis comes from a lavender word or a hard stop, never bold body text. No emoji.

Do

"Drop the whole kit into Claude and it walks you through everything, starting with a conversation."

Don't

"Leverage our comprehensive, AI-powered brand enablement toolkit to unlock synergies across your creative pipeline."

Rules
HeadingsSentence case, a period at the end of statements
CTAsVerb first: Get the Kit, See what you get, Watch the series
PricesInline with the CTA: "Get the Kit, $49"
ListsNumbered 01–08 in order of use