v1.0 · locked · 2026
00 · Assets
Locked v2.0 after the /design/brand review on 2026-04-24. All five files embed the manager silhouette as base64, single-file, no external references, safe to use anywhere (favicons, OG images, email signatures, merch prep).
Mark · on violet
128×128 rounded square with the manager silhouette. Source for favicon, PWA icon, apple-touch-icon, and any avatar slot.
Open raw · /brand/mark.svgMark · white silhouette
White silhouette, transparent background. For inline use on surfaces already carrying the violet accent (buttons, cards, navbars).
Open raw · /brand/mark-white.svgMark · black silhouette
Black silhouette, transparent background. Light surfaces, print, merch, stamps.
Open raw · /brand/mark-black.svgWordmark · /brand/wordmark.svg · 420×96
Full horizontal lockup: mark + “gaffer” + whistle dot. Drop-in for email signatures, landing page hero, press kits.
Open raw · /brand/wordmark.svgOG default · /brand/og-default.svg · 1200×630
The image Twitter / Slack / Discord scrape for any link to Gaffer. Wired via og:image in _app.js.
Favicon study · browser tab · Apple touch · PWA
16px
32px
48px
96px
180px
16 / 32 → browser tab favicon. 48 → Windows shortcut. 96 → Android Chrome. 180 → apple-touch-icon. All served from a single /brand/mark.svg.
01 · Identity
Primary · dark
Primary · light
Clearspace · minimum padding equals the height of the dot
Don't · stretch
Don't · change case
Don't · drop the dot
02 · Colour
Violet is the sport-agnostic identity colour. Gold carries money moments. Electric green was demoted from brand to semantic, it now means exactly “live / positive / confirmed” and nothing else. Each per-sport league theme overrides --league-primary but the semantic tokens stay constant.
Primary
identity · CTAs · active states
#8B5CF6
Primary Deep
hover · pressed
#6D28D9
Money
prize · winner · entry fee
#F59E0B
Live · Positive
in-play · points gained · confirm
#00FF87
Danger
destructive · error
#F87171
Surface
card background
#150E24
Applied · navbar + stats + CTA
GW Points
87
Prize Pool
$2.5K
Live
8/11
itamardvirr
Mbappé · Kane
03 · Typography
Space Grotesk is the default display face, it runs every H2/H3, section label, button, nav link, and stat chip. Archivo Black is reserved for cover moments: page hero titles (via .hero-headline), big stat numbers, celebrations, OG images. Inter is the body. Every number is rendered with tabular-numsso digits don't shift on a live tick.
Cover · hero (Archivo Black)
72px
Cover · H1 (Archivo Black)
48px
Display · H2 (Space Grotesk 700)
32px
Section label (Space Grotesk 700)
11px
Body · large (Inter 500)
18px
Body · regular (Inter 500)
14px
Stat hero (Archivo Black)
44px
04 · Motion
Only transform and opacity are animated, GPU-composited, never a reflow. prefers-reduced-motion collapses all of this to instant. No Framer Motion.
--dur-fast150mshover tint · icon nudges · chevron spins--dur-base240mscard lift · modal open · accordion expand--dur-slow400mspage transitions · celebrations · count-ups--ease-out-softcubic-bezier(0.22, 1, 0.36, 1)default · arrives and settles--ease-springcubic-bezier(0.34, 1.56, 0.64, 1)rank change · prize win · captain chip pop05 · Iconography
Lucide React, stroke 2–2.25, always rendered at 12/14/16/20/24px. Never mix with emoji. Filled glyphs are reserved for active/pressed states.
06 · Components
Buttons
Chips
Input + focus
Focus ring always three-layered: 3px outer halo, 1px border, inner inset highlight.
Card · premium
Collectible
card-premium + holo-noise
Every hero surface uses this shell, dashboard, pitch cards, league cards, wizard steps.
07 · Applications
Avatar · 96 / 64px
Favicon · 16 / 32 / 64px
16
32
64
OG · 1200 × 630 (scaled)
Your league.
Your rules.
Configurable leagues · USDC escrow · any sport
Loading state
Loading
08 · Voice
We write like
Short sentences. Direct instruction. Touchline, not broadcast booth. Numbers front and centre.
We never
Skill-based contests. Entry fees. Prize pools. That's the vocabulary.