# Vela Intelligence — Brand Context for AI

> Paste this file into a conversation with an AI assistant (Claude, ChatGPT, etc.) when producing **Vela-branded artifacts**: presentations, pitch decks, websites, landing pages, marketing material, social posts, partner-facing documents.
>
> **Scope: brand identity only** — logo, color, typography, the rules that govern them, the Vela Labs sub-brand. This is not the product design system; that's a separate document for engineers building the console.
>
> **Companion files** live in the same `Vela Intelligence Brand Assets` folder. Paths below are relative to that folder.

---

## Instructions for AI

Treat this file as the source of truth and obey these seven rules. Each one is expanded in the section noted.

1. **The logo is one SVG** (§1). Use `logos/primary/logo-vela-intelligence.svg`. Never re-typeset "VELA INTELLIGENCE", never separate star from wordmark, never change the spacing between them, never recolor the two parts independently.
2. **Use exact brand color values** (§2). Every color in your output must match a swatch from the palette tables — never introduce arbitrary hues. OKLCH is canonical; HEX is provided for tools that don't accept OKLCH.
3. **One Ember per view** (§4.2). Ember 400 is the singular CTA. If multiple oranges compete, pick the one most important and reduce the others.
4. **Indigo + Ember never blend** (§4.3). They are contrast colors. Allowed gradient pairings are listed in §4.3.
5. **The brand habitat is Indigo 900 navy** (§4.1). When in doubt, design on a dark canvas with off-white Slate 50 type.
6. **The emerald → ember diagonal gradient is Vela Labs only** (§5). Never use it on main-brand work.
7. **Manrope for headings, Inter for body, JetBrains Mono for code & eyebrows** (§3). No other typefaces.

---

## Brand essence

Vela Intelligence builds explainable intelligence for high-stakes decisions in regulated financial services. The visual identity is **clean, professional, data-dense — but never sterile**. Dark navy atmosphere, off-white type, restrained color: trust, gravitas, modern. The brand earns confidence by what it withholds as much as by what it shows.

Color carries tone:

- **Indigo navy** — the institutional canvas: restraint, seriousness, depth
- **Emerald** — the brand's spoken voice: trust, "yes", forward motion
- **Ember** — the singular call to action: the one thing the eye must find

---

## 1. The Logo

### 1.1 Files

| Use case | File |
|---|---|
| **Primary** — use whenever the wordmark fits horizontally | `logos/primary/logo-vela-intelligence.svg` (+ `.png`/`.pdf` × black/white) |
| Stacked — narrow columns, square contexts | `logos/stacked/logo-vela.svg` (+ raster variants) |
| Wordmark only — formal/legal contexts | `logos/wordmark/vela-intelligence-wordmark.svg` (+ raster variants) |
| Short wordmark "VELA" — rare | `logos/wordmark/vela-intelligence-vela-wordmark.svg` |
| Icon-only star — favicons, avatars, < 32 px | `logos/mark/logo.svg` (+ raster variants) |
| Favicon set | `web/favicon.svg`, `favicon-32x32.png`, `favicon-16x16.png`, `apple-touch-icon.png` |
| Web-optimised lockups | `web/logo-vela-intelligence.webp`, `web/logo-white.webp` |

All SVG lockups use `fill="currentColor"` and adapt to any color context via CSS.

### 1.2 Logo color on backgrounds

| Background | Logo color |
|---|---|
| Light canvas (Slate 50) | Black |
| Dark canvas (Indigo 900) | White |
| Indigo 600 brand fill | White |
| Ember fill (sparingly — campaign highlights) | White |

### 1.3 Clear space

