DESIGN.md · Analysis

Fresha

fresha.com · 29 May 2026 · 47 colors · AktivGroteskVF, RoobertPRO, sans-serif

Fresha

A global beauty and wellness booking platform connecting millions of users with salons, spas, and wellness professionals. Fresha combines a clean, accessible interface with vibrant accent colors to inspire confidence and discovery.

Colors

surface#ffffff
surface-dim#f2f2f2
surface-bright#ffffff
surface-container-lowest#fafafa
surface-container-low#f5f5f5
surface-container#eeeeee
surface-container-high#e5e5e5
surface-container-highest#d3d3d3
on-surface#0d0d0d
on-surface-variant#767676
inverse-surface#1a1a1a
inverse-on-surface#f5f5f5
outline#acacac
outline-variant#bfbfbf
surface-tint#6950f3
primary#6950f3
on-primary#ffffff
primary-container#eae1ff
on-primary-container#403591
inverse-primary#c6b9ff
secondary#2d76ec
on-secondary#ffffff
secondary-container#d9e5ff
on-secondary-container#1f4a9a
tertiary#1f8900
on-tertiary#ffffff
tertiary-container#c8f0b8
on-tertiary-container#0d5a00
error#d4163a
on-error#ffffff
error-container#fdd9df
on-error-container#831324
primary-fixed#eae1ff
primary-fixed-dim#d4c6ff
on-primary-fixed#1f1654
on-primary-fixed-variant#5c4ace
secondary-fixed#d9e5ff
secondary-fixed-dim#b3ceff
on-secondary-fixed#001a5c
on-secondary-fixed-variant#1f4a9a
tertiary-fixed#c8f0b8
tertiary-fixed-dim#a8d89f
on-tertiary-fixed#0d3800
on-tertiary-fixed-variant#0d5a00
background#ffffff
on-background#0d0d0d
surface-variant#e5e5e5

Typography

display
fontFamily: AktivGroteskVF, RoobertPRO, sans-serif · fontSize: 64px · fontWeight: 700 · lineHeight: 72px · letterSpacing: -0.03em
headline-lg
fontFamily: AktivGroteskVF, RoobertPRO, sans-serif · fontSize: 40px · fontWeight: 600 · lineHeight: 48px · letterSpacing: -0.02em
headline-md
fontFamily: AktivGroteskVF, RoobertPRO, sans-serif · fontSize: 28px · fontWeight: 600 · lineHeight: 36px · letterSpacing: -0.01em
title-lg
fontFamily: AktivGroteskVF, RoobertPRO, sans-serif · fontSize: 20px · fontWeight: 600 · lineHeight: 28px
body-lg
fontFamily: AktivGroteskVF, RoobertPRO, sans-serif · fontSize: 18px · fontWeight: 400 · lineHeight: 28px
body-md
fontFamily: AktivGroteskVF, RoobertPRO, sans-serif · fontSize: 16px · fontWeight: 400 · lineHeight: 24px
label-md
fontFamily: AktivGroteskVF, RoobertPRO, sans-serif · fontSize: 14px · fontWeight: 600 · lineHeight: 20px · letterSpacing: 0.01em
label-sm
fontFamily: AktivGroteskVF, RoobertPRO, sans-serif · fontSize: 12px · fontWeight: 500 · lineHeight: 16px · letterSpacing: 0.02em

Design guidance

Overview

