ghost · desktop
Label y เป็น 16px แต่บนเว็บไซต์เป็น 14px; Label height เป็น 17px แต่บนเว็บไซต์เป็น 21px
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 2 จาก 27 ค่าแตกต่างกัน
Focusตรงกัน 100%ค่าที่วัดได้ 22 ค่าตรงกัน
ความมั่นใจของการดึงดีไซน์
Design tokens ที่สกัดจากการวิเคราะห์ความถี่ของ CSSOM โดยไม่ผ่านการตีความของ LLM
ghost · desktop
Label y เป็น 16px แต่บนเว็บไซต์เป็น 14px; Label height เป็น 17px แต่บนเว็บไซต์เป็น 21px
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 2 จาก 27 ค่าแตกต่างกัน
Focusตรงกัน 100%ค่าที่วัดได้ 22 ค่าตรงกัน
ghost · desktop
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 40 ค่าตรงกัน
Focusตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
ghost · desktop
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 28 ค่าตรงกัน
Focusตรงกัน 100%ค่าที่วัดได้ 22 ค่าตรงกัน
secondary · desktop
เรนเดอร์ได้เหมือนเว็บไซต์ 98% ต่ำกว่าเกณฑ์ 97%
สถานะปกติตรงกัน 98%ค่าที่วัดได้ 22 ค่าตรงกัน
Focusตรงกัน 98%ค่าที่วัดได้ 19 ค่าตรงกัน
desktop
Group 2 y เป็น 259px แต่บนเว็บไซต์เป็น 273px; Group 2 height เป็น 92px แต่บนเว็บไซต์เป็น 68px และอีก 4 รายการ
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 6 จาก 153 ค่าแตกต่างกัน
Hoverตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
Focusตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
สถานะปกติ อินสแตนซ์ที่ 2ตรงกัน 100%ค่าที่วัดได้ 6 จาก 153 ค่าแตกต่างกัน
สถานะปกติ อินสแตนซ์ที่ 3ตรงกัน 100%ค่าที่วัดได้ 6 จาก 153 ค่าแตกต่างกัน
สถานะปกติ อินสแตนซ์ที่ 4ตรงกัน 100%ค่าที่วัดได้ 6 จาก 153 ค่าแตกต่างกัน
desktop
Group y เป็น 139px แต่บนเว็บไซต์เป็น 0px; Link y เป็น 139px แต่บนเว็บไซต์เป็น 0px และอีก 1 รายการ
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 3 จาก 97 ค่าแตกต่างกัน
Hoverตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
Focusตรงกัน 100%ค่าที่วัดได้ 2 จาก 18 ค่าแตกต่างกัน
สถานะปกติ อินสแตนซ์ที่ 2ตรงกัน 100%ค่าที่วัดได้ 3 จาก 97 ค่าแตกต่างกัน
สถานะปกติ อินสแตนซ์ที่ 3ตรงกัน 100%ค่าที่วัดได้ 3 จาก 97 ค่าแตกต่างกัน
สถานะปกติ อินสแตนซ์ที่ 4ตรงกัน 100%ค่าที่วัดได้ 3 จาก 97 ค่าแตกต่างกัน
สถานะปกติ อินสแตนซ์ที่ 5ตรงกัน 100%ค่าที่วัดได้ 3 จาก 97 ค่าแตกต่างกัน
desktop
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 104 ค่าตรงกัน
Focusตรงกัน 100%ค่าที่วัดได้ 22 ค่าตรงกัน
สถานะปกติ อินสแตนซ์ที่ 2ตรงกัน 100%ค่าที่วัดได้ 104 ค่าตรงกัน
สถานะปกติ อินสแตนซ์ที่ 3ตรงกัน 100%ค่าที่วัดได้ 104 ค่าตรงกัน
สถานะปกติ อินสแตนซ์ที่ 4ตรงกัน 100%ค่าที่วัดได้ 104 ค่าตรงกัน
สถานะปกติ อินสแตนซ์ที่ 5ตรงกัน 100%ค่าที่วัดได้ 104 ค่าตรงกัน
สถานะปกติ อินสแตนซ์ที่ 6ตรงกัน 100%ค่าที่วัดได้ 104 ค่าตรงกัน
desktop
ตรวจสอบไม่ได้: ภาพถ่าย สื่อ หรือโฆษณาที่หน้าเว็บวางไว้ปิดทับส่วนใหญ่ขององค์ประกอบ และไม่มีส่วนอื่นที่ต่างกัน การเปรียบเทียบจึงไม่ได้บอกอะไรเกี่ยวกับสูตร
สถานะปกติตรงกัน 99%ค่าที่วัดได้ 121 ค่าตรงกัน
Hoverตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
Focusตรงกัน 99%ค่าที่วัดได้ 18 ค่าตรงกัน
สถานะปกติ อินสแตนซ์ที่ 2ตรงกัน 100%ค่าที่วัดได้ 121 ค่าตรงกัน
สถานะปกติ อินสแตนซ์ที่ 3ตรงกัน 99%ค่าที่วัดได้ 121 ค่าตรงกัน
สถานะปกติ อินสแตนซ์ที่ 4ตรงกัน 100%ค่าที่วัดได้ 121 ค่าตรงกัน
desktop
Group 2 height เป็น 80px แต่บนเว็บไซต์เป็น 105px; Text 3 height เป็น 50px แต่บนเว็บไซต์เป็น 75px
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 2 จาก 164 ค่าแตกต่างกัน
สถานะปกติ อินสแตนซ์ที่ 2ตรงกัน 100%ค่าที่วัดได้ 2 จาก 164 ค่าแตกต่างกัน
สถานะปกติ อินสแตนซ์ที่ 3ตรงกัน 100%ค่าที่วัดได้ 2 จาก 164 ค่าแตกต่างกัน
desktop
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 94 ค่าตรงกัน
desktop
Icon x เป็น -9px แต่บนเว็บไซต์เป็น 16px
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 1 จาก 102 ค่าแตกต่างกัน
Focusตรงกัน 100%ค่าที่วัดได้ 22 ค่าตรงกัน
desktop
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 182 ค่าตรงกัน
desktop
ไม่ได้สร้างสูตร: ไม่พบองค์ประกอบบนหน้าเว็บ
ไม่มีการเปรียบเทียบสำหรับคอมโพเนนต์นี้
desktop
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 40 ค่าตรงกัน
Focusตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
desktop
Group width เป็น 1016px แต่บนเว็บไซต์เป็น 1002px; List width เป็น 1016px แต่บนเว็บไซต์เป็น 1002px
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 2 จาก 496 ค่าแตกต่างกัน
desktop
เรนเดอร์ได้เหมือนเว็บไซต์ 100% ต่ำกว่าเกณฑ์ 96%
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 24 ค่าตรงกัน
Hoverตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
Focusตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
สถานะปกติ อินสแตนซ์ที่ 2ตรงกัน 100%ค่าที่วัดได้ 24 ค่าตรงกัน
สถานะปกติ อินสแตนซ์ที่ 3ตรงกัน 100%ค่าที่วัดได้ 24 ค่าตรงกัน
สถานะปกติ อินสแตนซ์ที่ 4ตรงกัน 100%ค่าที่วัดได้ 24 ค่าตรงกัน
desktop
สถานะปกติตรงกัน 99%ค่าที่วัดได้ 156 ค่าตรงกัน
Focusไม่ได้ตรวจสอบ
Focus บน link 2ตรงกัน 99%ค่าที่วัดได้ 18 ค่าตรงกัน
Focus บน linkตรงกัน 99%ค่าที่วัดได้ 18 ค่าตรงกัน
Focus บน logoตรงกัน 99%ค่าที่วัดได้ 18 ค่าตรงกัน
desktop
Root height เป็น 128px แต่บนเว็บไซต์เป็น 70px; Inner y เป็น 18px แต่บนเว็บไซต์เป็น 0px และอีก 12 รายการ
สถานะปกติตรงกัน 89%ค่าที่วัดได้ 14 จาก 216 ค่าแตกต่างกัน
Focusไม่ได้ตรวจสอบ
Focus บน cta 2ตรงกัน 89%ค่าที่วัดได้ 19 ค่าตรงกัน
Focus บน cta 3ตรงกัน 89%ค่าที่วัดได้ 19 ค่าตรงกัน
Focus บน ctaตรงกัน 89%ค่าที่วัดได้ 18 ค่าตรงกัน
Focus บน logoตรงกัน 89%ค่าที่วัดได้ 18 ค่าตรงกัน
desktop
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 114 ค่าตรงกัน
Focusไม่ได้ตรวจสอบ
Focus บน buttonตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
Focus บน logoตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
desktop
เรนเดอร์ได้เหมือนเว็บไซต์ 86% ต่ำกว่าเกณฑ์ 96%
สถานะปกติตรงกัน 86%ค่าที่วัดได้ 119 ค่าตรงกัน
Focusไม่ได้ตรวจสอบ
Focus บน logoตรงกัน 86%ค่าที่วัดได้ 18 ค่าตรงกัน
desktop
Text y เป็น 25px แต่บนเว็บไซต์เป็น 23px; Text height เป็น 17px แต่บนเว็บไซต์เป็น 21px
สถานะปกติตรงกัน 95%ค่าที่วัดได้ 2 จาก 99 ค่าแตกต่างกัน
Hoverไม่ได้ตรวจสอบ
Focusไม่ได้ตรวจสอบ
Focus บน ctaตรงกัน 95%ค่าที่วัดได้ 18 ค่าตรงกัน
Hover บน ctaตรงกัน 94%ค่าที่วัดได้ 18 ค่าตรงกัน
Focus บน logoตรงกัน 95%ค่าที่วัดได้ 18 ค่าตรงกัน
mobile
Root height เป็น 128px แต่บนเว็บไซต์เป็น 70px; Inner y เป็น 18px แต่บนเว็บไซต์เป็น 0px และอีก 9 รายการ
สถานะปกติตรงกัน 93%ค่าที่วัดได้ 11 จาก 145 ค่าแตกต่างกัน
Focusไม่ได้ตรวจสอบ
Focus บน logoตรงกัน 93%ค่าที่วัดได้ 18 ค่าตรงกัน
mobile
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 57 ค่าตรงกัน
Focusไม่ได้ตรวจสอบ
Focus บน logoตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
mobile
เรนเดอร์ได้เหมือนเว็บไซต์ 95% ต่ำกว่าเกณฑ์ 96%
สถานะปกติตรงกัน 95%ค่าที่วัดได้ 101 ค่าตรงกัน
Focusไม่ได้ตรวจสอบ
Focus บน logoตรงกัน 95%ค่าที่วัดได้ 18 ค่าตรงกัน
mobile
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 113 ค่าตรงกัน
Focusไม่ได้ตรวจสอบ
Focus บน logoตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
Focus บน menu toggleตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
mobile
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 57 ค่าตรงกัน
Focusไม่ได้ตรวจสอบ
Focus บน logoตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
desktop
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 223 ค่าตรงกัน
Hoverไม่ได้ตรวจสอบ
Focusไม่ได้ตรวจสอบ
Focus บน nav linkตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
Hover บน nav linkตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
desktop
Root height เป็น 118px แต่บนเว็บไซต์เป็น 79px; Nav height เป็น 78px แต่บนเว็บไซต์เป็น 39px และอีก 1 รายการ
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 3 จาก 201 ค่าแตกต่างกัน
Hoverไม่ได้ตรวจสอบ
Focusไม่ได้ตรวจสอบ
Focus บน nav linkตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
Hover บน nav linkตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
desktop
Root height เป็น 78px แต่บนเว็บไซต์เป็น 39px; Link y เป็น 51px แต่บนเว็บไซต์เป็น 12px
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 2 จาก 182 ค่าแตกต่างกัน
Focusไม่ได้ตรวจสอบ
Focus บน linkตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
desktop
Group height เป็น 431px แต่บนเว็บไซต์เป็น 381px; Group height เป็น 431px แต่บนเว็บไซต์เป็น 285px และอีก 29 รายการ
สถานะปกติตรงกัน 99%ค่าที่วัดได้ 31 จาก 2279 ค่าแตกต่างกัน
Focusไม่ได้ตรวจสอบ
Focus บน link 2ตรงกัน 99%ค่าที่วัดได้ 18 ค่าตรงกัน
Focus บน linkตรงกัน 99%ค่าที่วัดได้ 18 ค่าตรงกัน
mobile
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 201 ค่าตรงกัน
Hoverไม่ได้ตรวจสอบ
Focusไม่ได้ตรวจสอบ
Focus บน nav linkตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
Hover บน nav linkตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
mobile
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 182 ค่าตรงกัน
Focusไม่ได้ตรวจสอบ
Focus บน linkตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
mobile
Root height เป็น 155px แต่บนเว็บไซต์เป็น 116px; Inner height เป็น 117px แต่บนเว็บไซต์เป็น 78px และอีก 4 รายการ
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 6 จาก 223 ค่าแตกต่างกัน
Hoverไม่ได้ตรวจสอบ
Focusไม่ได้ตรวจสอบ
Focus บน nav linkตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
Hover บน nav linkตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
mobile
Inner height เป็น 274px แต่บนเว็บไซต์เป็น 378px; List 2 height เป็น 148px แต่บนเว็บไซต์เป็น 252px และอีก 7 รายการ
สถานะปกติตรงกัน 100%ค่าที่วัดได้ 9 จาก 2279 ค่าแตกต่างกัน
Focusไม่ได้ตรวจสอบ
Focus บน link 2ตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
Focus บน linkตรงกัน 100%ค่าที่วัดได้ 18 ค่าตรงกัน
desktop
เรนเดอร์ได้เหมือนเว็บไซต์ 94% ต่ำกว่าเกณฑ์ 97%
สถานะปกติตรงกัน 94%ค่าที่วัดได้ 22 ค่าตรงกัน
Focusตรงกัน 94%ค่าที่วัดได้ 18 ค่าตรงกัน
Duolingo
Duolingo's marketing site reads as a children's picture book built by a disciplined product team. A pure white canvas carries warm charcoal type. The signature Feather Green (primary, #58CC02) shows up as the brand voice: hero headlines, step numbers, the solid CTA fill and the full-bleed footer. Sky Blue (secondary, #1CB0F6) is the second voice, used for links, ghost buttons and the solid course-page header bar. Flat-vector mascots and isometric illustrations carry most of the emotion, so the UI chrome stays simple and lets them play.
Density is low. Sections breathe on a section-padding-y rhythm, and feature rows pair one short green headline with a few lines of gray body copy and a large illustration. Hierarchy comes from typeface switching rather than size alone. The heavy, rounded Feather display face is reserved for hero and section headlines with tight negative tracking. Everything else is Duolingo Sans at only two weights (500 and 700). Interactive labels are 700 with wide 0.8px tracking, which makes them feel stamped and chunky.
The tactile, toy-like quality comes from borders, not shadows. Cards and buttons carry a thicker bottom border than their other edges, for example card-3 at 2px sides and a 4px bottom in Cloud Gray (hairline, #E5E5E5). The result is a pressable 'lip' rather than a floating lift. Corners are generously rounded (rounded.lg 16px dominates), and nothing on the page is sharp.
Key Characteristics:
surface canvas; green (primary) is the brand anchor and floods the footer (footer-landing background #58CC02).ink #3C3C3C for base copy and ink-strong #4B4B4B for titles. Gray muted #777777 is used for supporting copy.The palette is a small set of saturated, cheerful brand hues on white, with a disciplined ladder of warm grays for text and borders. No gradients are used anywhere; every fill is a flat solid.
primary, #58CC02): the brand voice. It colors hero and section headlines (card-title), step numbers (step-list-item-text), the solid green header variant (header-inner-4 background) and the full footer field (footer-landing, footer-landing-mobile background). Use it for the primary CTA fill and celebratory headings, never for body copy.secondary, #1CB0F6): the secondary accent. It is the ghost-button label (button-ghost), inline links in cards (card-link), the active course link (header-inner-link) and the solid course-page header bar (header-inner-2 background).tertiary, #00CD9C): a page-specific accent, measured on one page. It colors the label of button-ghost-3 and the CTA in card-4, and tints the page's only spread shadow.accent-orange, #FF9600): a rare highlight, seen once. Treat it as a spot color only.navy, #0B3E71): the label color of button-secondary when it sits on the sky-blue header. Reserve it for text on secondary fields.surface, #FFFFFF): the page background and the fill of card-3. It is also the 4px ring around card-3-media.on-primary, #FFFFFF): text on green or blue fields, such as header-landing-text, header-inner-2-cta-3 and footer-inner-3-link.ink, #3C3C3C): the inherited base text color on almost every component root (card, header-landing, footer-inner). It is the most-used color on the site.ink-strong, #4B4B4B): titles and emphasized labels, for example card-2-text, card-3-text, accordion-title, card-4-title and app-store-badge.muted, #777777): supporting body copy and descriptions, for example card-body, card-3-text-2, card-4-body and step-list-item-text-2.muted-light, #AFAFAF): tertiary UI text such as utility nav (footer-navigation-link, header-inner-link-2), the language selector (language-selector-2) and eyebrow labels (card-4-text).ink-black, #101010): input text only (input).black, #000000): the mobile menu toggle icon (header-inner-mobile-menu-toggle).link, #0000EE): the browser-default anchor color. It was measured on logo links and on the card-3 root, where it is never actually visible as text. Do not use it as a design color; links that show text use secondary.hairline, #E5E5E5): every visible border on the site. Examples are the card-3 outline and lip, the card-5 2px outline and the footer-inner 2px top rule. It is also the input fill (input background) and the accordion divider fill (accordion-group-2).These two greens were measured only inside the footer recipes, never in the page sampling. They exist to sit on the green field.
primary-light, #A5ED6E): footer link text (footer-landing-link, footer-landing-link-2) and the 2px top rule above the legal row (footer-landing-group-2).primary-tint, #D7FFB8): footer column headings (footer-landing-text, footer-landing-text-2).duolingo-sans, sans-serif): the workhorse face, a rounded geometric sans. It sets body, titles, buttons, nav, cards and the footer, and accounts for nearly all measured text on all five pages.feather, sans-serif): the heavy, round-terminal display face. It appears only at hero and section-headline scale (hero-display, display-lg, display-md, and the 48px card-title in card). It always uses weight 700 with negative tracking.| Token | Size | Weight | Line Height | Letter Spacing | Use |
|---|---|---|---|---|---|
hero-display | 80px | 700 | 1.1 | -2.4px | Home hero headline (Feather) |
display-lg | 64px | 700 | 1.5 | -1.28px | Secondary-page hero h1 (Feather) |
display-md | 62px | 700 | 1.1 | -1.86px | Section h2 headlines (Feather) |
headline-lg | 40px | 700 | 1.1 | normal | Sans h1/h2 on inner pages |
headline-md | 32px | 700 | 1.5 | normal | Inner-page h1 |
headline-sm | 28px | 700 | 1.15 | normal | Feature-block titles (card-4-title) |
title-lg | 25px | 700 | 1.35 | normal | Stat and step numerals (card-5-text, step-list-item-text) |
title-md | 24px | 700 | 1.65 | normal | Compact page h1 |
title-sm | 20px | 700 | 1.2 | normal | h3 and accordion titles (accordion-title) |
body-lg | 20px | 500 | 1.4 | normal | Lead paragraphs (card-4-body) |
body-lg-strong | 20px | 700 | 1.4 | normal | Emphasized lead text, card captions (card-2-text) |
body | 17px | 500 | 1.2 | normal | Default body and inherited root text |
button-lg | 16px | 700 | 1 | 0.64px | Large buttons and eyebrows (button-ghost-3, card-4-text) |
button | 15px | 700 | 1.15 | 0.8px | Standard button labels (button-ghost, language-selector-2) |
label-caps | 15px | 700 | 1.35 | 0.8px | Uppercase labels and tags |
nav-link | 15px | 700 | 1.5 | 0.8px | Header and utility nav links |
input (flagged: the render matched 94% of the original pixels, below the 97% required after 2 correction attempts), is a form-control default, not a pattern to copy.button-lg; header-inner-link measured 1px). Body and title text stays at normal tracking.card-group-2 and card-link at 24px on 17px; step-list-item-text-2 at 25px).body at 17px/500 is the inherited root on nearly every component. Keep that baseline when adding content.button and nav-link with uppercase transform.Duolingo Sans and Feather are both proprietary. For Duolingo Sans, use Nunito (open source, rounded terminals). Map 500 to Nunito 600 and 700 to Nunito 800 so the strokes match Duolingo's heavier color, and keep the 0.8px label tracking. For Feather, use Fredoka at 700, or Baloo 2 at 800. Tighten tracking a touch less than the tokens specify (Fredoka is already compact), and check that the hero still reads as one chunky lockup at 80px.
Three spacing measurements were verified:
section-padding-y: 96px. This is the vertical padding between the page's major sections, measured on the page itself rather than on a component. It is the macro rhythm: every new feature block or band starts and ends with this breathing room.button-ghost-3-padding-x: 11px. This is the horizontal padding of the root of button-ghost-3, the teal text button. It is a tight inset; the button's width comes from its label, not from wide padding.footer-inner-inner-max-width: 1048px. This is the max width of the inner footer container on footer-inner.Outside these three values, no internal component spacing was verified. Rebuild padding and gaps visually, and keep them generous.
footer-inner-inner-max-width (1048px). Use the same cap for page content so headers, features and footers align on one column edge.card-3) with consistent gutters. Each card carries a flag, a name and a learner count.Whitespace is the primary separator. Sections are divided by section-padding-y and a change of content rather than by rules or background bands. The exceptions are the solid green footer and the occasional hairline between testimonial rows. Each viewport-height block holds one idea: one headline, one or two short lines of gray copy, one illustration. When adding content, add a new section at the same rhythm rather than packing more into an existing one.
Every spacing token restates a measurement of a verified component recipe, or the step those measurements share. section-padding-y is measured directly on the page sections and feeds no step.
section-padding-y: 96px (vertical padding repeated on the page sections: 2 section edges on 1 page)footer-inner-inner-max-width: 1048px (footer-inner, max width of footer-inner-inner)button-ghost-3-padding-x: 11px (button-ghost-3, horizontal padding of the root)The card-3 grid lays out in 4 columns at desktop. The footer lays out in 2 columns at mobile.
| Level | Treatment | Use |
|---|---|---|
| Base | surface #FFFFFF, no border, no shadow | Page canvas, feature rows, headers on white (header-landing, header-inner) |
| Hairline | 2px solid hairline #E5E5E5 | card-5 outline (2px all sides); footer-inner top rule (2px top). On green, footer-landing-group-2 uses a 2px primary-light #A5ED6E top rule |
| Chunky lip | Thicker bottom border than the sides | card-3: 2px sides and top, 4px bottom, solid #E5E5E5. button-ghost and app-store-badge: 2px sides, 4px bottom, transparent. button-ghost-3 and card-4-cta: 1px sides, 5px bottom, transparent. button-secondary and header-landing-cta: 4px bottom, transparent |
| Tint wash | rgba(0, 205, 156, 0.1) 0px 0px 0px 1440px (spread-only shadow, no blur) | Measured once at page level: a 10% tertiary teal wash that tints the area around a highlighted element |
| Blur | None measured | No backdrop-filter anywhere; headers are static and opaque |
Shadow philosophy. Duolingo builds depth with borders, not with light. The defining move is the 'chunky lip': a bottom border 2–3px heavier than the other edges. It makes cards and buttons look like physical, pressable keys. On card-3 the lip is visible Cloud Gray. On buttons the measured border color is transparent, so the visible lip there comes from a fill the recipes did not capture; the screenshots show the green CTA with a darker green lower edge. The only box-shadow on the site is a spread-only teal tint (rgba(0, 205, 156, 0.1) 0px 0px 0px 1440px). It works as a color wash, not as a lift. Never add soft drop shadows or blur. If something needs to feel raised, give it the thicker bottom border.
| Token | Value | Use |
|---|---|---|
rounded.sm | 8px | Form fields (input) |
rounded.md | 12px | Standard buttons and badges: button-ghost, app-store-badge, header-landing-cta, and the image link in card-2-link |
rounded.lg | 16px | The dominant radius for cards and large buttons: card-3, card-3-media, card-5, button-secondary, button-ghost-3, header-inner-2-cta-3, header-inner-4-cta |
The geometry is soft and rounded throughout. rounded.lg is by far the most frequent value; it gives cards and course tiles their toy-like, rounded-square look. Even the flag thumbnails inside card-3 are rounded squares (card-3-media at 16px, framed by a 4px white border). Buttons split between 12px and 16px with no strong rule. Use rounded.lg for anything card-sized or primary, and rounded.md for compact buttons and badges.
There is no pill or full-circle radius token. The small round check-mark badges and illustration elements visible in the screenshots are artwork, not UI chrome. Do not invent a 999px pill for buttons; Duolingo buttons are rounded rectangles. Square corners appear nowhere in the interactive UI.
Each component below was distilled from the live page: the recipe is a standalone, placeholder-filled reproduction with literal values, and every frontmatter key named in the anatomy carries the same measurements. A verified component reproduced the original in every check; a flagged one is shipped with the reason it did not; one marked not verifiable could not be compared with the original, which says nothing about the recipe.
Button, ghost
Verification: flagged, the button-ghost-label y did not reproduce the measured 14px after 2 correction attempts.
Anatomy
button-ghost: the component root, a <button> (.c-button-ghost)button-ghost-label: label text, 25 characters (.c-button-ghost__label)Recipe
<div class="c-button-ghost-scope">
<button class="c-button-ghost" type="button">
<span class="c-button-ghost__label">lorem ipsum dolor sit ame</span>
</button>
</div>
.c-button-ghost-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-button-ghost {
display: inline-flex;
justify-content: center;
align-items: center;
border-spacing: 0px;
box-sizing: border-box;
height: 50px;
padding: 0px 16px;
position: relative;
background-color: transparent;
color: #1CB0F6;
border-radius: 12px;
cursor: pointer;
transform: matrix(1, 0, 0, 1, 0, 0);
font-family: duolingo-sans, sans-serif;
font-size: 15px;
font-weight: 700;
line-height: normal;
letter-spacing: 0.8px;
text-transform: uppercase;
text-align: center;
white-space: nowrap;
appearance: button;
border-top: 2px solid transparent;
border-right: 2px solid transparent;
border-bottom: 4px solid transparent;
border-left: 2px solid transparent;
}
.c-button-ghost::before {
content: "";
display: block;
box-sizing: border-box;
width: 330px;
height: 48px;
position: absolute;
top: -2px;
right: -2px;
bottom: -2px;
left: -2px;
z-index: -1;
background-color: #FFFFFF;
color: #E5E5E5;
border: 2px solid #E5E5E5;
border-radius: 12px;
box-shadow: #E5E5E5 0px 2px 0px 0px;
}
.c-button-ghost__label {
display: block;
box-sizing: border-box;
overflow-x: hidden;
overflow-y: hidden;
text-overflow: ellipsis;
}
.c-button-ghost:focus {
outline: none;
}
States
Button, secondary
Verification: flagged, the render came out 2 px wider than the original after 2 correction attempts.
Anatomy
button-secondary: the component root, a <button> (.c-button-secondary), 5-character labelRecipe
<div class="c-button-secondary-scope">
<button class="c-button-secondary" type="button">lorem</button>
</div>
.c-button-secondary-scope {
background-color: #1CB0F6;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-button-secondary {
display: inline-flex;
justify-content: center;
align-items: center;
border-spacing: 0px;
box-sizing: border-box;
height: 44px;
padding: 0px 20px;
position: relative;
background-color: transparent;
color: #0B3E71;
border-radius: 16px;
cursor: pointer;
transform: matrix(1, 0, 0, 1, 0, 0);
font-family: duolingo-sans, sans-serif;
font-size: 15px;
font-weight: 700;
line-height: 18px;
letter-spacing: 0.8px;
text-transform: uppercase;
text-align: center;
white-space: nowrap;
appearance: button;
border-top: 0;
border-right: 0;
border-bottom: 4px solid transparent;
border-left: 0;
}
.c-button-secondary::before {
content: "";
display: block;
box-sizing: border-box;
width: 83px;
height: 40px;
position: absolute;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
z-index: -1;
background-color: #FFFFFF;
color: #FFFFFF80;
border-radius: 16px;
box-shadow: #FFFFFF80 0px 4px 0px 0px;
}
.c-button-secondary:focus {
outline: none;
}
States
Button, ghost (2)
Verification: verified against the live page at desktop.
Anatomy
button-ghost-2: the component root, a <button> (.c-button-ghost-2)button-ghost-2-label: label text, 0 characters (.c-button-ghost-2__label)button-ghost-2-label-2: label text, 14 characters (.c-button-ghost-2__label-2)button-ghost-2-label-3: label text, 7 characters (.c-button-ghost-2__label-3)button-ghost-2-image: image placeholder, 14px (.c-button-ghost-2__image)Recipe
<div class="c-button-ghost-2-scope">
<button class="c-button-ghost-2" type="button">
<span class="c-button-ghost-2__label">
<span class="c-button-ghost-2__label-2">lorem ipsum do</span>
<span class="c-button-ghost-2__label-3">lorem i</span>
</span>
<span class="c-button-ghost-2__image" aria-hidden="true"></span>
</button>
</div>
.c-button-ghost-2-scope {
background-color: #1CB0F6;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-button-ghost-2 {
display: flex;
align-items: center;
border-spacing: 0px;
box-sizing: border-box;
padding: 0px;
position: relative;
background-color: transparent;
color: #FFFFFF;
border: 0;
cursor: pointer;
transform: matrix(1, 0, 0, 1, 0, 0);
font-family: duolingo-sans, sans-serif;
font-size: 15px;
font-weight: 700;
line-height: 17.25px;
letter-spacing: 0.8px;
text-transform: uppercase;
text-align: center;
white-space: nowrap;
appearance: button;
transition: filter 0.2s ease;
}
.c-button-ghost-2__label {
display: block;
box-sizing: border-box;
}
.c-button-ghost-2__image {
display: block;
flex-shrink: 0;
box-sizing: border-box;
width: 14px;
height: 14px;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
margin-left: 8px;
}
.c-button-ghost-2:focus {
outline: none;
}
States
Button, ghost (3)
Verification: verified against the live page at desktop.
Anatomy
button-ghost-3: the component root, a <button> (.c-button-ghost-3)button-ghost-3-label: label text, 25 characters (.c-button-ghost-3__label)Recipe
<div class="c-button-ghost-3-scope">
<button class="c-button-ghost-3" type="button">
<span class="c-button-ghost-3__label">lorem ipsum dolor sit ame</span>
</button>
</div>
.c-button-ghost-3-scope {
background-color: #00CD9C1A;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-button-ghost-3 {
display: inline-flex;
justify-content: center;
align-items: center;
border-spacing: 0px;
box-sizing: border-box;
height: 48px;
max-width: 300px;
padding: 0px 11px;
position: relative;
background-color: transparent;
color: #00CD9C;
border-radius: 16px;
cursor: pointer;
transform: matrix(1, 0, 0, 1, 0, 0);
font-family: duolingo-sans, sans-serif;
font-size: 16px;
font-weight: 700;
line-height: 42px;
letter-spacing: 0.64px;
text-transform: uppercase;
text-align: center;
white-space: nowrap;
appearance: button;
border-top: 1px solid transparent;
border-right: 1px solid transparent;
border-bottom: 5px solid transparent;
border-left: 1px solid transparent;
}
.c-button-ghost-3::before {
content: "";
display: block;
box-sizing: border-box;
width: 300px;
height: 44px;
position: absolute;
top: -1px;
right: -1px;
bottom: -1px;
left: -1px;
z-index: -1;
background-color: color(srgb 0.9 0.980392 0.961176);
color: color(srgb 0.75 0.95098 0.902941);
border: 1px solid color(srgb 0.75 0.95098 0.902941);
border-radius: 16px;
box-shadow: color(srgb 0.75 0.95098 0.902941) 0px 3px 0px 1px;
outline: 1px solid color(srgb 0.75 0.95098 0.902941);
}
.c-button-ghost-3__label {
display: block;
box-sizing: border-box;
}
.c-button-ghost-3:focus {
outline: none;
}
States
Card
Verification: flagged, the card-group-2 y did not reproduce the measured 273px after 2 correction attempts.
Anatomy
card: the component root, a <section> (.c-card)card-group: inner flex column (.c-card__group)card-title: heading, 21 characters (.c-card__title)card-body: inner group (.c-card__body)card-group-2: inner group (.c-card__group-2)card-text: label text, 34 characters (.c-card__text, 2 instances)card-link: link, 28-character label (.c-card__link)card-group-3: inner block (.c-card__group-3)card-media: image placeholder, 530px (.c-card__media)Recipe
<div class="c-card-scope">
<section class="c-card">
<div class="c-card__group">
<h2 class="c-card__title">lorem ipsum dolor sit</h2>
<p class="c-card__body">
<span class="c-card__group-2">
<span class="c-card__text">lorem ipsum dolor sit amet consect</span>
<a class="c-card__link" href="#">lorem ipsum dolor sit amet c</a>
<span class="c-card__text">lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor lorem ipsum dolor sit amet consectetur adipi</span>
</span>
</p>
</div>
<div class="c-card__group-3">
<span class="c-card__media" aria-hidden="true"></span>
</div>
</section>
</div>
.c-card-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-card {
display: inline-flex;
align-items: center;
gap: 101px;
border-spacing: 0px;
box-sizing: border-box;
width: 988px;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-card__group {
display: flex;
flex-direction: column;
align-items: start;
flex-shrink: 0;
gap: 24px;
box-sizing: border-box;
max-width: 100%;
}
.c-card__title {
display: block;
box-sizing: border-box;
max-width: 503px;
margin: 0px;
color: #58CC02;
font-family: feather, sans-serif;
font-size: 48px;
font-weight: 700;
line-height: normal;
}
.c-card__body {
display: block;
box-sizing: border-box;
max-width: 473px;
margin: 0px;
color: #777777;
line-height: 24px;
}
.c-card__group-2 {
display: inline;
box-sizing: border-box;
}
.c-card__link {
display: inline;
box-sizing: border-box;
color: #1CB0F6;
cursor: pointer;
font-weight: 700;
text-decoration-line: none;
}
.c-card__group-3 {
display: block;
flex-shrink: 0;
box-sizing: border-box;
width: 530px;
aspect-ratio: 1 / 1;
position: relative;
line-height: 0px;
}
.c-card__media {
display: block;
flex-shrink: 0;
box-sizing: border-box;
width: 530px;
height: 530px;
position: absolute;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
}
.c-card:hover {
flex-direction: row;
}
.c-card:focus {
flex-direction: row;
}
States
Card (2)
Verification: flagged, the card-2-group y did not reproduce the measured 0px after 2 correction attempts.
Anatomy
card-2: the component root, a <div> (.c-card-2)card-2-group: inner block (.c-card-2__group)card-2-link: link (.c-card-2__link)card-2-media: image placeholder, 500x277px (.c-card-2__media)card-2-media-2: image placeholder, 64px (.c-card-2__media-2)card-2-group-2: inner flex row (.c-card-2__group-2)card-2-text: label text, 70 characters (.c-card-2__text)Recipe
<div class="c-card-2-scope">
<div class="c-card-2">
<div class="c-card-2__group">
<a class="c-card-2__link" href="#">
<span class="c-card-2__media" aria-hidden="true"></span>
<span class="c-card-2__media-2" aria-hidden="true"></span>
</a>
</div>
<div class="c-card-2__group-2">
<span class="c-card-2__text">lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod</span>
</div>
</div>
</div>
.c-card-2-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-card-2 {
display: flex;
align-items: center;
border-spacing: 0px;
box-sizing: border-box;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-card-2__group {
display: block;
box-sizing: border-box;
aspect-ratio: 375 / 208;
position: relative;
}
.c-card-2__link {
display: block;
box-sizing: border-box;
width: 100%;
height: 100%;
position: absolute;
top: 0px;
left: 0px;
overflow-x: hidden;
overflow-y: hidden;
color: #0000EE;
border-radius: 12px;
cursor: pointer;
text-decoration-line: none;
}
.c-card-2__media {
display: block;
flex-shrink: 0;
box-sizing: border-box;
width: 500px;
height: 277px;
position: absolute;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
z-index: -1;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
}
.c-card-2__media-2 {
display: block;
flex-shrink: 0;
box-sizing: border-box;
width: 64px;
height: 64px;
position: absolute;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
transform: matrix(1, 0, 0, 1, -32, -32);
}
.c-card-2__group-2 {
display: flex;
flex-grow: 1;
flex-basis: 0%;
gap: 16px;
box-sizing: border-box;
}
.c-card-2__text {
display: block;
box-sizing: border-box;
color: #4B4B4B;
font-size: 20px;
font-weight: 700;
line-height: 28px;
}
.c-card-2:hover {
gap: 40px;
}
.c-card-2:focus {
gap: 40px;
}
States
Card (3)
Verification: verified against the live page at desktop.
Anatomy
card-3: the component root, a <a> (.c-card-3)card-3-group: inner block (.c-card-3__group)card-3-group-2: inner flex row (.c-card-3__group-2)card-3-group-3: inner block (.c-card-3__group-3)card-3-media: image placeholder, 88x68px (.c-card-3__media)card-3-text: label text, 7 characters (.c-card-3__text)card-3-text-2: label text, 12 characters (.c-card-3__text-2)Recipe
<div class="c-card-3-scope">
<a class="c-card-3" href="#">
<div class="c-card-3__group">
<div class="c-card-3__group-2"></div>
<div class="c-card-3__group-3">
<span class="c-card-3__media" aria-hidden="true"></span>
</div>
<div class="c-card-3__text">lorem i</div>
<div class="c-card-3__text-2">lorem ipsum</div>
</div>
</a>
</div>
.c-card-3-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-card-3 {
display: inline-block;
flex-grow: 1;
border-spacing: 0px;
box-sizing: border-box;
min-width: 200px;
max-width: 240px;
min-height: 217px;
padding: 12px 12px 24px;
position: relative;
background-color: #FFFFFF;
color: #0000EE;
border-radius: 16px;
cursor: pointer;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
text-decoration-line: none;
text-align: center;
border-top: 2px solid #E5E5E5;
border-right: 2px solid #E5E5E5;
border-bottom: 4px solid #E5E5E5;
border-left: 2px solid #E5E5E5;
}
.c-card-3__group {
display: block;
box-sizing: border-box;
position: relative;
}
.c-card-3__group-2 {
display: flex;
flex-direction: row-reverse;
box-sizing: border-box;
min-height: 26px;
margin-bottom: 6px;
}
.c-card-3__group-3 {
display: block;
box-sizing: border-box;
height: 80px;
margin-right: auto;
margin-left: auto;
}
.c-card-3__media {
display: inline-block;
flex-shrink: 0;
box-sizing: border-box;
width: 88px;
height: 68px;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
border: 4px solid #FFFFFF;
border-radius: 16px;
}
.c-card-3__text {
display: block;
box-sizing: border-box;
color: #4B4B4B;
font-weight: 700;
line-height: 20.4px;
margin-top: 10px;
}
.c-card-3__text-2 {
display: block;
box-sizing: border-box;
color: #777777;
margin-top: 6px;
}
.c-card-3:focus {
outline: none;
}
States
Card (4)
Verification: not verifiable, what the page placed in it (photos, media, ads) covers most of it and nothing else differs, so the comparison could not be judged.
Anatomy
card-4: the component root, a <section> (.c-card-4)card-4-group: inner flex column (.c-card-4__group)card-4-text: label text, 19 characters (.c-card-4__text)card-4-title: heading, 24 characters (.c-card-4__title)card-4-body: label text, 59 characters (.c-card-4__body)card-4-cta: link (.c-card-4__cta)card-4-text-2: label text, 13 characters (.c-card-4__text-2)card-4-group-2: inner flex row (.c-card-4__group-2)card-4-media: image placeholder, 295x611px (.c-card-4__media)Recipe
<div class="c-card-4-scope">
<section class="c-card-4">
<div class="c-card-4__group">
<span class="c-card-4__text">lorem ipsum dolor s</span>
<h2 class="c-card-4__title">lorem ipsum dolor sit am</h2>
<p class="c-card-4__body">lorem ipsum dolor sit amet consectetur adipiscing elit sed</p>
<a class="c-card-4__cta" href="#">
<span class="c-card-4__text-2">lorem ipsum d</span>
</a>
</div>
<div class="c-card-4__group-2">
<span class="c-card-4__media" aria-hidden="true"></span>
</div>
</section>
</div>
.c-card-4-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-card-4 {
display: inline-flex;
justify-content: space-between;
align-items: center;
align-self: center;
border-spacing: 0px;
box-sizing: border-box;
width: 910px;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-card-4__group {
display: flex;
flex-direction: column;
align-items: center;
box-sizing: border-box;
text-align: center;
}
.c-card-4__text {
display: block;
box-sizing: border-box;
color: #AFAFAF;
font-size: 16px;
font-weight: 700;
line-height: 16px;
letter-spacing: 0.64px;
text-transform: uppercase;
margin-bottom: 12px;
}
.c-card-4__title {
display: block;
box-sizing: border-box;
margin: 0px 0px 16px;
color: #4B4B4B;
font-size: 28px;
font-weight: 700;
line-height: 32px;
}
.c-card-4__body {
display: block;
box-sizing: border-box;
max-width: 442px;
margin: 0px auto 36px;
color: #777777;
font-size: 20px;
line-height: 28px;
}
.c-card-4__cta {
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
width: 100%;
height: 48px;
max-width: 300px;
position: relative;
color: #00CD9C;
border-radius: 16px;
cursor: pointer;
transform: matrix(1, 0, 0, 1, 0, 0);
font-size: 16px;
font-weight: 700;
line-height: 42px;
letter-spacing: 0.64px;
text-transform: uppercase;
text-decoration-line: none;
white-space: nowrap;
padding-right: 11px;
padding-left: 11px;
border-top: 1px solid transparent;
border-right: 1px solid transparent;
border-bottom: 5px solid transparent;
border-left: 1px solid transparent;
}
.c-card-4__cta::before {
content: "";
display: block;
box-sizing: border-box;
width: 300px;
height: 44px;
position: absolute;
top: -1px;
right: -1px;
bottom: -1px;
left: -1px;
z-index: -1;
background-color: #FFFFFF;
color: #E5E5E5;
border: 1px solid #E5E5E5;
border-radius: 16px;
box-shadow: #E5E5E5 0px 3px 0px 1px;
outline: 1px solid #E5E5E5;
}
.c-card-4__text-2 {
display: block;
box-sizing: border-box;
}
.c-card-4__group-2 {
display: flex;
justify-content: center;
flex-shrink: 0;
box-sizing: border-box;
}
.c-card-4__media {
display: block;
flex-shrink: 0;
box-sizing: border-box;
width: 295px;
height: 611px;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
}
.c-card-4:hover {
flex-direction: row-reverse;
}
.c-card-4:focus {
flex-direction: row-reverse;
}
States
Card (5)
Verification: flagged, the card-5-group-2 height did not reproduce the measured 105px after 2 correction attempts.
Anatomy
card-5: the component root, a <div> (.c-card-5)card-5-media: image placeholder, 170px (.c-card-5__media)card-5-text: label text, 9 characters (.c-card-5__text)card-5-group: inner block (.c-card-5__group)card-5-group-2: inner block (.c-card-5__group-2, 2 instances)card-5-group-3: inner flex row (.c-card-5__group-3, 2 instances)card-5-media-2: image placeholder, 13x9px (.c-card-5__media-2, 2 instances)card-5-text-2: label text, 21 characters (.c-card-5__text-2, 2 instances)card-5-text-3: label text, 57 characters (.c-card-5__text-3, 2 instances)Recipe
<div class="c-card-5-scope">
<div class="c-card-5">
<span class="c-card-5__media" aria-hidden="true"></span>
<div class="c-card-5__text">lorem ips</div>
<div class="c-card-5__group">
<div class="c-card-5__group-2">
<div class="c-card-5__group-3">
<span class="c-card-5__media-2" aria-hidden="true"></span>
<span class="c-card-5__text-2">lorem ipsum dolor sit</span>
</div>
<div class="c-card-5__text-3">lorem ipsum dolor sit amet consectetur adipiscing elit se</div>
</div>
<div class="c-card-5__group-2">
<div class="c-card-5__group-3">
<span class="c-card-5__media-2" aria-hidden="true"></span>
<span class="c-card-5__text-2">lorem ipsum do</span>
</div>
<div class="c-card-5__text-3">lorem ipsum dolor sit amet consectetur adipiscing el</div>
</div>
</div>
</div>
</div>
.c-card-5-scope {
background-color: #FFFFFF;
color: #4B4B4B;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 25px;
}
.c-card-5 {
display: inline-block;
border-spacing: 0px;
box-sizing: border-box;
max-width: 330px;
padding: 24px;
color: #4B4B4B;
border: 2px solid #E5E5E5;
border-radius: 16px;
cursor: default;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 25px;
text-align: center;
}
.c-card-5__media {
display: inline-block;
flex-shrink: 0;
box-sizing: border-box;
width: 170px;
height: 170px;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
margin-top: -75px;
margin-bottom: 18px;
}
.c-card-5__text {
display: block;
box-sizing: border-box;
font-size: 25px;
font-weight: 700;
line-height: 34px;
margin-bottom: 24px;
}
.c-card-5__group {
display: block;
box-sizing: border-box;
text-align: left;
}
.c-card-5__group-2 {
display: block;
box-sizing: border-box;
}
.c-card-5__group-3 {
display: flex;
align-items: flex-start;
box-sizing: border-box;
font-weight: 700;
margin-top: 24px;
margin-bottom: 5px;
}
.c-card-5__media-2 {
display: block;
flex-shrink: 0;
box-sizing: border-box;
width: 13px;
height: 9px;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
margin-top: 8px;
margin-right: 15px;
}
.c-card-5__text-3 {
display: block;
box-sizing: border-box;
margin-left: 28px;
}
States
Verification: flagged, the language-tab-group width did not reproduce the measured 1002px after 2 correction attempts.
Anatomy
language-tab: the component root, a <nav> (.c-language-tab), content not capturedlanguage-tab-icon: icon placeholder, 14px (.c-language-tab__icon)language-tab-group: inner block (.c-language-tab__group)language-tab-list: inner flex row (.c-language-tab__list), content not capturedlanguage-tab-link: link (.c-language-tab__link, 18 instances), content not capturedlanguage-tab-item: inner group (.c-language-tab__item)Recipe
<div class="c-language-tab-scope">
<nav class="c-language-tab">
<span class="c-language-tab__icon" aria-hidden="true"></span>
<div class="c-language-tab__group">
<ul class="c-language-tab__list">
<a class="c-language-tab__link" href="#"></a>
<a class="c-language-tab__link" href="#"></a>
<a class="c-language-tab__link" href="#"></a>
<a class="c-language-tab__link" href="#"></a>
<a class="c-language-tab__link" href="#"></a>
<a class="c-language-tab__link" href="#"></a>
<a class="c-language-tab__link" href="#"></a>
<a class="c-language-tab__link" href="#"></a>
<a class="c-language-tab__link" href="#"></a>
<a class="c-language-tab__link" href="#"></a>
<a class="c-language-tab__link" href="#"></a>
<a class="c-language-tab__link" href="#"></a>
<a class="c-language-tab__link" href="#"></a>
<a class="c-language-tab__link" href="#"></a>
<a class="c-language-tab__link" href="#"></a>
<a class="c-language-tab__link" href="#"></a>
<a class="c-language-tab__link" href="#"></a>
<li class="c-language-tab__item">
<a class="c-language-tab__link" href="#"></a>
</li>
</ul>
</div>
</nav>
</div>
.c-language-tab-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-language-tab {
display: inline-grid;
align-items: center;
gap: 30px;
grid-template-columns: min-content 1fr min-content;
border-spacing: 0px;
box-sizing: border-box;
height: 74px;
max-width: 1090px;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-language-tab__icon {
display: block;
flex-shrink: 0;
box-sizing: border-box;
width: 14px;
height: 14px;
overflow-x: hidden;
overflow-y: hidden;
background-color: currentcolor;
cursor: pointer;
}
.c-language-tab__group {
display: block;
box-sizing: border-box;
overflow-x: hidden;
overflow-y: hidden;
}
.c-language-tab__list {
display: flex;
gap: 23px;
box-sizing: border-box;
padding: 0px;
margin: 0px;
transform: matrix(1, 0, 0, 1, 0, 0);
list-style-type: none;
transition: transform 0.5s ease-in-out;
}
.c-language-tab__link {
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
color: #777777;
cursor: pointer;
text-decoration-line: none;
}
.c-language-tab__item {
display: list-item;
box-sizing: border-box;
}
States
Verification: flagged, the app-store-badge-icon x did not reproduce the measured 16px after 2 correction attempts.
Anatomy
app-store-badge: the component root, a <a> (.c-app-store-badge)app-store-badge-group: inner group (.c-app-store-badge__group)app-store-badge-icon: icon placeholder, 34px (.c-app-store-badge__icon)app-store-badge-group-2: inner group (.c-app-store-badge__group-2)app-store-badge-group-3: inner grid (.c-app-store-badge__group-3)app-store-badge-text: label text, 15 characters (.c-app-store-badge__text)app-store-badge-text-2: label text, 9 characters (.c-app-store-badge__text-2)Recipe
<div class="c-app-store-badge-scope">
<a class="c-app-store-badge" href="#">
<span class="c-app-store-badge__group">
<span class="c-app-store-badge__icon" aria-hidden="true"></span>
</span>
<span class="c-app-store-badge__group-2">
<span class="c-app-store-badge__group-3">
<span class="c-app-store-badge__text">lorem ipsum dol</span>
<span class="c-app-store-badge__text-2">lorem ips</span>
</span>
</span>
</a>
</div>
.c-app-store-badge-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-app-store-badge {
display: inline-flex;
justify-content: center;
align-items: center;
gap: 10px;
border-spacing: 0px;
box-sizing: border-box;
padding: 9.5px 14px;
position: relative;
color: #4B4B4B;
border-radius: 12px;
cursor: pointer;
transform: matrix(1, 0, 0, 1, 0, 0);
font-family: duolingo-sans, sans-serif;
font-size: 15px;
font-weight: 700;
line-height: normal;
letter-spacing: 0.8px;
text-transform: uppercase;
text-decoration-line: none;
white-space: nowrap;
border-top: 2px solid transparent;
border-right: 2px solid transparent;
border-bottom: 4px solid transparent;
border-left: 2px solid transparent;
}
.c-app-store-badge::before {
content: "";
display: block;
box-sizing: border-box;
width: 177px;
height: 61px;
position: absolute;
top: -2px;
right: -2px;
bottom: -2px;
left: -2px;
z-index: -1;
background-color: #FFFFFF;
color: #E5E5E5;
border: 2px solid #E5E5E5;
border-radius: 12px;
box-shadow: #E5E5E5 0px 2px 0px 0px;
}
.c-app-store-badge__group {
display: block;
align-self: start;
box-sizing: border-box;
width: 34px;
height: 34px;
}
.c-app-store-badge__icon {
display: inline-block;
flex-shrink: 0;
box-sizing: border-box;
width: 34px;
height: 34px;
overflow-x: hidden;
overflow-y: hidden;
background-color: currentcolor;
}
.c-app-store-badge__group-2 {
display: block;
box-sizing: border-box;
font-size: 17px;
line-height: 20px;
}
.c-app-store-badge__group-3 {
display: grid;
box-sizing: border-box;
}
.c-app-store-badge__text {
display: block;
box-sizing: border-box;
font-size: 14px;
line-height: 17px;
margin-bottom: 1px;
}
.c-app-store-badge:focus {
outline: none;
}
States
Header (landing)
Verification: desktop flagged, the header-landing-text y did not reproduce the measured 23px after 2 correction attempts; mobile verified against the live page at mobile.
Variant observed on https://www.duolingo.com/.
Anatomy
header-landing: the component root, a <nav> (.c-header-landing)header-landing-logo: link (.c-header-landing__logo)header-landing-logo-image: image placeholder, 179x42px (.c-header-landing__logo-image)header-landing-group: inner flex row (.c-header-landing__group)header-landing-cta: link (.c-header-landing__cta)header-landing-text: label text, 11 characters (.c-header-landing__text)Desktop recipe
<div class="c-header-landing-scope">
<nav class="c-header-landing">
<a class="c-header-landing__logo" href="#">
<span class="c-header-landing__logo-image" aria-hidden="true"></span>
</a>
<div class="c-header-landing__group">
<a class="c-header-landing__cta" href="#">
<span class="c-header-landing__text">lorem ipsum</span>
</a>
</div>
</nav>
</div>
.c-header-landing-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-header-landing {
display: flex;
justify-content: space-between;
align-items: center;
border-spacing: 0px;
box-sizing: border-box;
height: 70px;
max-width: 988px;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-header-landing__logo {
display: block;
box-sizing: border-box;
color: #0000EE;
cursor: pointer;
text-decoration-line: none;
}
.c-header-landing__logo-image {
display: inline-block;
flex-shrink: 0;
box-sizing: border-box;
width: 179px;
height: 42px;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
}
.c-header-landing__group {
display: flex;
gap: 8px;
box-sizing: border-box;
}
.c-header-landing__cta {
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
height: 44px;
position: relative;
color: #FFFFFF;
border-radius: 12px;
cursor: pointer;
transform: matrix(1, 0, 0, 1, 0, 0);
font-size: 15px;
font-weight: 700;
line-height: normal;
letter-spacing: 0.8px;
text-transform: uppercase;
text-decoration-line: none;
white-space: nowrap;
padding-right: 20px;
padding-left: 20px;
border-bottom-width: 4px;
border-bottom-style: solid;
border-bottom-color: transparent;
}
.c-header-landing__cta::before {
content: "";
display: block;
box-sizing: border-box;
width: 133px;
height: 40px;
position: absolute;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
z-index: -1;
background-color: #58CC02;
color: #58A700;
border-radius: 12px;
box-shadow: #58A700 0px 4px 0px 0px;
}
.c-header-landing__text {
display: block;
box-sizing: border-box;
overflow-x: hidden;
overflow-y: hidden;
text-overflow: ellipsis;
}
.c-header-landing__logo:focus {
outline: none;
}
.c-header-landing__cta:hover {
justify-content: normal;
padding: 0px;
color: #AFAFAF;
border: 0;
border-radius: 0px;
line-height: 17.25px;
text-align: center;
appearance: button;
}
.c-header-landing__cta:focus {
justify-content: normal;
padding: 0px;
color: #AFAFAF;
border: 0;
border-radius: 0px;
outline: none;
line-height: 17.25px;
text-align: center;
appearance: button;
}
Mobile anatomy
header-landing-mobile: the component root, a <nav> (.c-header-landing-mobile)header-landing-mobile-logo: link (.c-header-landing-mobile__logo)header-landing-mobile-logo-image: image placeholder, 161x38px (.c-header-landing-mobile__logo-image)Mobile recipe
<div class="c-header-landing-mobile-scope">
<nav class="c-header-landing-mobile">
<a class="c-header-landing-mobile__logo" href="#">
<span class="c-header-landing-mobile__logo-image" aria-hidden="true"></span>
</a>
</nav>
</div>
.c-header-landing-mobile-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-header-landing-mobile {
display: flex;
justify-content: center;
align-items: center;
border-spacing: 0px;
box-sizing: border-box;
height: 70px;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
padding-right: 15px;
padding-left: 15px;
}
.c-header-landing-mobile__logo {
display: block;
box-sizing: border-box;
color: #0000EE;
cursor: pointer;
text-decoration-line: none;
}
.c-header-landing-mobile__logo-image {
display: inline-block;
flex-shrink: 0;
box-sizing: border-box;
width: 161px;
height: 38px;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
}
.c-header-landing-mobile__logo:focus {
outline: none;
}
States
header-landing-logo focus: outline noneheader-landing-cta hover (header-landing-cta-hover): justify-content normal, padding 0px, color #AFAFAF, border 0, border-radius 0px, line-height 17.25px, text-align center, appearance buttonheader-landing-cta focus (header-landing-cta-focus): justify-content normal, padding 0px, color #AFAFAF, border 0, border-radius 0px, outline none, line-height 17.25px, text-align center, appearance buttonheader-landing-mobile-logo focus: outline noneHeader (inner)
Verification: desktop verified against the live page at desktop; mobile verified against the live page at mobile.
Variant observed on https://www.duolingo.com/efficacy.
Anatomy
header-inner: the component root, a <nav> (.c-header-inner)header-inner-logo: link (.c-header-inner__logo)header-inner-logo-image: image placeholder, 182x42px (.c-header-inner__logo-image)header-inner-link: link, 8-character label (.c-header-inner__link)header-inner-link-2: link, 6-character label (.c-header-inner__link-2, 4 instances)Desktop recipe
<div class="c-header-inner-scope">
<nav class="c-header-inner">
<a class="c-header-inner__logo" href="#">
<span class="c-header-inner__logo-image" aria-hidden="true"></span>
</a>
<a class="c-header-inner__link" href="#">lorem ip</a>
<a class="c-header-inner__link-2" href="#">lorem</a>
<a class="c-header-inner__link-2" href="#">lorem i</a>
<a class="c-header-inner__link-2" href="#">lorem ips</a>
<a class="c-header-inner__link-2" href="#">lorem ip</a>
</nav>
</div>
.c-header-inner-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-header-inner {
display: inline-flex;
border-spacing: 0px;
box-sizing: border-box;
max-width: 1048px;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
padding-right: 30px;
padding-left: 30px;
}
.c-header-inner__logo {
display: block;
align-self: center;
box-sizing: border-box;
color: #0000EE;
cursor: pointer;
line-height: 0px;
text-decoration-line: none;
margin-right: auto;
}
.c-header-inner__logo-image {
display: inline-block;
flex-shrink: 0;
box-sizing: border-box;
width: 182px;
height: 42px;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
}
.c-header-inner__link {
display: flex;
align-items: center;
box-sizing: border-box;
position: relative;
color: #1CB0F6;
cursor: pointer;
font-size: 15px;
font-weight: 700;
line-height: normal;
letter-spacing: 1px;
text-transform: uppercase;
text-decoration-line: none;
white-space: nowrap;
padding-right: 10px;
padding-left: 10px;
margin-left: 20px;
}
.c-header-inner__link::after {
content: "";
display: block;
box-sizing: border-box;
width: 76px;
height: 4px;
position: absolute;
top: 68px;
right: -32.1719px;
bottom: -2px;
left: 44.1719px;
background-color: #1CB0F6;
transform: matrix(1, 0, 0, 1, -38.1797, 0);
}
.c-header-inner__link-2 {
display: flex;
align-items: center;
box-sizing: border-box;
position: relative;
color: #AFAFAF;
cursor: pointer;
font-size: 15px;
font-weight: 700;
line-height: normal;
letter-spacing: 1px;
text-transform: uppercase;
text-decoration-line: none;
white-space: nowrap;
padding-right: 10px;
padding-left: 10px;
margin-left: 20px;
}
.c-header-inner__link-2::after {
content: "";
display: block;
box-sizing: border-box;
width: 69px;
height: 4px;
position: absolute;
top: 68px;
right: -28.4375px;
bottom: -2px;
left: 40.4375px;
transform: matrix(1, 0, 0, 1, -34.4453, 0);
}
.c-header-inner__logo:focus {
outline: none;
}
.c-header-inner__link:focus {
outline: none;
}
.c-header-inner__link-2:focus {
outline: none;
}
Mobile anatomy
header-inner-mobile: the component root, a <nav> (.c-header-inner-mobile)header-inner-mobile-logo: link (.c-header-inner-mobile__logo)header-inner-mobile-logo-image: image placeholder, 139x32px (.c-header-inner-mobile__logo-image)header-inner-mobile-menu-toggle: button (.c-header-inner-mobile__menu-toggle)header-inner-mobile-group: inner group (.c-header-inner-mobile__group)header-inner-mobile-icon: icon placeholder, 32x33px (.c-header-inner-mobile__icon)Mobile recipe
<div class="c-header-inner-mobile-scope">
<nav class="c-header-inner-mobile">
<a class="c-header-inner-mobile__logo" href="#">
<span class="c-header-inner-mobile__logo-image" aria-hidden="true"></span>
</a>
<button class="c-header-inner-mobile__menu-toggle" type="button">
<span class="c-header-inner-mobile__group">
<span class="c-header-inner-mobile__icon" aria-hidden="true"></span>
</span>
</button>
</nav>
</div>
.c-header-inner-mobile-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-header-inner-mobile {
display: inline-flex;
border-spacing: 0px;
box-sizing: border-box;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
padding-right: 16px;
padding-left: 16px;
}
.c-header-inner-mobile__logo {
display: block;
align-self: center;
box-sizing: border-box;
color: #0000EE;
cursor: pointer;
line-height: 0px;
text-decoration-line: none;
margin-right: auto;
}
.c-header-inner-mobile__logo-image {
display: inline-block;
flex-shrink: 0;
box-sizing: border-box;
width: 139px;
height: 32px;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
}
.c-header-inner-mobile__menu-toggle {
display: flex;
align-self: center;
box-sizing: border-box;
padding: 0px;
position: relative;
background-color: transparent;
color: #000000;
border: 0;
cursor: pointer;
transform: matrix(1, 0, 0, 1, 0, 0);
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 400;
line-height: 19.55px;
letter-spacing: normal;
text-transform: none;
text-align: center;
appearance: button;
transition: filter 0.2s ease;
}
.c-header-inner-mobile__group {
display: block;
box-sizing: border-box;
width: 32px;
height: 32px;
color: #58CC02;
}
.c-header-inner-mobile__icon {
display: inline-block;
flex-shrink: 0;
box-sizing: border-box;
width: 32px;
height: 33px;
overflow-x: hidden;
overflow-y: hidden;
background-color: currentcolor;
}
.c-header-inner-mobile__logo:focus {
outline: none;
}
.c-header-inner-mobile__menu-toggle:focus {
outline: none;
}
States
header-inner-logo focus: outline noneheader-inner-link focus: outline noneheader-inner-link-2 focus: outline noneheader-inner-mobile-logo focus: outline noneheader-inner-mobile-menu-toggle focus: outline noneHeader (inner, 2)
Verification: desktop flagged, the header-inner-2 height did not reproduce the measured 70px after 2 correction attempts; mobile flagged, the header-inner-2-mobile height did not reproduce the measured 70px after 2 correction attempts.
Variant observed on https://www.duolingo.com/courses.
Anatomy
header-inner-2: the component root, a <header> (.c-header-inner-2)header-inner-2-inner: inner block (.c-header-inner-2__inner)header-inner-2-logo: link (.c-header-inner-2__logo)header-inner-2-logo-image: image placeholder, 153x36px (.c-header-inner-2__logo-image)header-inner-2-group: inner flex row (.c-header-inner-2__group)header-inner-2-group-2: inner block (.c-header-inner-2__group-2)header-inner-2-cta: the button-ghost-2 button (.c-header-inner-2__cta)header-inner-2-text: label text, 0 characters (.c-header-inner-2__text)header-inner-2-text-2: label text, 14 characters (.c-header-inner-2__text-2, 2 instances)header-inner-2-cta-image: image placeholder, 14px (.c-header-inner-2__cta-image)header-inner-2-group-3: inner block (.c-header-inner-2__group-3)header-inner-2-cta-2: the button-secondary button, 5-character label (.c-header-inner-2__cta-2)header-inner-2-cta-3: link, 11-character label (.c-header-inner-2__cta-3)Desktop recipe
<div class="c-header-inner-2-scope">
<header class="c-header-inner-2">
<div class="c-header-inner-2__inner">
<a class="c-header-inner-2__logo" href="#">
<span class="c-header-inner-2__logo-image" aria-hidden="true"></span>
</a>
<div class="c-header-inner-2__group">
<div class="c-header-inner-2__group-2">
<button class="c-header-inner-2__cta" type="button">
<span class="c-header-inner-2__text">
<span class="c-header-inner-2__text-2">lorem ipsum do</span>
<span class="c-header-inner-2__text-2">lorem i</span>
</span>
<span class="c-header-inner-2__cta-image" aria-hidden="true"></span>
</button>
</div>
<div class="c-header-inner-2__group-3">
<button class="c-header-inner-2__cta-2" type="button">lorem</button>
</div>
<a class="c-header-inner-2__cta-3" href="#">lorem ipsum</a>
</div>
</div>
</header>
</div>
.c-header-inner-2-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-header-inner-2 {
display: block;
border-spacing: 0px;
box-sizing: border-box;
position: fixed;
top: 0px;
z-index: 2;
background-color: #1CB0F6;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-header-inner-2__inner {
display: block;
box-sizing: border-box;
max-width: 1065px;
min-height: 70px;
padding-right: 24px;
padding-left: 24px;
margin-right: auto;
margin-left: auto;
}
.c-header-inner-2__logo {
display: block;
box-sizing: border-box;
color: #0000EE;
cursor: pointer;
text-decoration-line: none;
margin-top: 18px;
}
.c-header-inner-2__logo-image {
display: inline-block;
flex-shrink: 0;
box-sizing: border-box;
width: 153px;
height: 36px;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
}
.c-header-inner-2__group {
display: flex;
align-items: center;
box-sizing: border-box;
height: 70px;
}
.c-header-inner-2__group-2 {
display: block;
box-sizing: border-box;
position: relative;
cursor: pointer;
margin-right: 24px;
}
.c-header-inner-2__cta {
display: flex;
align-items: center;
box-sizing: border-box;
padding: 0px;
position: relative;
background-color: transparent;
color: #FFFFFF;
border: 0;
cursor: pointer;
transform: matrix(1, 0, 0, 1, 0, 0);
font-family: duolingo-sans, sans-serif;
font-size: 15px;
font-weight: 700;
line-height: 17.25px;
letter-spacing: 0.8px;
text-transform: uppercase;
text-align: center;
white-space: nowrap;
appearance: button;
transition: filter 0.2s ease;
}
.c-header-inner-2__text {
display: block;
box-sizing: border-box;
}
.c-header-inner-2__cta-image {
display: block;
flex-shrink: 0;
box-sizing: border-box;
width: 14px;
height: 14px;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
margin-left: 8px;
}
.c-header-inner-2__group-3 {
display: block;
box-sizing: border-box;
position: relative;
text-align: center;
}
.c-header-inner-2__cta-2 {
display: inline-flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
height: 44px;
padding: 0px 20px;
position: relative;
background-color: transparent;
color: #0B3E71;
border-radius: 16px;
cursor: pointer;
transform: matrix(1, 0, 0, 1, 0, 0);
font-family: duolingo-sans, sans-serif;
font-size: 15px;
font-weight: 700;
line-height: 18px;
letter-spacing: 0.8px;
text-transform: uppercase;
text-align: center;
white-space: nowrap;
appearance: button;
border-top: 0;
border-right: 0;
border-bottom: 4px solid transparent;
border-left: 0;
}
.c-header-inner-2__cta-2::before {
content: "";
display: block;
box-sizing: border-box;
width: 83px;
height: 40px;
position: absolute;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
z-index: -1;
background-color: #FFFFFF;
color: #FFFFFF80;
border-radius: 16px;
box-shadow: #FFFFFF80 0px 4px 0px 0px;
}
.c-header-inner-2__cta-3 {
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
height: 44px;
position: relative;
color: #FFFFFF;
border-radius: 16px;
cursor: pointer;
transform: matrix(1, 0, 0, 1, 0, 0);
font-size: 15px;
font-weight: 700;
line-height: 18px;
letter-spacing: 0.8px;
text-transform: uppercase;
text-decoration-line: none;
white-space: nowrap;
padding-right: 20px;
padding-left: 20px;
margin-right: 10px;
margin-left: 10px;
border-bottom-width: 4px;
border-bottom-style: solid;
border-bottom-color: transparent;
}
.c-header-inner-2__cta-3::before {
content: "";
display: block;
box-sizing: border-box;
width: 133px;
height: 40px;
position: absolute;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
z-index: -1;
background-color: #58CC02;
color: #58A700;
border-radius: 16px;
box-shadow: #58A700 0px 4px 0px 0px;
}
.c-header-inner-2__logo:focus {
outline: none;
}
.c-header-inner-2__cta:focus {
outline: none;
}
.c-header-inner-2__cta-2:focus {
outline: none;
}
.c-header-inner-2__cta-3:focus {
outline: none;
}
Mobile anatomy
header-inner-2-mobile: the component root, a <header> (.c-header-inner-2-mobile)header-inner-2-mobile-inner: inner block (.c-header-inner-2-mobile__inner)header-inner-2-mobile-logo: link (.c-header-inner-2-mobile__logo)header-inner-2-mobile-logo-image: image placeholder, 153x36px (.c-header-inner-2-mobile__logo-image)header-inner-2-mobile-group: inner flex row (.c-header-inner-2-mobile__group)header-inner-2-mobile-group-2: inner block (.c-header-inner-2-mobile__group-2)header-inner-2-mobile-group-3: inner block (.c-header-inner-2-mobile__group-3)Mobile recipe
<div class="c-header-inner-2-mobile-scope">
<header class="c-header-inner-2-mobile">
<div class="c-header-inner-2-mobile__inner">
<a class="c-header-inner-2-mobile__logo" href="#">
<span class="c-header-inner-2-mobile__logo-image" aria-hidden="true"></span>
</a>
<div class="c-header-inner-2-mobile__group">
<div class="c-header-inner-2-mobile__group-2">
<div class="c-header-inner-2-mobile__group-3"></div>
</div>
</div>
</div>
</header>
</div>
.c-header-inner-2-mobile-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-header-inner-2-mobile {
display: block;
border-spacing: 0px;
box-sizing: border-box;
position: fixed;
top: 0px;
z-index: 2;
background-color: #1CB0F6;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-header-inner-2-mobile__inner {
display: block;
box-sizing: border-box;
max-width: 1065px;
min-height: 70px;
padding-right: 24px;
padding-left: 24px;
margin-right: auto;
margin-left: auto;
}
.c-header-inner-2-mobile__logo {
display: block;
box-sizing: border-box;
color: #0000EE;
cursor: pointer;
text-decoration-line: none;
margin-top: 18px;
}
.c-header-inner-2-mobile__logo-image {
display: inline-block;
flex-shrink: 0;
box-sizing: border-box;
width: 153px;
height: 36px;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
}
.c-header-inner-2-mobile__group {
display: flex;
align-items: center;
box-sizing: border-box;
height: 70px;
}
.c-header-inner-2-mobile__group-2 {
display: block;
box-sizing: border-box;
position: relative;
}
.c-header-inner-2-mobile__group-3 {
display: inline-block;
box-sizing: border-box;
width: 40px;
height: 40px;
cursor: pointer;
margin-top: 5px;
}
.c-header-inner-2-mobile__logo:focus {
outline: none;
}
States
header-inner-2-logo focus: outline noneheader-inner-2-cta focus: outline noneheader-inner-2-cta-2 focus: outline noneheader-inner-2-cta-3 focus: outline noneheader-inner-2-mobile-logo focus: outline noneHeader (inner, 3)
Verification: desktop verified against the live page at desktop; mobile verified against the live page at mobile.
Variant observed on https://www.duolingo.com/chess.
Anatomy
header-inner-3: the component root, a <nav> (.c-header-inner-3)header-inner-3-logo: link (.c-header-inner-3__logo)header-inner-3-logo-image: image placeholder, 144x42px (.c-header-inner-3__logo-image)header-inner-3-group: inner block (.c-header-inner-3__group)header-inner-3-button: button (.c-header-inner-3__button)header-inner-3-text: label text, 0 characters (.c-header-inner-3__text)header-inner-3-text-2: label text, 14 characters (.c-header-inner-3__text-2, 2 instances)header-inner-3-button-image: image placeholder, 14px (.c-header-inner-3__button-image)Desktop recipe
<div class="c-header-inner-3-scope">
<nav class="c-header-inner-3">
<a class="c-header-inner-3__logo" href="#">
<span class="c-header-inner-3__logo-image" aria-hidden="true"></span>
</a>
<div class="c-header-inner-3__group">
<button class="c-header-inner-3__button" type="button">
<span class="c-header-inner-3__text">
<span class="c-header-inner-3__text-2">lorem ipsum do</span>
<span class="c-header-inner-3__text-2">lorem i</span>
</span>
<span class="c-header-inner-3__button-image" aria-hidden="true"></span>
</button>
</div>
</nav>
</div>
.c-header-inner-3-scope {
background-color: #00CD9C1A;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-header-inner-3 {
display: flex;
justify-content: space-between;
align-items: center;
border-spacing: 0px;
box-sizing: border-box;
width: 1065px;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
padding-top: 20px;
padding-bottom: 20px;
}
.c-header-inner-3__logo {
display: block;
box-sizing: border-box;
color: #0000EE;
cursor: pointer;
text-decoration-line: none;
}
.c-header-inner-3__logo-image {
display: inline-block;
flex-shrink: 0;
box-sizing: border-box;
width: 144px;
height: 42px;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
}
.c-header-inner-3__group {
display: block;
box-sizing: border-box;
position: relative;
cursor: pointer;
}
.c-header-inner-3__button {
display: flex;
align-items: center;
box-sizing: border-box;
padding: 0px;
position: relative;
background-color: transparent;
color: #AFAFAF;
border: 0;
cursor: pointer;
transform: matrix(1, 0, 0, 1, 0, 0);
font-family: duolingo-sans, sans-serif;
font-size: 15px;
font-weight: 700;
line-height: 17.25px;
letter-spacing: 0.8px;
text-transform: uppercase;
text-align: center;
white-space: nowrap;
appearance: button;
transition: filter 0.2s ease;
}
.c-header-inner-3__text {
display: block;
box-sizing: border-box;
}
.c-header-inner-3__button-image {
display: block;
flex-shrink: 0;
box-sizing: border-box;
width: 14px;
height: 14px;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
margin-left: 8px;
}
.c-header-inner-3__logo:focus {
outline: none;
}
.c-header-inner-3__button:focus {
outline: none;
}
Mobile anatomy
header-inner-3-mobile: the component root, a <nav> (.c-header-inner-3-mobile)header-inner-3-mobile-logo: link (.c-header-inner-3-mobile__logo)header-inner-3-mobile-logo-image: image placeholder, 144x42px (.c-header-inner-3-mobile__logo-image)Mobile recipe
<div class="c-header-inner-3-mobile-scope">
<nav class="c-header-inner-3-mobile">
<a class="c-header-inner-3-mobile__logo" href="#">
<span class="c-header-inner-3-mobile__logo-image" aria-hidden="true"></span>
</a>
</nav>
</div>
.c-header-inner-3-mobile-scope {
background-color: #00CD9C1A;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-header-inner-3-mobile {
display: flex;
justify-content: space-between;
align-items: center;
border-spacing: 0px;
box-sizing: border-box;
padding: 20px 24px;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-header-inner-3-mobile__logo {
display: block;
box-sizing: border-box;
color: #0000EE;
cursor: pointer;
text-decoration-line: none;
}
.c-header-inner-3-mobile__logo-image {
display: inline-block;
flex-shrink: 0;
box-sizing: border-box;
width: 144px;
height: 42px;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
}
.c-header-inner-3-mobile__logo:focus {
outline: none;
}
States
header-inner-3-logo focus: outline noneheader-inner-3-button focus: outline noneheader-inner-3-mobile-logo focus: outline noneHeader (inner, 4)
Verification: desktop flagged, the render matched 86% of the original pixels, below the 96% required after 2 correction attempts; mobile flagged, the render matched 95% of the original pixels, below the 96% required after 2 correction attempts.
Variant observed on https://www.duolingo.com/business.
Anatomy
header-inner-4: the component root, a <header> (.c-header-inner-4)header-inner-4-inner: inner flex row (.c-header-inner-4__inner)header-inner-4-group: inner block (.c-header-inner-4__group)header-inner-4-logo: link (.c-header-inner-4__logo)header-inner-4-logo-image: image placeholder, 250x35px (.c-header-inner-4__logo-image)header-inner-4-cta: link, 11-character label (.c-header-inner-4__cta)Desktop recipe
<div class="c-header-inner-4-scope">
<header class="c-header-inner-4">
<div class="c-header-inner-4__inner">
<div class="c-header-inner-4__group">
<a class="c-header-inner-4__logo" href="#">
<span class="c-header-inner-4__logo-image" aria-hidden="true"></span>
</a>
</div>
<a class="c-header-inner-4__cta" href="#">lorem ipsum</a>
</div>
</header>
</div>
.c-header-inner-4-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-header-inner-4 {
display: flex;
justify-content: center;
align-items: center;
border-spacing: 0px;
box-sizing: border-box;
height: 80px;
position: sticky;
top: 0px;
z-index: 210;
background-color: #58CC02;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-header-inner-4__inner {
display: flex;
flex-wrap: wrap;
align-items: center;
box-sizing: border-box;
width: 100%;
max-width: 1500px;
padding-right: 32px;
padding-left: 32px;
}
.c-header-inner-4__group {
display: block;
flex-grow: 1;
flex-basis: 0%;
box-sizing: border-box;
}
.c-header-inner-4__logo {
display: inline;
box-sizing: border-box;
color: #0000EE;
cursor: pointer;
text-decoration-line: none;
}
.c-header-inner-4__logo-image {
display: inline-block;
flex-shrink: 0;
box-sizing: border-box;
width: 250px;
height: 35px;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
}
.c-header-inner-4__cta {
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
height: 50px;
min-width: 275px;
position: relative;
color: #58CC02;
border-radius: 16px;
cursor: pointer;
transform: matrix(1, 0, 0, 1, 0, 0);
font-size: 15px;
font-weight: 700;
line-height: 18px;
letter-spacing: 0.8px;
text-transform: uppercase;
text-decoration-line: none;
white-space: nowrap;
padding-right: 16px;
padding-left: 16px;
border-bottom-width: 4px;
border-bottom-style: solid;
border-bottom-color: transparent;
}
.c-header-inner-4__cta::before {
content: "";
display: block;
box-sizing: border-box;
width: 275px;
height: 46px;
position: absolute;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
z-index: -1;
background-color: #FFFFFF;
color: #FFFFFFCC;
border-radius: 16px;
box-shadow: #FFFFFFCC 0px 4px 0px 0px;
}
.c-header-inner-4__logo:focus {
outline: none;
}
Mobile anatomy
header-inner-4-mobile: the component root, a <header> (.c-header-inner-4-mobile)header-inner-4-mobile-inner: inner flex column (.c-header-inner-4-mobile__inner)header-inner-4-mobile-group: inner block (.c-header-inner-4-mobile__group)header-inner-4-mobile-logo: link (.c-header-inner-4-mobile__logo)header-inner-4-mobile-logo-image: image placeholder, 250x35px (.c-header-inner-4-mobile__logo-image)Mobile recipe
<div class="c-header-inner-4-mobile-scope">
<header class="c-header-inner-4-mobile">
<div class="c-header-inner-4-mobile__inner">
<div class="c-header-inner-4-mobile__group">
<a class="c-header-inner-4-mobile__logo" href="#">
<span class="c-header-inner-4-mobile__logo-image" aria-hidden="true"></span>
</a>
</div>
</div>
</header>
</div>
.c-header-inner-4-mobile-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-header-inner-4-mobile {
display: flex;
justify-content: center;
align-items: center;
border-spacing: 0px;
box-sizing: border-box;
height: 80px;
position: sticky;
top: 0px;
z-index: 210;
background-color: #58CC02;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-header-inner-4-mobile__inner {
display: flex;
flex-direction: column;
flex-wrap: wrap;
align-items: center;
box-sizing: border-box;
width: 100%;
max-width: 1500px;
padding-right: 16px;
padding-left: 16px;
}
.c-header-inner-4-mobile__group {
display: block;
flex-grow: 1;
flex-basis: 0%;
box-sizing: border-box;
}
.c-header-inner-4-mobile__logo {
display: inline;
box-sizing: border-box;
color: #0000EE;
cursor: pointer;
text-decoration-line: none;
}
.c-header-inner-4-mobile__logo-image {
display: inline-block;
flex-shrink: 0;
box-sizing: border-box;
width: 250px;
height: 35px;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
}
.c-header-inner-4-mobile__logo:focus {
outline: none;
}
States
header-inner-4-logo focus: outline noneheader-inner-4-mobile-logo focus: outline noneFooter (landing)
Verification: desktop flagged, the footer-landing-group height did not reproduce the measured 381px after 2 correction attempts; mobile flagged, the footer-landing-mobile-inner height did not reproduce the measured 378px after 2 correction attempts.
Variant observed on https://www.duolingo.com/.
Anatomy
footer-landing: the component root, a <footer> (.c-footer-landing)footer-landing-columns: inner grid (.c-footer-landing__columns)footer-landing-column: inner grid (.c-footer-landing__column, 5 instances)footer-landing-group: inner block (.c-footer-landing__group, 6 instances)footer-landing-text: label text, 8 characters (.c-footer-landing__text, 6 instances)footer-landing-list: inner flex column (.c-footer-landing__list, 6 instances)footer-landing-item: inner group (.c-footer-landing__item, 35 instances)footer-landing-link: link, 7-character label (.c-footer-landing__link, 35 instances)footer-landing-group-2: inner group (.c-footer-landing__group-2)footer-landing-inner: inner block (.c-footer-landing__inner)footer-landing-text-2: label text, 14 characters (.c-footer-landing__text-2)footer-landing-list-2: inner group (.c-footer-landing__list-2), content not capturedfooter-landing-item-2: inner group (.c-footer-landing__item-2, 11 instances), content not capturedfooter-landing-link-2: link, 7-character label (.c-footer-landing__link-2, 10 instances)Desktop recipe
<div class="c-footer-landing-scope">
<footer class="c-footer-landing">
<div class="c-footer-landing__columns">
<div class="c-footer-landing__column">
<div class="c-footer-landing__group">
<div class="c-footer-landing__text">lorem ip</div>
<ul class="c-footer-landing__list">
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem i</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem i</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ip</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ip</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ipsum dolor</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ip</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem i</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ips</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ipsu</a>
</li>
</ul>
</div>
</div>
<div class="c-footer-landing__column">
<div class="c-footer-landing__group">
<div class="c-footer-landing__text">lorem ip</div>
<ul class="c-footer-landing__list">
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ip</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ipsum dolor si</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ipsum dolor sit</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem i</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ipsum dolor sit</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ipsum do</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ipsum dolor s</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ipsum</a>
</li>
</ul>
</div>
</div>
<div class="c-footer-landing__column">
<div class="c-footer-landing__group">
<div class="c-footer-landing__text">lore</div>
<ul class="c-footer-landing__list">
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ipsum dolor si</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ipsum dolo</a>
</li>
</ul>
</div>
</div>
<div class="c-footer-landing__column">
<div class="c-footer-landing__group">
<div class="c-footer-landing__text">lorem ipsum dolo</div>
<ul class="c-footer-landing__list">
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ipsum d</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ipsum</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ipsum dolor sit amet</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem</a>
</li>
</ul>
</div>
</div>
<div class="c-footer-landing__column">
<div class="c-footer-landing__group">
<div class="c-footer-landing__text">lorem ipsum dolor</div>
<ul class="c-footer-landing__list">
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ipsum dolor si</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem i</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ipsum dolor sit amet consectetur adipi</a>
</li>
</ul>
</div>
<div class="c-footer-landing__group">
<div class="c-footer-landing__text">lorem</div>
<ul class="c-footer-landing__list">
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lore</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ips</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem i</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem i</a>
</li>
<li class="c-footer-landing__item">
<a class="c-footer-landing__link" href="#">lorem ip</a>
</li>
</ul>
</div>
</div>
</div>
<div class="c-footer-landing__group-2"></div>
<div class="c-footer-landing__inner">
<div class="c-footer-landing__text-2">lorem ipsum do</div>
<ul class="c-footer-landing__list-2">
<li class="c-footer-landing__item-2">
<a class="c-footer-landing__link-2" href="#">lorem i</a>
</li>
<li class="c-footer-landing__item-2">
<a class="c-footer-landing__link-2" href="#">lorem</a>
</li>
<li class="c-footer-landing__item-2">
<a class="c-footer-landing__link-2" href="#">lorem i</a>
</li>
<li class="c-footer-landing__item-2">
<a class="c-footer-landing__link-2" href="#">lorem i</a>
</li>
<li class="c-footer-landing__item-2">
<a class="c-footer-landing__link-2" href="#">lorem ip</a>
</li>
<li class="c-footer-landing__item-2">
<a class="c-footer-landing__link-2" href="#">lorem i</a>
</li>
<li class="c-footer-landing__item-2">
<a class="c-footer-landing__link-2" href="#">lorem i</a>
</li>
<li class="c-footer-landing__item-2">
<a class="c-footer-landing__link-2" href="#">lorem ip</a>
</li>
<li class="c-footer-landing__item-2">
<a class="c-footer-landing__link-2" href="#">lorem</a>
</li>
<li class="c-footer-landing__item-2">
<a class="c-footer-landing__link-2" href="#">lorem</a>
</li>
<li class="c-footer-landing__item-2"></li>
</ul>
</div>
</footer>
</div>
.c-footer-landing-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-footer-landing {
display: block;
border-spacing: 0px;
box-sizing: border-box;
background-color: #58CC02;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-footer-landing__columns {
display: grid;
gap: 24px;
grid-template-columns: repeat(5, 178px);
box-sizing: border-box;
max-width: 988px;
padding-top: 96px;
padding-bottom: 64px;
margin-right: auto;
margin-left: auto;
}
.c-footer-landing__column {
display: grid;
gap: 32px;
box-sizing: border-box;
}
.c-footer-landing__group {
display: block;
box-sizing: border-box;
}
.c-footer-landing__text {
display: block;
box-sizing: border-box;
color: #D7FFB8;
font-size: 19px;
font-weight: 700;
line-height: 26.6px;
margin-bottom: 12px;
}
.c-footer-landing__list {
display: flex;
flex-direction: column;
gap: 10px;
box-sizing: border-box;
padding: 0px;
margin: 0px;
list-style-type: none;
}
.c-footer-landing__item {
display: list-item;
box-sizing: border-box;
}
.c-footer-landing__link {
display: inline;
box-sizing: border-box;
color: #A5ED6E;
cursor: pointer;
font-size: 15px;
font-weight: 700;
line-height: 22px;
text-decoration-line: none;
}
.c-footer-landing__group-2 {
display: block;
height: 0px;
color: #808080;
border-top-width: 2px;
border-top-style: solid;
border-top-color: #A5ED6E;
}
.c-footer-landing__inner {
display: block;
box-sizing: border-box;
max-width: 988px;
padding-top: 40px;
padding-bottom: 64px;
margin-right: auto;
margin-left: auto;
}
.c-footer-landing__text-2 {
display: block;
box-sizing: border-box;
color: #D7FFB8;
font-size: 15px;
font-weight: 700;
line-height: 22px;
margin-bottom: 16px;
}
.c-footer-landing__list-2 {
display: block;
box-sizing: border-box;
padding: 0px;
margin: -8px -12px;
list-style-type: none;
}
.c-footer-landing__item-2 {
display: inline-block;
box-sizing: border-box;
margin: 8px 12px;
}
.c-footer-landing__link-2 {
display: inline;
box-sizing: border-box;
color: #A5ED6E;
cursor: pointer;
font-size: 13px;
font-weight: 700;
line-height: 16px;
text-decoration-line: none;
}
.c-footer-landing__link:focus {
outline: none;
}
.c-footer-landing__link-2:focus {
outline: none;
}
Mobile anatomy
footer-landing-mobile: the component root, a <footer> (.c-footer-landing-mobile)footer-landing-mobile-columns: inner grid (.c-footer-landing-mobile__columns)footer-landing-mobile-column: inner grid (.c-footer-landing-mobile__column)footer-landing-mobile-group: inner block (.c-footer-landing-mobile__group, 6 instances)footer-landing-mobile-text: label text, 8 characters (.c-footer-landing-mobile__text, 6 instances)footer-landing-mobile-list: inner flex column (.c-footer-landing-mobile__list, 6 instances)footer-landing-mobile-item: inner group (.c-footer-landing-mobile__item, 35 instances)footer-landing-mobile-link: link, 7-character label (.c-footer-landing-mobile__link, 35 instances)footer-landing-mobile-group-2: inner group (.c-footer-landing-mobile__group-2)footer-landing-mobile-inner: inner block (.c-footer-landing-mobile__inner)footer-landing-mobile-text-2: label text, 14 characters (.c-footer-landing-mobile__text-2)footer-landing-mobile-list-2: inner group (.c-footer-landing-mobile__list-2), content not capturedfooter-landing-mobile-item-2: inner group (.c-footer-landing-mobile__item-2, 13 instances), content not capturedfooter-landing-mobile-link-2: link, 7-character label (.c-footer-landing-mobile__link-2, 12 instances)Mobile recipe
<div class="c-footer-landing-mobile-scope">
<footer class="c-footer-landing-mobile">
<div class="c-footer-landing-mobile__columns">
<div class="c-footer-landing-mobile__column">
<div class="c-footer-landing-mobile__group">
<div class="c-footer-landing-mobile__text">lorem ip</div>
<ul class="c-footer-landing-mobile__list">
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem i</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem i</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ip</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ip</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ipsum dolor</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ip</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem i</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ips</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ipsu</a>
</li>
</ul>
</div>
<div class="c-footer-landing-mobile__group">
<div class="c-footer-landing-mobile__text">lorem ip</div>
<ul class="c-footer-landing-mobile__list">
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ip</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ipsum dolor si</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ipsum dolor sit</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem i</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ipsum dolor sit</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ipsum do</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ipsum dolor s</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ipsum</a>
</li>
</ul>
</div>
<div class="c-footer-landing-mobile__group">
<div class="c-footer-landing-mobile__text">lore</div>
<ul class="c-footer-landing-mobile__list">
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ipsum dolor si</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ipsum dolo</a>
</li>
</ul>
</div>
<div class="c-footer-landing-mobile__group">
<div class="c-footer-landing-mobile__text">lorem ipsum dolo</div>
<ul class="c-footer-landing-mobile__list">
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ipsum d</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ipsum</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ipsum dolor sit amet</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem</a>
</li>
</ul>
</div>
<div class="c-footer-landing-mobile__group">
<div class="c-footer-landing-mobile__text">lorem ipsum dolor</div>
<ul class="c-footer-landing-mobile__list">
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ipsum dolor si</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem i</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ipsum dolor sit amet consectetur adipi</a>
</li>
</ul>
</div>
<div class="c-footer-landing-mobile__group">
<div class="c-footer-landing-mobile__text">lorem</div>
<ul class="c-footer-landing-mobile__list">
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lore</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ips</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem i</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem i</a>
</li>
<li class="c-footer-landing-mobile__item">
<a class="c-footer-landing-mobile__link" href="#">lorem ip</a>
</li>
</ul>
</div>
</div>
</div>
<div class="c-footer-landing-mobile__group-2"></div>
<div class="c-footer-landing-mobile__inner">
<div class="c-footer-landing-mobile__text-2">lorem ipsum do</div>
<ul class="c-footer-landing-mobile__list-2">
<li class="c-footer-landing-mobile__item-2">
<a class="c-footer-landing-mobile__link-2" href="#">lorem i</a>
</li>
<li class="c-footer-landing-mobile__item-2">
<a class="c-footer-landing-mobile__link-2" href="#">lorem</a>
</li>
<li class="c-footer-landing-mobile__item-2">
<a class="c-footer-landing-mobile__link-2" href="#">lorem i</a>
</li>
<li class="c-footer-landing-mobile__item-2">
<a class="c-footer-landing-mobile__link-2" href="#">lorem i</a>
</li>
<li class="c-footer-landing-mobile__item-2">
<a class="c-footer-landing-mobile__link-2" href="#">lorem ip</a>
</li>
<li class="c-footer-landing-mobile__item-2">
<a class="c-footer-landing-mobile__link-2" href="#">lorem i</a>
</li>
<li class="c-footer-landing-mobile__item-2">
<a class="c-footer-landing-mobile__link-2" href="#">lorem i</a>
</li>
<li class="c-footer-landing-mobile__item-2">
<a class="c-footer-landing-mobile__link-2" href="#">lorem ip</a>
</li>
<li class="c-footer-landing-mobile__item-2">
<a class="c-footer-landing-mobile__link-2" href="#">lorem</a>
</li>
<li class="c-footer-landing-mobile__item-2">
<a class="c-footer-landing-mobile__link-2" href="#">lorem</a>
</li>
<li class="c-footer-landing-mobile__item-2">
<a class="c-footer-landing-mobile__link-2" href="#">lorem ipsum dolo</a>
</li>
<li class="c-footer-landing-mobile__item-2">
<a class="c-footer-landing-mobile__link-2" href="#">lorem ip</a>
</li>
<li class="c-footer-landing-mobile__item-2"></li>
</ul>
</div>
</footer>
</div>
.c-footer-landing-mobile-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-footer-landing-mobile {
display: block;
border-spacing: 0px;
box-sizing: border-box;
background-color: #58CC02;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-footer-landing-mobile__columns {
display: grid;
gap: 20px;
grid-template-columns: minmax(0px, 216px);
box-sizing: border-box;
max-width: 375px;
padding: 96px 32px 64px;
margin-right: auto;
margin-left: auto;
}
.c-footer-landing-mobile__column {
display: grid;
gap: 32px;
box-sizing: border-box;
}
.c-footer-landing-mobile__group {
display: block;
box-sizing: border-box;
}
.c-footer-landing-mobile__text {
display: block;
box-sizing: border-box;
color: #D7FFB8;
font-size: 19px;
font-weight: 700;
line-height: 26.6px;
margin-bottom: 12px;
}
.c-footer-landing-mobile__list {
display: flex;
flex-direction: column;
gap: 10px;
box-sizing: border-box;
padding: 0px;
margin: 0px;
list-style-type: none;
}
.c-footer-landing-mobile__item {
display: list-item;
box-sizing: border-box;
}
.c-footer-landing-mobile__link {
display: inline;
box-sizing: border-box;
color: #A5ED6E;
cursor: pointer;
font-size: 15px;
font-weight: 700;
line-height: 22px;
text-decoration-line: none;
}
.c-footer-landing-mobile__group-2 {
display: block;
height: 0px;
color: #808080;
border-top-width: 2px;
border-top-style: solid;
border-top-color: #A5ED6E;
}
.c-footer-landing-mobile__inner {
display: block;
box-sizing: border-box;
max-width: 375px;
padding: 40px 32px 64px;
margin-right: auto;
margin-left: auto;
}
.c-footer-landing-mobile__text-2 {
display: block;
box-sizing: border-box;
color: #D7FFB8;
font-size: 15px;
font-weight: 700;
line-height: 22px;
margin-bottom: 16px;
}
.c-footer-landing-mobile__list-2 {
display: block;
box-sizing: border-box;
padding: 0px;
margin: -8px -12px;
list-style-type: none;
}
.c-footer-landing-mobile__item-2 {
display: inline-block;
box-sizing: border-box;
margin: 8px 12px;
}
.c-footer-landing-mobile__link-2 {
display: inline;
box-sizing: border-box;
color: #A5ED6E;
cursor: pointer;
font-size: 13px;
font-weight: 700;
line-height: 16px;
text-decoration-line: none;
}
.c-footer-landing-mobile__link:focus {
outline: none;
}
.c-footer-landing-mobile__link-2:focus {
outline: none;
}
States
footer-landing-link focus: outline nonefooter-landing-link-2 focus: outline nonefooter-landing-mobile-link focus: outline nonefooter-landing-mobile-link-2 focus: outline noneFooter (inner)
Verification: desktop verified against the live page at desktop; mobile flagged, the footer-inner-mobile height did not reproduce the measured 116px after 2 correction attempts.
Variant observed on https://www.duolingo.com/efficacy.
Anatomy
footer-inner: the component root, a <footer> (.c-footer-inner)footer-inner-inner: inner block (.c-footer-inner__inner)footer-inner-nav: inner flex row (.c-footer-inner__nav)footer-inner-nav-link: link, 8-character label (.c-footer-inner__nav-link, 8 instances)Desktop recipe
<div class="c-footer-inner-scope">
<footer class="c-footer-inner">
<div class="c-footer-inner__inner">
<nav class="c-footer-inner__nav">
<a class="c-footer-inner__nav-link" href="#">lorem ip</a>
<a class="c-footer-inner__nav-link" href="#">lorem</a>
<a class="c-footer-inner__nav-link" href="#">lorem i</a>
<a class="c-footer-inner__nav-link" href="#">lore</a>
<a class="c-footer-inner__nav-link" href="#">lorem ips</a>
<a class="c-footer-inner__nav-link" href="#">lore</a>
<a class="c-footer-inner__nav-link" href="#">lorem</a>
<a class="c-footer-inner__nav-link" href="#">lorem i</a>
</nav>
</div>
</footer>
</div>
.c-footer-inner-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-footer-inner {
display: block;
border-spacing: 0px;
box-sizing: border-box;
padding: 30px 25px;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
border-top-width: 2px;
border-top-style: solid;
border-top-color: #E5E5E5;
}
.c-footer-inner__inner {
display: block;
box-sizing: border-box;
max-width: 1048px;
margin-right: auto;
margin-left: auto;
}
.c-footer-inner__nav {
display: flex;
flex-wrap: wrap;
justify-content: center;
box-sizing: border-box;
margin: -12px;
color: #AFAFAF;
}
.c-footer-inner__nav-link {
display: block;
box-sizing: border-box;
margin: 12px;
color: #AFAFAF;
opacity: 0.8;
cursor: pointer;
font-size: 15px;
font-weight: 700;
line-height: 15px;
letter-spacing: 0.8px;
text-transform: uppercase;
text-decoration-line: none;
}
.c-footer-inner__nav-link:hover {
opacity: 1;
}
.c-footer-inner__nav-link:focus {
outline: none;
}
Mobile anatomy
footer-inner-mobile: the component root, a <footer> (.c-footer-inner-mobile)footer-inner-mobile-inner: inner block (.c-footer-inner-mobile__inner)footer-inner-mobile-nav: inner flex row (.c-footer-inner-mobile__nav)footer-inner-mobile-nav-link: link, 8-character label (.c-footer-inner-mobile__nav-link, 8 instances)Mobile recipe
<div class="c-footer-inner-mobile-scope">
<footer class="c-footer-inner-mobile">
<div class="c-footer-inner-mobile__inner">
<nav class="c-footer-inner-mobile__nav">
<a class="c-footer-inner-mobile__nav-link" href="#">lorem ip</a>
<a class="c-footer-inner-mobile__nav-link" href="#">lorem</a>
<a class="c-footer-inner-mobile__nav-link" href="#">lorem i</a>
<a class="c-footer-inner-mobile__nav-link" href="#">lore</a>
<a class="c-footer-inner-mobile__nav-link" href="#">lorem ips</a>
<a class="c-footer-inner-mobile__nav-link" href="#">lore</a>
<a class="c-footer-inner-mobile__nav-link" href="#">lorem</a>
<a class="c-footer-inner-mobile__nav-link" href="#">lorem i</a>
</nav>
</div>
</footer>
</div>
.c-footer-inner-mobile-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-footer-inner-mobile {
display: block;
border-spacing: 0px;
box-sizing: border-box;
padding: 30px 25px;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
border-top-width: 2px;
border-top-style: solid;
border-top-color: #E5E5E5;
}
.c-footer-inner-mobile__inner {
display: block;
box-sizing: border-box;
max-width: 1048px;
margin-right: auto;
margin-left: auto;
}
.c-footer-inner-mobile__nav {
display: flex;
flex-wrap: wrap;
justify-content: center;
box-sizing: border-box;
margin: -12px;
color: #AFAFAF;
}
.c-footer-inner-mobile__nav-link {
display: block;
box-sizing: border-box;
margin: 12px;
color: #AFAFAF;
opacity: 0.8;
cursor: pointer;
font-size: 15px;
font-weight: 700;
line-height: 15px;
letter-spacing: 0.8px;
text-transform: uppercase;
text-decoration-line: none;
}
.c-footer-inner-mobile__nav-link:hover {
opacity: 1;
}
.c-footer-inner-mobile__nav-link:focus {
outline: none;
}
States
footer-inner-nav-link hover: opacity 1footer-inner-nav-link focus: outline nonefooter-inner-mobile-nav-link hover: opacity 1footer-inner-mobile-nav-link focus: outline noneFooter (inner, 2)
Verification: desktop flagged, the footer-inner-2 height did not reproduce the measured 79px after 2 correction attempts; mobile verified against the live page at mobile.
Variant observed on https://www.duolingo.com/chess.
Anatomy
footer-inner-2: the component root, a <footer> (.c-footer-inner-2)footer-inner-2-nav: inner flex row (.c-footer-inner-2__nav)footer-inner-2-nav-link: link, 8-character label (.c-footer-inner-2__nav-link, 8 instances)Desktop recipe
<div class="c-footer-inner-2-scope">
<footer class="c-footer-inner-2">
<nav class="c-footer-inner-2__nav">
<a class="c-footer-inner-2__nav-link" href="#">lorem ip</a>
<a class="c-footer-inner-2__nav-link" href="#">lorem</a>
<a class="c-footer-inner-2__nav-link" href="#">lorem i</a>
<a class="c-footer-inner-2__nav-link" href="#">lore</a>
<a class="c-footer-inner-2__nav-link" href="#">lorem ips</a>
<a class="c-footer-inner-2__nav-link" href="#">lore</a>
<a class="c-footer-inner-2__nav-link" href="#">lorem</a>
<a class="c-footer-inner-2__nav-link" href="#">lorem i</a>
</nav>
</footer>
</div>
.c-footer-inner-2-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-footer-inner-2 {
display: inline-flex;
justify-content: center;
border-spacing: 0px;
box-sizing: border-box;
padding: 32px 16px;
color: #AFAFAF;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-footer-inner-2__nav {
display: flex;
flex-wrap: wrap;
justify-content: center;
box-sizing: border-box;
margin: -12px;
}
.c-footer-inner-2__nav-link {
display: block;
box-sizing: border-box;
margin: 12px;
color: #AFAFAF;
opacity: 0.8;
cursor: pointer;
font-size: 15px;
font-weight: 700;
line-height: 15px;
letter-spacing: 0.8px;
text-transform: uppercase;
text-decoration-line: none;
}
.c-footer-inner-2__nav-link:hover {
opacity: 1;
}
.c-footer-inner-2__nav-link:focus {
outline: none;
}
Mobile anatomy
footer-inner-2-mobile: the component root, a <footer> (.c-footer-inner-2-mobile)footer-inner-2-mobile-nav: inner flex row (.c-footer-inner-2-mobile__nav)footer-inner-2-mobile-nav-link: link, 8-character label (.c-footer-inner-2-mobile__nav-link, 8 instances)Mobile recipe
<div class="c-footer-inner-2-mobile-scope">
<footer class="c-footer-inner-2-mobile">
<nav class="c-footer-inner-2-mobile__nav">
<a class="c-footer-inner-2-mobile__nav-link" href="#">lorem ip</a>
<a class="c-footer-inner-2-mobile__nav-link" href="#">lorem</a>
<a class="c-footer-inner-2-mobile__nav-link" href="#">lorem i</a>
<a class="c-footer-inner-2-mobile__nav-link" href="#">lore</a>
<a class="c-footer-inner-2-mobile__nav-link" href="#">lorem ips</a>
<a class="c-footer-inner-2-mobile__nav-link" href="#">lore</a>
<a class="c-footer-inner-2-mobile__nav-link" href="#">lorem</a>
<a class="c-footer-inner-2-mobile__nav-link" href="#">lorem i</a>
</nav>
</footer>
</div>
.c-footer-inner-2-mobile-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-footer-inner-2-mobile {
display: inline-flex;
justify-content: center;
border-spacing: 0px;
box-sizing: border-box;
padding: 32px 16px;
color: #AFAFAF;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-footer-inner-2-mobile__nav {
display: flex;
flex-wrap: wrap;
justify-content: center;
box-sizing: border-box;
margin: -12px;
}
.c-footer-inner-2-mobile__nav-link {
display: block;
box-sizing: border-box;
margin: 12px;
color: #AFAFAF;
opacity: 0.8;
cursor: pointer;
font-size: 15px;
font-weight: 700;
line-height: 15px;
letter-spacing: 0.8px;
text-transform: uppercase;
text-decoration-line: none;
}
.c-footer-inner-2-mobile__nav-link:hover {
opacity: 1;
}
.c-footer-inner-2-mobile__nav-link:focus {
outline: none;
}
States
footer-inner-2-nav-link hover: opacity 1footer-inner-2-nav-link focus: outline nonefooter-inner-2-mobile-nav-link hover: opacity 1footer-inner-2-mobile-nav-link focus: outline noneFooter (inner, 3)
Verification: desktop flagged, the footer-inner-3 height did not reproduce the measured 39px after 2 correction attempts; mobile verified against the live page at mobile.
Variant observed on https://www.duolingo.com/business.
Anatomy
footer-inner-3: the component root, a <nav> (.c-footer-inner-3)footer-inner-3-link: link, 8-character label (.c-footer-inner-3__link, 8 instances)Desktop recipe
<div class="c-footer-inner-3-scope">
<nav class="c-footer-inner-3">
<a class="c-footer-inner-3__link" href="#">lorem ip</a>
<a class="c-footer-inner-3__link" href="#">lorem</a>
<a class="c-footer-inner-3__link" href="#">lorem i</a>
<a class="c-footer-inner-3__link" href="#">lore</a>
<a class="c-footer-inner-3__link" href="#">lorem ips</a>
<a class="c-footer-inner-3__link" href="#">lore</a>
<a class="c-footer-inner-3__link" href="#">lorem</a>
<a class="c-footer-inner-3__link" href="#">lorem i</a>
</nav>
</div>
.c-footer-inner-3-scope {
background-color: #58CC02;
color: #FFFFFF;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-footer-inner-3 {
display: flex;
flex-wrap: wrap;
border-spacing: 0px;
box-sizing: border-box;
color: #FFFFFF;
font-family: duolingo-sans, sans-serif;
font-size: 15px;
font-weight: 500;
line-height: 20px;
text-align: left;
}
.c-footer-inner-3__link {
display: block;
box-sizing: border-box;
margin: 12px;
color: #FFFFFF;
cursor: pointer;
font-weight: 700;
line-height: 15px;
letter-spacing: 0.8px;
text-transform: uppercase;
text-decoration-line: none;
}
.c-footer-inner-3__link:focus {
outline: none;
}
Mobile anatomy
footer-inner-3-mobile: the component root, a <nav> (.c-footer-inner-3-mobile)footer-inner-3-mobile-link: link, 8-character label (.c-footer-inner-3-mobile__link, 8 instances)Mobile recipe
<div class="c-footer-inner-3-mobile-scope">
<nav class="c-footer-inner-3-mobile">
<a class="c-footer-inner-3-mobile__link" href="#">lorem ip</a>
<a class="c-footer-inner-3-mobile__link" href="#">lorem</a>
<a class="c-footer-inner-3-mobile__link" href="#">lorem i</a>
<a class="c-footer-inner-3-mobile__link" href="#">lore</a>
<a class="c-footer-inner-3-mobile__link" href="#">lorem ips</a>
<a class="c-footer-inner-3-mobile__link" href="#">lore</a>
<a class="c-footer-inner-3-mobile__link" href="#">lorem</a>
<a class="c-footer-inner-3-mobile__link" href="#">lorem i</a>
</nav>
</div>
.c-footer-inner-3-mobile-scope {
background-color: #58CC02;
color: #FFFFFF;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-footer-inner-3-mobile {
display: grid;
flex-wrap: wrap;
grid-template-columns: 1fr 1fr;
border-spacing: 0px;
box-sizing: border-box;
color: #FFFFFF;
font-family: duolingo-sans, sans-serif;
font-size: 15px;
font-weight: 500;
line-height: 20px;
text-align: left;
}
.c-footer-inner-3-mobile__link {
display: block;
box-sizing: border-box;
margin: 12px;
color: #FFFFFF;
cursor: pointer;
font-weight: 700;
line-height: 15px;
letter-spacing: 0.8px;
text-transform: uppercase;
text-decoration-line: none;
}
.c-footer-inner-3-mobile__link:focus {
outline: none;
}
States
footer-inner-3-link focus: outline nonefooter-inner-3-mobile-link focus: outline noneVerification: verified against the live page at desktop.
Anatomy
footer-navigation: the component root, a <nav> (.c-footer-navigation)footer-navigation-link: link, 8-character label (.c-footer-navigation__link, 8 instances)Recipe
<div class="c-footer-navigation-scope">
<nav class="c-footer-navigation">
<a class="c-footer-navigation__link" href="#">lorem ip</a>
<a class="c-footer-navigation__link" href="#">lorem</a>
<a class="c-footer-navigation__link" href="#">lorem i</a>
<a class="c-footer-navigation__link" href="#">lore</a>
<a class="c-footer-navigation__link" href="#">lorem ips</a>
<a class="c-footer-navigation__link" href="#">lore</a>
<a class="c-footer-navigation__link" href="#">lorem</a>
<a class="c-footer-navigation__link" href="#">lorem i</a>
</nav>
</div>
.c-footer-navigation-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-footer-navigation {
display: flex;
flex-wrap: wrap;
justify-content: center;
border-spacing: 0px;
box-sizing: border-box;
color: #AFAFAF;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-footer-navigation__link {
display: block;
box-sizing: border-box;
margin: 12px;
color: #AFAFAF;
opacity: 0.8;
cursor: pointer;
font-size: 15px;
font-weight: 700;
line-height: 15px;
letter-spacing: 0.8px;
text-transform: uppercase;
text-decoration-line: none;
}
States
Verification: verified against the live page at desktop.
Anatomy
accordion: the component root, a <div> (.c-accordion)accordion-group: inner flex row (.c-accordion__group)accordion-title: heading, 26 characters (.c-accordion__title)accordion-media: image placeholder, 24px (.c-accordion__media)accordion-group-2: inner group (.c-accordion__group-2)Recipe
<div class="c-accordion-scope">
<div class="c-accordion">
<div class="c-accordion__group">
<h3 class="c-accordion__title">lorem ipsum dolor sit amet</h3>
<span class="c-accordion__media" aria-hidden="true"></span>
</div>
<div class="c-accordion__group-2"></div>
</div>
</div>
.c-accordion-scope {
background-color: #FFFFFF;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-accordion {
display: inline-block;
border-spacing: 0px;
box-sizing: border-box;
color: #3C3C3C;
cursor: pointer;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-accordion__group {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: 16px;
box-sizing: border-box;
width: 100%;
margin-bottom: 32px;
}
.c-accordion__title {
display: block;
box-sizing: border-box;
margin: 0px;
color: #4B4B4B;
font-size: 20px;
font-weight: 700;
line-height: 24px;
text-align: left;
}
.c-accordion__media {
display: block;
flex-shrink: 0;
box-sizing: border-box;
width: 24px;
height: 24px;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
}
.c-accordion__group-2 {
display: block;
height: 2px;
background-color: #E5E5E5;
color: #808080;
}
States
Verification: verified against the live page at desktop.
Anatomy
language-selector-2: the component root, a <button> (.c-language-selector-2)language-selector-2-text: label text, 0 characters (.c-language-selector-2__text)language-selector-2-text-2: label text, 14 characters (.c-language-selector-2__text-2, 2 instances)language-selector-2-media: image placeholder, 14px (.c-language-selector-2__media)Recipe
<div class="c-language-selector-2-scope">
<button class="c-language-selector-2" type="button">
<span class="c-language-selector-2__text">
<span class="c-language-selector-2__text-2">lorem ipsum do</span>
<span class="c-language-selector-2__text-2">lorem i</span>
</span>
<span class="c-language-selector-2__media" aria-hidden="true"></span>
</button>
</div>
.c-language-selector-2-scope {
background-color: #00CD9C1A;
color: #3C3C3C;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 20px;
}
.c-language-selector-2 {
display: flex;
align-items: center;
border-spacing: 0px;
box-sizing: border-box;
padding: 0px;
position: relative;
background-color: transparent;
color: #AFAFAF;
border: 0;
cursor: pointer;
transform: matrix(1, 0, 0, 1, 0, 0);
font-family: duolingo-sans, sans-serif;
font-size: 15px;
font-weight: 700;
line-height: 17.25px;
letter-spacing: 0.8px;
text-transform: uppercase;
text-align: center;
white-space: nowrap;
appearance: button;
transition: filter 0.2s ease;
}
.c-language-selector-2__text {
display: block;
box-sizing: border-box;
}
.c-language-selector-2__media {
display: block;
flex-shrink: 0;
box-sizing: border-box;
width: 14px;
height: 14px;
overflow-x: clip;
overflow-y: clip;
background-color: currentcolor;
margin-left: 8px;
}
.c-language-selector-2:focus {
outline: none;
}
States
Verification: flagged, the render matched 94% of the original pixels, below the 97% required after 2 correction attempts.
Anatomy
input: the component root, a <input> (.c-input), 3-character placeholderRecipe
<div class="c-input-scope">
<input class="c-input" type="text" placeholder="lor">
</div>
.c-input-scope {
background-color: #FFFFFF;
color: #777777;
font-family: duolingo-sans, sans-serif;
font-size: 25px;
font-weight: 700;
line-height: 34px;
}
.c-input {
display: inline-block;
border-spacing: 0px;
box-sizing: border-box;
width: 333px;
height: 16px;
padding: 0px;
background-color: #E5E5E5;
color: #101010;
border: 0;
border-radius: 8px;
cursor: default;
font-family: duolingo-sans, sans-serif;
font-size: 25px;
font-weight: 400;
line-height: 28.75px;
letter-spacing: normal;
text-transform: none;
text-align: start;
appearance: none;
}
.c-input:focus {
outline: none;
}
States
Verification: flagged, the render came out 13 px taller than the original (instance 3) after 2 correction attempts.
Anatomy
step-list-item: the component root, a <div> (.c-step-list-item)step-list-item-text: label text, 7 characters (.c-step-list-item__text)step-list-item-text-2: label text, 74 characters (.c-step-list-item__text-2)Recipe
<div class="c-step-list-item-scope">
<div class="c-step-list-item">
<div class="c-step-list-item__text">lorem i</div>
<div class="c-step-list-item__text-2">lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod temp</div>
</div>
</div>
.c-step-list-item-scope {
background-color: #FFFFFF;
color: #4B4B4B;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 25px;
}
.c-step-list-item {
display: inline-block;
border-spacing: 0px;
box-sizing: border-box;
color: #4B4B4B;
cursor: default;
font-family: duolingo-sans, sans-serif;
font-size: 17px;
font-weight: 500;
line-height: 25px;
text-align: left;
}
.c-step-list-item__text {
display: block;
box-sizing: border-box;
color: #58CC02;
font-size: 25px;
font-weight: 700;
line-height: 34px;
}
.c-step-list-item__text-2 {
display: block;
box-sizing: border-box;
color: #777777;
}
.c-step-list-item:hover {
transform-origin: 229.5px 42px;
}
.c-step-list-item:focus {
transform-origin: 229.5px 42px;
}
States
primary, #58CC02) for brand moments. The site uses it for the solid CTA, green headlines (card-title, step-list-item-text), the green header variant (header-inner-4) and the full footer field (footer-landing).card-3 does with 2px sides and a 4px bottom in hairline #E5E5E5, and as button-ghost-3 does with 1px sides and a 5px bottom.rounded.lg (16px) for cards and large buttons (card-3, card-5, button-secondary, button-ghost-3), rounded.md (12px) for compact buttons and badges (button-ghost, app-store-badge), and rounded.sm (8px) for inputs.hero-display, display-lg and display-md; Duolingo Sans for everything else.button, nav-link or label-caps (15px, 700, 0.8px tracking), or in button-lg (16px, 700, 0.64px) for larger buttons.button-ghost 50px, button-ghost-3 48px, button-secondary 44px.section-padding-y rhythm (96px) and cap content at footer-inner-inner-max-width (1048px).primary-light #A5ED6E and footer headings in primary-tint #D7FFB8 when they sit on the green footer field.rounded.sm, rounded.md and rounded.lg, and don't turn buttons into pills.rgba(0, 205, 156, 0.1) 0px 0px 0px 1440px, and it is a tint, not a lift.primary or secondary. Body copy belongs in ink #3C3C3C, ink-strong #4B4B4B or muted #777777.link (#0000EE) as a visible color. It is a browser default measured on logo anchors; visible links use secondary #1CB0F6.tertiary, accent-orange and navy are already spot colors.This analysis is based on two viewports only (desktop and mobile). No intermediate breakpoint values could be observed, so none are stated.
header-landing-mobile), but its logo shrinks from 179px wide (header-landing-logo-image) to 161px (header-landing-mobile-logo-image).header-inner) to 56px (header-inner-mobile) and swaps its links for a 32px menu toggle (header-inner-mobile-menu-toggle).header-inner-2-mobile).footer-landing) to 2014px on mobile (footer-landing-mobile) as its columns stack into one. Utility footers grow similarly as their nav wraps: footer-inner-2 goes from 79px to 118px (footer-inner-2-mobile), and footer-inner-3 goes from 39px to 156px (footer-inner-3-mobile).Measured buttons sit in or near the comfortable touch range: button-ghost at 50px, button-ghost-3 at 48px and button-secondary at 44px. Text-only controls are much shorter, such as button-ghost-2 and language-selector-2 at 17px. When they are used on mobile, pad their hit area out to at least the button-secondary height.
primary, secondary, ink, ink-strong, muted, muted-light and hairline. If a color you need is not a token, the design does not need it.card-3 pattern (2px sides, 4px bottom, hairline). Never add a blurred box-shadow.hero-display, display-lg and display-md. All other text is Duolingo Sans at 500 (body, body-lg) or 700 (everything else). Do not add weights, and do not add a third family.button, nav-link, label-caps or button-lg, so the wide 0.8px / 0.64px tracking carries through.rounded.lg for cards and large buttons, rounded.md for compact buttons and badges, and rounded.sm for inputs. Do not add pill or sharp-cornered variants.primary fills the CTA, the footer field and celebratory headlines. Inside the footer, use the component greens primary-light and primary-tint for text; do not use them elsewhere.section-padding-y and sit within footer-inner-inner-max-width. Add sections rather than densifying existing ones.button-ghost, button-secondary, button-ghost-3). The darker green lip shade is therefore not tokenized.card (flagged: the card-group-2 y did not reproduce the measured 273px after 2 correction attempts), card-5 (flagged: the card-5-group-2 height did not reproduce the measured 105px after 2 correction attempts), input (flagged: the render matched 94% of the original pixels, below the 97% required after 2 correction attempts), header-inner-4 (flagged: the render matched 86% of the original pixels, below the 96% required after 2 correction attempts) and button-secondary (flagged: the render came out 2 px wider than the original after 2 correction attempts). Treat their internal geometry as approximate.card-4 (not verifiable: what the page placed in it (photos, media, ads) covers most of it and nothing else differs, so the comparison could not be judged).header-landing-cta-hover (text #AFAFAF, radius 0px), looks like an artifact rather than a real design state. Pressed and active states (the lip collapsing on press) were not captured.section-padding-y, footer-inner-inner-max-width, button-ghost-3-padding-x). There is no base step, no card padding token and no grid-gap token.link token (#0000EE) is a browser default read from logo anchors, not an intentional brand color.ไฟล์ DESIGN.md นี้เป็นภาษาอังกฤษ ซึ่งเป็นภาษาที่เอเจนต์เขียนโค้ด AI ใช้อ่านไฟล์นี้
ดึงจากเว็บไซต์สาธารณะของ Duolingo - The world’s most popular way to learn ไม่ใช่แนวทางแบรนด์อย่างเป็นทางการ ตรวจสอบฟอนต์ของเว็บไซต์อื่น

Design tokens ที่ดึงมาจากการวิเคราะห์ความถี่ของ CSSOM โดยไม่ผ่านการตีความของ LLM

Airbnb ใช้ระบบการออกแบบที่ตั้งอยู่บนฟอนต์แบบ variable ตัวเดียวที่เป็นกรรมสิทธิ์ (Airbnb Cereal VF) และชุดสีกลางเกือบเป็นขาวดำ โดยมีสีถ่านเข้ม (#222222) และสีเทาอ่อนเป็นหลัก ส่วนสีชมพูปะการัง "Rausch" (#ff385c) ซึ่งเป็นเอกลักษณ์ของแบรนด์ ถูกสงวนไว้เฉพาะสำหรับปุ่มเรียกร้องการกระทำหลัก (CTA) และโลโก้เท่านั้น เลย์เอาต์เป็นกริดการ์ดภาพที่ปรับตามขนาดหน้าจอ มีสัดส่วนพื้นที่ภาพต่อข้อความที่กว้างขวาง การ์ดมีมุมโค้งมน 20px ที่นุ่มนวล และระบบเงาแบบหลายชั้นที่ช่วยสร้างความลึกอย่างละมุน โดยไม่มีความตัดกันที่แข็งกระด้าง แถบค้นหาเป็นกล่องรูปแคปซูลที่เด่นชัด ทำหน้าที่รวมการกระทำหลักของผู้ใช้เข้าด้วยกัน
IKEA ใช้ระบบออกแบบแบบแบนและกล้าหาญบนหน้าแรกระดับโลก โดยมีสีเหลือง IKEA (#ffdb00) เป็นพื้นผิวหลักสำหรับการดำเนินการ และใช้สีน้ำเงิน IKEA (#0058a3) เป็นจุดเน้นของโลโก้แบรนด์ ระบบตัวอักษรทั้งหมดสร้างจากแบบอักษรเฉพาะเพียงหนึ่งแบบคือ Noto IKEA ซึ่งใช้น้ำหนัก 400 และ 700 ตามสเกลที่กำหนดอย่างชัดเจน ตั้งแต่ข้อความเนื้อหาขนาด 14px ไปจนถึงหัวข้อแสดงผลขนาด 51px การยกระดับองค์ประกอบอาศัยความต่างของสีและโครงสร้างเลย์เอาต์เท่านั้น ไม่ใช้เงา เลย์เอาต์ใช้คอนเทนเนอร์ความกว้างสูงสุด 90rem และช่องว่างกริดบนเดสก์ท็อป 1.5rem พร้อมโทเคนรัศมีมุม 8px ที่ใช้อย่างสม่ำเสมอกับองค์ประกอบที่โต้ตอบได้ พื้นหลังสีขาวนวล (#fffefb) ช่วยให้ดูอบอุ่นเมื่อตัดกับข้อความสี #111111 ที่เข้มจัด ทำให้การอ่านมีคอนทราสต์สูงและเข้าถึงได้ง่าย

Notion หน้าแรกของหน้าการตลาดใช้ส่วนฮีโร่สีน้ำเงินเข้มโทนลึก (#02093a) คู่กับเนื้อหาส่วนอื่นพื้นสว่าง (#f6f5f4) โดยใช้ฟอนต์เฉพาะ NotionInter กับข้อความทุกระดับ ดีไซน์ใช้กริดสิบสองคอลัมน์ที่มีร่อง 28px และระบบมุมโค้งสองแบบ คือ 8px สำหรับการ์ด และ 9999px สำหรับปุ่มทรงแคปซูล สำหรับองค์ประกอบลอยตัวใช้ระบบเงาหลายชั้นที่เข้มขึ้นตามลำดับ ปุ่มเรียกการกระทำและจุดเน้นสำคัญใช้สีน้ำเงินของแบรนด์ (#2537b1) ส่วนลำดับความสำคัญของข้อความและพื้นผิวทั้งหมดจัดโครงสร้างด้วยชุดสีเทาตามความหมาย ตั้งแต่ gray-200 ถึง gray-900

Design system ของ Railway เป็น UI สำหรับแพลตฟอร์มนักพัฒนาที่ออกแบบให้ใช้โหมดมืดเป็นหลัก โดยยึดพื้นผิวสีน้ำเงินเข้มเกือบดำ (#13111c, #0b0b0f) ข้อความสีขาวนวลที่คมชัด (#f7f7f8) และสีเน้นสีม่วงที่โดดเด่น (#853bce / #553f83) ส่วนฮีโร่ใช้ฟอนต์ IBM Plex Serif เพื่อให้ดูเป็นงานเชิงบรรณาธิการ ขณะที่ Inter ใช้กับข้อความ UI ทั้งหมด และ JetBrains Mono / SF Mono ใช้กับส่วนโค้ด การยกระดับองค์ประกอบทำผ่านขอบเรืองแสงสีขาวแบบ inset (rgba(255,255,255,0.2) 1.5px inset) แทนเงาตก ทำให้ UI มีบุคลิกแบบแผงกระจก ระบบระยะห่างอิงหน่วย 4px โดยจังหวะหลัก 8/12/16/24/32 ส่วนมุมโค้งค่อนข้างแคบ โดยใช้ 4px เป็นหลัก และใช้ 8px กับ 16px เฉพาะการ์ดและกล่องฮีโร่

Shopify ใช้หน้าแรกการตลาดที่มีส่วนฮีโร่เป็นวิดีโอเต็มความกว้างอย่างโดดเด่น โดยมีพื้นหลังสีดำเกือบสนิท (#02090a) ที่ตัดกับแถบนำทางสีขาวด้านบนอย่างชัดเจน สีเน้นหลักของแบรนด์คือสีเขียวมิ้นต์สด (#36f4a4) ซึ่งใช้อย่างประหยัดสำหรับจุดเด่นและสถานะการโต้ตอบ ตัวอักษรแบ่งเป็นสองแบบ คือ NeueHaasGrotesk สำหรับหัวข้อตัวใหญ่และหัวข้อแบบบรรณาธิการ และ Inter-Variable สำหรับเนื้อหาส่วนการใช้งาน ปุ่มเรียกให้ดำเนินการใช้รูปทรงแคปซูลโค้งมนเต็มที่ (border-radius: 9999px) ภาพรวมของระบบดีไซน์นี้มั่นใจ มีคอนทราสต์สูง และมุ่งสร้างแรงบันดาลใจ ออกแบบมาเพื่อเปลี่ยนผู้เข้าชมให้เป็นผู้ขาย