PlatyDraft for validation

Design system

Colours, type, foundations and components for the Platy web app, first derived from the logo and since updated with CAPPI SIM's decisions of 2 November 2026. Every text colour reaches WCAG 2.1 AA contrast (4.5:1), and every focus ring, field border and outline button border 3:1, in the light and the dark theme.

Logo

A single-colour mark. Its white details are cut out, so the same file works on light and dark backgrounds.

Platy logo on the light theme
Light theme
Platy logo on the dark theme
Dark theme

Colour

Every pairing the components use, with its contrast ratio in both themes. Values come from the design tokens in globals.css.

UseTokenslightdark
Body textforeground
on background
#0C1817 / #FFFFFF
18.12:1 min 4.5:1
#E6F0EF / #0C1817
15.60:1 min 4.5:1
Supporting textmuted-foreground
on background
#4E6261 / #FFFFFF
6.47:1 min 4.5:1
#9DB2B1 / #0C1817
8.14:1 min 4.5:1
Supporting text on muted areasmuted-foreground
on muted
#4E6261 / #F4F8F8
6.05:1 min 4.5:1
#9DB2B1 / #172524
7.11:1 min 4.5:1
Text on cardscard-foreground
on card
#0C1817 / #FFFFFF
18.12:1 min 4.5:1
#E6F0EF / #122120
14.30:1 min 4.5:1
Supporting text on cardsmuted-foreground
on card
#4E6261 / #FFFFFF
6.47:1 min 4.5:1
#9DB2B1 / #122120
7.46:1 min 4.5:1
Links and text buttonsprimary
on background
#0B817D / #FFFFFF
4.72:1 min 4.5:1
#09C6C2 / #0C1817
8.52:1 min 4.5:1
Primary buttonprimary-foreground
on primary
#FFFFFF / #0B817D
4.72:1 min 4.5:1
#04302E / #09C6C2
6.73:1 min 4.5:1
Secondary button, neutral badgesecondary-foreground
on secondary
#0C1817 / #EAF1F1
15.84:1 min 4.5:1
#E6F0EF / #1F302F
11.88:1 min 4.5:1
Hovered and selected itemsaccent-foreground
on accent
#0E5654 / #E3F7F6
7.63:1 min 4.5:1
#A9F1ED / #103634
10.31:1 min 4.5:1
Field error messagesdestructive
on background
#C42B2B / #FFFFFF
5.63:1 min 4.5:1
#F06A6A / #0C1817
6.02:1 min 4.5:1
Destructive buttondestructive-foreground
on destructive
#FFFFFF / #C42B2B
5.63:1 min 4.5:1
#2A0707 / #F06A6A
6.16:1 min 4.5:1
OK statussuccess-foreground
on success
#17643A / #E3F5EA
6.34:1 min 4.5:1
#82DDA6 / #10301E
8.77:1 min 4.5:1
At-risk statuswarning-foreground
on warning
#874505 / #FDF1D9
6.51:1 min 4.5:1
#F2C063 / #352709
8.64:1 min 4.5:1
Blocking statusdanger-foreground
on danger
#A32025 / #FCE9E9
6.44:1 min 4.5:1
#FF9E9E / #3B1517
8.15:1 min 4.5:1
Focus ringring
on background
#0B817D / #FFFFFF
4.72:1 min 3:1
#09C6C2 / #0C1817
8.52:1 min 3:1
Field and outline button bordersinput
on background
#6F8584 / #FFFFFF
3.91:1 min 3:1
#6F8584 / #0C1817
4.63:1 min 3:1
Field and outline button borders on cardsinput
on card
#6F8584 / #FFFFFF
3.91:1 min 3:1
#6F8584 / #122120
4.24:1 min 3:1

Typography

Inter, an open-source typeface (SIL Open Font License), served with the app. Sizes follow Tailwind's scale from 14 px up; times and amounts use tabular figures so columns line up.

Page titletext-3xl, semibold
Season 2027 staffing
Section titletext-xl, semibold
Le Mans Classic · 2–5 July
Card titletext-base, semibold
Track marshals
Bodytext-sm
Twelve marshals confirmed; two still need a valid licence.
Supportingtext-sm, muted
Updated 3 minutes ago by the event coordinator
Numberstext-sm, tabular-nums
08:30–18:00 · €1,240.00 · 14 of 16 staffed

Foundations

The rules behind every screen. The components below apply them.

Spacing8 px grid
Page margins, the padding of panels and cards, and the gaps between cards, groups and sections are multiples of 8 px. The half step, 4 or 12 px, is only for things that belong together, such as an icon and its label, a heading and its text, or the inside of a control, badge or table row. Other values, such as 6 or 20 px, are not used.
Sizes4 px steps
Heights and icons are sizes, not spacing: controls are 32, 36 or 40 px high, badges at least 24 px, and icons beside text 16 px.
Corner radius8 to 12 px
Cards and panels are 12 px. Buttons, fields and badges are 8 px.
Iconslucide-react
One line-based set, drawn with a 2 px stroke on a 24 px grid. The stroke is never overridden and icons beside text are all 16 px, so every stroke renders alike.
Motion150 to 300 ms
Only for state changes, such as the hover colour of a button, easing in and out. Buttons and fields fade their colours in 150 ms. No loops or decorative effects.

Components

Adapted from shadcn/ui and kept in this repository. Keyboard focus draws a 2 px ring in the primary colour; statuses always pair colour with a word and an icon.

Light theme

Buttons

Badges

OKAt riskBlocking
DraftPublishedMotorsport

Form fields

The licence expired on 12 March 2026.

Cards

Track marshal

Le Mans Classic · 2–5 July 2027

OK
Host

Motor show · 14–19 Sept 2027

At risk

Dark theme

Buttons

Badges

OKAt riskBlocking
DraftPublishedMotorsport

Form fields

The licence expired on 12 March 2026.

Cards

Track marshal

Le Mans Classic · 2–5 July 2027

OK
Host

Motor show · 14–19 Sept 2027

At risk