Fresha is a global beauty and wellness booking platform that democratizes access to premium salons, spas, and wellness professionals. The design system embodies a philosophy of "Accessible Elegance"—combining a clean, light-dominant interface with vibrant accent colors (#6950f3 primary, #2d76ec secondary, #1f8900 tertiary) that inspire confidence and discovery. The brand personality is warm, professional, and empowering: it speaks to both beauty professionals seeking to grow their business and consumers seeking their next perfect appointment. The visual language prioritizes clarity and trust through generous whitespace (24px gutter), a humanistic sans-serif stack (AktivGroteskVF + RoobertPRO), and purposeful use of color to guide attention to booking actions. Example sentence in brand voice: "Find your next favorite salon—book instantly, no waiting."

Colors

The color system is anchored by a vibrant purple primary (#6950f3) used exclusively on call-to-action buttons, active states, and brand-critical interactive elements. This accent appears sparingly but decisively, creating visual momentum toward booking. Secondary (#2d76ec, a bright blue) supports secondary actions and highlights, while tertiary (#1f8900, a rich green) signals success states and positive affirmations. The surface stack is built on pure white (#ffffff) as the dominant background, with a carefully calibrated gray scale (surface-dim #f2f2f2, surface-container #eeeeee, surface-container-highest #d3d3d3) for subtle layering and depth without darkness. Text defaults to near-black (#0d0d0d) for maximum legibility at 16px body size. Error states use a warm red (#d4163a) to signal c

Typography

The type system uses a two-font strategy: AktivGroteskVF (a geometric, variable-weight sans-serif) for headlines and UI labels, paired with RoobertPRO (a humanistic sans-serif) for body text and accessibility. Display (64px, 700 weight, -0.03em letter-spacing) commands hero sections with authority; headline-lg (40px, 600 weight) anchors major sections; headline-md (28px, 600 weight) organizes subsections. Body text lives at 16px (body-md) with 24px line-height for comfortable reading at 1250px container width. Labels (14px, 600 weight, 0.01em tracking) appear on buttons and form fields with crisp, compact presence. All headlines use -0.02em to -0.03em negative letter-spacing to create visual tightness and premium feel. Apply text-shadow: 0 1px 2px rgba(0, 0, 0, 0.05) on small labels (12px)

Layout

The layout operates on a 12-column grid with a 1250px max-width container, centered with symmetric margins. Horizontal rhythm is governed by the 8px unit system: primary spacing uses 24px (md) for section gutters, 40px (lg) for major section breaks, and 64px (xl) for hero-to-content transitions. The hero section spans full-width with a soft gradient background (white to light purple, rgba(105, 80, 243, 0.08)) and contains the h1 headline (64px, 700 weight) centered with 40px bottom margin, followed by body copy (18px, 400 weight) at 60% width for optimal line length (~65 characters). The search bar (input fields + button) sits 24px below copy, using 12px internal padding and 48px height for touch-friendly interaction. Cards and content blocks use 24px padding with 12px gaps between items.

Elevation & Depth

Depth is achieved through subtle shadows and layering rather than color darkening. Level 1 (base content): no shadow, 1px border at rgba(0, 0, 0, 0.05). Level 2 (cards, inputs): box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08), 1px border at surface-container-high (#d3d3d3). Level 3 (modals, popovers, hover states): box-shadow: 0 16px 40px rgba(0, 0, 0, 0.12), 1px border at outline-variant (#bfbfbf). Hover transitions use 200ms cubic-bezier(0.2, 0, 0, 1) to feel responsive without jarring. Focus states on interactive elements apply a 3px inset box-shadow of rgba(105, 80, 243, 0.2) to indicate keyboa

Shapes

The shape language follows "Soft Modernism"—rounded corners are used strategically to soften geometry while maintaining clarity. Buttons and primary CTAs use full border-radius (9999px) to create pill-shaped affordances that feel inviting and clickable. Form inputs use 1.5rem (24px) radius for a friendly, approachable feel. Cards and containers use 1rem (16px) radius as the default, creating subtle rounding that doesn't distract. Smaller UI elements (badges, chips) use 0.75rem (12px) radius. This graduated approach ensures that the most interactive elements (buttons) feel the most inviting, wh

Components

Action Elements Buttons are the primary driver of user intent. Button-primary uses 48px height, 12px vertical + 32px horizontal padding, full border-radius (9999px), and the primary color (#6950f3) with white text. On hover, the background shifts to #5c4ace (primary-fixed-dim) with a 200ms transition. On active, it darkens to #403591 (on-primary-container). All buttons use label-md typography (14px, 600 weight) with 0.01em letter-spacing. Button-secondary mirrors the primary structure but uses transparent background with a 1px outline at {colors.outline} (#acacac), shifting to surface-container-low (#f5f5f5) on hover. Never use button text smaller than 14px; apply a minimum 48px height for touch targets.

Containers & Surfaces Cards use 24px padding, 1rem border-radius, and a 1px b

Do's and Don'ts

**Do**

  • Do use the primary color (#6950f3) exclusively on CTAs, focus states, and brand-critical interactions—never on decorative elements.
  • Do maintain 24px minimum gutter spacing between sections and 12px minimum between adjacent items to preserve breathing room.
  • Do apply full border-radius (9999px) to all buttons and primary interactive elements for a welcoming, modern feel.
  • Do use AktivGroteskVF at 600+ weight for headlines and RoobertPRO at 400 weight for body text to maintain the humanistic, accessible tone.
  • Do apply box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08) on hover states for cards and containers to signal interactivity.
  • Do use negative letter-spacing (-0.02em to -0.03em) on headlines to create visual tightness and premium presence.

**Don't**

  • Don't use the primary color (#6950f3) on non-interactive elements or backgrounds—it must remain reserved for actions and focus.
  • Don't collapse spacing below 12px between distinct content zones; whitespace is a design material, not wasted space.
  • Don't use sharp corners (0px border-radius) on any interactive element; minimum is 0.25rem (4px) for icon buttons.
  • Don't apply shadows darker than 0.12 opacity (elevation-lg) on standard cards; reserve the darkest shadows for modals and overlays.
  • Don't mix typefaces within a single text block; use AktivGroteskVF for labels/headings and RoobertPRO for body exclusively.
  • Don't use text smaller than 12px for body copy or 14px for labels; accessibility requires minimum 12px at 1.5 line-height.