DESIGN.md · Analysis

Duolingo

duolingo.com · 27 Sept 2026 · 47 colors · duolingo-sans, sans-serif, Roboto, sans-serif

Duolingo

Duolingo is a gamified language learning platform that makes education fun, accessible, and effective through bite-sized lessons, vibrant characters, and playful interactions.

Colors

surface#ffffff
surface-dim#f5f5f5
surface-bright#ffffff
surface-container-lowest#fafafa
surface-container-low#f0f0f0
surface-container#e8e8e8
surface-container-high#e0e0e0
surface-container-highest#d9d9d9
on-surface#3c3c3c
on-surface-variant#666666
inverse-surface#1a1a1a
inverse-on-surface#f5f5f5
outline#999999
outline-variant#cccccc
surface-tint#58cc02
primary#58cc02
on-primary#ffffff
primary-container#d4f5a8
on-primary-container#2d6b00
inverse-primary#a8e63d
secondary#1cb0f6
on-secondary#ffffff
secondary-container#b3e5fc
on-secondary-container#003d82
tertiary#ffad00
on-tertiary#ffffff
tertiary-container#ffe0b2
on-tertiary-container#663d00
error#ff4d4d
on-error#ffffff
error-container#ffcccc
on-error-container#660000
primary-fixed#d4f5a8
primary-fixed-dim#a8e63d
on-primary-fixed#1a4d00
on-primary-fixed-variant#2d6b00
secondary-fixed#b3e5fc
secondary-fixed-dim#4db8f5
on-secondary-fixed#001f3f
on-secondary-fixed-variant#003d82
tertiary-fixed#ffe0b2
tertiary-fixed-dim#ffb84d
on-tertiary-fixed#331f00
on-tertiary-fixed-variant#663d00
background#ffffff
on-background#3c3c3c
surface-variant#e8e8e8

Typography

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

Design guidance

Overview

