The page canvas — near-black, never pure black.
The brand kit for CODECAVE. There is no light theme; the surfaces below are the default, not a mode.
This page is the brand: what the marks are, which colours carry which role, how the type is set, and how it should sound. Everything that demonstrates the system lives in one of two places, and the menu above has one entry for each.
DESIGN.md remains the source of truth;
colors_and_type.css is its machine-readable half. If the prose
and the stylesheet ever disagree, the stylesheet wins.
kitchen-sink/
Examples
Six whole surfaces built from the system — pitch deck, poster,
email, newsletter, landing page and contact form. Each opens standalone,
so it can be attached, printed or handed over as it is.
examples/
The rules
Eleven sections: foundations, the ramp, components, motion,
anti-patterns and the known divergences. Says so where evidence is thin
rather than guessing.
DESIGN.md
The tokens
Every value as a custom property, with a semantic layer over the raw
ramp. Consume the semantic names; never hard-code a hex.
colors_and_type.css
Drawn at 357×110. The chevron is always
#5F20FE; the wordmark paths are white, so the default pairing is
white-on-near-black. Clear space equals the height of the chevron. The
artwork predates Satoshi and is outlined Montserrat Bold — the paths are
vector outlines, not live text, and must never be re-typed by hand.
One row per lockup, and each row reads the same left to right: vector master, then white text, black text, all-white ink, all-black ink. Black-ink artwork is the brand's only light-surface exception — those tiles carry a light ground because the ink demands it; the rule is declared per variant, never derived from the page.
Six files, one drawing — that is deliberate. The chevron is the entire icon program; the files differ in padding and raster size, never in artwork, so the legend under each tile is what tells them apart. The mark never carries the wordmark's clear-space rule — an app icon is already a bounded field.
Two of these are literally the same
file — the desktop 512 is byte-for-byte the PWA 512 — and
favicon.svg is codecave-mark.svg with 30 units of
breathing room per side. Every raster keeps a transparent ground; iOS and
Android composite their own plate behind it.
Depth never comes from contrast. The page is
#0A0A0B and a card is #0F0F15 — one hair apart.
What separates them is the 24px radius and a 1px #2B2848
hairline. Violet is an edge colour: it draws links, borders, eyebrows and
the focus halo, and never fills a large area.
The page canvas — near-black, never pure black.
Headings and body text — 18.0:1 on the page.
Links, borders, eyebrows, focus halo — edges and marks only.
Cards and panels — one hair above the page.
Metadata and placeholders only — never long-form copy.
Hairline rules, dividers and card edges.
Two ramps ship in colors_and_type.css — twelve
violet brand steps and thirteen grays, verbatim from the site's 2026
rebuild — plus single-use accents for the glow button, the gradient and
the section glow. The six roles above are drawn from them.
Regular 400 and Bold 700 carry everything. Production
declares a single face with no weight descriptor, so live 700 text is
browser-synthesized; this package binds the genuine cuts, which will read
marginally tighter until production ships the same files. Fallbacks:
system-ui, -apple-system, Segoe UI, Helvetica Neue, Arial, sans-serif.
Aa
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789 & @ # % — “ ” ‘ ’
| Role | Specimen | Size / leading |
|---|---|---|
| heading-lg | Ship it | 56 / 130% |
| heading-md | Section heading | 44 / 115% |
| heading-sm | Eyebrow lead | 32 / 110% |
| stat | 98% | 36 / 40 |
| lg | Subsection heading | 24 / 32 |
| md | Intro copy sits here. | 20 / 28 |
| base | Body text and every button label. | 16 / 24 |
| caption | Captions and form labels. | 14 / 20 |
The system's one typographic signature: a bold violet line over a larger light lead line. It opens nearly every section.
Every control is a 48px pill: padding: 4px 24px,
border-radius: 9999px, 16px bold label. Hover raises contrast
everywhere except the tertiary border, which production dims to
#4004AF — reproduced faithfully, flagged in WEBSITE-REVIEW.md.
Only :disabled reduces the label, to opacity 0.2.
Rendered live from colors_and_type.css, so this row is a working
check on the token file rather than a picture of one.
One primary action per page. The glow button is
#9980FF with #1B0D4E text at 5.67:1, and it is the
only place violet fills an area. Three light sources stack: a static halo,
a highlight travelling under the fill, and an edge bloom 8px outside each
end. The fill never changes colour on hover.
24px radius, 1px hairline, no shadow.
Padding is bottom-heavy — 2rem 2rem 3rem — so a footer
action has room to sit.
Same surface at a 36px radius. Radius is the loudest brand signal in the system.
44px radius, no fill — a gradient
hairline drawn with mask-composite over a blurred backdrop.
Straight from the contact form. The label lives inside the
field (common/InputText.vue), bold at caption size with a violet
asterisk, and the placeholder is a full sentence, not a format hint. Nothing
pins the 64px height — it is 28px of top padding around one 24px text line
plus 12px below. The chips are checkboxes (Checkbox.vue,
secondary / small), not tags — they toggle.
Focus is a violet halo —
outline: none plus --shadow-input-focus — and the
error state swaps the same halo red via --shadow-input-error.
Everything else gets a 2px #B19AFE ring. Neither may be
removed.
First-person plural, present tense, short declaratives. Lead with the business outcome, then name the technology. Risk, cost and ownership are addressed head-on, because reassurance rather than excitement is what the audience is buying.
How a page is built, as opposed to what it is coloured.
Every specimen below is drawn with the real token out of
colors_and_type.css — a corner rounded at true size, padding at its
literal value — rather than a picture of one.
Radius is the loudest signal in the system, and a 4px corner does not occur anywhere in source. Measured census on the homepage: 24px on 42 blocks, 12px on 9, 44px on 8, 8px on 7, 120px on 2. Radii of 2–4px do not appear at all.
The two section-panel steps — 64px below 768px, 120px at and above it — are missing from this row on purpose. They are sized for a full-width panel and read as a lozenge on a tile this small; they are shown at their real width two blocks down.
200px of padding above a section, 120px below. Sections own their
approach, not their exit — so vertical space never collapses into one shared symmetric
gap. Drawn here at true size straight from
--section-padding-top and --section-padding-bottom; the
hatched bands are the padding.
A section panel is #0A0A0B — the same value as the page
behind it. Nothing separates the two but radius and light thrown upward:
--shadow-section stacks three layers with negative Y offsets seeded from
#281470. It is physically wrong and instantly recognisable. The stage
below is one step lighter so the shoulder is visible; on the real site the glow alone
finds the edge.
#0A0A0B and a card is
#0F0F15 — one hair apart on purpose. If you are lightening a card to
make it read, you have made a layout mistake, not a colour one.--shadow-section belongs to .section-container and nowhere
else. The glow button's halo is a separate token with a separate job.max-width: 1280px with gutters stepping
8px → 16px → 32px, and 768px is the one structural break in the
whole system. Nothing else in the layout gets a second opinion about where to bend.