Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

02 — Design Tokens (Shared)

STATUS: v1 — designer-provided (Material 3 token export from Figma). Rows marked TBD by designer or (extrapolated…) are not sourced from the export and need designer sign-off before shipping. All module docs reference this file; changes here propagate everywhere.


1. Color system

1.1 Chromatic roles (light)

Designer-provided M3 roles plus two custom extended roles (success, warning — not standard M3, present in the token set).

RoleToken NameHexUsage
primaryInternational Klein Blue#0037B0CTAs, active nav, links, focus
onPrimaryWhite#FFFFFFText/icons on primary
primaryContainerTitan White#E9EDFFSelected chips, info banners
onPrimaryContainerInternational Klein Blue#0037B0Text on primaryContainer
secondaryPersian Blue#1D4ED8Secondary CTAs
onSecondaryWhite#FFFFFFText/icons on secondary
secondaryContainerPattens Blue#DBEAFETonal buttons, selection indicators
onSecondaryContainerPersian Blue#1D4ED8Text on secondaryContainer
tertiaryPurple Heart#712AE2Distinct accents, highlights
onTertiaryWhite#FFFFFFText/icons on tertiary
tertiaryContainerBlue Chalk#EADDFFTonal tertiary surfaces
onTertiaryContainerPurple Heart#712AE2Text on tertiaryContainer
errorThunderbird#BA1A1AValidation, destructive
onErrorWhite#FFFFFFText on error
errorContainerCinderella#FEE2E2Error banners, destructive surfaces
onErrorContainerSangria#93000AText on errorContainer
success (custom)Salem#16A34APaid, present, approved, healthy
onSuccess (custom)White#FFFFFFText/icons on success
successContainer (custom)Scandal#DCFCE7Success surfaces, badges
onSuccessContainer (custom)Jewel#15803DText on successContainer
warning (custom)Ecstasy#F97316Partial, late, attention
onWarning (custom)White#FFFFFFText/icons on warning
warningContainer (custom)Serenade#FFF7EDWarning surfaces, badges
onWarningContainer (custom)Cedar Wood Finish#7F2500Text on warningContainer

Note: success and warning are standalone roles, not aliases of secondary/tertiary (previous proposal). Dues/warnings that were formerly tertiary now map to warning; paid/healthy states map to success.

1.2 Surface scale (light)

RoleToken NameHexUsage
backgroundCatskill White#F8FAFCScreen background
onBackgroundEbony#0F172APrimary text on background
surfaceWhite#FFFFFFCard/screen surfaces
onSurfaceEbony#0F172APrimary text
surfaceVariantMystic#E2E8F0Input fills, chips
onSurfaceVariantFiord#475569Secondary text, icons
surfaceContainerLowestWhite#FFFFFFFlat cards on containers
surfaceContainerLowCatskill White#F8FAFCCard backgrounds
surfaceContainerAthens Gray#E5E7EBRaised surfaces, nav bars
surfaceContainerHighGeyser#CBD5E1Elevated cards, dialogs
surfaceContainerHighestGull Gray (extrapolated — next step down the neutral scale)#94A3B8TBD by designer
surfaceDimSlate Gray (extrapolated — dimmest step before onSurface tones)#64748BTBD by designer
surfaceBrightWhite (extrapolated — brightest neutral, standard M3 convention)#FFFFFFTBD by designer

1.3 Outline & inverse

RoleToken NameHex
outlineBoulder#767676
outlineVariantGeyser#CBD5E1
shadowBlack#000000
scrimBlack#000000
inverseSurfaceMirage#141B2B
inverseOnSurfaceCatskill White#F8FAFC
inversePrimaryMelrose#B7C4FF

1.4 Dark mode

Designer-provided dark surface scale (grey/azure family):

LevelToken NameHex
Surface DimEbony#0F172A
SurfaceMirage#141B2B
Surface ContainerEbony Clay#293040
Surface Container HighPickled Bluewood#334155
Surface Container HighestSlate Gray#64748B
  • Dark chromatic roles (primary/secondary/tertiary/error/success/warning + containers) are NOT in the export — TBD by designer.
  • Working proposal until then (per M3 convention, dark primary ≈ inversePrimary): dark primary#B7C4FF (Melrose) with onPrimary#0037B0-family dark. Do not ship dark mode until confirmed.

1.5 Tenant branding

Org branding.color overrides primary only; all other roles stay from this palette. Dark mode default: follow system; org branding can pin one.

1.6 Raw named palette (designer reference)

