/ Brand Kit
Internal · v2026.04
Download for AI brand-kit.md
Brand Kit
Everything we use to keep our identity coherent — logo, brand colors, typography. Built for internal use across decks, marketing, partner-facing surfaces, and anywhere the Vela name shows up.
Logo system Brand color Typography Owner: Robert Salesas, CTO
01 · Identity

Logo System

Our identity is one SVG: logo-vela-intelligence.svg — the star and the wordmark locked together as a single file. The wordmark carries specific kerning, optical sizing, and forced uppercase that can only be preserved by using the vector file. Treat it as one unit. The icon-only star exists only as a fallback for square contexts (favicons, avatars).

Primary mark · use this everywhere logos/primary/logo-vela-intelligence.svg · 2272 × 307 · currentColor
Brand rule. The star and the wordmark "VELA INTELLIGENCE" must always appear together. Never re-typeset the name — the wordmark has its own spacing, weight, and all-caps treatment that the SVG preserves. Never crop the star away. Never substitute Montserrat or any other font for the wordmark.

The primary lockup on backgrounds

Same SVG, four contexts. The lockup is colored by currentColor — the surface chooses, the mark adapts.

Black on canvas
Default · highest contrast
White on brand
Hero · slide title pages
White on dark
Dark UI · video · broadcast
White on accent
Sparingly · campaign highlight

Alternate lockups

For contexts where the horizontal lockup doesn't fit — narrow columns, square avatars with the wordmark beneath, headers where only the name needs to appear. Each is shipped as its own SVG with the same locked spacing and all-caps wordmark as the primary lockup. Use these instead of the primary, never combined with it.

Star + VELA · stacked
logos/stacked/logo-vela.svg · 256 × 381 · narrow & square contexts
VELA · wordmark only
logos/wordmark/vela-intelligence-vela-wordmark.svg · 2498 × 700
SVG
VELA INTELLIGENCE · wordmark only
logos/wordmark/vela-intelligence-wordmark.svg · 9423 × 724
NOTE
The brand rule still applies: the wordmark in any lockup is the SVG — never re-typeset, always all-caps, always with its locked spacing. Picking an alternate lockup is a layout decision; the wordmark itself never changes.

Icon-only fallback

The star may appear alone only when the surface is square and too small to read the wordmark — favicons, profile avatars, app icons, social chips at < 32 px. Anywhere larger, use the full lockup.

Star · icon-only
≤ 32 px contexts only
Star · on brand
App icon · loading state
Star · on dark
Dark favicon
Star · brand tint
UI accents only

Usage

Do
  • Always use the full lockup SVG (logo-vela-intelligence.svg) whenever there is room for the wordmark to be read.
  • Keep the star and "VELA INTELLIGENCE" together as one unit — they ship as one SVG for a reason.
  • Preserve minimum clear space equal to the height of one star-point (≈ 25% of the lockup height) on all sides.
  • Render the file in currentColor when embedded in product code, so theme switches "just work" between light and dark mode.
  • Pair the white-on-brand variant with the primary 600/700 shades — not the lighter 50–300 shades.
Don't
  • Don't separate the star from the wordmark — they belong together. The star alone is only for square contexts under 32 px.
  • Don't re-typeset "Vela Intelligence" in Montserrat or any other font. The wordmark has its own kerning and forced uppercase — use the SVG.
  • Don't change the case — the wordmark is always all-caps. No "Vela Intelligence" in mixed-case as a graphic.
  • Don't change the spacing between the star and the wordmark, or rearrange them vertically as a custom stack.
  • Don't recolor the star and wordmark independently — they are one mark, one color.
  • Don't rotate, skew, outline, or stretch the lockup. Don't add drop shadows beyond the brand-supplied hero treatment.
02 · Color

Color Palette

