Section 02 · Foundations

Color.

Five layers: surfaces, foreground, brand, semantic, protocol-coded. Every value earns its place. New colours only if the system genuinely lacks one — and only after we audit whether the gap is a real need or a lazy fix.

Surfaces

A four-step grayscale, all close in luminance. The point is to nest containers without the page looking like a layer cake. Always go darker for deeper wells (code blocks, modals over modals); never a fifth tone.

--vp-color-bg
#0a0d0c
Page background. The deepest value.
--vp-color-bg-1
#0f1413
Cards, panels, sidebars.
--vp-color-bg-2
#141a18
Hover states, table headers, input fields.
--vp-color-bg-3
#1b231f
Code blocks, pressed buttons, deep wells.
--vp-color-line
#1f2a25
Default divider; rows in a table.
--vp-color-line-2
#2a3830
Outer container border; emphasis.

Foreground

Four levels. Don't invent a fifth — if you need an in-between value, your hierarchy is wrong, not the palette.

--vp-color-fg
#e6f2ec
Primary text · headings, table cells, selected nav.
--vp-color-fg-dim
#a3b3ac
Body copy, default paragraph.
--vp-color-fg-mute
#6b7872
Captions, meta, group labels, timestamps.
--vp-color-fg-faint
#3d4742
Disabled, dashes, em-dash separators.
Contrast targets: --vp-color-fg on --vp-color-bg is ~14.8:1 (AAA). --vp-color-fg-dim on --vp-color-bg is ~7.5:1 (AAA). --vp-color-fg-mute on --vp-color-bg is ~4.6:1 (AA). Don't drop below --vp-color-fg-mute for anything a user needs to read.

Brand · Neon

Three greens forming a tight family. The flat neon is the workhorse — primary buttons, key affordances, success ticks, sparkline trends. The mint and lime stops only appear in the headline gradient and on the website. Never gradient-text inside the application.

--vp-color-neon
#6ff39b
Primary accent. Buttons. Live indicator.
--vp-color-neon-mint
#5ef0c2
Gradient stop A · website only.
--vp-color-neon-lime
#8df860
Gradient stop B · also "success" in dense UI.
--vp-color-neon-glow
#6ff39b33
Box-shadow / focus ring tint. Never as a fill.

Semantic

Four. Each one carries one meaning system-wide. The protocol palette borrows from this set — that's deliberate, so colour learning compounds across surfaces.

--vp-color-info
#5ec3f0
Informational. Neutral status. HTTP.
--vp-color-warn
#f5c453
Warning. Validation. Soft fail. SMTP.
--vp-color-danger
#ff6b6b
Error. Destructive action. Failed probe.
--vp-color-violet
#c79df5
Chains. LDAP. Long-running multi-step.

Protocol coding

Users learn the colours by association. HTTP stays blue. SMTP stays warning-yellow. IMAP is lime. LDAP is violet. SPAMD is amber. SOCKS5 is neutral grey. Don't recolour for "balance" — these are mnemonic, not aesthetic.

HTTP / HTTPS#5ec3f0 info / blue
SMTP#f5c453 warn / yellow
IMAP#8df860 neon-lime
LDAP#c79df5 violet
SPAMD#ff9d6b amber
SOCKS5 / MITM#d8d8d8 neutral grey

Do / Don't

● Do
HTTP
Use the protocol tag for any list item, history row, or sidebar entry that represents a probe. The colour is the index.
● Don't
HTTP
Never recolour a protocol tag because it "fits the screen better." The pink HTTP doesn't exist. You break the user's mental index.