Files
keysat-root/design/DESIGN.md
T
Keysat 532229d488 Add design/ contract; archive prior design system as provenance
Establish keysat's durable, vendor-neutral design contract (the standards
/design backfill, document-as-is):

- design/DESIGN.md — nine-section brand brief distilled from the prior
  Claude Design system (navy-on-cream-paper identity, sovereignty-first
  voice, component + motion rules, do's/don'ts). Manrope is canonical
  display (the README's "Archivo" was a stale placeholder).
- design/tokens.tokens.json — W3C DTCG tokens from colors_and_type.css.
- design/brand/ — canonical palette.css + logo/mark assets.
- design/_imports/2026-06-16-claude-design-system/ — the original system,
  relocated as dated provenance (nothing imported it).
- AGENTS.md — add the Design line (read the contract before UI work);
  repoint the layout entry.
- ROADMAP.md — design-checker cleanup backlog (gold-as-fill + pill-radius
  blockers, the inline-token-copy consolidation, token gaps).
2026-06-16 11:29:28 -05:00

143 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
project: keysat
tagline: Software licensing for Bitcoin creators
source: design/_imports/2026-06-16-claude-design-system/ (Claude Design output, May 2025)
tokens: design/tokens.tokens.json
canonical_css: design/brand/palette.css
last_distilled: 2026-06-16
---
# Keysat — design contract
> The durable, vendor-neutral brand brief. Any agent building or changing a user-facing
> surface (the marketing landing, the docs site, the creator admin SPA) reads this and
> `design/tokens.tokens.json` first and conforms to them. Token *values* live in the tokens
> file; this document is the *intent* and the rules. Distilled from a prior Claude Design
> system (now in `design/_imports/`).
## 1. Visual theme
Navy ink on cream paper, with a gold accent that whispers. The reference objects are a
**certificate of authenticity, a vault deed, a hand-numbered print** — classical trust
signaling crossed with modern indie-software practicality. Restrained, archival, precise;
**modern in interaction, classical in composition.** The identity is anchored by the logo: a
deep-navy key crossing a Bitcoin "B" bow, on cream paper with a gold inner border. The brand
reads as **printed, not liquid** — solid surfaces over glass and gradients.
## 2. Color palette
Values in `tokens.tokens.json`. Roles:
- **Navy is the primary brand color.** `navy-800` (`#1E3A5F`) is the wordmark color and
dominant ink — primary buttons, headings, key chrome. Full scale `navy-950 → navy-50`.
- **Cream is the page background.** `cream-100` (`#F5F1E8`) default; `cream-50` (`#FBF9F2`)
for elevated paper. **Pure white (`#FFFFFF`)** is reserved for forms, tables, and code
blocks where contrast matters.
- **Gold (`gold-500`, `#BFA068`) is the accent, used sparingly** — eyebrow labels, dividers,
the inner stroke of premium cards, a verified-badge highlight. **Never a primary button
color.**
- **Ink scale (`ink-900 → ink-300`)** handles body text, secondary copy, disabled states.
- **Semantic:** success `#2D7A5F`, warning `#B8861F`, danger `#B23A3A`, info = `navy-700`,
each with a tinted `-bg`.
- Borders are **alpha navy**, not solid lines: `border-1` 12%, `border-2` 20%, `border-3` 35%.
## 3. Typography
- **Display — Manrope** (`font-display`): geometric sans, mirrors the wordmark. h1h4, large
numerals, the wordmark. Weights 400700 (500 for h1/h2, 600 for h3/h4). *Note: the original
design-system README named "Archivo" as a placeholder substitution, but the shipped CSS and
every live surface use Manrope — Manrope is canonical. If a licensed display face is ever
supplied, swap `font.display` in the tokens and remove the Google Fonts import.*
- **Body — Inter** (`font-body`): humanist sans for prose, UI labels, form fields. Stylistic
sets `ss01` + `cv11`.
- **Mono — JetBrains Mono** (`font-mono`): license keys, code samples, API responses, tx IDs.
- **Type scale** is the `fs-*` tokens (`display-xl` clamp 5688px down to `meta` 12px).
Headings track tight (`-0.02em`); eyebrows track wide (`0.18em`), uppercase.
- **Casing:** sentence case for buttons/menus/headings ("Create a license"); ALL CAPS + wide
tracking only for eyebrow labels above sections, sparingly. Proper nouns capitalized
(Keysat, Start9, StartOS, BTCPay, Bitcoin, Lightning, Ed25519).
- **Identifiers:** license keys monospace, hyphen-grouped (`KS-9F2A-7C41-XK22-6D8E`); keys/
hashes ellipsized middle (`mz7q8…h3k2p`); amounts default to **sats** under 0.01 BTC.
## 4. Component styling
- **Buttons** — radius `r-md` (8px). Primary: `navy-800` bg, `cream-50` text; hover `navy-900`,
press `navy-950` + 1px translate-down (no scale). Secondary: `cream-50` bg, alpha-navy
border; hover `cream-200`. Ghost: transparent; hover `rgba(14,31,51,0.05)`. **Gold is a
text/border treatment only, never a primary button fill.** Danger: red text + faint red
border.
- **Cards** — radius `r-lg` (12px), on cream with a hairline `border-1` and `shadow-sm`.
Premium/featured cards get a **1px gold inner stroke** (`gold-500`) + `shadow-md`.
- **Badges** — pill (`r-pill`), tinted semantic bg + matching text; gold/neutral = transparent
with a gold border.
- **Forms** — white bg, alpha-navy border, radius ~7px; focus = navy border + `ring-focus`
halo. Monospace variant for keys.
- **Code blocks** — `navy-950` bg, `cream-50` text, `r-lg`, JetBrains Mono; gold/cream syntax.
- **Icons — Lucide**, stroke 1.75px, 16/20/24px. **No emoji in product UI. No PNG icons** (the
logo mark is SVG; only the source thumbnail is PNG). The logo mark is never recolored —
navy, or cream on dark surfaces.
## 5. Layout
- **4px base grid**, spacing tokens `sp-1` (4px) → `sp-12` (128px). Use the scale; don't mint
magic numbers.
- Marketing pages **breathe** — sections often `sp-11` (96px) apart. Dashboard density is
moderate: table rows ~52px, card padding `sp-6` (24px).
- Max content width on marketing ~1200px; reading width for prose/docs ~680px.
- **Backgrounds are cream with a subtle grain** (the `paper-texture` utility — two radial-dot
grids at ~2.5% opacity), never flat color. Section bands alternate cream → cream-200 →
cream-50 → navy-950 (dark CTAs/footers).
## 6. Depth / elevation
A **paper-shadow** system, not a glassy one. `shadow-xs`/`sm` for resting cards; `shadow-md`
for elevated/premium cards; `shadow-lg` for popovers/menus; `shadow-xl` for modals/command
palettes. `shadow-inset` gives buttons subtle paper relief. Elevation comes from **shadow,
not heavy borders**. Transparency/blur is rare — acceptable only for the sticky marketing
header (`blur(12px)` over `rgba(245,241,232,0.85)`) and the modal scrim (`rgba(14,31,51,0.55)`).
## 7. Do's and don'ts
**Do**
- Lead copy with *what the creator owns* — the signing key, the customer list, the payment
rails. Sovereignty-first is the brand's center of gravity.
- Keep gold rare and accenting; keep motion quiet (200ms standard, 120ms hover).
- Use solid surfaces, restrained radii, hairline alpha borders, the paper grain.
- Link a one-sentence definition the first time a term appears (Ed25519, BTCPay webhook,
`.s9pk`).
**Don't**
- **No hype words:** revolutionary, seamless, unlock, supercharge, leverage, ecosystem,
journey, paradigm, game-changing.
- **No emoji** in product UI; **no PNG icons**; **no Bitcoin orange** in the UI (navy/cream
stands alone); no blue/purple gradients, no glassmorphism.
- **Gold is never a primary button fill.** Radii never exceed ~18px (`r-xl`) for surfaces —
no 24px+ rounding (reads as a consumer fintech app, which Keysat is not).
- No spring physics, no scale-up on hover (cards move at most 1px; buttons darken, not grow).
- Never remove focus rings.
## 8. Responsive behavior
Breakpoints in use: **980px** (grids collapse), **720px** (sidebar → slide-in drawer),
**640px** (phone: tighter chrome, single column). Container padding steps 32px desktop → 20px
tablet → 14px phone. Marketing is full-width hero + stacked sections; docs is a 3-column
(sidebar | prose | TOC) collapsing to single column at 980px; admin is a 240px sticky sidebar
+ main, sidebar drawering at 720px.
## 9. Agent prompt guide
When building or changing a Keysat UI:
- **Pull every color, size, space, radius, and shadow from `design/tokens.tokens.json`** (or a
CSS custom property derived from it — see `design/brand/palette.css`). Do not hardcode hex or
px values that bypass the scale.
- Match the **existing surface** you're editing (landing / docs / admin) — they share the token
set; keep them consistent rather than introducing a new look.
- Default to **navy primary buttons, cream pages, gold-as-accent-only**, paper shadows, Lucide
icons, sentence-case labels, no emoji.
- If a needed value genuinely isn't in the tokens, **add it to the tokens file** (and ideally
`palette.css`) rather than inlining a one-off — keep the contract the single source of truth.
- Known debt (see ROADMAP): the three surfaces currently inline their own copy of the
variables. Prefer importing `design/brand/palette.css`; when you touch a surface, move it
toward that shared source rather than perpetuating a private copy.