Duolingo

Duolingo's iOS app is a cartoon classroom in your pocket.

Back to all styles

A live page in this style is not built yet — the CSS variables and the prompt below are enough to reproduce it.

At a glance

24tokens
12type steps
3radius steps
12pxspacing base

Duolingo, in one page

Duolingo's iOS app is a cartoon classroom in your pocket. The canvas is a clean snow white (#FFFFFF) interrupted by oversized blocks of saturated, cheerful color — Feather Green (#58CC02) on every primary button, Fox Orange (#FF9600) on the streak flame, Bee Yellow (#FFC800) on the gem counter, Cardinal Red (#FF4B4B) on lost hearts. The palette is bright to the point of playful aggression. This is deliberate: Duolingo is trying to convert a chore (language practice) into a game, and the color system borrows more from mobile puzzle games than from education apps. Nothing is muted, nothing is sophisticated, and everything is tuned to reward.

The mascot, Duo the owl, is the brand's load-bearing element. Duo appears on the empty-state lesson screen, pops in to celebrate a streak milestone, crosses his arms on the loss-of-hearts screen, and cries passive-aggressive pleas into push notifications when you skip a day. Illustrations are rounded, flat-shaded, and friendly — no gradients, no rendered shadows, just bold outlines and joyful geometry. Every character in the cast follows the same visual rule: simple shapes, two or three colors, an expressive face.

Typography is Feather Bold for headlines and the Duolingo wordmark only — a custom face by Johnson Banks and Krista Radoeva (2019) inspired by Duo's wings and chunky enough to read like a kids' book. Body type is DIN Next Rounded Pro, a geometric rounded sans that carries the UI. Everything rounds: the letterforms, the button corners (16pt on cards, 12pt on answer tiles), the skill node circles, the progress ring around the XP meter. Dynamic Type is respected but the app's visual rhythm depends on large glyphs sitting on large buttons, so size 13-32pt is the practical working range. The signature typography moment is the big question card — a word or phrase in 22-24pt Feather Bold centered over an illustration, with tappable answer tiles below.

Key Characteristics:

Do's and don'ts

