Skip to main content

Color System

The VLN color system is designed with accessibility, consistency, and visual hierarchy in mind. All colors meet WCAG AAA contrast requirements.

Base Colors

Backgrounds

Our dark-mode-first approach uses carefully selected background colors for depth and hierarchy.

ColorHexUsageTailwind Class
VLN Background#0a0e0fPrimary dark backgroundbg-vln-bg
VLN Background Light#151a1cSecondary surfacesbg-vln-bg-light
VLN Background Lighter#1f2527Elevated cards, modalsbg-vln-bg-lighter
/* CSS Variables */
--vln-bg: #0a0e0f;
--vln-bg-light: #151a1c;
--vln-bg-lighter: #1f2527;

Accent Colors

Sage Green (Primary)

Our primary brand color. Use for primary actions, links, and brand moments.

VariantHexUsageTailwind Class
Sage#86d993Primary actions, success statesbg-vln-sage, text-vln-sage
Sage Light#a8e9b4Hover states, highlightsbg-vln-sage-light
Sage Dark#5fb76fActive states, pressedbg-vln-sage-dark

Accessibility:

  • Sage (#86d993) on Dark Background (#0a0e0f): 8.2:1 ✅ WCAG AAA
  • Sage Dark (#5fb76f) on Dark Background: 6.1:1 ✅ WCAG AAA

Sky Blue (Secondary)

Used for informational elements, secondary actions, and data visualization.

VariantHexUsageTailwind Class
Sky#7dd3fcInfo states, secondary CTAsbg-vln-sky, text-vln-sky
Sky Light#bae6fdHover statesbg-vln-sky-light
Sky Dark#0ea5e9Active statesbg-vln-sky-dark

Accessibility:

  • Sky (#7dd3fc) on Dark Background (#0a0e0f): 9.5:1 ✅ WCAG AAA

Amber (Tertiary)

Warning states, highlights, and premium features.

VariantHexUsageTailwind Class
Amber#fbbf24Warning states, highlightsbg-vln-amber, text-vln-amber
Amber Light#fcd34dHover statesbg-vln-amber-light
Amber Dark#f59e0bActive statesbg-vln-amber-dark

Accessibility:

  • Amber (#fbbf24) on Dark Background (#0a0e0f): 11.2:1 ✅ WCAG AAA

Purple (Premium)

Premium features, special status, and purple accents.

VariantHexUsageTailwind Class
Purple#c084fcPremium featuresbg-vln-purple, text-vln-purple
Purple Light#d8b4feHover statesbg-vln-purple-light
Purple Dark#a855f7Active statesbg-vln-purple-dark

Accessibility:

  • Purple (#c084fc) on Dark Background (#0a0e0f): 7.8:1 ✅ WCAG AAA

Semantic Colors

Map colors to their semantic meaning for consistent usage.

SemanticColorHexUsage
SuccessSage Green#86d993Successful operations, confirmations
InfoSky Blue#7dd3fcInformational messages, tips
WarningAmber#fbbf24Warnings, cautions
ErrorRed#ef4444Errors, destructive actions
PremiumPurple#c084fcPremium features, upgrades

Usage Examples

Tailwind CSS

// Primary button with sage green
<button className="bg-vln-sage hover:bg-vln-sage-light text-vln-bg">
Get Started
</button>

// Info card with sky blue accent
<div className="bg-vln-bg-light border-l-4 border-vln-sky">
<p className="text-vln-sky">Info message here</p>
</div>

// Warning badge
<span className="bg-vln-amber text-vln-bg px-3 py-1 rounded-full">
Warning
</span>

CSS Custom Properties

/* Use in custom CSS */
.my-component {
background: var(--vln-bg-lighter);
color: var(--vln-sage);
border: 2px solid var(--vln-sage-dark);
}

.my-component:hover {
background: var(--vln-bg-light);
box-shadow: 0 0 20px rgba(134, 217, 147, 0.3);
}

React Component

import { useState } from 'react';

function StatusBadge({ status }: { status: 'success' | 'warning' | 'error' }) {
const colorMap = {
success: 'bg-vln-sage text-vln-bg',
warning: 'bg-vln-amber text-vln-bg',
error: 'bg-red-500 text-white',
};

return (
<span className={`px-3 py-1 rounded-full ${colorMap[status]}`}>
{status}
</span>
);
}

Color Combinations

High Contrast Pairs (WCAG AAA)

ForegroundBackgroundContrast RatioGrade
Sage (#86d993)Dark (#0a0e0f)8.2:1AAA ✅
Sky (#7dd3fc)Dark (#0a0e0f)9.5:1AAA ✅
Amber (#fbbf24)Dark (#0a0e0f)11.2:1AAA ✅
Purple (#c084fc)Dark (#0a0e0f)7.8:1AAA ✅
White (#ffffff)Dark (#0a0e0f)19.2:1AAA ✅

Gradient Examples

// Sage gradient
<div className="bg-gradient-to-r from-vln-sage-dark via-vln-sage to-vln-sage-light">

// Sky gradient
<div className="bg-gradient-to-br from-vln-sky-dark to-vln-purple">

// Text gradient
<h1 className="text-gradient-sage">
Beautiful Gradient Text
</h1>

Glow Effects

Use glow effects sparingly for emphasis and delight.

// Sage glow on hover
<button className="glow-lift bg-vln-bg-lighter hover:bg-vln-bg-light">
Hover me
</button>

// Blue glow
<div className="glow-lift-blue">
Important card
</div>

// Amber glow
<div className="glow-lift-amber">
Warning notification
</div>

// Purple glow
<div className="glow-lift-purple">
Premium feature
</div>

Design Tokens in Figma/Penpot

When creating designs in Penpot or other tools, use these exact hex values:

{
"vln": {
"bg": "#0a0e0f",
"bg-light": "#151a1c",
"bg-lighter": "#1f2527",
"sage": "#86d993",
"sage-light": "#a8e9b4",
"sage-dark": "#5fb76f",
"sky": "#7dd3fc",
"sky-light": "#bae6fd",
"sky-dark": "#0ea5e9",
"amber": "#fbbf24",
"amber-light": "#fcd34d",
"amber-dark": "#f59e0b",
"purple": "#c084fc",
"purple-light": "#d8b4fe",
"purple-dark": "#a855f7"
}
}

Accessibility Guidelines

  1. Always test contrast: Use WebAIM Contrast Checker
  2. Don't rely on color alone: Add icons or text labels
  3. Support color blindness: Test with color blindness simulators
  4. Maintain hierarchy: Use color weight (light/dark) to show importance
  5. Document deviations: If you must use non-standard colors, document why

Best Practices

Do:

  • Use semantic color names (bg-vln-sage not bg-green-400)
  • Maintain consistent color usage across the app
  • Test on real devices in different lighting
  • Provide dark/light mode alternatives

Don't:

  • Don't use arbitrary color values
  • Don't mix color systems (stay in VLN palette)
  • Don't forget to test accessibility
  • Don't use color as the only indicator