TokenHexNotes
Athens Gray#E5E7EBneutral
Beeswax#FEF9C3tertiary tint
Black#000000scrim / shadow
Blue Chalk#EADDFFtertiaryContainer
Boulder#767676outline
Brown Pod#390C00error-dark accent
Catskill White#F8FAFCsurface/background
Cedar Wood Finish#7F2500onWarningContainer
Cinderella#FEE2E2errorContainer
Ebony#0F172AonSurface (dark)
Ebony Clay#293040surface container (dark)
Ecstasy#F97316warning
Fiord#475569onSurfaceVariant
Fire#A73400error-dark accent
Flamingo#EF4444error accent
Foam#ECFDF5success tint
Fog#DCE1FFprimary tint
Fun Green#008542success accent
Geyser#CBD5E1outlineVariant
Ghost#C4C5D7neutral variant
Gray Chateau#9CA3AFneutral
Green Haze#059669success accent
Gull Gray#94A3B8neutral
Harp#F1F8F4success tint
Hawkes Blue#E1E8FDsecondaryContainer alt
Humming Bird#D1FAE5success tint
International Klein Blue#0037B0primary
Jewel#15803DonSuccessContainer
Link Water#DCE2F7neutral variant
Magic Mint#A7F3D0success tint
Mako#434655neutral dark
Melrose#B7C4FFinversePrimary
Mirage#141B2BinverseSurface
Mountain Meadow#10B981success accent
Mystic#E2E8F0surfaceVariant
Pale Sky#6B7280neutral
Pattens Blue#DBEAFEsecondaryContainer
Peach Schnapps#FFDAD6error tint
Periwinkle#CAD3FFprimary tint
Persian Blue#1D4ED8secondary
Pickled Bluewood#334155surface container (dark)
Provincial Pink#FEF2F2error tint
Pueblo#7C2D12warning-dark accent
Purple Heart#712AE2tertiary
Rich Gold#A16207warning-dark accent
Romantic#FFC9B7warning tint
Salem#16A34Asuccess
Sangria#93000AonErrorContainer
Scandal#DCFCE7successContainer
Serenade#FFF7EDwarningContainer
Slate Gray#64748Bneutral
Storm Gray#747686outline alt
Thunderbird#BA1A1Aerror
Titan White#E9EDFFprimaryContainer
Watercourse#047857success accent
Watusi#FFDBCFwarning tint
White#FFFFFFonPrimary / surface
Zircon#F1F3FFneutral tint
Zumthor#EFF6FFsecondary tint

2. Typography

Font families: Inter (UI) and JetBrains Mono (data/identifiers). Both designer-provided.

2.1 M3 type scale mapping

Rows marked (extrapolated…) were not present as named tokens in the export; they are filled from the nearest fontSize scale steps or adjacent tiers per standard M3 conventions. TBD by designer — confirm before shipping.

M3 Scale RoleMapped TokenFontWeightSizeLine HeightLetter SpacingCase
Display LargeHeading 1 underlineInterExtra Bold48px48px-1.2none
Display Medium(extrapolated, fontSize step 14)InterBold36px44px-1.2none
Display Small(extrapolated, fontSize step 13)InterBold28px34px-0.72none
Headline LargeHeading 1InterSemi Bold20px28px-0.5none
Headline Medium(extrapolated — same tier as Heading 1, heavier)InterBold20px28px-0.5none
Headline SmallHeading 2InterBold18px27px0none
Title LargeDataInterSemi Bold16px24px0none
Title MediumHeading 3InterBold14px21px0none
Title SmallInter / MediumInterMedium14px20px0none
Body LargeInter / RegularInterRegular14px20px0none
Body MediumInputInterRegular14pxAUTO0none
Body SmallLabelInterRegular10.7px16.5px0none
Label LargeButtonInterBold12px18px0none
Label MediumButton upper / Cell upperInterBold12px16px1.2 / 0.6uppercase
Label SmallLinkInterRegular12px18px0none

2.2 Non-M3 typography tokens (designer-provided)

TokenFontWeightSizeLine HeightCase
Inter / Semi Bold upperInterSemi Bold10px15pxuppercase
Inter / Regular upperInterRegular10px15pxuppercase
Inter / Bold upperInterBold10px15pxuppercase
Inter / ItalicInterItalic16px26pxnone
Inter / BoldInterBold16px24pxnone
JetBrains Mono / RegularJetBrains MonoRegular13px18pxnone
JetBrains Mono / BoldJetBrains MonoBold13px18pxnone