Do

  • Use Snow white (#FFFFFF) as the primary canvas — not off-white, not beige
  • Reserve Feather Green (#58CC02) for the primary action and correct state — it's the verb
  • Build buttons with the 3D ledge (4pt darker-tone offset below) — the chunky feel is the brand
  • Pair every correct/wrong answer with both a haptic and a sound — the game feel needs both channels
  • Let Duo the owl carry emotional moments — empty states, celebrations, streak saves, loss screens
  • Use Cardinal Red (#FF4B4B) for wrong answers, lost hearts, and destructive only — nothing else
  • Keep the HUD (streak, gems, hearts) visible on Home — it's the habit-loop dashboard
  • Round everything: 16pt cards, 12pt tiles, circular nodes, pill chips — no sharp corners on interactive surfaces
  • Use Feather Bold for numbers and headlines; DIN Rounded for everything else
  • Celebrate wins loudly — confetti + haptic + sound + Duo animation on milestones

Don't

  • Don't use sophisticated or muted palettes — Duolingo is deliberately bright and playful
  • Don't use shadows as your depth model — use solid-color 4pt ledges instead
  • Don't use pure black text (#000000) for body — use Eel (#4B4B4B) for softer warmth
  • Don't add more accent colors — the 6-role palette (green/red/orange/yellow/blue/purple) is complete
  • Don't use thin or light font weights — Duolingo type starts at weight 400 and lives at 700-800
  • Don't hide the streak — the streak is the app's emotional core, always surface it
  • Don't use long sentences on buttons — "CONTINUE", "CHECK", "GOT IT" — single-verb caps only
  • Don't animate Duo subtly — when Duo appears, Duo is a personality, not a decoration
  • Don't use system-default iOS alerts for celebrations — build the full-screen takeover with confetti
  • Don't make the path straight — the curved wave is recognized, a straight list feels like email

Copy this into your AI builder

Paste it as-is. Every value below was measured from the original site, not guessed.

Assembled from the measured tokens — the source document has no prompt block.

Build a page in the Duolingo design language. Follow the measured tokens below — do not substitute your own palette.

Colors:
- Feather Green: #58cc02
- Mask Green: #89e219
- Button Green Shadow: #58a700
- Cardinal Red: #ff4b4b
- Fox Orange: #ff9600
- Bee Yellow: #ffc800
- Macaw Blue: #1cb0f6
- Beetle Purple: #ce82ff
- Snow: #ffffff
- Polar: #f7f7f7

Type:
- families: Feather Bold, DIN Next Rounded Pro, SF Pro Rounded, Fallback Stack
- scale: 11, 12, 13, 14, 16, 17, 18, 20, 22
- weights: 400, 500, 700, 800

Shape:
- radius: 12, 15, 17
- elevation: Swan Shadow (`#C4C4C4`): 3D ledge under neutral tile buttons. | Default: `#FFFFFF` face + `#E5E5E5` 2pt border + 2pt ledge shadow `#E5E5E5` | Button Green Shadow: `#58A700`

Spacing: 12, 16

Rules:
- Use Snow white (`#FFFFFF`) as the primary canvas — not off-white, not beige
- Reserve Feather Green (`#58CC02`) for the primary action and correct state — it's the verb
- Build buttons with the 3D ledge (4pt darker-tone offset below) — the chunky feel is the brand
- Pair every correct/wrong answer with both a haptic and a sound — the game feel needs both channels
- Let Duo the owl carry emotional moments — empty states, celebrations, streak saves, loss screens
- Use Cardinal Red (`#FF4B4B`) for wrong answers, lost hearts, and destructive only — nothing else

Avoid:
- Don't use sophisticated or muted palettes — Duolingo is deliberately bright and playful
- Don't use shadows as your depth model — use solid-color 4pt ledges instead
- Don't use pure black text (`#000000`) for body — use Eel (`#4B4B4B`) for softer warmth
- Don't add more accent colors — the 6-role palette (green/red/orange/yellow/blue/purple) is complete
- Don't use thin or light font weights — Duolingo type starts at weight 400 and lives at 700-800
- Don't hide the streak — the streak is the app's emotional core, always surface it

Keep every value literal. If a token is given, use that exact value.

The specification

Colour paletteRead the full spec

Primary

  • Feather Green (#58CC02): The verb color — primary CTAs, "Continue" button, correct answer state, completed skill nodes, XP ring fill.
  • Mask Green (#89E219): Lighter accent — progress bar fills, the top highlight on 3D green buttons.
  • Button Green Shadow (#58A700): The darker ledge below primary green buttons — gives the 3D pressed-surface feel.

Mascot & Gamification

  • Cardinal Red (#FF4B4B): Wrong answer, lost heart, destructive actions, streak-broken state.
  • Fox Orange (#FF9600): Streak flame, daily goal highlight, "on fire" energy state, hearts-refill CTA.
  • Bee Yellow (#FFC800): Gems currency, reward badges, chest icons, yellow stars on skill completion.
  • Macaw Blue (#1CB0F6): Information, links, speaking-exercise state, "Tip" callouts, checkpoint popups.
  • Beetle Purple (#CE82FF): Super Duolingo (premium) accent — used sparingly on the Super badge, promo CTAs.

Canvas & Surfaces

  • Snow (#FFFFFF): Primary light canvas.
  • Polar (#F7F7F7): Section backgrounds, locked-lesson cards, subtle dividers between path sections.
  • Swan (#E5E5E5): UI surfaces — answer tile default, skill-node locked fill, progress-bar track.
  • Swan Shadow (#C4C4C4): 3D ledge under neutral tile buttons.

Text

  • Eel Gray (#4B4B4B): Primary text — question prompts, body copy, labels.
  • Hare Gray (#AFAFAF): Secondary text — helper copy, placeholder, streak-day labels, unselected tab.
  • Wolf Gray (#777777): Tertiary — timestamps, disabled labels.

Dark Mode

Duolingo dark mode shifts to a blue-tinted navy canvas that keeps the cartoon palette legible without the eye-strain of pure light.

  • Dark Canvas (#131F24): Primary dark background — a blue-black, not true black.
  • Dark Surface 1 (#1F2C34): Card / lesson container background.
  • Dark Surface 2 (#37464F): Answer tile default fill, higher-elevation surfaces.
  • Dark Divider (#37464F): Hairline separators.
  • Dark Text Primary (#FFFFFF): Body and prompts invert to white.
  • Dark Text Secondary (#AFAFAF): Hare gray carries through.
  • Accent colors (green, red, orange, yellow, blue, purple) retain their light-mode hex — the brand stays bright against the dark.

Semantic

  • Correct (#58CC02): Green fill + checkmark + "Great!" toast on correct answer.
  • Wrong (#FF4B4B): Red fill + "Correct solution:" reveal + shake animation.
  • Neutral Disabled (#E5E5E5 fill, #AFAFAF text): Locked skill node, disabled answer tile.
Type scaleRead the full spec

Font Family

  • Display / Headlines: Feather Bold (proprietary by Johnson Banks / Krista Radoeva, 2019) — chunky, rounded, inspired by Duo's wings. Used for the wordmark, hero numbers ("7" day streak), and question prompts.
  • Body / UI: DIN Next Rounded Pro (Monotype) — geometric sans with rounded terminals. All buttons, labels, body copy, tab bar labels.
  • Fallback Stack: SF Pro Rounded on iOS (closest free substitute), then -apple-system, BlinkMacSystemFont, 'Nunito', 'Baloo 2', sans-serif
  • Non-Latin: DIN Next Rounded Pro has CJK siblings in Monotype's library; Duolingo ships localized fonts per script

Hierarchy

RoleFontSizeWeightLine HeightLetter SpacingNotes
WordmarkFeather Bold34pt7001.0-0.5ptThe "duolingo" logotype
Hero Streak NumberFeather Bold56pt7001.0-1.0ptThe big "7" on streak detail
Screen TitleFeather Bold28pt7001.15-0.4pt"Unit 3", "Shop", "Leaderboard"
Question PromptFeather Bold22pt7001.25-0.2pt"Translate this sentence"
Section HeaderDIN Rounded20pt8001.2-0.2pt"Daily Quests", "Your League"
Skill Node LabelDIN Rounded16pt8001.20pt"Basics 1", "Food", "Travel"
Primary ButtonDIN Rounded17pt8001.00.4pt"CONTINUE", "CHECK" — tracked + uppercase
Answer TileDIN Rounded17pt7001.20ptTap-to-answer word choices
BodyDIN Rounded16pt4001.40ptLesson explanations, tip content
HelperDIN Rounded14pt5001.30ptSub-copy, "3 of 10 lessons"
HUD NumberFeather Bold18pt7001.0-0.1ptStreak count, gem count, heart count
Meta / TimestampDIN Rounded13pt5001.20pt"5 min ago", "Day 12"
Tab LabelDIN Rounded11pt7001.00.2ptTab bar labels
Label (UPPER)DIN Rounded12pt8001.21.0pt"SECTION 1", "STAGE 2" on path headers

Principles

  • Two families, one voice: Feather for emotion (titles, numbers, Duo-said-so moments), DIN Rounded for everything else — buttons, tiles, labels.
  • Weight concentrated at 400 / 500 / 700 / 800: No thin, no black. Bold is the default tone; 800 is the button voice.
  • Uppercase only on button labels: "CONTINUE", "CHECK", "GOT IT" — tracked at 0.4pt for the chunky-button feel. Never uppercase body copy.
  • Numbers are stars: The streak, gem, and XP counts live in Feather Bold at sizes 2x the surrounding UI — Duolingo treats numbers as celebratory.
  • Dynamic Type supported on body: Prompts and body copy scale; button labels, tab labels, and HUD numbers stay fixed to preserve layout.
Components and layoutRead the full spec

Buttons

The 3D Primary Button (The Green Slab) The single most recognizable Duolingo component. A chunky button with a visible "ledge" below — a 4pt darker-green shadow that makes the button appear to sit on top of itself.

  • Shape: Rounded rectangle, 16pt corner radius, full-width inside 16pt insets (or 56pt tall pill for smaller CTAs)
  • Height: 56pt for full-width, 48pt for inline
  • Top face: #58CC02 (Feather Green)
  • Bottom ledge: #58A700, offset y: +4pt, visible via a boxShadow: 0 4px 0 #58A700 or overlay
  • Pressed: scale 1.0 but translate y: +4pt so the top face meets the ledge (no visible ledge when pressed) + soft haptic
  • Text: DIN Rounded 17pt weight 800 uppercase, white, letter-spacing 0.4pt
  • Used for: "CONTINUE", "CHECK", "START", "GOT IT"

The 3D Secondary / Neutral Button (The Swan Slab) Same 3D construction, grayscale.

  • Top face: #FFFFFF
  • Bottom ledge: #E5E5E5 (Swan)
  • Border: 2pt solid #E5E5E5
  • Text: Eel Gray #4B4B4B, same typography as primary
  • Used for: "SKIP", "NO THANKS", "MAYBE LATER"

The 3D Destructive Button (The Red Slab)

  • Top face: #FF4B4B
  • Bottom ledge: #E53030
  • Text: white
  • Used for: "END SESSION", "CLEAR PROGRESS", rarely used — destructive actions usually live behind confirm sheets

Icon Actions (Heart, Close, Settings)

  • Size: 24pt glyph, 44pt hit area
  • Default: Hare #AFAFAF or Eel #4B4B4B depending on context
  • Active: role color (red heart, orange flame, yellow gem)

Answer Tile (Tap-to-choose word)

  • Shape: Rounded rectangle, 12pt corner radius
  • Default: #FFFFFF face + #E5E5E5 2pt border + 2pt ledge shadow #E5E5E5
  • Hover/selected: #DDF4FF (light blue tint) face + #84D8FF border + Macaw Blue ledge
  • Correct after check: #D7FFB8 (green tint) face + #58CC02 border + text #58A700
  • Wrong after check: #FFDFE0 face + #FF4B4B border + text #EA2B2B
  • Font: DIN Rounded 17pt w700 Eel gray
  • Padding: 12pt vertical, 20pt horizontal

Cards & Containers

Skill Node (Path Circle) The signature Duolingo element. A circular node on the curved learning path, containing an icon and (when completed) a star crown.

  • Diameter: 80pt (standard), 96pt (current / "you are here" node pulses to 96pt)
  • Completed: #58CC02 fill + white icon + 3D ledge #58A700 + yellow crown with star count above
  • In-progress: #58CC02 fill + white icon + 3D ledge + animated pulse ring
  • Locked: #E5E5E5 fill + #AFAFAF lock icon + no ledge
  • Gold-crowned (completed to max level): #FFC800 fill + white icon + #E29F03 ledge + crown badge
  • Pressed: scale 0.96 + soft haptic
  • Legendary (Super Duolingo exclusive): #CE82FF fill + white + sparkle overlay

Lesson Card (Home unit header)

  • Background: Brand color for that unit (often green but varies per unit)
  • Height: 140pt, full-width minus 16pt margins
  • 16pt corner radius
  • White Feather Bold title, 22pt
  • Subtitle DIN Rounded 15pt w500 white 85% opacity
  • Right side: illustration of Duo or the unit mascot

Question Card (Lesson screen)

  • Full-width, white canvas
  • Top 40%: illustration or speech-bubble with the question subject
  • Center: prompt in Feather Bold 22pt Eel, centered
  • Below: 2-4 answer tiles laid out in a 2-column grid (tap-to-select) or linear (tap-to-translate)
  • Bottom: fixed CHECK button (disabled gray until an answer is selected, primary green when ready)

XP Ring Card (Home HUD / profile)

  • Circular progress ring, 48pt diameter, 4pt stroke
  • Track: #E5E5E5
  • Fill: #58CC02 (rotates from top, 0 to 360deg with animation)
  • Center: XP number in Feather Bold 14pt

HUD Chip (Streak / Gems / Hearts)

  • Pill shape, 32pt tall, 500pt corner radius
  • Icon left (20pt) + number right in Feather Bold 18pt
  • Streak: flame icon #FF9600 + number in Eel (#4B4B4B light / white dark)
  • Gems: diamond icon #1CB0F6 + number
  • Hearts: heart icon #FF4B4B + number (or infinity symbol for Super users)
  • Background: transparent in HUD, #F7F7F7 in detail cards

Navigation

Bottom Tab Bar

  • Height: 60pt + safe area
  • Background: #FFFFFF with 1pt top border #E5E5E5
  • Tabs (5): Learn (path), Leaderboard (trophy), Quests (scroll/target), Shop (heart+gem), Profile
  • Icon size: 28pt
  • Active color: Feather Green #58CC02 with a soft green tint background pill (36pt height, 500pt radius, #E5F8D5 fill) behind the active tab
  • Inactive: Hare #AFAFAF
  • Labels: hidden by default on Duolingo's current iOS app (icon-only), optional 11pt DIN Rounded w700 below icon
  • Active tab: filled SF Symbol equivalent; inactive: outlined

Top HUD (Home screen)

  • Height: 56pt + safe area
  • Flag (28pt circular) left-aligned — language selector
  • Streak chip, gems chip, hearts chip — right-aligned, 12pt gap between
  • Background: transparent over scroll with blur on scroll-up
  • The flag tap opens a bottom sheet language switcher

Lesson Top Bar (during active lesson)

  • Height: 56pt + safe area
  • Close (X) icon left — 24pt Eel gray, 44pt hit area
  • Progress bar center — 12pt tall, 500pt radius, #E5E5E5 track, #58CC02 fill with #89E219 top highlight
  • Hearts counter right — heart icon + number

Input Fields

Text Input (Free-type answer)

Responsive behaviourRead the full spec

Device Sizes

DeviceWidthKey Changes
iPhone SE (3rd gen)375ptPath nodes at 72pt; horizontal offset reduced to ±40pt
iPhone 13/14/15390ptStandard 80pt nodes; path offset ±60pt
iPhone 15/16 Pro393ptDynamic Island accommodated in top HUD
iPhone 15/16 Pro Max430pt88pt nodes; question illustration scales to 280pt
iPad768pt+2-column path (dual-track layout); answer tiles in 4-column grid

Dynamic Type

  • Question prompts, body, lesson explanations: full scale
  • Button labels: fixed (uppercase layout is tight)
  • HUD numbers: fixed (dashboard alignment)
  • Tab labels: fixed
  • Skill node labels: scale up to XL only (layout-sensitive)

Orientation

  • All screens: portrait-locked (Duolingo is one-hand usage)
  • Match / word-bank exercises do allow landscape on iPad for dual-column layout

Touch Targets

  • Primary button: 56pt tall — impossible to miss
  • Answer tiles: 48pt minimum tall
  • Skill nodes: 80pt (well above the 44pt HIG minimum)
  • Icon buttons: 44pt hit area with 24pt glyph
  • HUD chips: 32pt tall but 44pt effective tap

Safe Area Handling

  • Top: HUD respects the safe area and Dynamic Island; chips align to the trailing edge
  • Bottom: tab bar respects the home indicator; during active lesson the CHECK button sits just above the safe area
  • Sides: 16pt content insets on all scrollable screens

Drop-in CSS variables

The same values as a theme block. Add the class to <body> and the site repaints.

body.theme-duolingo {--page-bg: #ffffff;
  --page-bg-gradient: none;
  --text-color: #131f24;
  --heading-color: #131f24;
  --link-color: #427f00;
  --link-hover-color: #274c00;
  --border-color: #d5d7d8;
  --card-bg: #ffffff;
  --card-shadow: 0 1px 2px rgba(19,31,36,0.06);
  --card-hover-shadow: 0 6px 18px rgba(19,31,36,0.12);
  --header-bg: #131f24;
  --header-text-color: #ffffff;
  --header-shadow: none;
  --footer-bg: #ffffff;
  --footer-text-color: #666d71;
  --button-bg: #58a700;
  --button-text-color: #000000;
  --button-hover-bg: #3d7400;
  --button-border: none;
  --button-border-radius: 15px;
  --button-secondary-bg: #f1f2f2;
  --button-secondary-text-color: #131f24;
  --button-secondary-hover-bg: #e3e4e5;
  --button-secondary-border: 1px solid #d5d7d8;
  --prompt-bg: #f3f4f4;
  --prompt-text-color: #131f24;
  --base-font: var(--font-helvetica);
  --heading-font: var(--font-helvetica);
  --card-border-radius: 15px;
}

Download theme.css

Visually close to

Measured with a deterministic colour + geometry comparison across 958 styles. Not a hand-picked list.

Where this came from

Source document
ios/design-md/misc/duolingo/DESIGN.md · 25.8 KB
Repository
Meliwat/awesome-ios-design-md
Licence
MIT

Source text is reproduced under its original licence. Tokens, similarity scores and page structure are ours.