Around all lockups, preserve clear space **equal to the height of one star-point** (≈ 25% of the lockup's height). No text, graphics, or page edges within that margin.

### 1.4 Logo guardrails (additional to Instructions #1)

- Don't rotate, skew, outline, or stretch the lockup.
- Don't add drop shadows beyond a single soft brand-supplied hero treatment.
- Don't use the star alone whenever the lockup would fit.
- Use the inline SVG (`<use href="#vi-lockup"/>` from a `<symbol>` or direct `<svg>` embed) when you need the logo to inherit `currentColor` across themes.

---

## 2. Color palettes

The brand has **three primary palettes** (Indigo, Emerald, Ember) and **two tertiary palettes** (Slate, Gold). Each is an 11-step ramp from 50 (lightest) to 950 (deepest). All values are canonical in `oklch()`; HEX is provided for tools that don't accept OKLCH.

**Canonical brand shades are highlighted in bold.** These are the ones in active use.

> **Why Ember 400 and not Ember 600 for the CTA?** The brand kit treats 600 as the default canonical shade for most families, but the CTA needs to be bright. Ember 600 reads as muddy at typical button size. Ember 600 is reserved for the danger / urgent semantic, where its darker tone reads as "stop".

### Indigo · hue 260 · peak chroma 0.160

| Shade | OKLCH | HEX | Role |
|---|---|---|---|
| 50  | `oklch(0.980 0.072 260)` | `#E6E1FF` |  |
| 100 | `oklch(0.930 0.097 260)` | `#CDC2FF` |  |
| 200 | `oklch(0.830 0.122 260)` | `#9D8FFF` |  |
| 300 | `oklch(0.730 0.143 260)` | `#6E63ED` |  |
| 400 | `oklch(0.630 0.156 260)` | `#4045CB` |  |
| 500 | `oklch(0.550 0.160 260)` | `#1F31B5` |  |
| **600** | `oklch(0.450 0.152 260)` | `#1A50A8` | Primary action button, focus ring |
| 700 | `oklch(0.370 0.135 260)` | `#0B3A85` |  |
| 800 | `oklch(0.300 0.112 260)` | `#052965` | Cards on canvas |
| **900** | `oklch(0.260 0.087 260)` | `#07214D` | Canvas / atmosphere ("Navy") |
| **950** | `oklch(0.220 0.063 260)` | `#081937` | Focal slides, deepest surface |

### Emerald · hue 163 · peak chroma 0.120

| Shade | OKLCH | HEX | Role |
|---|---|---|---|
| 50  | `oklch(0.980 0.054 163)` | `#DAFCE9` |  |
| 100 | `oklch(0.930 0.073 163)` | `#B9F0D2` |  |
| 200 | `oklch(0.830 0.091 163)` | `#88D2A8` |  |
| 300 | `oklch(0.730 0.107 163)` | `#5DB385` |  |
| **400** | `oklch(0.630 0.117 163)` | `#3A9970` | Labs gradient start, supporting accent |
| 500 | `oklch(0.550 0.120 163)` | `#1F8158` |  |
| **600** | `oklch(0.450 0.114 163)` | `#006842` | Brand voice — trust, "yes", borders, hover glow |
| 700 | `oklch(0.370 0.101 163)` | `#005233` | Emerald-depth gradient end |
| 800 | `oklch(0.300 0.084 163)` | `#003F25` |  |
| 900 | `oklch(0.260 0.065 163)` | `#0E331E` |  |
| 950 | `oklch(0.220 0.047 163)` | `#152716` |  |

### Ember · hue 50 · peak chroma 0.185

| Shade | OKLCH | HEX | Role |
|---|---|---|---|
| 50  | `oklch(0.980 0.083 50)` | `#FFEBC6` |  |
| 100 | `oklch(0.930 0.112 50)` | `#FFD79B` |  |
| 200 | `oklch(0.830 0.141 50)` | `#FFAF60` |  |
| 300 | `oklch(0.730 0.165 50)` | `#FF8A2D` |  |
| **400** | `oklch(0.630 0.181 50)` | `#DB5F00` | **CTA — the singular orange** |
| 500 | `oklch(0.550 0.185 50)` | `#BB4D00` |  |
| **600** | `oklch(0.450 0.176 50)` | `#9F4111` | Danger / urgent (distinct from CTA) |
| 700 | `oklch(0.370 0.156 50)` | `#7E3008` |  |
| 800 | `oklch(0.300 0.130 50)` | `#612400` |  |
| 900 | `oklch(0.260 0.100 50)` | `#4E1F0E` |  |
| 950 | `oklch(0.220 0.073 50)` | `#3D1809` |  |

### Slate · hue 248 · peak chroma 0.040 · tertiary — cool gray for text

| Shade | OKLCH | HEX | Role |
|---|---|---|---|
| **50**  | `oklch(0.980 0.011 248)` | `#F3F9FF` | Primary body text on dark canvas |
| 100 | `oklch(0.930 0.014 248)` | `#E1E9F1` |  |
| **200** | `oklch(0.830 0.020 248)` | `#BEC9D4` | Secondary text |
| 300 | `oklch(0.730 0.029 248)` | `#9BABBC` |  |
| **400** | `oklch(0.630 0.038 248)` | `#778CA0` | Tertiary text — captions, metadata, disabled |
| 500 | `oklch(0.550 0.040 248)` | `#5C7186` |  |
| 600 | `oklch(0.450 0.038 248)` | `#42566A` |  |
| 700 | `oklch(0.370 0.033 248)` | `#324151` |  |
| 800 | `oklch(0.300 0.026 248)` | `#26323F` | Subtle borders on dark |
| 900 | `oklch(0.260 0.018 248)` | `#1D252C` |  |
| 950 | `oklch(0.220 0.012 248)` | `#171C22` |  |

### Gold · hue 90 · peak chroma 0.100 · tertiary — warm contrast ("Sand")

| Shade | OKLCH | HEX | Role |
|---|---|---|---|
| 50  | `oklch(0.980 0.045 90)` | `#FFF1C8` |  |
| 100 | `oklch(0.930 0.060 90)` | `#F0E6CC` | Light warm slide background |
| **200** | `oklch(0.830 0.075 90)` | `#DAC68F` | Sand surface, "warmth" |
| **300** | `oklch(0.730 0.089 90)` | `#B6A364` | "Social" ESG pillar marker |
| 400 | `oklch(0.630 0.097 90)` | `#917F44` |  |
| 500 | `oklch(0.550 0.100 90)` | `#766533` |  |
| 600 | `oklch(0.450 0.094 90)` | `#574B1F` |  |
| 700 | `oklch(0.370 0.084 90)` | `#42390F` |  |
| 800 | `oklch(0.300 0.070 90)` | `#332C05` |  |
| 900 | `oklch(0.260 0.054 90)` | `#28230C` |  |
| 950 | `oklch(0.220 0.039 90)` | `#1F1C0E` |  |

Gold supports a moment of warmth and steps back. It is never a brand voice, CTA, or primary accent.

---


## 2b. Chart accent palettes (extras for data viz)

Five additional families, full 11-step ramps, designed to extend the brand triad into multi-series charts and groupings. They share the same Gaussian chroma curve as the brand palettes. Use them only when you need more colours than the brand triad gives — see §4.7 for picking order.

### Lime · hue 115 · peak chroma 0.155

| Shade | OKLCH | HEX |
|---|---|---|
| 50  | `oklch(0.980 0.070 115)` | `#F6FFC9` |
| 100 | `oklch(0.930 0.095 115)` | `#E5F0A6` |
| 200 | `oklch(0.830 0.118 115)` | `#C5D174` |
| 300 | `oklch(0.730 0.138 115)` | `#A5B13F` |
| **400** | `oklch(0.630 0.150 115)` | `#879200` |
| 500 | `oklch(0.550 0.155 115)` | `#707A00` |
| 600 | `oklch(0.450 0.147 115)` | `#545C00` |
| 700 | `oklch(0.370 0.130 115)` | `#3F4600` |
| 800 | `oklch(0.300 0.108 115)` | `#2D3200` |
| 900 | `oklch(0.260 0.084 115)` | `#242800` |
| 950 | `oklch(0.220 0.060 115)` | `#1A1D00` |

### Pool · hue 215 · peak chroma 0.145

| Shade | OKLCH | HEX |
|---|---|---|
| 50  | `oklch(0.980 0.065 215)` | `#C7FFFF` |
| 100 | `oklch(0.930 0.088 215)` | `#A1F8FF` |
| 200 | `oklch(0.830 0.110 215)` | `#66DAF4` |
| 300 | `oklch(0.730 0.129 215)` | `#00BBDA` |
| **400** | `oklch(0.630 0.141 215)` | `#009DBE` |
| 500 | `oklch(0.550 0.145 215)` | `#0084A6` |
| 600 | `oklch(0.450 0.138 215)` | `#006584` |
| 700 | `oklch(0.370 0.122 215)` | `#004D67` |
| 800 | `oklch(0.300 0.101 215)` | `#00384D` |
| 900 | `oklch(0.260 0.078 215)` | `#002C3B` |
| 950 | `oklch(0.220 0.057 215)` | `#00202B` |

### Plum · hue 340 · peak chroma 0.170

| Shade | OKLCH | HEX |
|---|---|---|
| 50  | `oklch(0.980 0.077 340)` | `#FFE5FF` |
| 100 | `oklch(0.930 0.104 340)` | `#FFCDFE` |
| 200 | `oklch(0.830 0.129 340)` | `#FFA5E2` |
| 300 | `oklch(0.730 0.151 340)` | `#E57FC5` |
| **400** | `oklch(0.630 0.165 340)` | `#C85BA8` |
| 500 | `oklch(0.550 0.170 340)` | `#AE4090` |
| 600 | `oklch(0.450 0.162 340)` | `#8B2371` |
| 700 | `oklch(0.370 0.143 340)` | `#6C1257` |
| 800 | `oklch(0.300 0.119 340)` | `#510840` |
| 900 | `oklch(0.260 0.092 340)` | `#3F0B32` |
| 950 | `oklch(0.220 0.066 340)` | `#2D0B24` |

### Amber · hue 75 · peak chroma 0.165

| Shade | OKLCH | HEX |
|---|---|---|
| 50  | `oklch(0.980 0.074 75)` | `#FFF2C1` |
| 100 | `oklch(0.930 0.101 75)` | `#FFDF9B` |
| 200 | `oklch(0.830 0.125 75)` | `#F7BB64` |
| 300 | `oklch(0.730 0.147 75)` | `#DD981D` |
| **400** | `oklch(0.630 0.160 75)` | `#C07700` |
| 500 | `oklch(0.550 0.165 75)` | `#A75E00` |
| 600 | `oklch(0.450 0.157 75)` | `#854100` |
| 700 | `oklch(0.370 0.139 75)` | `#682E00` |
| 800 | `oklch(0.300 0.115 75)` | `#4D2000` |
| 900 | `oklch(0.260 0.089 75)` | `#3C1A00` |
| 950 | `oklch(0.220 0.064 75)` | `#2B1500` |

### Teal · hue 195 · peak chroma 0.125

| Shade | OKLCH | HEX |
|---|---|---|
| 50  | `oklch(0.980 0.056 195)` | `#CDFFFF` |
| 100 | `oklch(0.930 0.076 195)` | `#ABF8F8` |
| 200 | `oklch(0.830 0.095 195)` | `#76DBDA` |
| 300 | `oklch(0.730 0.111 195)` | `#38BDBD` |
| **400** | `oklch(0.630 0.121 195)` | `#009FA0` |
| 500 | `oklch(0.550 0.125 195)` | `#008788` |
| 600 | `oklch(0.450 0.119 195)` | `#00686A` |
| 700 | `oklch(0.370 0.105 195)` | `#004F51` |
| 800 | `oklch(0.300 0.087 195)` | `#003A3B` |
| 900 | `oklch(0.260 0.068 195)` | `#002D2E` |
| 950 | `oklch(0.220 0.049 195)` | `#002122` |

---

## 3. Typography

| Family | Role | Weights | Source |
|---|---|---|---|
| **Manrope** | Display, headings, metric values, prominent labels | 600 SemiBold, 700 Bold, 800 ExtraBold | `fonts/Manrope.zip` · Google Fonts |
| **Inter** | Body text, form inputs, captions, long-form | 300 Light, 400 Regular, 500 Medium, 600 SemiBold | `fonts/Inter.zip` · Google Fonts |
| **JetBrains Mono** | Code, eyebrow labels (small uppercase), token names, hex / OKLCH values, metadata, timestamps | 400 Regular, 500 Medium, 600 SemiBold | Google Fonts |

Google Fonts embed (load all three families at once):

```html
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600&family=Manrope:wght@600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
```

### Type scale

| Class | Family | Size | Weight | Line-height | Letter-spacing |
|---|---|---|---|---|---|
| Heading 1 | Manrope | 2.25rem | 700 | 1.2 | -0.01em |
| Heading 2 | Manrope | 1.5rem  | 700 | 1.2 | -0.01em |
| Heading 3 | Manrope | 1.25rem | 600 | 1.2 | 0 |
| Heading 4 | Manrope | 1rem    | 600 | 1.2 | 0 |
| Body Large  | Inter | 1rem      | 400 | 1.5 | 0 |
| Body Medium | Inter | 0.875rem  | 400 | 1.5 | 0 |
| Body Small  | Inter | 0.8125rem | 400 | 1.5 | 0 |
| Caption     | Inter | 0.75rem   | 400 | 1.4 | 0.06em · uppercase |
| Overline    | Inter | 0.75rem   | 600 | 1.5 | 0.08em · uppercase |
| Eyebrow (mono) | JetBrains Mono | 0.75rem | 600 | 1.5 | 0.08em · uppercase |
| Code / token | JetBrains Mono | 0.8125rem | 400 | 1.5 | 0 |

### Hero / display

Hero headlines use Manrope 800 ExtraBold, `clamp(3rem, 8vw, 6.5rem)`, line-height 0.9, letter-spacing -0.02em. Keep them short (≤ 6 words). Pair with an Inter 400 subhead in Slate 200 at ≤ 60 characters per line.

---

## 4. Color in practice

### 4.1 The atmosphere

The brand's native habitat is **Indigo 900 navy**, not white. Marketing pages, hero sections, slide title cards, and social imagery default to a dark navy canvas with Slate 50 type.

```css
body {
  background: oklch(0.260 0.087 260);   /* Indigo 900 */
  color:      oklch(0.980 0.011 248);   /* Slate 50 */
  font-family: 'Inter', 'Segoe UI', sans-serif;
}
```

Add atmospheric depth with two radial emerald glows in opposite corners:

```css
.hero::before {
  content: ''; position: absolute; inset: 0; z-index: -1; opacity: 0.5;
  background:
    radial-gradient(circle at 25% 25%, oklch(0.450 0.114 163 / 0.18) 0%, transparent 50%),
    radial-gradient(circle at 75% 75%, oklch(0.450 0.114 163 / 0.15) 0%, transparent 50%);
}
```

### 4.2 Color roles

**Rule:** *one Ember per view, plenty of Emerald, all on Indigo navy*.

| Color | Role |
|---|---|
| Indigo 900 | Canvas / atmosphere |
| Indigo 950 | Focal — deepest slides, most-emphatic moments |
| Indigo 800 | Raised surfaces over the canvas |
| Indigo 600 | Primary action, focal accents |
| Emerald 600 | Brand voice — "yes" signals, trust accents, hover glow |
| Emerald 400 | Supporting accent, Labs gradient start |
| Ember 400 | The singular call-to-action |
| Ember 600 | Danger / urgent — semantically distinct from the CTA |
| Slate 50 | Primary text on dark |
| Slate 200 | Secondary text |
| Slate 400 | Tertiary text — captions, metadata, timestamps |
| Gold 200 | Warm contrast surface (rare formal slides) |

### 4.3 Gradient pairings — what can blend with what

**Implementation rule (first, before recipes).** Every gradient — atmosphere, slide background, depth blend, glow — is a **CSS function** (`linear-gradient()`, `radial-gradient()`, `conic-gradient()`). Never a raster image (`background-image: url('gradient.png')`), never a baked-in SVG `<linearGradient>` used as a page backdrop.

Image-based gradients break visibly the moment a user scrolls or resizes:

- **Banding / posterization** — a JPEG / PNG quantises each channel to 256 steps; CSS gradients render at GPU precision.
- **Hard seams where the image ends** — a 1920 × 200 gradient strip terminates with a sharp line on ultra-wide monitors, on mobile, and when other content scrolls past it. CSS gradients fill the element forever.
- **No theme adaptation, heavy bandwidth, no high-DPI awareness.** A CSS gradient is a 60-character string that renders perfectly on a 5K retina display.

The single permitted exception is **inside SVG assets** — the labs Emerald → Ember gradient lives as an `<linearGradient>` *inside* `labs/zephlyn-icon.svg` and `labs/vaelth-icon.svg`. That's part of the vector icon, not a backdrop, and it scales cleanly.

**Pairing recipes.**

Gradients pair exactly **two** colors. Four recipes are allowed; one combination is explicitly forbidden.

| Recipe | Direction | Colors | Use |
|---|---|---|---|
| Emerald → Ember | 135° diagonal | `oklch(0.630 0.117 163)` → `oklch(0.630 0.181 50)` | Vela **Labs** sub-brand icons only |
| Indigo 900 → 800 → 700 | 160° off-vertical | same-hue depth | Slide backgrounds, hero atmospherics |
| Emerald 600 → 700 | 160° off-vertical | same-hue depth | "Pass" states, positive progress |
| Color → transparent | 90° horizontal | any brand color → transparent | Dividers, atmospheric fade strips |
| ❌ Indigo + Ember | — | — | Never blend. They are contrast colors. Ember CTA *on* Indigo canvas is the brand; blending them flattens the relationship. |

### 4.4 Glow technique — colored light as box-shadow

The brand expresses "colored light" through translucent `box-shadow`, not gradient fills. Glow hue always matches the element's own hue family.

```css
/* Ember accent glow — for the singular action element */
box-shadow: 0 0 20px oklch(0.630 0.181 50 / 0.30);

/* Emerald surface glow — for raised surfaces lifting on hover */
box-shadow: 0 0 30px oklch(0.450 0.114 163 / 0.20);

/* Small-dot glow — pips, indicators */
box-shadow: 0 0 8px oklch(0.706 0.118 161 / 0.60);   /* match this hue to the dot's own */
```

**Rule of thumb:** alpha **0.15–0.30** with blur **20–30 px** for surfaces. Alpha **0.60** with blur **8 px** for small dots.

### 4.5 Translucency — brand color at alpha

A brand colour at reduced alpha is the third "gradient" technique.

| Alpha | Used for |
|---|---|
| 0.90 | Translucent navy surfaces (paired with backdrop blur) |
| 0.50 | Scrims, modal backdrops |
| 0.35 | Brand-tinted borders |
| 0.15 | Atmospheric overlays, hero radial-gradient stops |

Example — Indigo 900 at 90% alpha with backdrop blur creates the brand's signature glass effect:

```css
background: oklch(0.260 0.087 260 / 0.90);
backdrop-filter: blur(10px);
```

### 4.6 Gradient angles

| Angle | Use |
|---|---|
| 90° (horizontal) | Section dividers, progress meters |
| 135° (diagonal) | Warm / sand surfaces; labs sub-brand icons |
| 160° (off-vertical) | Slide backgrounds — cinematic anchor |
| 45° (diagonal up) | Small icons only |

Any other angle is off-brand for backgrounds.

### 4.7 Accents for data — charts, graphs, multi-series

When you need more than the brand triad — bar charts, line series, donut segments, anything where data must split into distinguishable groups — extend the palette from the **token families** declared in the original brand tokens (`gray, ash, mushroom, stone, slate, steel, rose, coral, red, wine, crimson, clay, ember, orange, amber, gold, yellow, lemon, lime, sage, green, emerald, jade, mint, teal, sea, cyan, pool, ice, azure, fjord, sky, blue, cobalt, indigo, iris, dusk, violet, lilac, orchid, plum, grape, fuchsia, pink, blush`).

**Method:**

1. **Brand-first.** Always lead with the brand triad — Indigo, Emerald, Ember — before reaching for any accent.
2. **Lock the lightness.** Every series in a chart sits at the same lightness so no colour dominates visually. The recommended chart lightness is **L = 0.63** (the 400-shade depth) — vivid, mid, perceptually equal.
3. **Step the hue.** Pick additional families ~30–60° apart on the colour wheel from the brand hues (260, 163, 50). This maximises distinguishability.
4. **Stay in the family list.** Never introduce a hue outside the yaml token families. That's how the brand stays coherent across decks, charts, and dashboards.
5. **Don't use Gold or Slate as data series.** They're surfaces and text, not signal accents.
6. **The Labs gradient (Emerald → Ember) is never used in a chart** — it's reserved for the Vela Labs sub-brand.

**Recommended chart palette** (all at L = 0.63):

| Shade | OKLCH | HEX | Hue | Role |
|---|---|---|---|---|
| **Indigo 400** | `oklch(0.63 0.156 260)` | `#4E87E6` | 260 | Brand · primary series |
| **Emerald 400** | `oklch(0.63 0.117 163)` | `#339F75` | 163 | Brand · secondary series |
| **Ember 400** | `oklch(0.63 0.181 50)` | `#DB5F00` | 50 | Brand · accent series |
| Lime 400 | `oklch(0.63 0.150 115)` | `#879200` | 115 | Extra · yellow-green |
| Pool 400 | `oklch(0.63 0.140 215)` | `#009DBD` | 215 | Extra · sky-blue |
| Plum 400 | `oklch(0.63 0.165 340)` | `#C85BA8` | 340 | Extra · pink-purple |
| Amber 400 | `oklch(0.63 0.160 75)` | `#C07700` | 75 | Extra · warm yellow |
| Teal 400 | `oklch(0.63 0.120 195)` | `#009FA0` | 195 | Extra · blue-green |

**Picking order:**

| Series count | Use |
|---|---|
| 1–3 categorical | Brand triad at chart lightness — Indigo 400, Emerald 400, Ember 400 |
| 4–6 categorical | Brand triad + **Lime 400, Pool 400, Plum 400** (equidistant fills of the gaps between brand hues) |
| 7–8 categorical | Add **Amber** and **Teal** |
| > 8 categorical | Reconsider — too many series usually hurts comprehension; aggregate or facet |
| Sequential (low → high) | One brand or tertiary ramp end-to-end: Emerald 100 → 800 for growth, Indigo 100 → 800 for concentration, Slate 100 → 800 for neutral |
| Diverging (neg ← 0 → pos) | Brand contrast through a neutral: **Ember 400 ← Slate 200 → Emerald 400** |
| ESG pillars | E = Emerald 400, S = Gold 300, G = Slate 400 (these are already codified) |

**CSS handle:**

```css
:root {
  --chart-1: oklch(0.63 0.156 260);   /* Indigo  · brand */
  --chart-2: oklch(0.63 0.117 163);   /* Emerald · brand */
  --chart-3: oklch(0.73 0.165  50);   /* Ember   · brand */
  --chart-4: oklch(0.63 0.150 115);   /* Lime    · extra */
  --chart-5: oklch(0.63 0.140 215);   /* Pool    · extra */
  --chart-6: oklch(0.63 0.165 340);   /* Plum    · extra */
  --chart-7: oklch(0.73 0.150  75);   /* Amber   · extra */
  --chart-8: oklch(0.63 0.120 195);   /* Teal    · extra */
}
```

---

## 5. Iconography

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. The duotone weight gives the UI its visual texture.
- **Solid** (`fa-solid`) — when the icon is **informational**: bullets, button glyphs, chevrons, arrows, status pips, anything functional or directive.

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.

```html
<!-- Embed (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 -->
```

Icons inherit `currentColor` — colour them by setting `color` on the parent. The signature treatment across Vela surfaces is **a 42 × 42 Emerald 600 tile with a Slate 50 icon inside at 18 px** (`1.125rem`). Don't introduce a third hue.

---

## 6. Vela Labs — sub-brand

Vela Labs is the distinct visual language for experimental work and internal tools under the Vela umbrella. Labs **borrows the navy atmosphere** from the main brand but speaks with a brighter, more playful voice on top of it.

### Files

| Asset | File |
|---|---|
| Crystal mark | `labs/labs-crystal.svg` |
| Zephlyn icon | `labs/zephlyn-icon.svg` |
| Vaelth icon | `labs/vaelth-icon.svg` |

### The crystal mark

Solid Emerald 600 (`oklch(0.450 0.114 163)`) at three opacities — 1.0, 0.6, 0.4 — for three facets. Use this where Labs is named or branded. **It replaces the Vela Intelligence lockup** in labs contexts; the two marks never appear together.

### Product icons

Each Labs product gets its own glyph drawn in stroke, filled with the **Emerald → Ember diagonal gradient**:

```xml
<linearGradient id="labs-grad" x1="8" y1="4" x2="36" y2="40" gradientUnits="userSpaceOnUse">
  <stop offset="0" stop-color="#3A9970"/>    <!-- Emerald 400 -->
  <stop offset="1" stop-color="#DB5F00"/>    <!-- Ember 400 -->
</linearGradient>
```

Same gradient, different shape. This is the only sanctioned use of the two-hue blend. Per Instructions #6, it never appears on main-brand surfaces.

---

## 7. Palette as CSS variables

If you're producing HTML/CSS, drop these custom properties into your `<style>` block as the colour reference. They're the raw palette — no semantic component aliases, no pre-built component classes. Apply them however the artifact needs.

```css
:root {
  /* Indigo */
  --indigo-50:  oklch(0.980 0.072 260); --indigo-100: oklch(0.930 0.097 260);
  --indigo-200: oklch(0.830 0.122 260); --indigo-300: oklch(0.730 0.143 260);
  --indigo-400: oklch(0.630 0.156 260); --indigo-500: oklch(0.550 0.160 260);
  --indigo-600: oklch(0.450 0.152 260); --indigo-700: oklch(0.370 0.135 260);
  --indigo-800: oklch(0.300 0.112 260); --indigo-900: oklch(0.260 0.087 260);
  --indigo-950: oklch(0.220 0.063 260);

  /* Emerald */
  --emerald-50:  oklch(0.980 0.054 163); --emerald-100: oklch(0.930 0.073 163);
  --emerald-200: oklch(0.830 0.091 163); --emerald-300: oklch(0.730 0.107 163);
  --emerald-400: oklch(0.630 0.117 163); --emerald-500: oklch(0.550 0.120 163);
  --emerald-600: oklch(0.450 0.114 163); --emerald-700: oklch(0.370 0.101 163);
  --emerald-800: oklch(0.300 0.084 163); --emerald-900: oklch(0.260 0.065 163);
  --emerald-950: oklch(0.220 0.047 163);

  /* Ember */
  --ember-50:  oklch(0.980 0.083 50); --ember-100: oklch(0.930 0.112 50);
  --ember-200: oklch(0.830 0.141 50); --ember-300: oklch(0.730 0.165 50);
  --ember-400: oklch(0.630 0.181 50); --ember-500: oklch(0.550 0.185 50);
  --ember-600: oklch(0.450 0.176 50); --ember-700: oklch(0.370 0.156 50);
  --ember-800: oklch(0.300 0.130 50); --ember-900: oklch(0.260 0.100 50);
  --ember-950: oklch(0.220 0.073 50);

  /* Slate (tertiary) */
  --slate-50:  oklch(0.980 0.011 248); --slate-100: oklch(0.930 0.014 248);
  --slate-200: oklch(0.830 0.020 248); --slate-300: oklch(0.730 0.029 248);
  --slate-400: oklch(0.630 0.038 248); --slate-500: oklch(0.550 0.040 248);
  --slate-600: oklch(0.450 0.038 248); --slate-700: oklch(0.370 0.033 248);
  --slate-800: oklch(0.300 0.026 248); --slate-900: oklch(0.260 0.018 248);
  --slate-950: oklch(0.220 0.012 248);

  /* Gold (tertiary) */
  --gold-50:  oklch(0.980 0.045 90); --gold-100: oklch(0.930 0.060 90);
  --gold-200: oklch(0.830 0.075 90); --gold-300: oklch(0.730 0.089 90);
  --gold-400: oklch(0.630 0.097 90); --gold-500: oklch(0.550 0.100 90);
  --gold-600: oklch(0.450 0.094 90); --gold-700: oklch(0.370 0.084 90);
  --gold-800: oklch(0.300 0.070 90); --gold-900: oklch(0.260 0.054 90);
  --gold-950: oklch(0.220 0.039 90);

  /* Lime (chart accent) */
  --lime-50:  oklch(0.980 0.070 115); --lime-100: oklch(0.930 0.095 115);
  --lime-200: oklch(0.830 0.118 115); --lime-300: oklch(0.730 0.138 115);
  --lime-400: oklch(0.630 0.150 115); --lime-500: oklch(0.550 0.155 115);
  --lime-600: oklch(0.450 0.147 115); --lime-700: oklch(0.370 0.130 115);
  --lime-800: oklch(0.300 0.108 115); --lime-900: oklch(0.260 0.084 115);
  --lime-950: oklch(0.220 0.060 115);

  /* Pool (chart accent) */
  --pool-50:  oklch(0.980 0.065 215); --pool-100: oklch(0.930 0.088 215);
  --pool-200: oklch(0.830 0.110 215); --pool-300: oklch(0.730 0.129 215);
  --pool-400: oklch(0.630 0.141 215); --pool-500: oklch(0.550 0.145 215);
  --pool-600: oklch(0.450 0.138 215); --pool-700: oklch(0.370 0.122 215);
  --pool-800: oklch(0.300 0.101 215); --pool-900: oklch(0.260 0.078 215);
  --pool-950: oklch(0.220 0.057 215);

  /* Plum (chart accent) */
  --plum-50:  oklch(0.980 0.077 340); --plum-100: oklch(0.930 0.104 340);
  --plum-200: oklch(0.830 0.129 340); --plum-300: oklch(0.730 0.151 340);
  --plum-400: oklch(0.630 0.165 340); --plum-500: oklch(0.550 0.170 340);
  --plum-600: oklch(0.450 0.162 340); --plum-700: oklch(0.370 0.143 340);
  --plum-800: oklch(0.300 0.119 340); --plum-900: oklch(0.260 0.092 340);
  --plum-950: oklch(0.220 0.066 340);

  /* Amber (chart accent) */
  --amber-50:  oklch(0.980 0.074 75); --amber-100: oklch(0.930 0.101 75);
  --amber-200: oklch(0.830 0.125 75); --amber-300: oklch(0.730 0.147 75);
  --amber-400: oklch(0.630 0.160 75); --amber-500: oklch(0.550 0.165 75);
  --amber-600: oklch(0.450 0.157 75); --amber-700: oklch(0.370 0.139 75);
  --amber-800: oklch(0.300 0.115 75); --amber-900: oklch(0.260 0.089 75);
  --amber-950: oklch(0.220 0.064 75);

  /* Teal (chart accent) */
  --teal-50:  oklch(0.980 0.056 195); --teal-100: oklch(0.930 0.076 195);
  --teal-200: oklch(0.830 0.095 195); --teal-300: oklch(0.730 0.111 195);
  --teal-400: oklch(0.630 0.121 195); --teal-500: oklch(0.550 0.125 195);
  --teal-600: oklch(0.450 0.119 195); --teal-700: oklch(0.370 0.105 195);
  --teal-800: oklch(0.300 0.087 195); --teal-900: oklch(0.260 0.068 195);
  --teal-950: oklch(0.220 0.049 195);

  /* Type families */
  --font-display: 'Manrope', sans-serif;
  --font-body:    'Inter', 'Segoe UI', sans-serif;
}
```

---

*Generated 2026-05-13 · Vela Intelligence Brand Kit · canonical source for AI-produced brand artifacts.*
