Style guide
Every token the web app is built on, rendered from the same CSS the product uses. Contrast ratios are computed from the token values on this page, not typed in by hand.
Color
Warm, opaque surfaces that rise in lightness as they come forward. Gold marks the one thing to act on; green and red carry real signals.
Surfaces
Elevation by lightness. Each layer sits on the one before it.
well
surface-0
surface-1
surface-2
surface-3
surface-4
| Token | Hex | Use |
|---|---|---|
--color-well | #080705 | Sidebar, inputs, recessed wells |
--color-surface-0 | #100E0A | Page background |
--color-surface-1 | #1A1712 | Sections, panels |
--color-surface-2 | #1F1B15 | Cards |
--color-surface-3 | #332E25 | Raised, hover, selected |
--color-surface-4 | #524B3E | Popovers, menus |
Text
Ratios against the page and against a card.
- Aa
--color-fg#F4EFE4 Primary textpage16.81:1AAAcard14.93:1AAA - Aa
--color-fg-secondary#CDC5B4 Secondary textpage11.23:1AAAcard9.98:1AAA - Aa
--color-fg-muted#A89F8E Meta, captions, axis labelspage7.35:1AAAcard6.53:1AA - Aa
--color-fg-subtle#8B8272 Placeholder, disabled (not for body copy)page5.08:1AAcard4.51:1AA - Aa
--color-fg-on-accent#100E0A Text on gold, success or danger fillson gold10.54:1AAA
Gold
Brand accent. Around 5% of a screen at most; never a panel fill.
gold-100
#FFE3CA
gold
#FFB020
gold-600
#EDA50E
gold-hover
#CC8D1A
gold-700
#BD8002
--color-gold-100Focus ring--color-goldPrimary accent, CTAs--color-gold-600Pressed accent--color-gold-hoverAccent hover--color-gold-700Deep accent, rails
Medals
Podium rank rings. Rank 1 uses gold; these cover 2 and 3.
--color-medal-silver#C9C3B8 Rank 2 ring and numeralcard9.77:1AAA--color-medal-bronze#C7834F Rank 3 ring and numeralcard5.53:1AAStatus
Every status ships with an icon or label, never color alone.
--color-success#14C25E Positive deltas, confirmations--color-danger#FF8073 Errors, destructive actions--color-warning#F9C936 Caution, pending review--color-info#6AA6FF Neutral notices, links in proseBorders
Only control outlines carry meaning, so only they need 3:1.
--color-border#332E25 Hairlines, dividers--color-border-strong#524B3E Card outlines on raised surfaces--color-border-input#7A7060 Form control outlines (3:1 non-text)Type
Archivo, wide and uppercase, for names, ranks and titles. Inter for everything you read. JetBrains Mono for labels and metadata.
Display and headings
Archivo. Display is 900 at 112% width; headings are 800 at 108%.
display-xlPlayer name
display-lgTop prospects
display-mdSeason record
heading / h3Season stats
heading / h5Upcoming sessions
heading / h6Coach feedback
Body
Inter. 14px is the working size inside the app.
text-lg / Inter 18Every stat travels with the athlete.
text-base / Inter 16Request a session with a verified coach.
text-sm / Inter 14Default size for dense app views and tables.
text-xs / Inter 12Updated after your last game.
Mono label
label-mono
How it connects
Points per game
Last updated
Stat numerals
stat-numeral, tabular figures keep columns aligned
Proportional
11.1
84.0
100.7
Tabular
11.1
84.0
100.7
Shape and depth
Depth comes from lightness first. Shadows add separation; gold glows mark the single featured element.
Radii
radius-xs4px, tags
radius-sm8px, inputs
radius-md12px, tiles
radius-lg16px, cards
radius-xl20px, panels
radius-2xl28px, hero panels
radius-fullpills, buttons
Shadows
shadow-cardCards
shadow-popoverMenus, popovers
shadow-glassSticky bars, overlays
shadow-glowFeatured stat
shadow-glow-strongFeatured, hovered
Focus
2px gold-100 outline, 3px offset, on every focusable element
Charts
Seven categorical hues that sit with the gold brand and stay distinct for protanopia and deuteranopia. Assign slots in order; a series keeps its color when filters change.
Categorical palette
Ratios against the page. All clear 3:1 for marks.
1 Amber
--color-chart-1#C985006.27:1AA2 Magenta
--color-chart-2#D551814.88:1AA3 Blue
--color-chart-3#3987E55.29:1AA4 Teal
--color-chart-4#199E705.66:1AA5 Violet
--color-chart-5#9085E96.16:1AA6 Vermilion
--color-chart-6#D959264.96:1AA7 Cyan
--color-chart-7#1D9AB85.84:1AA
In use
Illustrative values, stacked so every adjacent pair touches
- Series 1
- Series 2
- Series 3
- Series 4
- Series 5
- Series 6
- Series 7
- Adjacent CVD separation
- ΔE 13.2
- Target 8 (OKLab × 100, protan and deutan)
- Normal-vision separation
- ΔE 19.3
- Floor 15
- Scatter and maps
- Slots 1 to 3
- Validated for all pairs; fold the rest into Other
Motion
One curve and three durations. No scroll reveals or parallax inside the app.
ease-out-expo
cubic-bezier(0.22, 1, 0.36, 1)All three use the same curve. Only the duration changes.
140ms Hover, press, color changes
duration-fast220ms Panels, tabs, popovers
duration-base360ms Sheets, dialogs, page-level changes
duration-slow
With reduced motion enabled in your system settings, every transition completes instantly.