Three primary families — Brand Primary, Brand Secondary, Brand Accent — plus two tertiary families: Slate (cool gray for text) and Gold (warm contrast). Each ramps across 11 shades. The canonical brand shades in practice are Brand Primary 900 (the dark canvas), Brand Secondary 600 (voice / trust), and Brand Accent 400 (action / CTA) — that last one is intentionally lighter than the 600 default because Brand Accent at 600 reads as muddy, and the brand needs its accent bright. Hover any swatch and pick T to copy the CSS-variable token (e.g. --brand-primary-600), H for hex, O for the oklch() value — ready to paste into CSS or HTML.

Brand Primary · Brand Primary
hue 260 · light · default
Brand Secondary · Brand Secondary
hue 163 · supports, signal-of-trust
Brand Accent · Brand Accent
hue 50 · highlights · canonical at 400

Tertiary palettes

Two supporting families for roles the primary brand colors don't carry alone. They fill specific functional jobs — they don't compete with Brand Primary/Brand Secondary/Brand Accent for brand expression. Surfaces and borders are not in here: they use Brand Primary 800–950 directly, because the brand canvas IS Brand Primary.

Tertiary · Slate
hue 248 · text on dark · cool gray
Tertiary · Gold
hue 90 · warm contrast · used sparingly
Slate · use for
  • Slate 50 — primary body text on the dark navy canvas (near-white with a cool cast). Replaces a generic #F4F4F4 off-white.
  • Slate 200 — secondary text. Subheadings, descriptions under headlines, less-prominent paragraphs.
  • Slate 400 — tertiary text. Captions, metadata, timestamps ("Updated 2h ago"), source citations, helper text under form fields, disabled-state labels.
  • Slate 700–950 — extremely rare; used only when an element specifically needs a desaturated dark variant the Brand Primary ramp can't supply.
Gold · use for
  • Gold 100–200 — warm contrast slide backgrounds in formal pitch decks. The sand-coloured rest from the navy → green cadence.
  • Gold 300–500 — the "Social" pillar dot in ESG contexts, and similar single-purpose semantic markers.
  • Never as a brand voice or CTA color — Gold supports a moment of warmth, then steps back.

Status tones

Four tones — Info, Success, Warning, Danger — for client-facing demos, pitch slides, roadmap labels, diagram pips ("live / planned / deprecated"), status pages, release notes. They share hue, peak chroma, and the same Gaussian curve as the in-product design system's status tokens, so anything that moves between a brand surface and the console reads as the same colour family.

Boundary — this is not a replacement for the design system's full status-token matrix (hover, border, light-fill, dark-fill, surface-adaptive variants). For interactive UI — alerts, toasts, badges, table-row status — pull from @vela/ds-tokens directly. The brand kit gives you one canonical shade per tone for non-interactive use, plus the full ramp for diagrams and charts.

