Product.ai is fundamentally monochromatic. We use restraint as strategy — letting Zinc neutrals do the heavy lifting while Axi Violet delivers precision emphasis.

Intelligent Restraint

Product.ai is fundamentally monochromatic. We use Zinc as our neutral foundation — true neutral grays with zero color bias. This neutrality makes Axi Violet vibrate when we use it. The restraint is the strategy.

The Three-Layer Architecture: Layer 1 is the Zinc neutral field — the monochrome canvas that dominates every surface (90%+ of all pixels). Layer 2 is Axi Violet — the singular signal for intelligence, verification, and action (≤5% of visible screen area). Layer 3 is the UI signal palette — functional status colors (Green, Amber, Red, Blue, Pink) that are even more restricted than violet and governed by a 5-tier token system. No signal color may ever appear brighter than violet. If everything is purple, nothing is. Violet becomes powerful through scarcity.

Meet Axi Violet

Our electric signal for intelligence. High-voltage and razor-precise. Use it surgically and strategically — never overwhelming.

Axi Violet

#8B5CF6

RGB 139, 92, 246

The primary brand color. Reserved for moments of intelligence, verification, and action. It should feel like a precise signal, not ambient decoration.

Where to Use

Hero labels, section diamonds, live indicators, interactive states, key CTAs, status confirmations, AI-powered features

How Much

Artful and intentional. Should feel like strategic emphasis, not decoration. When violet appears, it should mean something.

Violet Token Tiers

#8B5CF6
Vivid
violet-500 · peak chroma

Primary brand color — hero labels, CTAs, interactive states, AI-verified badges.

#7441DA
Base
violet-700 · secondary

Borders, secondary indicators, diamond motif outlines, focus rings at reduced intensity.

#5A17B7
Muted
violet-800 · 0.4000 0.1650 288

Illustration fills, chart areas, de-emphasized labels, disabled states — readable but restrained.

#2A016E
Dim
violet-900 · 0.2700 0.1200 285

Container backgrounds, section tints, visual hierarchy separators — not for text.

#130134
Surface
violet-950 · near-black

Background fills for violet containers — just enough hue to imply violet presence without declaring it.

Reading the tiers: Vivid is the workhorse — the brand color at full chroma, used for text, labels, and feature callouts on dark surfaces. Base steps down for borders and secondary indicators. Muted handles illustration fills and de-emphasized states. Dim is for container backgrounds and section tints — never for text. Surface is nearly invisible — a near-black canvas that whispers violet without declaring it. Click any swatch to copy its hex value.

Source: All values pulled directly from JP's violet ramp. Vivid = violet-500 (#8B5CF6), Base = violet-700 (#7441DA), Muted = violet-800 (#5A17B7), Dim = violet-900 (#2A016E), Surface = violet-950 (#130134). No off-ramp or hand-mixed values — every tier comes directly from JP's ramps.

The Neutral Foundation

True neutral grays with zero color bias. Unlike blue-tinted grays, Zinc provides better contrast and allows Axi Violet to appear more vibrant. This is where most of your UI lives.

#FFFFFF
White
Pure white
#FDFCFC
25
Subtle tint
#FAFAFA
50
Page backgrounds
#F7F7F8
75
Hover states
#F4F4F5
100
Lightest surface
#ECECED
150
Subtle dividers
#E4E4E7
200
Light borders
#DBDBDE
250
Input borders
#D4D4D8
300
Borders
#B9B9BF
350
Disabled states
#A1A1AA
400
Placeholder text
#898992
450
Muted icons
#71717A
500
Secondary text
#61616B
550
Labels
#52525B
600
Body text (light)
#484850
650
Subtle borders
#3F3F46
700
Dark borders
#333338
750
Elevated surfaces
#27272A
800
Card surfaces
#1F1F22
850
Recessed areas
#18181B
900
Dark surfaces
#101013
925
Deep backgrounds
#09090B
950
Near black
#040405
975
Deepest shade
#000000
Black
Pure black

Adaptive Palette

We primarily use dark mode, but light mode follows the same restraint principles. Axi Violet remains consistent across both — it's our constant signal.

