DISCO CAPITAL
v1.0 · iOS

Disco Capital
Design System

Alien Pixels, adapted for an iOS-first tokenized-VC product. Dark luxury cockpit with neon-green data, mono numbers, glow-as-signal — and just enough disco to remember why we exist.

Version 1.0 · April 2026
Production target iOS · React Native + Expo
Owner Garrison Bullock
Foundations

Six principles

Every design and code decision should be checkable against these. If something on screen breaks one of them, that's the bug.

1. Dark-first

Background is always near-black. Cards lift by elevation, not borders. White is for light.

2. Glow is the accent

Color radiates. Bars, charts, active icons emit a soft ambient glow. Glow signals "alive."

3. Mono numbers, always

Every numerical value renders in JetBrains Mono / SF Mono. A number in a sans-serif face is a bug.

4. Color is meaning

Green = positive. Hot pink = negative. Cyan = link. Yellow = warning. Color is never decoration.

5. Breathing room

24px card padding, 32px section gaps. Whitespace is the system's most underused tool.

6. Agent-native

Every UI surface has a structured-data twin. Microcopy is authored to be parsed by Disco Dan.

Color

Palette

Click any swatch to copy its hex. The whole app is built from the values below — no hex anywhere else.

Backgrounds

bg.app
#0D0E11
App background. The deepest layer.
bg.card
#151618
Default card surface.
bg.cardHover
#1A1B1F
Pressed / hover card state.
bg.cardElevated
#1E1F23
Modals, popovers, sheets.

Hero — neon green

green.400
#33FF99
Highlights, chart peaks.
green.500
#00E87B
Hero. Primary CTA, positive deltas, active tab.
green.600
#00C466
Pressed state, secondary green.

Accents

lime.500
#84CC16
Climate / energy.
cyan.500
#00D4FF
Links, secondary data, trending. DeFi.
blue.500
#3B82F6
Stacked-chart middle stop.
indigo.500
#6366F1
Fintech.
purple.500
#8B5CF6
Stacked-chart segment.
violet.500
#A855F7
Biotech / health.
pink.500
#EC4899
Stacked-chart segment.
hotPink.500
#FF3B7A
Sell, take profit, exit position. Deep Tech / Defense.
red.500
#FF3B30
Negative, destructive, error. Validation failures, decline, irreversible actions.
yellow.500
#FBBF24
Warnings, pending. Consumer.
orange.500
#FF6B35
Space / aero, sparingly.

Sector / category coding

Eight hues, evenly spread around the wheel. Every pair is at least 25° apart so each sector is unmistakable on a dark surface. Lock these mappings — don't improvise per screen.

AI / ML
#00E87B
Climate / Energy
#84CC16
Consumer / Creator
#FBBF24
Space / Aero
#FF6B35
Deep Tech / Defense
#FF3B7A
Biotech / Health
#A855F7
Fintech
#6366F1
DeFi / Crypto
#00D4FF

Stacked chart sequence

When a chart needs more than two colors, walk this sequence top-to-bottom.

Color do's & don'ts

