← Back
Design System · Typography

Typog­raphy

Base 16px Noto Sans · Headings Poppins · Body H1–H4 + P1–P4 Scale WCAG AA / AAA
§01 Font Families
Headings · H1–H4 · Display · Section Titles
Noto Sans

Humanist variable sans-serif built for universal clarity at all sizes. Governs all headings H1–H4, display text, and section titles. Used at weight 500 (Medium) with 0 letter spacing and 1.4 line height — open, readable presence without aggressive compression.

ClassificationHumanist Variable Sans-Serif
Role weight500 Medium
Line height1.4
Letter spacing0
Variable fontYes — wdth + wght axes
LicenseSIL Open Font License 1.1
CSS token--font-display
Noto Sans Headings
Body · Paragraphs · Prose · Captions · UI
Poppins

Geometric sans-serif with perfectly circular forms and consistent stroke width. Governs all body copy, paragraphs P1–P4, captions, and UI labels. Used at weight 300 (Light) with 0 letter spacing and 1.8 line height — giving prose an airy, effortless rhythm.

ClassificationGeometric Sans-Serif
Role weight300 Light
Line height1.8
Letter spacing0em
Variable fontNo — static TTF files (9 weights)
LicenseSIL Open Font License 1.1
CSS token--font-body
Poppins Body Paragraphs
§02 Type Scale — Headings H1–H4 & Paragraphs P1–P4
--fs-8xl112px/7rem
wt 500
lh 1.1
ls 0
font Noto Sans
Giant / Hero
Design
--fs-7xl80px/5rem
wt 500
lh 1.1
ls 0
font Noto Sans
Display
Natalia Koldaeva
--h1 / --fs-6xl64px/4rem
wt 500
lh 1.4
ls 0
font Noto Sans
H1 · Page Title
Senior Product Designer
--h2 / --fs-5xl~37px/2.3rem
wt 500
lh 1.4
ls 0
font Noto Sans
H2 · Section Hero
iOS · macOS · SwiftUI
--h3 / --fs-4xl~35px/2.2rem
wt 500
lh 1.4
ls 0
font Noto Sans
H3 · Section Title
Design Systems Architecture
--h4 / --fs-3xl~26px/1.6rem
wt 500
lh 1.4
ls 0
font Noto Sans
H4 · Card Headline
User Research · AI Features
--fs-xl20px/1.25rem
wt 400
lh 1.4
ls 0
font Noto Sans
Subheading · Callout
Apple-native design and SwiftUI implementation
--p1 / --fs-lg24px/1.5rem
wt 300
lh 1.8
ls 0em
font Poppins
P1 · Lead / Large
I go deep where it matters — from production SwiftUI to usability studies.
--p2 / --fs-base ★16px/1rem
wt 300
lh 1.8
ls 0em
font Poppins
P2 · Body ← BASE
Shipped WCAG AA–compliant flows with pixel-perfect SwiftUI implementation across all target platforms.
--p3 / --fs-sm~14px/0.9rem
wt 300
lh 1.8
ls 0em
font Poppins
P3 · Small / Footnote
Restructured multi-step workflows based on usability test findings — increased task completion rates 20–25%.
--p4 / --fs-2xs~10px/0.6rem
wt 300
lh 1.8
ls 0em
font Poppins
P4 · Caption / Micro
App Store rating lifted from 3.2 → 4.4 · 175% MAU increase · 112% revenue growth within 6 months
--fs-xs12px/0.75rem
wt 600–700
lh 1.4
ls +0.08em
font Poppins
UI Label / Badge / Tag
WCAG AA · VOICEOVER · DYNAMIC TYPE · SWIFTUI
§03 Noto Sans — Heading Weights

Headings use Noto Sans at weight 500 (Medium) — highlighted below. The variable font supports the full range 100–900, giving flexibility for display and giant sizes when needed.

