Skip to content

Design system

Color Tiers

Primary: Amber

Heat, urgency, action. Use for CTAs and key interactive elements.

TokenHexUse
--primary#f97316Primary buttons, key CTAs
--primary-hover#ea580cHover states
--primary-softrgba(249,115,22,0.12)Subtle backgrounds

Secondary: Violet

Depth and sophistication. Use for labels, secondary accents, metadata.

TokenHexUse
--secondary#a78bfaSecondary buttons, accents
--secondary-hover#8b5cf6Hover states
--secondary-muted#8b8b9eLabels, subtle text
--secondary-softrgba(167,139,250,0.1)Highlight backgrounds

Tertiary: Slate Blue

Information and metadata. Use for timestamps, info states, subtle accents.

TokenHexUse
--tertiary#60a5faInfo states, links
--tertiary-muted#94a3b8Metadata, captions
--tertiary-softrgba(96,165,250,0.1)Info backgrounds

Backgrounds

TokenHexUse
--bg-deep#0e0e10Page background
--bg-warm#18171cCards, panels
--bg-surface#222127Inputs, hover states
--bg-elevated#2c2a32Modals, dropdowns

Text

TokenHexUse
--text-primary#f0eef5Headlines, key content
--text-secondary#a8a3b8Body text
--text-muted#6b6879Labels, placeholders
--text-faint#4a4655Disabled, hints

Semantic

TokenHexUse
--profit#22c55ePositive P&L
--loss#ef4444Negative P&L
--warning#f59e0bAlerts

Borders

TokenHexUse
--border#37343eCard borders
--border-subtle#2a2830Dividers within cards

Typography

Fonts

FontVariableUse
Geist--font-displayPage titles, section heads
Inter--font-sansBody text, labels, UI
JetBrains Mono--font-monoNumeric data only

Scale

LevelElementFontSizeWeight
1Page titleGeist36px600
2Section headGeist20px600
3SubsectionGeist16px600
4BodyInter15px400
5LabelInter12px500

Font Rules

Geist for: Headlines, section headers, subsection headers

Inter for: Body text, labels, navigation, buttons, table descriptions

Mono for: Prices ($1,234), percentages (+12%), addresses (0x...), timestamps

Never mono for: Prose, descriptions, or anything read as a sentence

Case Rules

  • Uppercase: Single-word labels only (STATUS, BALANCE)
  • Sentence case: Multi-word headers ("What it is today")
  • Never uppercase: Full phrases or sentences

Amber Accents

Amber brings warmth and brand identity throughout the interface. Use it strategically:

Section Headers

4px amber bar before each h2:

css
.tp-h::before {
  width: 4px;
  height: 20px;
  background: var(--primary);
  border-radius: 2px;
}

Subsection Headers

6px amber dot before each h3:

css
.tp-h2::before {
  width: 6px;
  height: 6px;
  background: var(--primary);
  border-radius: 50%;
}

Emphasis

<strong> text uses amber, not white:

css
strong { color: var(--primary); }

List Markers

Bullet arrows and list markers in amber:

css
li::before { color: var(--primary); }

Horizontal Rules

Amber gradient fade on left edge:

css
hr {
  background: linear-gradient(90deg,
    var(--primary) 0%,
    var(--border) 20%);
}

Key-Value Tables

Amber left border on data tables:

css
.tp-kv {
  border-left: 2px solid var(--primary);
  padding-left: 20px;
}

Spacing

Base unit: 4px

TokenValueUse
xs4pxTight gaps
sm8pxList items
md16pxParagraph spacing
lg24pxCard padding
xl32pxSection gaps
2xl48pxMajor sections

Components

Buttons

Primary (Amber)

css
background: var(--primary);
color: #0e0e10;
font-weight: 600;
padding: 12px 24px;
border-radius: 6px;

Secondary (Violet)

css
background: transparent;
border: 1px solid var(--secondary);
color: var(--secondary);

Ghost

css
background: transparent;
border: 1px solid var(--border);
color: var(--text-primary);

Cards

css
background: var(--bg-warm);
border: 1px solid var(--border);
border-radius: 8px;
padding: 20px;

Inputs

css
background: var(--bg-surface);
border: 1px solid var(--border);
border-radius: 6px;
padding: 12px 16px;

Focus: amber border + subtle glow.


Do's and Don'ts

Do

  • Use Geist for headlines, Inter for body
  • Use secondary violet for labels and metadata
  • Keep primary amber for CTAs only
  • Use generous whitespace (48px between sections)

Don't

  • Use mono for prose text
  • Use amber for headers or decoration
  • Use uppercase for multi-word phrases
  • Cram sections together

Trade the tension.