Usage: mono for IDs, roll numbers, amounts, keys. Numerals (scores, amounts) use FontFeature.tabularFigures().


3. Spacing

3.1 Semantic scale (designer-provided)

TokenpxUsage
xs8Tight gaps between inline elements
s16Screen horizontal padding, card padding, form field gap
item-spacing.2424Item spacing, section gaps
m32Grouping gaps, modal padding
l48Large section separation
xl64Screen-level separation, toolbar height

3.2 Fixed numeric scale (designer-provided)

0, 4, 5, 6, 7 px (micro gaps), 35, 53 px (special layout), and negative offsets -12, -2, -1 px.

The export also contains many decimal auto-layout "gap" values (e.g. 130, 238, 981.25, 1520.55) captured directly from Figma frames — not a spacing scale; do not reuse. TBD by designer for scale rationalization.

3.3 Layout conventions (from previous proposal, mapped to new scale)

UseValueToken
Screen horizontal padding16s
Card padding16s
Card gap12derived (half of item-spacing.24) — TBD by designer
Section gap24item-spacing.24
List item height≥ 56
Form field gap16s
Toolbar height64xl

4. Radius

TokenValueSourceUsage
r-micro2.5pxcorner radius.2_5Tags, dense chips
r-xs4px(extrapolated — standard M3 4dp) TBD by designerSmall tags
r-sm8pxcorner radius.8Inputs, buttons, cards
r-md12pxcorner radius.12Cards (elevated), dialogs
r-lg16px(extrapolated — standard M3 16dp) TBD by designerBottom sheets, FAB
r-xl28px(extrapolated — standard M3 28dp) TBD by designerSheets, large surfaces
r-full9999pxcorner radius.9999Avatars, pills

5. Elevation & shadow

No elevation/shadow tokens exist in the export. The dp scale below is a proposal built from Black + the export's opacity tokens (shadow color #000000 at 10% per step). TBD by designer — every row is a starting point.

TokendpSuggested shadow
e-00none
e-110 1px 2px rgba(0,0,0,0.10), 0 1px 3px rgba(0,0,0,0.10)
e-230 1px 2px rgba(0,0,0,0.10), 0 2px 6px rgba(0,0,0,0.10)
e-360 1px 3px rgba(0,0,0,0.10), 0 4px 8px rgba(0,0,0,0.10)
e-480 2px 3px rgba(0,0,0,0.10), 0 6px 10px rgba(0,0,0,0.10)
e-5120 4px 4px rgba(0,0,0,0.10), 0 8px 12px rgba(0,0,0,0.10)

Supporting export tokens: opacity.10/50/60/70/80/90/100 (scrim/overlay steps), stroke weight.1 (1px) / .2 (2px) for borders, shadow = Black.


6. Motion

No motion tokens in the export — still proposed (previous status).

TokenDurationCurveUsage
m-instant0 msValue changes, icon toggles
m-fast150 mseaseOutCubicHover, focus, ripple, small state
m-base250 mseaseInOutCubicScreen transitions, dialogs, sheets
m-slow400 mseaseInOutCubicHero, page fade, skeletons
m-entrance300 mseaseOutBackList item entrance (stagger 40 ms)

Reduce-motion (platform setting): m-instant for all, no parallax, no stagger.


7. Iconography

No icon tokens in the export — Material Symbols remains the proposal (previous status). Confirm pack with designer before build.

Material Symbols (outlined, weight 400, optical 24). Sizes: 16/20/24/32/40. Status icons use filled variant. All icons need a text label or tooltip+Semantics.label.


8. Breakpoints (responsive)

ClassWidthLayout
Phone< 600 dpBottom nav, single pane
Tablet600–839 dpBottom nav + wider panes, 2-column lists
Landscape tablet840–1199 dpNavigation rail, master-detail
Desktop/web≥ 1200 dpNavigation rail/drawer, master-detail, hover states

9. Touch targets

Minimum 48 × 48 dp tappable; list rows ≥ 56 dp; FAB 56 dp; 44 dp acceptable for dense inline controls (chip remove, icon buttons with tooltips).


10. Light/dark parity rules

  • No color hardcoded in widget code — always token references
  • Surface contrast ≥ 3:1 for UI chrome, ≥ 4.5:1 for text
  • Elevation substitutes for color on dark surfaces
  • Both modes must pass the QA color checklist (see 10_QA_Baseline.md)
  • Dark chromatic roles are TBD by designer (§1.4) — gate dark-mode ship on sign-off