Thinfont-weight: 100
Design with depth and purpose.
Decorative
Extra Lightfont-weight: 200
Design with depth and purpose.
XL Display
Lightfont-weight: 300
Design with depth and purpose.
Hero Intro
Regularfont-weight: 400
Design with depth and purpose.
Subheading
Medium ★font-weight: 500
Design with depth and purpose.
H1–H4 Default
Semi Boldfont-weight: 600
Design with depth and purpose.
Emphasis
Boldfont-weight: 700
Design with depth and purpose.
H1 Strong
Extra Boldfont-weight: 800
Design with depth and purpose.
Display
Blackfont-weight: 900
Design with depth and purpose.
Giant · Hero
§04 Poppins — Body Weights

Paragraphs use Poppins at weight 300 (Light) — highlighted below. Heavier weights serve UI labels, emphasis, and interactive elements.

Thinfont-weight: 100
The quick brown fox jumps over the lazy dog.
Decorative
Extra Lightfont-weight: 200
The quick brown fox jumps over the lazy dog.
Intro Text
Light ★font-weight: 300
The quick brown fox jumps over the lazy dog.
P1–P4 Default
Regularfont-weight: 400
The quick brown fox jumps over the lazy dog.
Emphasis
Mediumfont-weight: 500
The quick brown fox jumps over the lazy dog.
Labels / Nav
Semi Boldfont-weight: 600
The quick brown fox jumps over the lazy dog.
UI Labels
Boldfont-weight: 700
The quick brown fox jumps over the lazy dog.
Badges / Tags
Extra Boldfont-weight: 800
The quick brown fox jumps over the lazy dog.
Strong CTA
Blackfont-weight: 900
The quick brown fox jumps over the lazy dog.
Display / Hero
§05 Line Height & Letter Spacing
Line Height Tokens
--lh-none1.0Giant hero, 80px+
--lh-tighter1.05Large display headings
--lh-tight1.15Giant + Display (optional)
--lh-snug1.25Subheadings, callouts
--lh-normal ★H1.4Heading default (H1–H4)
--lh-relaxed1.6UI elements, labels
--lh-loose ★P1.8Paragraph default (P1–P4)
Letter Spacing Tokens
--ls-tightest−0.04emGiant hero display
--ls-tighter−0.025emTight display (not used)
--ls-tight−0.015emReserved for overrides
--ls-normal ★P0emParagraph default (P1–P4)
--ls-wide+0.02emNav items, small UI
--ls-wider+0.06emSection labels, tags
--ls-widest+0.1emLabel caps · Poppins UI
§06 Type in Context
Portfolio Hero
Senior Product Designer · iOS & macOS
I design and build
native mobile products.
From design system architecture to production SwiftUI code — Apple-native design, Design Systems, User Research, and AI/ML product design.
iOS · macOS · SwiftUI Design Systems WCAG AA AI / ML Features
Project Card
Case Study · 2023–2024
Numerade iOS Redesign
175% MAU increase and 112% revenue growth within 6 months. Raised App Store rating from 3.2 → 4.4 through research-led redesign.
AI Tutor SwiftUI Research
Pangram · Both Families
Noto — The quick brown fox.
Poppins — The quick brown fox jumps over the lazy dog, delivering clarity at every reading size.
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9   . , ; : ! ? @ # % & ( ) — / →
§07 WCAG Contrast Compliance
Black on White
21.00:1
AAA Pass

