Skip to content

Design System Reference

Diátaxis: Reference

Sources: .impeccable.md, packages/design-tokens/src/index.ts, apps/mobile/lib/fonts.ts, apps/mobile/tailwind.config.ts


Direction: Italian Sole — Grounded · Reassuring · Efficient

Hybrid aesthetic: Airbnb-warm (consumer booking) + Uber/Bolt-precise (SOS dispatch)

Persona: Italian tradesperson: reliable, no-nonsense, quality-proud. Not startup-flashy, not corporate-cold.


TokenHexRole
primary.500#B35F3BTerracotta — primary CTA, active states
secondary.500#6E7F3COlive — trust badges, Verificato, verified states
neutral.50#FAF6EECream — default background
accent.500#E89059Sun amber — warm accent, highlights
neutral.900#2B1E10Dark Ink — primary text
sos.500#E5484DSOS red — emergency dispatch only
ScaleHex
50#FBF3EE
100#F5E3D7
200#EBC6AF
300#DFA987
400#D48C5F
500#B35F3B
600#9E5234
700#85432A
800#6D3521
900#532818
950#391B10
ScaleHex
50#F4F6EE
500#6E7F3C
600#617035
700#505D2B
950#202510
ScaleHex
50#FEF6EE
500#E89059
600#CC7B4E
950#442617
ScaleHex
50#FEF0F0
500#E5484D
600#CC3A3F
950#3F0F11
ScaleHex
0#FFFFFF
50#FAF6EE
100#F0EBE0
200#DDD5C8
300#C8BFB0
400#B5A898
500#8C7B6A
600#6E5E4F
700#4D3F32
800#3D2E1C
900#2B1E10
950#1A1008
VarUsage
textPrimary text
backgroundPage background
foregroundInverted surface text

Source: apps/mobile/lib/fonts.ts — single source of truth for all fontFamily refs.

KeyFontUsage
displayGambarino-RegularHero titles, brand logo, decorative headings
thinSwitzer-Thin
lightSwitzer-Light
regularSwitzer-RegularDefault body text
mediumSwitzer-MediumButtons, labels
semiboldSwitzer-SemiboldSection titles, CTAs
boldSwitzer-BoldHeadings, prices, numbers
extraboldSwitzer-ExtraboldHero numerics
blackSwitzer-BlackDisplay-scale numerics only

Tailwind semantic aliases: sans / bodySwitzer-Regular; headingSwitzer-Bold

Both fonts from Fontshare. Locked 2026-04-19.

TokenSize (px)
2xs11
xs12
sm14
base16
lg18
xl20
2xl24
3xl30
4xl36
5xl48
TokenValue
tight1.2
snug1.3
normal1.5
relaxed1.6
TokenValue (px)
tighter−0.44
tight−0.24
normal0
wide+0.4

Tokenpx
0.52
14
1.56
28
312
416
520
624
832
1040
1248
1664
2080
2496

Tokenpx
xs4
sm8
md12
lg16
xl24
2xl32
full9999

TokenDetails
smoffset (0,1), opacity 0.05, radius 2, elevation 1
mdoffset (0,2), opacity 0.08, radius 8, elevation 3
lgoffset (0,4), opacity 0.12, radius 16, elevation 6
soscolor #E5484D, offset (0,4), opacity 0.3, radius 16, elevation 8

NameDampingStiffnessMass
spring151501
bouncy101201
gentle201001
Tokenms
fast150
normal300
slow500

TokenValue
base0
card10
sticky20
overlay30
modal40
toast50

These are never permitted:

  1. Side-stripe borders (>1px border-left accent lines)
  2. Gradient text (background-clip: text)
  3. Glassmorphism (backdrop-filter: blur + semi-transparent bg)
  4. Stock purple→blue gradients
  5. “Big number + small label” hero metrics as decoration
  6. Pure black (#000000) or pure white (#FFFFFF) — use neutral.900 / neutral.0

Identifier-first unified flow via Clerk:

  • Component: <SignIn /> with signUpForceRedirectUrl
  • Single convergence route: /(welcome)/continue
  • Sign-up diverges at step 2: name + phone + role chip (consumer | professional)

Eight canonical constraints govering every screen:

  1. Home = ChatGPT-style prompt (search via conversational triage)
  2. Conversational triage: 4–6 questions max
  3. Multi-quote comparison UI
  4. Verificato badge is first-class (not a footnote)
  5. Two pricing display modes (fixed vs. estimate range)
  6. Pre-booking contact masking (no phone/email exposed until confirmed)
  7. SOS flow lives separately from normal booking
  8. Italian price certainty — no ambiguous “from €X” without ceiling

  1. Clarity over decoration — every element earns its place
  2. Grounded confidence — warm but not whimsical
  3. Systematic consistency — tokens, not one-offs
  4. Accessibility first — contrast ratios, touch targets ≥44px
  5. Motion with purpose — spring physics, never gratuitous
  6. Italian craft quality — precision in spacing and type