Card surface on dark
Axi Violet CTA
Secondary action
Dark Mode
Card surface on light
Axi Violet CTA
Secondary action
Light Mode

Dark Mode

Zinc-950, Zinc-900 backgrounds
Zinc-100, Zinc-200 text
Axi Violet for emphasis

Light Mode

Zinc-50, Zinc-100 backgrounds
Zinc-900, Black text
Axi Violet for emphasis

UI Color Palette

Product.ai's product interfaces use a strictly governed set of semantic signal colors for status, alerts, and system feedback. These colors exist within a 5-tier token system and are bound by a hard luminance ceiling — no signal color may ever appear more prominent than Axi Violet.

⚠ The Luminance Ceiling — Hard Constraint

No UI status color may be perceptually brighter than Axi Violet (#8B5CF6). If a status color appears more prominent than the brand accent, it steals the visual hierarchy. The brand color must always be the brightest chromatic element on screen. This is not a guideline — it is a hard constraint.

The 5-Tier Token System

Each functional color spectrum (Green, Amber, Red, Blue, Pink) is divided into five applied tiers — all values pulled directly from JP's ramps. Every use of a signal color must reference a specific tier — never a raw hex value.

Tier 1 — Vivid

Badge text, chip labels, data values, status indicators (300–400 ramp step). The strongest applied expression — carries the primary signal on dark surfaces.

Tier 2 — Base

Borders, secondary indicators, condition box accents (600–700 ramp step). Clearly dimmer than Vivid, still chromatic.

Tier 3 — Muted

Illustration fills, chart areas, de-emphasized data, disabled states (800 ramp step). Readable but restrained.

Tier 4 — Dim

Container backgrounds, section tints, visual separators (900 ramp step). Not for text — solid hex only, no alpha.

Tier 5 — Surface

Near-black tinted background (950 ramp step). The deepest tier — a whisper of hue for status containers.

Signal Color Spectrums

Each signal color has a documented Origin (peak-chroma ancestor, not applied directly) and five applied tiers — all values pulled directly from JP's color ramps. No hand-mixed or off-ramp values. Click any swatch to copy its hex value.

Origin
do not apply
Vivid
Base
Muted
Dim
Surface
Green
Success / Verified
#03FF88
#34d399
#28955b
#026E37
#013314
#001407
Amber
Warning / Caution
#FBBF24
#E1A417
#946502
#6B4B08
#453209
#231A07
Red
Error / Critical
#F64B4B
#f87171
#c15b56
#890112
#4A0107
#1F0102
Blue
Info / Neutral
#0394FC
#6EB6FF
#016FC0
#014980
#012849
#01101F
Pink
Deals / Promotions
#D244F0
#D244F0
#A902C6
#700184
#3F004A
#1D0022

Reading the grid: Origin is the peak-chroma ancestor — the identity source for each ramp. Never applied in design. Vivid (strongest) carries the primary signal — badge text, data values, chip labels. Base is for borders and secondary indicators. Muted (800) handles illustration fills and de-emphasized states. Dim (900) is for container backgrounds — solid hex only, no alpha. Surface (rightmost) is near-black with a whisper of hue. All values come directly from JP's ramps.

Application Pattern

Signal colors follow strict rules about where and how they may appear. Text carries the color signal; surfaces stay neutral.

Where Signal Colors Appear — UI Elements

Text: Vivid tier — badge labels, data values, chip text
Borders / indicators: Base tier — borders, line indicators, subtle accents
Fills / illustrations: Muted tier (800) — chart areas, de-emphasized fills
Containers: Dim tier (900) — solid hex, no alpha or color-mix()
Card surfaces: Always stay neutral zinc — never tinted with status color

Where Signal Colors Cannot Appear — Ever

Full card backgrounds or surface fills
Sidebar accents or navigation elements
Body paragraph text or section headers
Nav, footer, or structural UI chrome
Multiple status colors on the same element

Signal Color Examples

Applying the 5-tier system correctly — what each tier is for and what to avoid.

✓ Do

Your order shipped. Delivery confirmed.

Price drop detected. Review before it expires.

Vivid tier for status text — readable, signal-clear, within the luminance ceiling.

✕ Don't

Your order shipped. Delivery confirmed.

Price drop detected. Review before it expires.

Origin or Vivid tier in body text. At peak chroma these tones vibrate against dark backgrounds — use Base or Muted instead.

✓ Do — Tier 1 Icon-Led
Deployment successful
Pricing threshold reached
Build failed — see logs

Tier 1 icon-led: 14–16px vivid-fill icon carries the status signal; label text stays zinc-neutral. The icon does all the semantic work.

✕ Don't — Both Tiers Stacked
Deployment successful
Build failed — see logs

Never stack both tiers — colored icon + colored text doubles the signal and creates visual clutter. One signal per element: icon color or text color, never both.

✓ Do — Tier 2 Badge-Led
Operational Degraded Incident

Tier 2 badge-led: Vivid text inside a Dim-tier container (solid hex, no alpha). No icon — the container + text color is the complete signal.

✕ Don't — Badge + Icon Stack
Operational Incident

A badge is Tier 2 by definition — adding a Tier 1 icon inside stacks both tiers on one element. Use one or the other, never both.

✓ Do
System Health Operational

Dim tier (900) as container background — solid hex (#013314), not a tint. Border uses Muted (800). Status text uses Vivid.

✕ Don't
System Health Operational

Alpha tint (rgba or color-mix()) as container background. Signal containers must use the Dim tier solid hex — transparent washes produce inconsistent rendering and break the token system.

✓ Do

Muted tier (800, #026E37) for chart fills and illustration areas. The peak bar uses Vivid to flag the active data point — everything else stays at Muted.

✕ Don't

Origin or Vivid tier (#03FF88) as chart fill. At peak chroma these tones are visually overwhelming — Vivid is for text and dot indicators only, not area fills.

Usage Context — Brand vs. Product

These signal colors apply within product UI and in brand illustrations that depict UI mockups. When creating marketing materials, presentations, or brand collateral that show Product.ai interfaces, use these colors to ensure accuracy. On marketing pages, signal colors are not used by default — the only accent is Axi Violet + Zinc. Narrow exceptions require functional necessity, a real UI element being depicted, and pairing with a text label.

Contrast & Legibility

All text must meet WCAG AA minimum: 4.5:1 for body text, 3:1 for large text. These combinations have been tested.

✓ Passing Combinations

Aa
Axi Violet on Zinc-950
Aa
Axi Violet on Black
Aa
White on Zinc-950
Aa
Zinc-400 on Black

✗ Failing Combinations

Aa
Axi Violet on White
Aa
Zinc-400 on Zinc-600

Do's and Don'ts

Color should clarify, not decorate. Every color decision must map to a semantic function — if it doesn't mean something, it shouldn't be there.

✓ Do

Use Axi Violet as the singular chromatic accent — action fills, AI-verified indicators, interactive focus rings

Keep violet to ≤5% of visible screen area — it's a scalpel, not a paintbrush

Build surfaces entirely from the Zinc neutral palette — Zinc is the canvas, not the accent

Use signal colors only for functional status — badge text, severity indicators, delta values

Apply signal backgrounds as 6–8% tints via color-mix(), never solid fills

Always pair a signal color with a text label — color alone is not accessible

Reference the 5-tier token system (Vivid → Base → Muted → Dim → Surface) for every signal color use

✗ Don't

Let any status color appear brighter or more prominent than Axi Violet — the brand accent must always dominate the chromatic hierarchy

Use violet as a surface or background fill — it is reserved for signals, not canvases

Apply signal colors to card backgrounds, sidebar accents, nav/footer elements, or section headers

Stack multiple status colors on the same element or card — one signal per component

Use signal colors on marketing pages unless depicting an actual UI element with functional necessity

Use raw hex values — always reference the token system (signal-success-vivid, signal-error-base, etc.)

Introduce any color outside the defined spectrums (Green, Amber, Red, Blue, Pink, Purple, Zinc) — there are no other colors in this system

Copied!