Maple bacon
$3.65Maple frosting, crispy bacon crumbled on top.
SpecialtyDesign system · v1 · 2026-09-20
The Donut Station's visual language, taken from the shop itself: the red "WE'RE OPEN" sign, white paper cups with a red band, red patio umbrellas, and Finn — the shark who takes over the drink board every summer. Everything on this page is driven by tokens.json → css/tokens.css (primitive → semantic → component). styles.css contains no raw color values; npm test enforces it.
Six named colors. Red does the talking, cream is the room, navy is the ink. Shark Blue is reserved for limited-time things so it stays special. Every text/background pairing used on the site meets WCAG AA (4.5:1).
--color-primary → red-600 --color-background → cream-100 --color-foreground → coffee-700 --color-secondary → navy-600 --color-band → red-600 (hero) --color-night → navy-600 (locations) --color-accent → shark-500 --color-rating → gold-500 --color-open → #1F6B44 (status, 7.2:1)
Three faces, three jobs. Bebas Neue is the sign painter — condensed caps for headlines, prices and buttons. Kaushan Script is the hand-lettered "Taste It! For Yourself" and is used for one line per section at most. Public Sans (the US Web Design System face) carries everything you read.
xs .75 sm .875 base 1 lg 1.125 xl 1.25 2xl 1.5 3xl 2 4xl 2.75 5xl 3.75 6xl 5.25 hero clamp(3rem, 7.4vw, 6.75rem) line-height: tight .92 (display) snug 1.15 normal 1.55 (body) tabular figures on by default
A 4px base scale. Sections breathe with --spacing-section (clamp 3.5–6.5rem); gutters with --spacing-gutter (clamp 1–2rem). Corners are soft but not bubbly: 4 / 10 / 18px. Shadows are warm (coffee-tinted), never gray.
The single decorative motif — the red-and-white awning stripe from the patio umbrellas. Used exactly twice: under the hero and above the footer. Do not add more.
These are the live site classes, not mockups. Every interactive element is at least 44px tall, has a visible focus ring (navy on light, white on red/navy), and works with a keyboard.
On the red band, primary becomes .btn--light and secondary becomes .btn--ghost:
| State | Primary | Secondary |
|---|---|---|
| Default | red-600, shadow md | navy-600, shadow md |
| Hover | red-500, lifts 1px | navy-500, lifts 1px |
| Active | red-700, no shadow | navy-700, no shadow |
| Focus | 3px ring, 3px offset (navy on light, white on dark) | |
Open/closed is computed client-side from the hours table in America/New_York. The dot is never the only signal — the text always says the state.
Maple frosting, crispy bacon crumbled on top.
SpecialtyWhen the raster logo can't be used (favicons, plain-text contexts, print), this CSS lockup stands in.
Finn is the shop's Shark Week tradition made into a character: a friendly great white in a red-and-white soda-jerk hat, drawn like a 1950s roadside mascot — flat color, thick outlines, no gradients. He appears in exactly three places: the hero, the seasonal band, and small badges. He never replaces the logo.



What keeps this looking like The Donut Station and not like a template.
1. Edit tokens.json (color / type / spacing / component values) 2. npm run build → regenerates css/tokens.css and the FAQ schema, copies dist/ 3. npm test → SEO, a11y, NAP, token discipline checks must pass 4. npm run deploy → Cloudflare Pages