Canopy Brand Book

Colour, typography, components, motion, iconography and voice, plus the rules that keep them consistent. Everything below is rendered from the same files the site is built from, so it cannot drift from what actually ships.

Generated from design/tokens.json

01 / Foundations

The lockup

One wordmark, one tagline pill. The pill is the most distinctive thing the brand owns and it is finished: do not restyle it, move it, or drop it.

Rules

Never

02 / Colour

Palette

Three surfaces, because the product genuinely has three. They agree on the greens and the cream and differ only in their neutrals. Click any swatch to copy its value.

Why three surfaces. Marketing uses warm neutrals, the app uses cool greys, and the signup wizard uses marketing's naming with the app's neutrals. Collapsing them is a visual decision, not a refactor, so it has not been done. A component copied between surfaces changes its border and muted colour, which is worth knowing before you move one.

Contrast

Computed live against WCAG 2.1. Anything below 4.5:1 fails AA for body text; 3:1 is the floor for large text and UI boundaries.

Open decision: white on leaf. The marketing primary button (.btn-primary, the "Say Hello" CTA) is white text on leaf green, which measures 2.08:1. That fails AA for body text (4.5:1) and also fails the 3:1 floor for large text and UI boundaries.

The signup wizard's equivalent button already uses canopy green on leaf, which measures 6.01:1 and passes comfortably. So the site carries both treatments of the same fill, and the accessible one is the less prominent of the two.

Switching the marketing button to canopy-on-leaf would fix it and make the two agree, but it changes the look of the most prominent button on the homepage. That is a brand call, not a cleanup, so it is recorded here rather than silently applied.

03 / Typography

Two families

Space Grotesk for anything that carries structure: headings, the wordmark, buttons, prices, numbers. DM Sans for everything a person reads in sentences.

h1 · Grotesk 700 · 62pxYou're invisible
h2 · Grotesk 700 · 34pxPick your plan
h3 · Grotesk 600 · 21pxWhat happens next
body · DM Sans 400 · 17pxYou don't need more tools or an agency.
small · DM Sans 400 · 13pxNo contracts · Cancel anytime
emphasis · DM Sans italica website? is the only italic on the site
Italic is reserved. It appears in the hero typewriter and one section heading, and nowhere else. It reads as emphasis precisely because it is rare.

04 / Space and shape

Radius, borders, elevation

Corner radius carries hierarchy: the bigger the surface, the rounder it is.

TokenValueUsed for
--radius-sm10pxButtons, inputs, small controls
--radius12px marketing · 16px wizardCards, panels, plan tiles
pill100pxChips, badges, the tagline pill
phone44pxThe hero device only

Elevation

flat · no shadow
raised · hover
lifted · modal

05 / Components

Live specimens

Rendered from the real CSS, not screenshots. Everything here is interactive.

Buttons on light

Buttons on dark

Gated button

A disabled button always names the single next thing it needs. Type below to watch it change.

Badges

Founding pricing Passes AA Fails AA

06 / Motion

How things move

Short, eased, and never decorative for its own sake. Press replay on any of these.

Reduced motion. Every animation must have a prefers-reduced-motion path. The hero typewriter, the underline draw, the icon spinner and the chips all honour it. Anything new must too.

The ladder

DurationUse
0.1sPress feedback, :active scale
0.2sHover, focus, colour changes. The default.
0.3sState transitions, stepper progress
0.4sElement entry, message bubbles
0.65sScroll reveal

07 / Iconography

Lucide, vendored

Stroke-based, 24×24, 2px round caps. Sized in em and coloured with currentColor, so an icon always matches the text beside it and works on light and dark surfaces without variants.

Usage

Decorative, where the text already says it:

<svg class="icon" aria-hidden="true"><use href="#i-check"></use></svg>

Meaningful, where the icon is the only label:

<svg class="icon" role="img"><title>Verified</title><use href="#i-check"></use></svg>
Never put icon markup where markup does not render. A CSS content: value and a textContent assignment both render as literal text, so the user sees the string <svg class=…. Use the character in CSS, and innerHTML in JS. Two tests enforce this.

08 / Voice

How Canopy sounds

Plain, direct, a little dry. Texts read like a competent person, not a bot and not a cheerleader. No exclamation-point enthusiasm. Short sentences.

The wedge

You're invisible in your own city.

The felt problem. SEO, AEO and GBP are machinery. Never lead with machinery.

Supporting messages, in priority order

Proof is demonstrative, never statistical

Canopy does not sell metrics. No ranking promises, no call-volume claims, no "results for them means results for you." That industry is scammy and metric guarantees are the scammiest part of it. Selling outcomes is selling a service; Canopy sells a product. Proof is show: the text thread itself, a real before and after, the badge on live client sites, and letting someone text 424-3-CANOPY and feel it.

Do and don't

Do

"A marketing partner that handles everything for you."

"Your site is yours. Download the code anytime."

Don't

"Your AI marketing employee!"

"We'll get you to #1 on Google."

09 / Rules

Hard rules

These are settled. They are not preferences.

Always

Build rules

The mechanics that keep the above true.