# Duolingo — Style Reference
> Playful high-contrast education brand built on green actions, rounded type, and saturated illustration
**Theme:** normal
测量值已归一化;名称、用途和建议属于解释。字体摘要独立列示,不按位置配对;字体文件未随产物分发。
Within the sampled Chinese-language public pages, Duolingo pairs white/light-gray surfaces with saturated #58cc02 green actions, blue secondary links, navy Super sections, rounded 12–16px controls, and hard 2–4px shadows. Duolingo Sans carries UI text while Feather appears at large display sizes; Courses contributes catalog link cards and a language select, and Super contributes dark navy subscription/marketing panels.
Source: https://duolingo.com/
## Tokens — Colors
| Name | Value | Token | Role |
|---|---|---|---|
| White | #ffffff | --color-white | White page surface and text on saturated colorful surfaces. |
| Light green | #a5ed6e | --color-green-light | Light green accent/highlight color. |
| Black | #000000 | --color-black | Black body default and SVG ink. |
| Light border | #e5e5e5 | --color-border-light | Light gray border and button shadow tone. |
| Muted text | #777777 | --color-text-muted | Muted footer/link text. |
| Transparent black | #00000000 | --color-transparent-black | Transparent utility background/border. |
| Cookie consent green | #6cc04a | --color-cookie-green | OneTrust consent banner green; utility UI, not inferred as the core brand action color. |
| Gray heading text | #4b4b4b | --color-text-heading-gray | Heading and secondary-link text on light surfaces. |
| Alternate body text | #3d3d3d | --color-text-body-alt | Near-default body text candidate. |
| Duolingo green | #58cc02 | --color-brand-green | Primary brand/action green used for CTAs, headings, icons, and highlights. |
| Magenta accent | #b70070 | --color-magenta | Saturated magenta accent candidate. |
| Disabled text | #afafaf | --color-text-disabled | Language/menu control text in a disabled-looking gray. |
| Subtle surface | #f7f7f7 | --color-surface-subtle | Very light neutral surface. |
| Body text | #3c3c3c | --color-text-body | Default body and navigation text color. |
| Action blue | #1cb0f6 | --color-action-blue | Blue secondary-action/link color on light hero surfaces. |
| Deep navy | #000437 | --color-navy-deep | Dark navy Super Duolingo surface and text accent. |
| Navy | #042c60 | --color-navy | Navy Super Duolingo surface and large heading color. |
| White 80% surface | #ffffffcc | --color-white-80 | High-opacity white surface candidate. |
| Light cyan | #66e1ff | --color-cyan-light | Light cyan accent candidate. |
| Orange accent | #ff8e00 | --color-orange | Orange mascot/illustration accent. |
| Pale green | #d7ffb8 | --color-green-pale | Pale green highlight/text candidate. |
| White 40% surface | #ffffff66 | --color-white-40 | Semi-transparent white surface/border candidate. |
| Observed color #AF623C | #af623c | --color-orange-af623c | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Yellow accent | #ffad00 | --color-yellow | Yellow illustration/accent candidate. |
| Bright blue | #00c0ff | --color-blue-bright | Bright blue accent candidate. |
| Observed color #FFC6B7 | #ffc6b7 | --color-red-ffc6b7 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Green button shadow | #58a700 | --color-brand-green-shadow | Darker green 4px hard shadow beneath primary buttons. |
| Soft navy | #1a1e4c | --color-navy-soft | Slightly softer navy surface candidate. |
| Deep blue | #0084c2 | --color-blue-deep | Deep blue accent candidate. |
| Black 30% overlay | #0000004d | --color-overlay-black-30 | Semi-transparent dark overlay. |
| Black 40% overlay | #00000066 | --color-overlay-black-40 | Stronger semi-transparent dark overlay. |
| Medium blue | #00a9e5 | --color-blue-medium | Medium blue accent candidate. |
| Observed color #FFB7E3 | #ffb7e3 | --color-pink-ffb7e3 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Deep magenta | #cc348d | --color-magenta-deep | Deep magenta accent candidate. |
| Observed color #696969 | #696969 | --color-neutral-696969 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #C6775C | #c6775c | --color-orange-c6775c | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #A46648 | #a46648 | --color-orange-a46648 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| White 50% surface | #ffffff80 | --color-white-50 | Semi-transparent white surface/border candidate. |
| Observed color #DB8D74 | #db8d74 | --color-red-db8d74 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #FFCBA3 | #ffcba3 | --color-orange-ffcba3 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #33E3FF | #33e3ff | --color-cyan-33e3ff | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #00C1DE | #00c1de | --color-cyan-00c1de | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #FF878D | #ff878d | --color-red-ff878d | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #FF9500 | #ff9500 | --color-orange-ff9500 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #E1E3E4 | #e1e3e4 | --color-neutral-e1e3e4 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Bright yellow | #ffe700 | --color-yellow-bright | Bright yellow accent candidate. |
| Medium yellow | #ffc700 | --color-yellow-medium | Medium yellow accent candidate. |
| Deep yellow | #e6a000 | --color-yellow-deep | Deep yellow accent candidate. |
| Observed color #231D24 | #231d24 | --color-neutral-231d24 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #F49000 | #f49000 | --color-orange-f49000 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #EE9583 | #ee9583 | --color-red-ee9583 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #3700FF | #3700ff | --color-blue-3700ff | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #A570FF | #a570ff | --color-purple-a570ff | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #FFB100 | #ffb100 | --color-orange-ffb100 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #FFB3E6 | #ffb3e6 | --color-pink-ffb3e6 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #FFFEFF | #fffeff | --color-neutral-fffeff | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Bright green | #89e219 | --color-green-bright | Bright green accent candidate. |
| Observed color #E18E70 | #e18e70 | --color-orange-e18e70 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| White 10% surface | #ffffff1a | --color-white-10 | Low-opacity white layer on dark surfaces. |
| Observed color #C56700 | #c56700 | --color-orange-c56700 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #F19E49 | #f19e49 | --color-orange-f19e49 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #FFC7B8 | #ffc7b8 | --color-red-ffc7b8 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #FED101 | #fed101 | --color-yellow-fed101 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #DDF4FF | #ddf4ff | --color-cyan-ddf4ff | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #E89665 | #e89665 | --color-orange-e89665 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #9F9F9F | #9f9f9f | --color-neutral-9f9f9f | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #593F86 | #593f86 | --color-purple-593f86 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #FFFFFF33 | #ffffff33 | --color-neutral-ffffff33 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #FFC99D | #ffc99d | --color-orange-ffc99d | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #FFCC76 | #ffcc76 | --color-orange-ffcc76 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #FFAADE | #ffaade | --color-pink-ffaade | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #86401F | #86401f | --color-orange-86401f | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #D9D9D9 | #d9d9d9 | --color-neutral-d9d9d9 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #00BDFF | #00bdff | --color-cyan-00bdff | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #393939 | #393939 | --color-neutral-393939 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #9DEEC7 | #9deec7 | --color-green-9deec7 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #FF86D0 | #ff86d0 | --color-pink-ff86d0 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #5EC6FF | #5ec6ff | --color-blue-5ec6ff | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #FFDE00 | #ffde00 | --color-yellow-ffde00 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Observed color #3DBCF8 | #3dbcf8 | --color-cyan-3dbcf8 | 用途未确认:颜色值来自已采页面计算样式,具体全局语义未验证。 |
| Hero rainbow gradient | Gradient | --gradient-gradient-hero-rainbow | Green-to-blue-to-magenta diagonal marketing gradient. |
## Tokens — Typography
### Duolingo Sans stack — Primary UI/body stack; duolingo-sans regular, italic, and 700 faces were loaded. · --font-font-duolingo-sans
- **Substitute:** sans-serif
- **Rendered fonts observed:** PingFang SC, Duolingo Sans Thin
- **Weights:** 400, 500, 600, 700
- **Sizes:** 13px, 13.008px, 14px, 15px, 16px, 17px, 19px, 24px, 32px, 49.3px
- **Line height:** 1, 1.053, 1.083, 1.15, 1.17, 1.176, 1.2, 1.214, 1.231, 1.33, 1.333, 1.4, 1.412, 1.467, 1.5, 1.579, 1.667, normal
- **Letter spacing:** 0.13008px, 0.8px, 1px, normal
- **Role:** Primary UI/body stack; duolingo-sans regular, italic, and 700 faces were loaded.
### Feather display stack — Display/heading stack observed at large sizes; Feather 700 was loaded. Some icon-font contexts may share this family. · --font-font-feather
- **Substitute:** sans-serif
- **Rendered fonts observed:** PingFang SC, Feather Bold
- **Weights:** 700
- **Sizes:** 36px, 44px, 48px, 62px, 64px
- **Line height:** 1.08, normal
- **Letter spacing:** -1.86px, -1.32px, -1.28px, -0.72px, normal
- **Role:** Display/heading stack observed at large sizes; Feather 700 was loaded. Some icon-font contexts may share this family.
### Type Scale
| Role | Family | Weight | Size | Line Height | Letter Spacing | Token |
|---|---|---|---|---|---|---|
| duolingo-sans 15px / 22px · 700 | duolingo-sans | 700 | 15px | 1.467 | normal | --text-type-15px-700-22px-font-size |
| duolingo-sans 13px / 16px · 700 | duolingo-sans | 700 | 13px | 1.231 | normal | --text-type-13px-700-16px-font-size |
| duolingo-sans 17px / 20px · 500 | duolingo-sans | 500 | 17px | 1.176 | normal | --text-type-17px-500-20px-font-size |
| duolingo-sans 15px / 20px · 700 | duolingo-sans | 700 | 15px | 1.333 | 0.8px | --text-type-15px-700-20px-font-size |
| duolingo-sans 17px / 20.4px · 700 | duolingo-sans | 700 | 17px | 1.2 | normal | --text-type-17px-700-20p4px-font-size |
| duolingo-sans 13.008px / 15.6096px · 600 | duolingo-sans | 600 | 13.008px | 1.2 | 0.13008px | --text-type-13p008px-600-15p6096px-font-size |
| duolingo-sans 15px / 20px · 500 | duolingo-sans | 500 | 15px | 1.333 | normal | --text-type-15px-500-20px-font-size |
| duolingo-sans 15px / 15px · 700 | duolingo-sans | 700 | 15px | 1 | 0.8px | --text-type-15px-700-15px-font-size |
| duolingo-sans 15px / 18px · 700 | duolingo-sans | 700 | 15px | 1.2 | 0.8px | --text-type-15px-700-18px-font-size |
| duolingo-sans 19px / 20px · 700 | duolingo-sans | 700 | 19px | 1.053 | normal | --text-type-19px-700-20px-font-size |
| duolingo-sans 17px / 24px · 500 | duolingo-sans | 500 | 17px | 1.412 | normal | --text-type-17px-500-24px-font-size |
| duolingo-sans 15px / normal · 700 | duolingo-sans | 700 | 15px | normal | 0.8px | --text-type-15px-700-normal-font-size |
| duolingo-sans 19px / 26.6px · 700 | duolingo-sans | 700 | 19px | 1.4 | normal | --text-type-19px-700-26p6px-font-size |
| feather 48px / normal · 700 | feather | 700 | 48px | normal | normal | --text-type-48px-700-normal-font-size |
| duolingo-sans 17px / 19.89px · 500 | duolingo-sans | 500 | 17px | 1.17 | normal | --text-type-17px-500-19p89px-font-size |
| duolingo-sans 49.3px / 57.681px · 700 | duolingo-sans | 700 | 49.3px | 1.17 | normal | --text-type-49p3px-700-57p681px-font-size |
| duolingo-sans 17px / 20px · 700 | duolingo-sans | 700 | 17px | 1.176 | normal | --text-type-17px-700-20px-font-size |
| duolingo-sans 14px / 17px · 700 | duolingo-sans | 700 | 14px | 1.214 | normal | --text-type-14px-700-17px-font-size |
| duolingo-sans 13.008px / 19.512px · 400 | duolingo-sans | 400 | 13.008px | 1.5 | normal | --text-type-13p008px-400-19p512px-font-size |
| feather 36px / normal · 700 | feather | 700 | 36px | normal | normal | --text-type-36px-700-normal-font-size |
| duolingo-sans 17px / 25.5px · 500 | duolingo-sans | 500 | 17px | 1.5 | normal | --text-type-17px-500-25p5px-font-size |
| duolingo-sans 19px / 20px · 500 | duolingo-sans | 500 | 19px | 1.053 | normal | --text-type-19px-500-20px-font-size |
| duolingo-sans 16px / 22.4px · 700 | duolingo-sans | 700 | 16px | 1.4 | normal | --text-type-16px-700-22p4px-font-size |
| duolingo-sans 15px / 20px · 700 | duolingo-sans | 700 | 15px | 1.333 | 1px | --text-type-15px-700-20px-5cfa-font-size |
| duolingo-sans 13px / 18.2px · 700 | duolingo-sans | 700 | 13px | 1.4 | normal | --text-type-13px-700-18p2px-font-size |
| feather 64px / normal · 700 | feather | 700 | 64px | normal | -1.28px | --text-type-64px-700-normal-font-size |
| feather 44px / 47.52px · 700 | feather | 700 | 44px | 1.08 | normal | --text-type-44px-700-47p52px-font-size |
| feather 62px / 66.96px · 700 | feather | 700 | 62px | 1.08 | normal | --text-type-62px-700-66p96px-font-size |
| duolingo-sans 17px / 24px · 700 | duolingo-sans | 700 | 17px | 1.412 | normal | --text-type-17px-700-24px-font-size |
| duolingo-sans 32px / normal · 700 | duolingo-sans | 700 | 32px | normal | normal | --text-type-32px-700-normal-font-size |
| duolingo-sans 24px / 36px · 700 | duolingo-sans | 700 | 24px | 1.5 | normal | --text-type-24px-700-36px-font-size |
| duolingo-sans 19px / 30px · 500 | duolingo-sans | 500 | 19px | 1.579 | normal | --text-type-19px-500-30px-font-size |
| duolingo-sans 19px / 28.5px · 700 | duolingo-sans | 700 | 19px | 1.5 | normal | --text-type-19px-700-28p5px-font-size |
| duolingo-sans 15px / 17.25px · 700 | duolingo-sans | 700 | 15px | 1.15 | 0.8px | --text-type-15px-700-17p25px-font-size |
| duolingo-sans 24px / 31.92px · 500 | duolingo-sans | 500 | 24px | 1.33 | normal | --text-type-24px-500-31p92px-font-size |
| duolingo-sans 17px / 19.55px · 400 | duolingo-sans | 400 | 17px | 1.15 | normal | --text-type-17px-400-19p55px-font-size |
| duolingo-sans 24px / 26px · 700 | duolingo-sans | 700 | 24px | 1.083 | normal | --text-type-24px-700-26px-font-size |
| duolingo-sans 19px / 28.5px · 500 | duolingo-sans | 500 | 19px | 1.5 | normal | --text-type-19px-500-28p5px-font-size |
| feather 36px / normal · 700 | feather | 700 | 36px | normal | -0.72px | --text-type-36px-700-normal-7d6a-font-size |
| feather 44px / 47.52px · 700 | feather | 700 | 44px | 1.08 | -1.32px | --text-type-44px-700-47p52px-9780-font-size |
| feather 62px / 66.96px · 700 | feather | 700 | 62px | 1.08 | -1.86px | --text-type-62px-700-66p96px-6de5-font-size |
| duolingo-sans 24px / 40px · 700 | duolingo-sans | 700 | 24px | 1.667 | normal | --text-type-24px-700-40px-font-size |
## Tokens — Spacing & Shapes
**Density:** 未确认
### Spacing Scale
| Name | Value | Token |
|---|---|---|
| Observed spacing 12px | 12px | --spacing-space-12px |
| Observed spacing 16px | 16px | --spacing-space-16px |
| Observed spacing 8px | 8px | --spacing-space-8px |
| Observed spacing 10px | 10px | --spacing-space-10px |
| Observed spacing 24px | 24px | --spacing-space-24px |
| Observed spacing 6px | 6px | --spacing-space-6px |
| Observed spacing 32px | 32px | --spacing-space-32px |
| Observed spacing 48px | 48px | --spacing-space-48px |
| Observed spacing 13.008px | 13.008px | --spacing-space-13p008px |
| Observed spacing 28px | 28px | --spacing-space-28px |
| Observed spacing 20px | 20px | --spacing-space-20px |
| Observed spacing 101px | 101px | --spacing-space-101px |
| Observed spacing 226px | 226px | --spacing-space-226px |
| Observed spacing 96px | 96px | --spacing-space-96px |
| Observed spacing 15px | 15px | --spacing-space-15px |
| Observed spacing 7px | 7px | --spacing-space-7px |
| Observed spacing 56px | 56px | --spacing-space-56px |
| Observed spacing 3px | 3px | --spacing-space-3px |
| Observed spacing 2px | 2px | --spacing-space-2px |
| Observed spacing 112px | 112px | --spacing-space-112px |
| Observed spacing 40px | 40px | --spacing-space-40px |
| Observed spacing -12px | -12px | --spacing-space-12px-41f0 |
| Observed spacing 14px | 14px | --spacing-space-14px |
| Observed spacing 9.5px | 9.5px | --spacing-space-9p5px |
| Observed spacing -8px | -8px | --spacing-space-8px-b05a |
| Observed spacing 22px | 22px | --spacing-space-22px |
| Observed spacing 4px | 4px | --spacing-space-4px |
| Observed spacing 30px | 30px | --spacing-space-30px |
| Observed spacing 1px | 1px | --spacing-space-1px |
| Observed spacing 28.7969px | 28.7969px | --spacing-space-28p7969px |
| Observed spacing 23px | 23px | --spacing-space-23px |
| Observed spacing 80px | 80px | --spacing-space-80px |
| Observed spacing 40.3281px | 40.3281px | --spacing-space-40p3281px |
| Observed spacing 52px | 52px | --spacing-space-52px |
| Observed spacing 18px | 18px | --spacing-space-18px |
| Observed spacing 70px | 70px | --spacing-space-70px |
| Observed spacing 71px | 71px | --spacing-space-71px |
| Observed spacing 5px | 5px | --spacing-space-5px |
| Observed spacing 25px | 25px | --spacing-space-25px |
| Observed spacing 64px | 64px | --spacing-space-64px |
| Observed spacing 27px | 27px | --spacing-space-27px |
| Observed spacing -244.641px | -244.641px | --spacing-space-244p641px |
| Observed spacing 236px | 236px | --spacing-space-236px |
| Observed spacing 40.3438px | 40.3438px | --spacing-space-40p3438px |
| Observed spacing 187.5px | 187.5px | --spacing-space-187p5px |
| Observed spacing 170px | 170px | --spacing-space-170px |
| Observed spacing 72px | 72px | --spacing-space-72px |
| Observed spacing 19px | 19px | --spacing-space-19px |
| Observed spacing -266px | -266px | --spacing-space-266px |
| Observed spacing 36px | 36px | --spacing-space-36px |
| Observed spacing -9px | -9px | --spacing-space-9px |
| Observed spacing 150px | 150px | --spacing-space-150px |
| Observed spacing 114px | 114px | --spacing-space-114px |
| Observed spacing 185px | 185px | --spacing-space-185px |
| Observed spacing -220px | -220px | --spacing-space-220px |
| Observed spacing -65px | -65px | --spacing-space-65px |
| Observed spacing -340px | -340px | --spacing-space-340px |
| Observed spacing 140px | 140px | --spacing-space-140px |
| Observed spacing 7.5px | 7.5px | --spacing-space-7p5px |
| Observed spacing -6.8px | -6.8px | --spacing-space-6p8px |
| Observed spacing -201.594px | -201.594px | --spacing-space-201p594px |
| Observed spacing -100px | -100px | --spacing-space-100px |
| Observed spacing 21.6px | 21.6px | --spacing-space-21p6px |
| Observed spacing -120px | -120px | --spacing-space-120px |
### Border Radius
| Element | Value |
|---|---|
| Observed radius 16px | 16px |
| Observed radius 12px | 12px |
| Observed radius 2px | 2px |
| Observed radius 50% | 50% |
| Observed radius 14px | 14px |
| Observed radius 13px | 13px |
### Shadows
| Name | Value | Token |
|---|---|---|
| Gray hard shadow | #e5e5e5 0px 2px 0px 0px | --shadow-shadow-gray-2px |
| White 40% hard shadow | #ffffff66 0px 4px 0px 0px | --shadow-shadow-white-40-4px |
| Green hard shadow | #58a700 0px 4px 0px 0px | --shadow-shadow-green-4px |
| Ambient shadow | #00000033 0px 0px 18px 0px | --shadow-shadow-ambient |
| White 80% hard shadow | #ffffffcc 0px 4px 0px 0px | --shadow-shadow-white-80-4px |
| White 50% hard shadow | #ffffff80 0px 4px 0px 0px | --shadow-shadow-white-50-4px |
| White 50% compact shadow | #ffffff80 0px 2px 0px 0px | --shadow-shadow-white-50-2px |
### Layout
- **Page max-width:** 未确认
- **Section gap:** 未确认
- **Card padding:** 未确认
- **Element gap:** 未确认
## Components
### Language menu trigger
**Role:** Transparent header control with gray 15px/700 text; opens language navigation but expanded state was not captured.
Background #00000000; Text #afafaf; Font duolingo-sans 15px / 700; Line height 17.25px; Letter spacing 0.8px; Padding 0px; Radius 0px.
### Desktop global navigation
**Role:** Transparent 70px navigation with 17px/500 gray text and a compact language selector.
Background #00000000; Text #3c3c3c; Font duolingo-sans 17px / 500; Line height 20px; Letter spacing normal; Padding 0px; Radius 0px.
### Hero secondary action
**Role:** 330×50 transparent action shell with blue text and 12px radius; visual fill/border is supplied by descendants/pseudo-elements.
Background #00000000; Text #1cb0f6; Font duolingo-sans 15px / 700; Line height normal; Letter spacing 0.8px; Padding 0px 16px 0px 16px; Radius 12px; Top border 2px solid #00000000; Right border 2px solid #00000000; Bottom border 4px solid #00000000; Left border 2px solid #00000000.
### Mobile global navigation
**Role:** 390px-wide mobile navigation variant with the same 70px height and gray text.
Background #00000000; Text #3c3c3c; Font duolingo-sans 17px / 500; Line height 20px; Letter spacing normal; Padding 0px 15px 0px 15px; Radius 0px.
### Mobile scrolled navigation
**Role:** Mobile navigation geometry captured after scroll; remains transparent with stable text color.
Background #00000000; Text #3c3c3c; Font duolingo-sans 17px / 500; Line height 20px; Letter spacing normal; Padding 0px 15px 0px 15px; Radius 0px.
### OneTrust preference button
**Role:** White/green outlined cookie-consent control from the third-party OneTrust banner.
Background #ffffff; Text #6cc04a; Font duolingo-sans 13.008px / 600; Line height 15.6096px; Letter spacing 0.13008px; Padding 12px 0px 12px 0px; Radius 2px; Outline 1px solid #000000; Outline offset 1px.
### Course language select
**Role:** White 40px native select on the courses page, using 17px black text.
Background #ffffff; Text #000000; Font duolingo-sans 17px / 400; Line height 19.55px; Letter spacing normal; Padding 0px; Radius 0px.
### OneTrust mobile preference button
**Role:** Expanded-width mobile variant of the cookie preference control.
Background #ffffff; Text #6cc04a; Font duolingo-sans 13.008px / 600; Line height 15.6096px; Letter spacing 0.13008px; Padding 12px 0px 12px 0px; Radius 2px; Outline 1px solid #000000; Outline offset 1px.
### Super header CTA
**Role:** Transparent 44px CTA shell with white uppercase 15px/700 text and 16px radius.
Background #00000000; Text #ffffff; Font duolingo-sans 15px / 700; Line height 18px; Letter spacing 0.8px; Padding 0px 20px 0px 20px; Radius 16px; Top border 2px solid #00000000; Right border 2px solid #00000000; Bottom border 4px solid #00000000; Left border 2px solid #00000000.
### Super desktop navigation
**Role:** Transparent 74px navigation with gray 17px/500 text.
Background #00000000; Text #3c3c3c; Font duolingo-sans 17px / 500; Line height 20px; Letter spacing normal; Padding 0px; Radius 0px.
### Super footer navigation
**Role:** White 17px/500 footer links arranged in a compact 39px-high dark-section navigation.
Background #00000000; Text #ffffff; Font duolingo-sans 17px / 500; Line height 20px; Letter spacing normal; Padding 0px; Radius 0px.
### Homepage course strip navigation
**Role:** 74px transparent navigation containing repeated course links in gray text.
Background #00000000; Text #3c3c3c; Font duolingo-sans 17px / 500; Line height 20px; Letter spacing normal; Padding 0px; Radius 0px.
### Homepage carousel arrow
**Role:** 50×50 transparent arrow control with deep-navy text and 12px radius.
Background #00000000; Text #000437; Font duolingo-sans 15px / 700; Line height normal; Letter spacing 0.8px; Padding 0px 16px 0px 16px; Radius 12px; Bottom border 4px solid #00000000.
### OneTrust reject button
**Role:** Green filled cookie-consent action with white text and 2px radius.
Background #6cc04a; Text #ffffff; Font duolingo-sans 13.008px / 600; Line height 15.6096px; Letter spacing 0.13008px; Padding 12px 10px 12px 10px; Radius 2px; Border 1px solid #6cc04a.
### OneTrust mobile reject button
**Role:** Expanded-width mobile variant of the green cookie rejection control.
Background #6cc04a; Text #ffffff; Font duolingo-sans 13.008px / 600; Line height 15.6096px; Letter spacing 0.13008px; Padding 12px 10px 12px 10px; Radius 2px; Border 1px solid #6cc04a.
### Super plan CTA
**Role:** 50×310px transparent CTA shell with white uppercase text and 16px radius.
Background #00000000; Text #ffffff; Font duolingo-sans 15px / 700; Line height 18px; Letter spacing 0.8px; Padding 0px 16px 0px 16px; Radius 16px; Bottom border 4px solid #00000000.
### Super feature navigation
**Role:** 240×560px vertical navigation area with white link text on a dark section.
Background #00000000; Text #ffffff; Font duolingo-sans 17px / 500; Line height 20px; Letter spacing normal; Padding 0px; Radius 0px.
### Super social navigation
**Role:** Compact 358×24px social/link row with white 17px/500 text.
Background #00000000; Text #ffffff; Font duolingo-sans 17px / 500; Line height 20px; Letter spacing normal; Padding 0px; Radius 0px.
### Courses language menu trigger
**Role:** Transparent courses-header control matching the global language selector geometry.
Background #00000000; Text #ffffff; Font duolingo-sans 15px / 700; Line height 17.25px; Letter spacing 0.8px; Padding 0px; Radius 0px.
### Courses menu icon
**Role:** 40×40 transparent icon control using an SVG background image and gray color.
Background #00000000; Text #3c3c3c; Font duolingo-sans 17px / 500; Line height 20px; Letter spacing normal; Padding 0px; Radius 0px.
### Super comparison CTA
**Role:** 400×50 transparent CTA shell with white uppercase text and 16px radius.
Background #00000000; Text #ffffff; Font duolingo-sans 15px / 700; Line height 18px; Letter spacing 0.8px; Padding 0px 16px 0px 16px; Radius 16px; Bottom border 4px solid #00000000.
### Super feature CTA
**Role:** 310×50 transparent CTA shell with white uppercase text and 16px radius.
Background #00000000; Text #ffffff; Font duolingo-sans 15px / 700; Line height 18px; Letter spacing 0.8px; Padding 0px 16px 0px 16px; Radius 16px; Bottom border 4px solid #00000000.
### Courses sign-in button
**Role:** Compact 44px transparent sign-in action with deep-blue uppercase text and 16px radius.
Background #00000000; Text #0b3e71; Font duolingo-sans 15px / 700; Line height 18px; Letter spacing 0.8px; Padding 0px 20px 0px 20px; Radius 16px; Bottom border 4px solid #00000000.
### Course catalog link card
**Role:** White 217px card/link with 16px radius, legacy blue link text, and 17px/500 typography.
Background #ffffff; Text #0000ee; Font duolingo-sans 17px / 500; Line height 20px; Letter spacing normal; Padding 12px 12px 24px 12px; Radius 16px; Top border 2px solid #e5e5e5; Right border 2px solid #e5e5e5; Bottom border 4px solid #e5e5e5; Left border 2px solid #e5e5e5.
### Super mobile plan CTA
**Role:** 358×50 transparent mobile CTA shell with white uppercase text and 16px radius.
Background #00000000; Text #ffffff; Font duolingo-sans 15px / 700; Line height 18px; Letter spacing 0.8px; Padding 0px 16px 0px 16px; Radius 16px; Bottom border 4px solid #00000000.
### OneTrust focus-state preference button
**Role:** Cookie preference control observed in the focus-state snapshot; styling remains white/green outlined.
Background #ffffff; Text #6cc04a; Font duolingo-sans 13.008px / 600; Line height 15.6096px; Letter spacing 0.13008px; Padding 12px 0px 12px 0px; Radius 2px.
### Course catalog wide link card
**Role:** 200px-wide mobile course catalog link with the same white card form.
Background #ffffff; Text #0000ee; Font duolingo-sans 17px / 500; Line height 20px; Letter spacing normal; Padding 12px 12px 24px 12px; Radius 16px; Top border 2px solid #e5e5e5; Right border 2px solid #e5e5e5; Bottom border 4px solid #e5e5e5; Left border 2px solid #e5e5e5.
### Super mobile comparison CTA
**Role:** 358×50 mobile comparison CTA shell with white uppercase text.
Background #00000000; Text #ffffff; Font duolingo-sans 15px / 700; Line height 18px; Letter spacing 0.8px; Padding 0px 16px 0px 16px; Radius 16px; Bottom border 4px solid #00000000.
### Super top CTA
**Role:** 160×44 transparent CTA shell with white uppercase text and 16px radius.
Background #00000000; Text #ffffff; Font duolingo-sans 15px / 700; Line height 18px; Letter spacing 0.8px; Padding 0px 20px 0px 20px; Radius 16px; Bottom border 4px solid #00000000.
### Super bottom CTA
**Role:** 342×50 transparent CTA shell with white uppercase text and 16px radius.
Background #00000000; Text #ffffff; Font duolingo-sans 15px / 700; Line height 18px; Letter spacing 0.8px; Padding 0px 16px 0px 16px; Radius 16px; Bottom border 4px solid #00000000.
### Super repeated CTA
**Role:** Repeated 160×44 transparent CTA shell with white uppercase text.
Background #00000000; Text #ffffff; Font duolingo-sans 15px / 700; Line height 18px; Letter spacing 0.8px; Padding 0px 20px 0px 20px; Radius 16px; Bottom border 4px solid #00000000.
### Primary registration CTA
**Role:** 330×50 homepage registration action. The anchor shell is transparent; its ::before layer supplies the visual #58cc02 surface, 12px radius, and 4px #58a700 hard shadow. Hover and focus snapshots preserve this form; focus changes outline offset to 1px but outline style remains none.
Background #00000000; Text #ffffff; Font duolingo-sans 15px / 700; Line height normal; Letter spacing 0.8px; Padding 0px 16px 0px 16px; Radius 12px; Bottom border 4px solid #00000000.
## Do's and Don'ts
### Do
- Use white or very light neutral surfaces as the base for learning/content areas.
- Reserve #58cc02 green for primary actions, success/energy moments, and key marketing headings; support it with the darker #58a700 hard shadow.
- Keep controls friendly and legible: 12–16px radii, 44–50px desktop heights, and uppercase 15px/700 button text with letter spacing.
- Use Duolingo Sans for UI/body text and Feather for oversized display headings.
- Use deep navy surfaces to distinguish Super subscription sections from the free-product marketing flow.
### Don't
- Do not infer a global spacing grid from individual computed padding/margin values; the sample includes component-specific dimensions.
- Do not treat OneTrust cookie-consent styling as core Duolingo product styling.
- Do not claim a visible keyboard focus treatment: the captured focus target has outline-style none, with only outline offset changing.
- Do not generalize hover/focus observations to expanded menus, cookie-preference dialogs, or authenticated learning states.
## Surfaces
| Level | Name | Value | Purpose |
|---|---|---|---|
| 0 | White base surface | #ffffff | Primary page and card surface. |
| 2 | Cookie consent surface | #6cc04a | OneTrust consent action surface; utility UI. |
| 3 | Deep navy surface | #000437 | Dark Super Duolingo section surface. |
| 3 | Navy surface | #042c60 | Super Duolingo panel/heading surface. |
| 3 | Soft navy surface | #1a1e4c | Slightly softer dark navy surface. |
| 4 | 30% overlay surface | #0000004d | Semi-transparent dark overlay. |
| 4 | 40% overlay surface | #00000066 | Stronger semi-transparent dark overlay. |
| 1 | Subtle neutral surface | #f7f7f7 | Light neutral panel/surface. |
| 1 | White 10% surface | #ffffff1a | Low-opacity white layer on dark surfaces. |
| 2 | Brand green action surface | #58cc02 | Visual ::before surface of the primary registration CTA. |
| 1 | Blue wash surface | #ddf4ff | Light blue wash surface candidate. |
| 2 | Action blue surface | #1cb0f6 | Blue action/link surface candidate. |
| 3 | Dark navy surface | #100f3e | Dark navy surface candidate. |
## Elevation
- **Gray hard shadow:** #e5e5e5 0px 2px 0px 0px
- **White 40% hard shadow:** #ffffff66 0px 4px 0px 0px
- **Green hard shadow:** #58a700 0px 4px 0px 0px
- **Ambient shadow:** #00000033 0px 0px 18px 0px
- **White 80% hard shadow:** #ffffffcc 0px 4px 0px 0px
- **White 50% hard shadow:** #ffffff80 0px 4px 0px 0px
- **White 50% compact shadow:** #ffffff80 0px 2px 0px 0px