Black (#000000) on main background (#FFFFFF). Exceeds AAA 7:1. All H1–H4 headings and P1–P4 body copy on the default white canvas.

Black on Sand
17.95:1
AAA Pass

Black (#000000) on supportive background (#EEEDEB). Exceeds AAA. All text content in sand sections, card surfaces, and sidebar panels.

Black on Peach
17.88:1
AAA Pass

Black (#000000) on accent background (#FFE9D6). Exceeds AAA. All text in callout sections, featured stats, and highlighted rows.

Taupe on White
4.82:1
AA Pass

Taupe (#757263) on white (#FFFFFF). Meets AA 4.5:1 for normal text. Labels, tags, borders, and accent text — on white only.

§08 CSS Design Tokens
typography-tokens.css
/* ── FONT FAMILIES ─────────────────────────────────────── */
:root {
  --font-display: 'Noto Sans', sans-serif;    /* Headings H1–H4 · Display        */
  --font-body:    'Poppins', sans-serif;       /* Body · Paragraphs · Captions    */

  /* ── HEADING STYLE TOKENS ──────────────────────────── */
  --h-weight:  500;         /* Medium — all H1–H4              */
  --h-lh:      1.4;         /* Line height — all H1–H4         */
  --h-ls:      0;           /* Letter spacing — all H1–H4      */

  /* ── PARAGRAPH STYLE TOKENS ────────────────────────── */
  --p-weight:  300;         /* Light — all P1–P4               */
  --p-lh:      1.8;         /* Line height — all P1–P4         */
  --p-ls:      0em;         /* Letter spacing — all P1–P4      */

  /* ── HEADING SIZES ─────────────────────────────────── */
  --h1:  4rem;              /*  64px  — Page Title             */
  --h2:  2.3rem;            /* ~37px  — Section Hero           */
  --h3:  2.2rem;            /* ~35px  — Section Title          */
  --h4:  1.6rem;            /* ~26px  — Card Headline          */

  /* ── PARAGRAPH SIZES ───────────────────────────────── */
  --p1:  1.5rem;            /*  24px  — Lead / Large           */
  --p2:  1rem;              /*  16px  — Body Base   ← BASE     */
  --p3:  0.9rem;            /* ~14px  — Small / Footnote       */
  --p4:  0.6rem;            /* ~10px  — Caption / Micro        */

  /* ── LINE HEIGHTS ──────────────────────────────────── */
  --lh-none:    1;
  --lh-tighter: 1.05;
  --lh-tight:   1.15;
  --lh-snug:    1.25;
  --lh-normal:  1.4;    /* Headings H1–H4  ★               */
  --lh-relaxed: 1.6;
  --lh-loose:   1.8;    /* Paragraphs P1–P4  ★             */

  /* ── LETTER SPACING ────────────────────────────────── */
  --ls-tightest: -0.04em;
  --ls-tighter:  -0.025em;
  --ls-tight:    -0.015em;
  --ls-normal:   0em;       /* Paragraphs P1–P4  ★             */
  --ls-wide:     0.02em;
  --ls-wider:    0.06em;
  --ls-widest:   0.1em;    /* Label caps · Poppins UI          */
}
§09 Usage Rules
T
Font Assignment

Use Noto Sans for all headings H1–H4 and display text. Use Poppins for all body copy, paragraphs P1–P4, nav items, captions, and UI labels. Never swap these roles — the contrast between Noto Sans (humanist, open) and Poppins (geometric, airy) creates deliberate typographic rhythm.

⟨H⟩
Heading Defaults

All H1–H4 headings must use weight 500, line-height 1.4, and letter-spacing 0. Style is Normal, transform is None. Noto Sans has excellent native spacing that reads cleanly without adjustment at all heading sizes.

⟨P⟩
Paragraph Defaults

All P1–P4 paragraphs must use weight 300, line-height 1.8, and letter-spacing 0em. Style is Normal, transform is None. The generous line height (1.8) is essential for readability of Light-weight Poppins — do not reduce below 1.6.

Size Minimums

P4 at 0.6rem (~10px) is a micro size — limit to captions, timestamps, and metadata only. Never use P4 for actionable content. P3 (0.9rem) is the minimum for readable footnotes. On iOS use Dynamic Type: minimum 11pt body and respect user font-size preferences.

Accessibility

Use Black (#000000) for all body and heading text — it achieves AAA on every background in the palette. Taupe (#757263) on white passes AA (4.82:1) for normal text but not on sand or peach. Test with VoiceOver (iOS) and Accessibility Inspector (macOS).

Responsive Scaling

Use clamp() for H1–H2 on fluid layouts. On mobile (<640px) reduce H1 to 2.5rem and H2 to 1.8rem to preserve breathing room. P1 (1.5rem) may reduce to 1.25rem on narrow viewports. H3 and H4 typically hold fixed — they're compact enough not to overflow.

a ⃗
Inline Links

Prose links use Taupe (#757263) color, weight 500 (a step up from body weight 300), and an underline in the same Taupe with a 2px underline offset. Hover deepens both color and underline to Black. Implemented globally on a in base.css — component-styled links (buttons, nav, cards) override via their own class rules. Applies to all inline text links across the system.