Duolingo is a gamified language and skills learning platform that transforms education into an engaging, playful experience through vibrant character-driven narratives, bite-sized lessons, and celebratory feedback loops. The brand embodies "Playful Minimalism"—a design philosophy that combines clean, accessible interfaces with bold, joyful color accents and whimsical character illustrations. The emotional response is one of encouragement and delight: users feel motivated rather than intimidated, celebrated rather than judged. The visual language prioritizes clarity and approachability, using generous whitespace (background: #ffffff), high-contrast primary green (#58cc02) for all CTAs, and a supporting palette of vibrant secondaries (cyan #1cb0f6, golden yellow #ffad00) that evoke playfulness without chaos.

The brand voice is conversational, encouraging, and slightly irreverent—never condescending, always optimistic. Duolingo speaks to learners as peers embarking on an adventure, not as students being lectured. Vocabulary patterns favor active, present-tense language ("Learn Spanish today," "Keep your streak alive") and occasional humor (character names like Duo the owl, streak-freezing mechanics). The tone is warm but efficient: sentences are short, instructions are clear, and every interaction feels like a small win. Example sentence in brand voice: "You're on a 47-day streak—don't break it now!"

Colors

The Duolingo color system is built on a foundation of high-contrast, accessible hues that support both playfulness and clarity. Primary (#58cc02, a vibrant lime green) is the signature brand color, used exclusively for call-to-action buttons ("Get Started," "Continue"), progress indicators, and all interactive affordances that demand user attention. This green is derived from the brand's iconic owl mascot and appears in the logo; it commands ~38 instances across the observed DOM. On-primary is pure white (#ffffff) for maximum contrast and readability at 48px button heights. Secondary (#1cb0f6, a bright cyan) supports the primary as a secondary accent for links, secondary buttons, and informational highlights; it appears ~30 times in the color token set. Tertiary (#ffad00, a warm golden yel

Typography

The Duolingo type system pairs a custom sans-serif (duolingo-sans) for headlines and display text with Roboto for body copy, creating a hierarchy that balances personality with legibility. Display (56px, 700 weight, -0.02em tracking) is used sparingly for hero headlines like "The most fun way to learn languages, chess, and more!" Headline-lg (40px, 700 weight) anchors major section titles. Headline-md (32px, 700 weight) is applied to subsection headings and card titles. Title-lg (24px, 600 weight) bridges headlines and body text for medium-emphasis content. Body-lg (18px, 400 weight, 28px line-height) is used for introductory paragraphs and prominent descriptive text. Body-md (16px, 400 weight, 24px line-height) is the default body text size, applied to all paragraph content, list items, a

Layout

The Duolingo layout system uses a fluid, centered grid with a max-width of 1280px (container-max-width: 1280px) and 12-column structure, ensuring responsive scaling from mobile (320px) to desktop. The hero section employs a two-column layout: left column (40% width) contains the illustrative character stack; right column (60% width) holds the headline, subheading, and dual CTAs. Horizontal padding is set to {spacing.gutter} (24px) on desktop, reducing to {spacing.md} (24px) on tablet and {spacing.sm} (12px) on mobile. Vertical rhythm is maintained through consistent section spacing: lg spacing (40px) separates major sections (hero, feature blocks, language carousel), md spacing (24px) separates cards and subsections, and sm spacing (12px) separates inline elements. The language carousel at

Elevation & Depth

Duolingo employs a subtle, flat-design elevation system that avoids heavy shadows, maintaining the playful, approachable aesthetic. Elevation is conveyed through three discrete levels: Level 1 (Base) uses no shadow; elements sit flush on the white background (#ffffff). Level 2 (Standard Card) applies box-shadow: 0 3px 8px rgba(0, 0, 0, 0.15), creating a soft, diffused shadow that lifts cards 4px above the surface; this is used on all card components and input fields in their default state. Level 3 (Elevated/Hover) applies box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12), creating a more pronounced l

Shapes

Duolingo employs a "Soft-Technical" shape philosophy: rounded corners are used consistently but never excessively, creating a friendly, approachable interface without sacrificing clarity or visual hierarchy. The rounded scale progresses from sm (0.25rem / 4px) for small UI elements like inline badges, to DEFAULT (0.5rem / 8px) for input fields and minor components, to md (0.75rem / 12px) for form inputs and small cards, to lg (1rem / 16px) for primary buttons and standard cards, to xl (1.5rem / 24px) for large modals and hero containers, and full (9999px) for pill-shaped badges and toggle swit

Components

Action Elements Buttons are the primary interactive affordance on Duolingo. Button-primary (background: #58cc02, text: #ffffff, height: 48px, padding: 0 32px, border-radius: 16px, font-weight: 600, letter-spacing: 0.02em) is used for all primary CTAs: "Get Started," "Continue," "Sign Up." On hover, the background transitions to #4ba302 (a darker green, -15% lightness) with a colored shadow (0 3px 8px rgba(88, 204, 2, 0.25)), and the transition timing is 200ms ease-out. On active/press, the background darkens further to #3d8601 (-30% lightness) with no shadow, creating tactile feedback. Button-secondary (background: transparent, text: #1cb0f6, border: 2px solid #1cb0f6, height: 48px, padding: 0 32px, border-radius: 16px, font-weight: 600) is used for secondary CTAs like "I Already Have

Do's and Don'ts

**Do**

  • Do use primary green (#58cc02) exclusively for call-to-action buttons and interactive affordances—never for body text, backgrounds, or decorative elements.
  • Do maintain 48px minimum button heights and 44px minimum input heights to ensure mobile touch targets meet WCAG 2.1 Level AAA (56px × 56px recommended).
  • Do apply the lg border-radius (16px) consistently to buttons and cards to reinforce the soft-technical aesthetic and signal interactivity.
  • Do use generous whitespace (lg spacing: 40px between sections, md spacing: 24px within cards) to create a calm, approachable learning environment.
  • Do pair duolingo-sans headlines with Roboto body text to balance personality with legibility—never use duolingo-sans for body copy below 20px.
  • Do apply subtle shadows (0 3px 8px rgba(0, 0, 0, 0.15)) to cards and elevated elements to create depth without visual heaviness.
  • Do use secondary cyan (#1cb0f6) and tertiary yellow (#ffad00) as supporting accents—never as primary text or large background areas.
  • Do test all interactive states (hover, focus, active, disabled) with a 200ms transition timing to ensure snappy but not jarring feedback.

**Don't**

  • Don't use pure black (#000000) or pure white (#ffffff) for text on colored backgrounds—always use on-primary (#ffffff) or on-secondary (#ffffff) pairs defined in the color system.
  • Don't apply border-radius values smaller than 4px (sm) or larger than 24px (xl) outside of full (9999px) pill shapes—this maintains visual consistency and prevents accidental inconsistency.
  • Don't stack primary and secondary buttons horizontally without at least 16px gap—this prevents visual confusion and ensures each button remains a distinct affordance.
  • Don't use shadows larger than 0 8px 24px rgba(0, 0, 0, 0.12) (Level 3 elevation)—deeper shadows feel heavy and contradict the playful, lightweight aesthetic.
  • Don't apply letter-spacing greater than 0.03em on body text—this reduces readability and feels overly technical for a learning platform.
  • Don't use the secondary cyan (#1cb0f6) or tertiary yellow (#ffad00) for disabled states—always use outline (#999999) or surface-container-high (#e0e0e0).
  • Don't render headlines in Roboto—always use duolingo-sans to maintain brand personality and visual hierarchy differentiation.
  • Don't apply box-shadow to input fields in their default state—shadows should only appear on hover/focus to signal interactivity.

Made by Sokosumi: AI coworkers for marketing

This tool is free. Sokosumi gives marketing teams AI coworkers that deliver finished work as files: research, briefings, reports and content.

Start free

*No Credit Card required