Danger vs Brand Accent 600 — Brand Accent 600 (#9F4111) remains the brand-side default for "danger / urgent" (see §4.2). The Danger ramp below exists so the four tones live as a coherent set, and for the rare demo where a vivid red is genuinely required (e.g. a "critical risk" pip where Brand Accent's burnt-orange reads as warning not stop).

The marked default (●) is the canonical step on the dark navy canvas — Info 400, Success 400, Warning 300, Danger 400. On light surfaces, step one down (Info 500, Success 600, Warning 400, Danger 600). Warning sits a step lighter than the others because yellow at L ≤ 0.55 reads as olive / muddy.

Status · Info
hue 255 · neutral information · canonical at 400 (dark) / 500 (light)
Status · Success
hue 150 · healthy / done · canonical at 400 (dark) / 600 (light)
Status · Warning
hue 55 · caution / needs attention · canonical at 300 (dark) / 400 (light) — yellow needs lifting
Status · Danger
hue 27 · critical / blocked · canonical at 400 (dark) / 600 (light) — default to Brand Accent 600 in most brand contexts
03 · Typography

Typography

Three type families. Manrope carries the headings and the numbers we want to feel confident. Inter handles everything that needs to read like a sentence. JetBrains Mono does the specific monospace work — eyebrows, code, token names, hex values, metadata.

Manrope Display & headings
Download Manrope.zip
AaBb
a‑z A‑Z 0‑9 · — ‘ ’ “ ” ( ) [ ] { } & @ # $ %
SemiBold
600 · subheads, labels
Bold
700 · default heading
ExtraBold
800 · hero, metric value
Inter Body, UI, captions
Download Inter.zip
AaBb
a‑z A‑Z 0‑9 · — ‘ ’ “ ” ( ) [ ] { } & @ # $ %
Light
300 · long-form fallback
Regular
400 · body default
Medium
500 · emphasis
SemiBold
600 · labels, strong
JetBrains Mono Code · eyebrows · tokens
Aa01
a‑z A‑Z 0‑9 · < > { } [ ] ( ) / \ # @ & %
Regular
400 · code, hex, oklch
Medium
500 · token names
SemiBold
600 · uppercase eyebrows

Type scale

Heading 1
36 / 1.20
The shape of intelligent finance
Heading 2
24 / 1.20
The shape of intelligent finance
Heading 3
20 / 1.20
The shape of intelligent finance
Heading 4
16 / 1.20
The shape of intelligent finance
Body Lg
16 / 1.50
The shape of intelligent finance — Inter regular, comfortable reading.
Body Md
14 / 1.50
The shape of intelligent finance — Inter regular, default body size used across product surfaces.
Body Sm
13 / 1.50
The shape of intelligent finance — Inter regular, used in dense tables and side panels.
Caption
13 / 1.40
Compliance · Risk · Onboarding
Overline
12 / 1.50
Section Label
04 · Color in practice

Gradient & Color Behavior

How the brand colors actually live on a page. Observed from the marketing site: a dark navy atmosphere, two-color pairings only, and "gradient" expressed more often as a colored glow than a literal fill. The working anchors below (navy, green, orange, sand) are pulled directly from the site CSS — they sit alongside the OKLCH brand palettes and are a candidate for a deeper color reconciliation pass.

A · The atmosphere

The brand's native habitat is dark navy, not white. Off-white type, green glow, orange singular CTA. Every page on the marketing site obeys this composition.

Vela Intelligence · Hero composition
From Documents
to Decisions.
Explainable intelligence for high-stakes decisions. Off-white on navy. Atmospheric green glow at opposite corners. One orange action.

B · Working anchors & roles

Every working color the brand uses, mapped to its canonical palette swatch. The hex is what currently ships; the palette name is the source of truth.

Canvas · atmosphere Brand Primary 900 · "Navy" oklch(0.260 0.087 260) · #07214D
Voice · trust · "yes" Brand Secondary 600 oklch(0.450 0.114 163) · #006842
Singular CTA Brand Accent 400 · "Orange" oklch(0.630 0.181 50) · #DB5F00
Focal · slides Brand Primary 950 · "Black" oklch(0.220 0.063 260) · #081937
Warmth · tertiary Gold 200 · "Sand" oklch(0.830 0.075 90) · #DAC68F
Text on dark · tertiary Slate 50 · "Off-white" oklch(0.980 0.011 248) · #F3F9FF
RULE
One orange per view, plenty of green, all on navy. Text uses Slate, never pure white. Surfaces and borders use Brand Primary 800–950 directly — no separate "dark surface" tertiary.

C · Pairing rules

CSS ONLY
Every gradient is a CSS function — linear-gradient(), radial-gradient(), conic-gradient(). Never a raster image (no background-image: url('gradient.png')) and never an SVG used as a page backdrop. Image-based gradients band visibly, leave hard seams where the image ends when users scroll or resize, and break on retina / ultra-wide / dark-mode. The single exception is inside SVG asset files — the Brand Secondary → Brand Accent labs gradient lives inside labs/zephlyn-icon.svg and labs/vaelth-icon.svg because those are vector icons, not page backdrops.

Gradients pair exactly two colors. There are four allowed recipes and one explicit "never".

Brand Secondary → Brand Accent
linear-gradient(135deg, Brand Secondary 400, Brand Accent 400)
Reserved for Vela Labs sub-brand only. Never on main brand surfaces.
Brand Primary 900 → 700
linear-gradient(160deg, Brand Primary 900, 800, 700)
Same-hue depth. Mood, atmosphere, slide backgrounds. Never chromatic shift.
Brand Secondary 600 → 700
linear-gradient(160deg, Brand Secondary 600, Brand Secondary 700)
Positive signal in motion. Progress bars, "pass" states, slide accents.
Color → transparent
linear-gradient(90deg, transparent, Slate 700, transparent)
Fade in, fade out. Dividers and atmospheric strips only.
Brand Primary + Brand Accent · never
— do not blend —
These are contrast colors. Brand Accent CTA on Brand Primary canvas is the brand. Blending them flattens the relationship.

D · Glow as a brand technique

The site does most of its "colored light" with box-shadow, not with gradient fills. Hover any element below to see it.

Action glow
box-shadow: 0 0 20px oklch(Brand Accent 400 / 0.30)
Regulated Environments
Hover — card lifts with an green aura.
Surface glow
box-shadow: 0 0 30px oklch(Brand Secondary 600 / 0.20)
Environmental Social Governance
Pip glow
box-shadow: 0 0 8px oklch(brand / 0.6)
RULE
Glow alpha: 0.15–0.30 with blur 20–30px for surfaces. 0.6 with blur 8px for status pips. Same hue family as the element — green cards glow green, orange CTAs glow orange.

E · Translucency

Brand color at reduced alpha is the third "gradient" technique. Use these target alphas for tinted glassmorphic surfaces.

100%full
90%headers
50%scrims
35%borders
15%atmospheric
100%full
90%headers
50%scrims
35%borders
15%atmospheric

F · Gradient angles

Where direction matters, only these angles appear in brand-approved usage.

90°
Dividers · meters · utility
135°
Sand / warm surfaces · icons
160°
Slide backgrounds · cinematic
45°
Small icons · sub-brand marks

G · Accents for data — charts, graphs, multi-series

When you need more than the brand triad — bar charts, line series, donut segments, any data split into groups — extend the palette from the token families in the original brand tokens.

METHOD
(1) Lead with the brand triad — Brand Primary, Brand Secondary, Brand Accent. (2) Lock the lightness at L = 0.63 (the 400-shade) so every series sits at equal visual weight. (3) Step the hue ~30–60° around the colour wheel from the brand hues (260 · 163 · 50). (4) Pick only from the yaml token families: rose, coral, red, wine, crimson, clay, orange, amber, gold, yellow, lemon, lime, sage, green, jade, mint, teal, sea, cyan, pool, ice, azure, fjord, sky, blue, cobalt, iris, dusk, violet, lilac, orchid, plum, grape, fuchsia, pink, blush. (5) Never use Gold or Slate as a data series — they're surfaces, not signals. (6) Never use the Labs Brand Secondary → Brand Accent gradient in a chart.

Recommended chart palette · all at L = 0.63

Brand · 1 Brand Primary 400 #4E87E6 · hue 260
Brand · 2 Brand Secondary 400 #339F75 · hue 163
Brand · 3 Brand Accent 400 #DB5F00 · hue 50
Extra · 4 Lime 400 #879200 · hue 115
Extra · 5 Pool 400 #009DBD · hue 215
Extra · 6 Plum 400 #C85BA8 · hue 340
Extra · 7 Amber 400 #C07700 · hue 75
Extra · 8 Teal 400 #009FA0 · hue 195

The same palette on three contexts — see how each colour holds up

Almost-black · Brand Primary 950
Brand PrimaryBrand SecondaryBrand AccentLimePoolPlumAmberTeal
Brand canvas · Brand Primary 900
Brand PrimaryBrand SecondaryBrand AccentLimePoolPlumAmberTeal
Almost-white · Slate 50
Brand PrimaryBrand SecondaryBrand AccentLimePoolPlumAmberTeal

Picking order — what to reach for, in what scenario

ScenarioPalette
1–3 categorical seriesBrand Primary 400, Brand Secondary 400, Brand Accent 400 — brand triad at the chart lightness
4–6 categorical seriesBrand triad + Lime 400, Pool 400, Plum 400 — fill the gaps between brand hues
7–8 categorical seriesAbove + Amber 400, Teal 400
> 8 categorical seriesReconsider — aggregate, facet, or split the view; more than 8 hues stops being legible
Sequential (low → high)One brand or tertiary ramp end-to-end: Brand Secondary 100 → 800 (growth), Brand Primary 100 → 800 (concentration), Slate 100 → 800 (neutral)
Diverging (neg ← 0 → pos)Brand Accent 400 ← Slate 200 → Brand Secondary 400 — brand contrast through a neutral midpoint
ESG pillarsE = Brand Secondary 400 · S = Gold 300 · G = Slate 400 (already codified)
05 · Iconography

Icons

Vela uses two Font Awesome styles, picked by purpose — not by where the icon appears. Sharp Duotone (fa-sharp-duotone fa-solid) when the icon enhances — feature emphasis, illustration, decorative depth. Solid (fa-solid) when the icon is informational — bullets, button glyphs, chevrons, arrows, status pips, anything functional or directive. The signature feature-icon treatment is a 42 × 42 Brand Secondary 600 tile with a Slate 50 icon at 18 px (1.125 rem).

Regulated
fa-shield-halved
Diligence
fa-clipboard-check
Layered
fa-layer-group
Balanced
fa-scale-balanced
Continuous
fa-arrows-rotate
Risk
fa-triangle-exclamation
KIT
The Vela Font Awesome Kit (b122b96a8f) is licensed under our account. velaintelligence.com and our approved related domains are enabled on the kit. Don't load it from a non-approved domain — license violation.
Embed & usage
<!-- in <head> -->
<link rel="preconnect" href="https://kit.fontawesome.com" crossorigin>
<link rel="preconnect" href="https://ka-f.fontawesome.com" crossorigin>
<script src="https://kit.fontawesome.com/b122b96a8f.js" crossorigin="anonymous"></script>

<!-- usage -->
<i class="fa-sharp-duotone fa-solid fa-shield-halved"></i>   <!-- enhancement: feature icon -->
<i class="fa-solid fa-arrow-right"></i>                      <!-- informational: button arrow -->
06 · Sub-brand

Vela Labs

A distinct visual language for experimental work and internal tools. Labs uses an green crystal mark and the green → orange diagonal gradient on its product icons — the only place this two-hue blend is approved. Labs borrows the navy atmosphere from the main brand, but speaks with a brighter, more playful voice on top of it.

Vela Labs · crystal
The crystal mark
Solid green (#2D6A4F) at three opacities — 1.0, 0.6, 0.4. The three facets create depth without ever leaving the green hue. Use this mark wherever Labs is named or branded; it replaces (never accompanies) the Vela Intelligence lockup.

Labs product icons

Each Labs product gets its own glyph drawn in stroke, filled with the green → orange diagonal gradient. Same gradient, different shape. This is the only sanctioned use of the two-hue blend.

Elyndor
repo + arrow glyph · encrypted S3 backups
Tablyn
table glyph · SQLite MCP server
Vaelth
circle + square glyph
Zephlyn
stacked planes glyph
Next Labs product
follows the same recipe
RULE
The green → orange gradient belongs to Vela Labs. Don't use it on Vela Intelligence main-brand surfaces — that's how the two brands stay legible side-by-side.
07 · Sub-brand

Deal Intelligence

Deal Intelligence is the first product-vertical sub-brand under Vela Intelligence. Where Labs is for experiments, this is a full product line — and the pattern future siblings will follow (Risk Intelligence, ESG Intelligence, etc.). It uses its own mark (the jack) and its own DEAL INTELLIGENCE wordmark drawn in Figtree 700 with hand-tuned spacing — the same custom-spacing recipe as the parent VELA INTELLIGENCE wordmark, with the INTELLIGENCE half lifted verbatim from the parent. The shared "Intelligence" word is the cue that this is a Vela family product. The Deal Intelligence lockup replaces the Vela Intelligence lockup in its own context — the two never appear together.

RULE
Do not recreate the wordmark from a font. Both VELA INTELLIGENCE and DEAL INTELLIGENCE are Figtree 700 letterforms with custom per-letter spacing — outlining the text fresh from Figtree (or any other font) will lose that spacing and produce a regression. The canonical SVGs in logos/wordmark/ and logos/sub-brands/<name>/wordmark/ are the source of truth; treat them as immutable. New sub-brand wordmarks must be drawn by a designer.
Deal Intelligence · jack
The jack mark
A solid four-point sparkle with a tight, pinched waist — visually a "jack" (the toy). Symmetric in both axes (viewBox 256 × 256), tips at distance 120 from center, quadratic-bezier sides with control points at inset 10 — the inset that earns the jack reading. Single filled path, no gradients, no outline rings, no opacity layers. Distinct from the parent Vela four-point star; the two marks never appear together.

App-icon tile

Jack at 38% of tile width, Slate 50 fill, on a Brand Primary 900 (#07214D) rounded square (256 × 256, corner radius 56). Use for native app icons, web favicons at large sizes, splash screens, and product surfaces.

Deal Intelligence app icon
logos/sub-brands/deal-intelligence/mark/
  deal-intelligence-mark.svg          /* currentColor */
  deal-intelligence-mark-black.svg
  deal-intelligence-mark-white.svg
  deal-intelligence-app-icon.svg      /* navy tile */

Wordmark

DEAL INTELLIGENCE, drawn in Figtree 700 all-caps with custom per-letter spacing. The INTELLIGENCE half is lifted verbatim from the parent wordmark; only DEAL is new. (Figtree's G with its near-45° terminal is the distinguishing tell — compare Manrope's straight-cut G.)

Deal Intelligence wordmark

Primary lockup

Jack mark + wordmark, horizontal. Default whenever the full name fits. Caps vertically centered on the mark.

Deal Intelligence primary lockup

Usage

Use
  • Primary lockup wherever the full name fits horizontally — this is the default.
  • Wordmark only in formal / legal contexts, footers, places where the mark would feel redundant.
  • Mark only for favicons, avatars, and contexts below ~32 px where the wordmark is illegible.
  • App-icon tile for native app icons, web favicons at large sizes, splash screens, product surfaces.
  • Use the hard-fill -white.svg / -black.svg when the consuming surface has a fixed theme.
Don't
  • Don't show the Deal Intelligence lockup alongside the Vela Intelligence lockup — pick one per surface.
  • Don't use the parent Vela four-point star as the Deal Intelligence mark; the jack replaces it.
  • Don't add gradients, outlines, opacity layers, or drop shadows to the jack — single filled path only.
  • Don't rotate, skew, stretch, or recolor outside the Slate 50 / Brand Primary 950 pairing.
  • Don't substitute the wordmark font — Figtree 700 all-caps with custom spacing, no exceptions, no programmatic regeneration.
PATTERN
Future product-vertical sub-brands (Risk Intelligence, ESG Intelligence, etc.) follow the same recipe: one distinct mark of comparable visual weight, <NAME> INTELLIGENCE wordmark drawn by a designer in Figtree 700 with custom spacing (reusing the parent's INTELLIGENCE half verbatim), file layout mirroring logos/sub-brands/deal-intelligence/, and the same "replaces, never accompanies" rule against the parent lockup.
08 · Modes & semantic tokens

Dark and Light

The brand operates in two modes. Both share hue families, the same accent green, and the same singular CTA orange — what changes is which stops are picked from the existing ramps. Dark is canonical, the brand's native habitat for every public-facing surface. Light is a sanctioned product-surface mode, opt-in only, never the default. Marketing pages, decks, brand assets, social imagery, and external campaign materials always render in dark — light mode does not appear on those surfaces.

SCOPE
Marketing / brand-asset → dark, always. Decks, hero sections, social, partner-facing collateral, sub-brand showcases — no light mode. Product UI → either, default dark. Console / dashboards / long-session product surfaces may expose a mode toggle. Switching is an explicit user choice, persisted per user; it never auto-mirrors the OS prefers-color-scheme.

The navy migration

The defining trick is that Brand Primary 900 stays the brand's structural anchor in both modes — it just changes role. On dark, it is the canvas; on light, it becomes the primary text. The eye reads the same hue in both modes; only the figure-ground inverts. This is what keeps both modes recognisably Vela Intelligence.

Dark · default · canonical
Brand Primary 900 canvas
Slate 50 primary text · Brand Secondary 500 accent · Brand Secondary 300 emphasis · Brand Accent 400 CTA
Light · product-surface only · opt-in
Slate 50 canvas
Brand Primary 900 primary text · Brand Secondary 600 accent · Brand Secondary 700 emphasis · Brand Accent 400 CTA

Semantic tokens

The brand kit publishes raw OKLCH ramps in §02. Semantic tokens sit on top and name colours by their UI role, so component CSS doesn't reach into raw --brand-primary-800 directly, and so a single component file can serve both modes by aliasing the same role to different stops. See the canonical CSS-variable definitions in brand-kit.md §7.

Token Role Dark Light
Surfaces
--canvasPage backgroundBrand Primary 900Slate 50
--surface-deepMost-emphatic surface (table headers, menu)Brand Primary 950Slate 100
--card-bgRaised card surface80/20 P800 + S800 @ 85%94/6 white + S100 @ 96%
--hairlineSubtle dividersSlate 50 / 15% αBrand Primary 900 / 12% α
Accents
--accentStructural decorationBrand Secondary 500Brand Secondary 600
--accent-emphasisInteractive states (hover, focus, link)Brand Secondary 300Brand Secondary 700
--ctaSingular call-to-actionBrand Accent 400 — unchanged across modes
Text
--text-primaryPrimary body textSlate 50Brand Primary 900
--text-secondarySecondary copy, captions, navSlate 200Slate 700
--text-mutedMetadata, timestampsSlate 400Slate 500
--whiteText on coloured fillsSlate 50 — unchanged across modes
Status (aliases §02c ramps)
--status-infoNeutral informationInfo 400Info 500
--status-successHealthy, done, positiveSuccess 400Success 600
--status-warningCaution, needs attentionWarning 300Warning 400
--status-dangerCritical, blocked (text + borders)Danger 400Danger 600
--status-danger-fillSolid danger fillsBrand Accent 600 — unchanged across modes
Logo
--logo-colorMark / wordmark fill (currentColor source path only)Slate 50Brand Primary 900

Naming note — --accent-emphasis means the more emphatic of the two accent tokens, not the literally brighter one. On dark, it's lighter (Brand Secondary 300); on light, it's darker (Brand Secondary 700). The role is preserved; the lightness inverts.

Danger note — on dark surfaces, Brand Accent 600 (the brand-side danger voice) reads as muddy when used as text. --status-danger therefore points at Danger 400 on dark and Danger 600 on light for text and border roles. Solid danger fills stay at Brand Accent 600 in both modes — the colour reads as "stop" on either canvas, and --white provides the on-fill text.

Light-mode body atmosphere

The optional two-radial-glow atmosphere from §4 has a light-mode counterpart. Both glows use Brand Secondary 300 at very low alpha — same family as the dark mode's Brand Secondary 600 glow, lifted to the lighter stop because we're glowing on white rather than on navy. No Gold corner — Gold's role is warm contrast on specific surfaces, pulling it into an atmospheric layer would dilute that specificity.

body[data-mode="light"] {
  background:
    radial-gradient(circle at 22% 18%, oklch(0.730 0.107 163 / 0.08) 0%, transparent 38%),
    radial-gradient(circle at 82% 78%, oklch(0.730 0.107 163 / 0.06) 0%, transparent 40%),
    linear-gradient(160deg, var(--canvas) 0%,
                    color-mix(in srgb, var(--surface-deep) 70%, var(--canvas)) 100%);
}
RULE
The mode is held on <body data-mode="dark|light">. The product persists per-user preference. Default is dark. Light mode never auto-mirrors prefers-color-scheme — switching is always an explicit user choice inside the product, so a user's OS theme flip never surprises them with a brand switch.
Copied