Do
Use green for the primary action, the active tab, and the user's portfolio total.
Don't
Use green for body copy or large background fills.
Do
Use hot pink (#FF3B7A) for negative numbers, destructive actions, the Sell flow.
Don't
Use brand magenta (#E91E8C) anywhere in product UI. Magenta lives only in the wordmark and marketing.
Do
Walk the stacked-chart sequence in order.
Don't
Pick chart colors by feel. The order is part of the brand.
Typography

Type system

Inter for everything except numbers. JetBrains Mono for every numerical value, no exceptions. The mono number is the system's signature.

display
44 / 48 · 700
Turn doomers into dreamers.
text.4xl
36 / 40 · 700
$32,134
text.3xl
30 / 36 · 700
$8,903 ↑1.9%
text.2xl
24 / 32 · 700
Holdings
text.xl
20 / 28 · 600
Helion Energy
text.lg
18 / 26 · 600
Sub-header
text.base
14 / 20 · 400
Body copy. Default UI text. Small enough to be dense, large enough to read.
text.sm
12 / 16 · 400
Compared to last 7 days
text.xs
10 / 14 · 500 · UPPER
Pre-Seed · DeFi · 2026-01-12
text.label
11 / 14 · 600 · CAPS
Allocation

Metric display pattern

The most-repeated layout in the app. Use it everywhere a value needs context.

Portfolio value
$8,903 ↑1.9%
Compared to $8,734 last 7 days

Three-metric strip (Hyper Charts)

Inherited verbatim from Hyper Charts XL widgets. A row of three metrics above a chart.

Weekly
$2,197 ↑19.6%
Compared to $1,340 last week
Monthly
$8,903 ↑1.9%
Compared to $5,441 last month
Yearly
$98,134 ↑22%
Compared to $76,330 last year
Spacing

4px scale

Every margin, gap, and padding value comes from the scale below. Don't invent a 14px to make a layout fit — re-do the layout.

Elevation & Glow

Glow is the accent

Three tiers — element glow, ambient card glow, area glow. Use them liberally on data, sparingly on text.

Element glow palette

--glow-green
--glow-cyan
--glow-purple
--glow-pink
--glow-yellow
--glow-orange

Canonical recipe

box-shadow:
  0 0 8px  rgba(R,G,B,0.40),
  0 0 20px rgba(R,G,B,0.20),
  0 0 40px rgba(R,G,B,0.10);

Ambient card glow (featured)

Default card

Standard surface. Elevation 1.

Glow do's & don'ts

Do
Glow data and active interactive elements (CTA, active tab, focused input).
Don't
Glow text. Text uses semantic colors and weight, not glow.
Do
Use ambient card glow on at most one card per screen.
Don't
Glow every card. Then nothing is featured.
Iconography

Custom navigation set

Six bespoke icons drive the bottom-nav. Inactive state is white. Active state is uniform hot-pink with 3-layer glow — same color for every tab so the active affordance is unmistakable and brand-consistent.

Inactive state

home
wallet
punchbowl
trade
social
profile

Active state — hot-pink fill + glow (uniform across all tabs)

home
wallet
punchbowl
trade
social
profile

Bottom-nav demo (one tab active)

Active token

all tabs (active) → --hot-pink-500   (#FF3B7A)
glow recipe       → drop-shadow 4px / 10px / 20px @ 40% / 20% / 10% alpha
inactive          → #FFFFFF @ 0.85 opacity, no filter

Uniform hot-pink keeps the active affordance instantly recognizable across every screen. The brand color becomes the "you are here" signal — no per-tab learning required.

Implementation notes

Do's & don'ts

Do
Use uniform hot-pink for every active nav tab — same color, same glow recipe.
Don't
Glow multiple nav icons simultaneously. Only the active screen glows.
Do
Use currentColor in SVG so a single icon file serves both states.
Don't
Per-screen colors on the nav. Save accent colors for sector chips, charts, and content — not navigation chrome.
Components

Component gallery

Every component has the state vocabulary: default, hover/press, focus, active, disabled, loading, error.

Buttons

Inputs

Default

Helper text in tertiary.

Mono / Amount

Use mono variant for amounts, addresses, OTP.

Focus

Border green + 3px green ring.

Error

Enter a value greater than $0.

Chips, badges, sectors

↑ 19.6% ↓ 4.2% Pending AI / ML Climate Consumer Space Deep Tech Biotech Fintech DeFi

Segmented control

Progress bars

Round progress
$680,000 raised$1,000,000 goal · 12 days left

Tab bar (iOS)

Six tabs, matching the production app. Active tab uses hot-pink.500 with element glow — uniform across all tabs; inactive uses text.tertiary.

Floors
Wallet
Punch Bowl
Social
Profile

Toast / banner

Investment placed
$500 in Helion Energy. You're Founding Investor #312.
Hyper Charts ✦

Chart vocabulary

Eleven chart types, inherited from Alien Pixels' Hyper Charts template. Resist the urge to invent a twelfth — these cover every analytics surface Disco Capital needs.

Widget header anatomy

[Title] ───────────────── [✦]
[$Metric] [↑Delta]
[Compared to ... last X]
─────────────────────────────
[Chart fills remaining space]

Widget size tiers

Small tiles for inline metrics, the Large card for full analytics surfaces. The Large carries the three-metric strip and a footer table.

Income · Vertical Small
$32,134 ↑2.5%
301.082 USD
Sales Report · Medium
$8,438 ↑2.5%
Avg. score $185,301
Sales Report · Large
Weekly
$2,197 ↑19.6%
Compared to $1,340 last week
Monthly
$8,903 ↑1.9%
Compared to $5,441 last month
Yearly
$98,134 ↑22%
Compared to $76,330 last year

The eleven chart types

Basic Bar
Single-series growth over time.
Detailed Bar
Dense daily series, no labels.
Column with Labels
128
137
112
128
156
129
114
Each bar carries its value above.
Grouped Bar
Multi-series side-by-side comparison.
Stacked Columns
Slot-reel style. Dot markers per segment.
Stacked Horizontal Bar
The signature look. Broken-pill segments.
Waterfall
Sequential up/down flow. Pink for negative.
Bubble Bar
Outcome over magnitude. Glowing yellow dots.
Rainfall
Bars descending from a curved baseline.
Multiply Bars
Two overlapping series, shared baseline.
Line and Column
Volume bars with price line overlay.
Donut / Allocation
$8,903
Allocation
Profile sector allocation.
Patterns

Production patterns

Real screens are built from these. If you're designing something that doesn't match a pattern below, write the new pattern down before shipping.

Wallet hero card

Portfolio value
$8,903
↑ 1.9%   Compared to last 7 days
H
O
A
D

Dance Floor card (round in progress)

D
Dynastik Defense
Seed · Defense
Deep Tech
Autonomous loitering munitions for allied forces.
Funding
$1,420,000 / $2,000,000 goal
$1,420,000 raised23 days left

Inline company link (Greenroom)

"Spent 3 hours with the team at Helion Energy last week. The compression rig is real. Founders Fund just led a $300M round and I think they're underselling the timeline."
@apinski · 2h

Holding list card

H
Helion Energy
AI / ML
$2,340
↑ 12.4%
D
Dynastik Defense
Deep Tech
$1,680
↓ 4.2%
Filters

Multi-select filter dropdown

The grouped multi-select pattern used on Dance Floors, Trading, and any list view that needs cross-axis filtering. Multi-select within each group, no mutual exclusion, no cap. Selections persist across navigation.

Anatomy

Header

Collapsible row with two-piece label. Primary: "All Categories" or "{N} Filters Active" in --green-500. Secondary: live result count "{N} Rounds" in --text-secondary mono, separated by ·. Chevron rotates 180° on expand. Click anywhere on the row toggles.

Summary bar

Shown only when ≥1 filter is selected. Each active filter renders as a pill with ×. Right-aligned Clear All ghost button removes everything in one tap.

Group label

All caps, mono, --text-tertiary, 10px, 1.2px letter-spacing. Examples: INDUSTRY VERTICALS, FUNDING STAGE, VC HOST. Group labels are descriptive only — they never carry data. Result counts live in the header.

Chip

Pill, 7×13 padding, uppercase, 10.5px / 700 weight. Inactive: outlined, --text-secondary. Active: solid --green-500 fill with subtle green glow. Hover: brighter text + brighter border. Click toggles.

States

1. Collapsed · no selections
All Categories · 28 Rounds
2. Expanded · no selections
All Categories · 28 Rounds
Industry verticals
Nuclear Energy Transportation Robotics & Automation Renewable Energy AI & Machine Learning Fintech & Blockchain Advanced Manufacturing Genetics Materials EdTech AgTech Space Cybersecurity Rebuilding the Grid
Funding Stage
Seed Series A Series B Series C
VC Host
Sequoia Capital Y Combinator A16Z Khosla Ventures Tiger Global Flagship Pioneering Ribbit Capital Andreessen Horowitz Breakthrough Energy Lux Capital
3. Expanded · 9 filters active · with summary bar & clear-all
9 Filters Active · 23 Rounds
Nuclear Energy × Transportation × Adv. Manufacturing × Series A × Series B × Sequoia × Y Combinator × A16Z × Andreessen Horowitz ×
Industry verticals
Nuclear Energy Transportation Robotics & Automation Renewable Energy AI & Machine Learning Fintech & Blockchain Advanced Manufacturing Genetics Materials EdTech AgTech Space Cybersecurity Rebuilding the Grid
Funding Stage
Seed Series A Series B Series C
VC Host
Sequoia Capital Y Combinator A16Z Khosla Ventures Tiger Global Flagship Pioneering Ribbit Capital Andreessen Horowitz Breakthrough Energy Lux Capital

Tokens

header.label.idle      → --green-500          ("All Categories")
header.label.active    → --green-500          ("9 Filters Active")
header.separator       → --text-tertiary     "·" between label and count
header.count           → --text-secondary    mono, 13px, 500 weight ("23 Rounds")
chip.bg.idle           → transparent
chip.text.idle         → --text-secondary
chip.border.idle       → --border-card
chip.bg.active         → --green-500          (#00E87B)
chip.text.active       → #062612            (high-contrast on green)
chip.glow.active       → 0 0 12px rgba(0,232,123,0.18)
group-label            → --text-tertiary     mono, 10px, uppercase, 1.2px tracking
clear-all.idle         → --text-tertiary     ghost button
clear-all.hover        → --red-500          destructive accent on hover

Behavior rules

Do's & don'ts

Do
Show the live count in the header so users know their filter state at a glance.
Don't
Hide selected filters when collapsed. The summary bar must stay visible whenever filters are active.
Do
Always show Clear All when ≥1 filter is selected. Friction-free reset matters when users over-filter.
Don't
Cap selections or mutually exclude. Over-filtering is the user's problem to solve, not the UI's to prevent.
Do
Persist filters across navigation. If a user filters Dance Floors, leaves, and returns, their filters stay.
Don't
Reset filters on every screen entry. That trains users to distrust the filter system and stop using it.
Do
Use uppercase mono for group labels. Visual rhythm signals "this is metadata, not content."
Don't
Title-case group labels. They'll read as content headers and compete with the page title.
NFT identity

Stake-NFT cards

Each stake is a collectible. Two startups should never look interchangeable. Sector gradient + letter glyph + glow does the work.

H
Helion Energy
AI / ML
Pre-Seed Round 12026-01-12#312
O
Ondo Finance
DeFi
Series A Round 22026-02-04#118
A
Altos Labs
Biotech
Seed Round 12026-03-22#048
D
Dynastik Defense
Deep Tech
Seed Round 12026-02-18#087
V
Varda Space
Space
Series B Round 12026-01-30#021
F
Form Energy
Climate
Series A Round 32026-02-22#194
M
Mercury
Fintech
Series B Round 12026-03-15#066
P
Patreon
Consumer
Series C Round 12026-01-08#412
Motion

Durations & easing

Five durations, four easings. Use the named tokens in tokens.js — never raw values in component code.

fast
150ms
Hover, focus, button-press feedback.
normal
250ms
Tab switch, segmented selection, toggle.
slow
400ms
Modal entry, sheet slides, card fade-in.
chart
600ms
Line draws, bar growth, donut sweep.
splash
1200ms
Disco-ball intro on first launch only.

Glow-pulse (featured cards, live indicators)

live
trending
closing soon
iOS preview

System on a real screen

Every component above, wired together inside an iPhone frame. Safe areas honored, tab bar at the bottom.

9:41 ●●●●
DANCE FLOOR
Portfolio value
$8,903
↑ 1.9% last 7d
A
Altos Labs
Seed · Biotech
Biotech
$420K raised30 days left
Floors
Wallet
Bowl
Social
Profile
Accessibility

WCAG 2.1 AA + Apple HIG

Minimum standards. Test every new pattern against this list.

Color contrast

White on bg.app is 19.5:1 — passes AAA. text.tertiary on bg.app is 4.7:1 — labels and metadata only, never body.

Touch targets

44 × 44 pt minimum on every interactive element. Use hitSlop on icon buttons.

Don't rely on color alone

Positive deltas always carry ↑. Negative always carry ↓. Sector chips pair color with the sector name.

Dynamic Type

Test layouts at xSmall through Accessibility 5. Mono numbers scale with the rest.

VoiceOver

Every interactive has an accessibilityLabel: imperative verb + object. Charts get an accessibilitySummary.

Reduce Motion

Glow-pulse and shimmer freeze. Celebrate-burst becomes opacity fade. Disco-spin disappears.
Master rules

Do's and don'ts

The non-negotiables. If you have to break one, write down why in the PR.

Do
Use mono for every number.
Don't
Mix sans-serif and mono inside the same metric line.
Do
Reserve green for the primary action and positive state.
Don't
Use green for body text or large filled backgrounds.
Do
Glow data and interactive elements.
Don't
Glow text or every card on screen.
Do
Use a single primary CTA per screen.
Don't
Stack two primary buttons together.
Do
Honor 44pt minimum touch targets and Dynamic Type.
Don't
Trust an icon's visual size as the tap area.
Do
Reserve the disco-ball for splash and the post-investment celebration.
Don't
Sprinkle disco motifs across the product.
Do
Add new tokens by editing tokens.js + tokens.css together.
Don't
Hard-code a hex anywhere in a component file.