Token Hierarchy
01
Primitives
Raw named values. The single source of truth for every color, size, and style.
--color-brand-500
#1A56DB
--space-4
16px
--radius-md
10px
→
02
Semantic
Role-based aliases. Always use these in components — never reference primitives directly.
--color-text-brand
var(--color-brand-600)
--color-bg-brand
var(--color-brand-50)
--color-border-default
var(--color-gray-200)
→
03
Components
How tokens are consumed. Changing a primitive updates everything that references it.
.nav-item.active
color: var(--color-text-brand)
.panel
border: var(--border-default)
.btn-primary
bg: var(--color-brand-500)
Why three layers? Primitives establish the palette. Semantics encode intent ("this is a brand background") so any component using it is automatically updated when the brand color changes. Components consume semantics — never primitives — so the system stays coherent under theme changes.
Colors
Brand — Primary Blue
--color-brand-50
#EEF2FF
#EEF2FF
--color-brand-100
#D0DBFF
#D0DBFF
--color-brand-200
#A3B8FF
#A3B8FF
--color-brand-300
#7C9EFF
#7C9EFF
--color-brand-400
#4B78F5
#4B78F5
--color-brand-500
#1A56DB
#1A56DB
Primary
--color-brand-600
#1343B8
#1343B8
--color-brand-700
#0E3290
#0E3290
--color-brand-800
#092370
#092370
--color-brand-900
#051550
#051550
Success
--color-success-50
#ECFDF5
#ECFDF5
--color-success-100
#A7F3D0
#A7F3D0
--color-success-500
#059669
#059669
--color-success-600
#047857
#047857
--color-success-green
#10B981
#10B981
Progress
Warning
--color-warning-50
#FFFBEB
#FFFBEB
--color-warning-100
#FDE68A
#FDE68A
--color-warning-500
#D97706
#D97706
--color-warning-600
#B45309
#B45309
Danger
--color-danger-50
#FEF2F2
#FEF2F2
--color-danger-100
#FECACA
#FECACA
--color-danger-400
#F87171
#F87171
--color-danger-500
#EF4444
#EF4444
--color-danger-600
#DC2626
#DC2626
Neutrals — Gray Scale
--color-white
#FFFFFF
#FFFFFF
--color-gray-50
#F8FAFC
#F8FAFC
--color-gray-100
#F1F5F9
#F1F5F9
--color-gray-200
#E2E8F0
#E2E8F0
--color-gray-300
#CBD5E1
#CBD5E1
--color-gray-400
#94A3B8
#94A3B8
--color-gray-500
#64748B
#64748B
--color-gray-600
#475569
#475569
--color-gray-700
#334155
#334155
--color-gray-800
#1E293B
#1E293B
--color-gray-900
#0A1929
#0A1929
Semantic Aliases
Text
--color-text-primary
→
gray-900
--color-text-secondary
→
gray-500
--color-text-muted
→
gray-400
--color-text-inverse
→
white
--color-text-brand
→
brand-600
--color-text-success
→
success-600
--color-text-warning
→
warning-600
--color-text-danger
→
danger-600
Border
--color-border-default
→
gray-200
--color-border-subtle
→
gray-100
--color-border-strong
→
gray-300
--color-border-brand
→
brand-500
--color-border-success
→
success-500
--color-border-warning
→
warning-500
--color-border-danger
→
danger-500
Background
--color-bg-page
→
gray-50
--color-bg-surface
→
white
--color-bg-subtle
→
gray-100
--color-bg-brand
→
brand-50
--color-bg-success
→
success-50
--color-bg-warning
→
warning-50
--color-bg-danger
→
danger-50
Gradients
--gradient-brand
Primary action gradient (payment card, hero elements)
--gradient-dark
Dark surface gradient (sidebar, dark overlays)
--gradient-progress
Progress bar fill gradient
Typography
Font Families
Aa
--font-heading / --font-sans / --font-mono
'Inter', system-ui, -apple-system, sans-serif
Inter is the single typeface for all roles — headings, body, labels, financial numbers, and documentation tokens.
Regular 400
The quick brown fox jumps over the lazy dog
Medium 500
The quick brown fox jumps over the lazy dog
SemiBold 600
The quick brown fox jumps over the lazy dog
Bold 700
The quick brown fox jumps over the lazy dog
Type Scale
| Token | Size | Weight | Leading | Figma Role | Preview |
|---|---|---|---|---|---|
| --text-2xs | 10px | 700 | 1.2 | label/2xs | The quick brown fox |
| --text-xs | 12px | 700 | 1.2 | label/xs | The quick brown fox |
| --text-sm | 12px | 400 | 1.6 | body/sm | The quick brown fox |
| --text-base | 14px | 400 | 1.5 | body/base | The quick brown fox |
| --text-lg | 16px | 500 | 1.5 | body/lg | The quick brown fox |
| --text-xl | 18px | 600 | 1.4 | heading/xl | The quick brown fox |
| --text-2xl | 20px | 600 | 1.4 | heading/2xl | The quick brown fox |
| --text-3xl | 24px | 600 | 1.2 | heading/3xl | The quick brown fox |
| --text-4xl | 32px | 700 | 1.2 | display/4xl | The quick brown fox |
| --text-5xl | 38px | 700 | 1.2 | display/5xl | The quick brown fox |
Font Weights
Regular Text
--weight-regular
400
Medium Text
--weight-medium
500
Semibold Text
--weight-semibold
600
Bold Text
--weight-bold
700
Line Height (Leading)
--leading-tight
1.2
Neuron gives you clarity on your student loans.
Track payments in real time.
Track payments in real time.
--leading-snug
1.4
Neuron gives you clarity on your student loans.
Track payments in real time.
Track payments in real time.
--leading-normal
1.5
Neuron gives you clarity on your student loans.
Track payments in real time.
Track payments in real time.
--leading-relaxed
1.6
Neuron gives you clarity on your student loans.
Track payments in real time.
Track payments in real time.
Letter Spacing (Tracking)
--tracking-tight
-0.5px
Neuron Portal
--tracking-normal
0
Neuron Portal
--tracking-wide
0.04em
Neuron Portal
--tracking-wider
0.07em
Nav Label
Spacing
All spacing tokens are multiples of 4px. The system uses an 8px base grid with 4px half-units. Never use spacing values that fall outside this grid.
--space-1
4px
--space-2
8px
--space-3
12px
--space-4
16px
--space-5
20px
--space-6
24px
--space-7
28px
--space-8
32px
--space-9
36px
--space-10
40px
--space-12
48px
--space-16
64px
Border Radius
--radius-xs
4px
--radius-sm
6px
--radius-md
10px
--radius-lg
14px
--radius-xl
18px
--radius-full
9999px
Shadows
--shadow-xs
0 1px 2px rgba(0,0,0,0.05)
--shadow-sm
0 2px 6px rgba(0,0,0,0.06)
--shadow-md
0 4px 12px rgba(0,0,0,0.08)
--shadow-lg
0 8px 24px rgba(0,0,0,0.12)
--shadow-xl
0 16px 40px rgba(0,0,0,0.16)
Borders
border-subtle
--border-subtle
1px solid var(--color-gray-100)
border-default
--border-default
1px solid var(--color-gray-200)
border-strong
--border-strong
1px solid var(--color-gray-300)
Gradients are documented in the Colors section above.
Layout Tokens
Fixed structural values that define the application shell. These should only be changed intentionally — they affect the global layout stack and z-index order.
| Token | Value | Description |
|---|---|---|
| --sidebar-width | 224px | Fixed sidebar navigation width |
| --topbar-height | 64px | Page-level topbar height |
| --banner-height | 40px | Alert banner height |
| --global-topbar-height | 56px | Global app header height |
| --content-gap | var(--space-4) | Gap between content cards / stat grid items (16px) |
| --grid-unit | 8px | Base grid unit (all spacing is multiples) |
| --grid-gutter | 24px | Column gap in the 12-column content grid |
| --grid-margin | 32px | Content area edge padding |