Components · Text & content
Heading
The Inter heading scale, display through h6. Sizes step down with tightening line-heights and letter-spacing so hierarchy reads at a glance. The h6 is the one inversion — muted, uppercase, tracked — for the smallest section eyebrows.
Preview
Display
Heading 1
Heading 2
Heading 3
Heading 4
Heading 5
Heading 6
Build with the skill
No package to install — hand this to your AI to generate or migrate the component in your stack.
Apply the Zetta "Heading" component to this project using the zetta-design-md skill.
WHEN TO USE
- Migrating or fixing existing code (the common case): audit the current implementation against the `heading` spec (variants: display, 1, 2, 3, 4, 5, 6) and CORRECT every deviation — replace off-spec values, don't only add new ones.
- New component: build it to the `heading` spec in this project's stack.
AUDIT & FIX (when the component already exists)
Compare it to the skill's spec and fix, don't just append: hardcoded colors/hex, off-scale radius, wrong fonts, dark/navy fills, shadows used in place of borders (or missing borders), brand lime used as a CTA or interaction (must be primary indigo), and any missing or wrong hover / focus / active / disabled / invalid state or missing 2px focus ring. Replace each with the correct Zetta token.
ALWAYS
- Pull the authoritative spec and tokens from the skill — never guess or hardcode values.
- Use this project's own component conventions and framework idioms.
- Honor the Zetta guardrails (brand = identity only, primary = interaction, shadows for overlays) and verify in Light, Dark, and Accessibility. Anatomy & rules
H1 ── Large display heading (Inter, 32px / 700)
H2 ── Section heading (Inter, 24px / 600)
H3 ── Sub-section heading (Inter, 20px / 600)
H4 ── Group heading (Inter, 16px / 600)
H5 ── Label heading (Inter, 14px / 600)
H6 ── Micro heading (Inter, 13px / 600)
Parts:
- Text node — rendered at the size and weight of the selected variant
- Semantic element —
<h1>through<h6>, matching the visual level - No additional visual decoration (borders, backgrounds) unless explicitly added by the page layout
Heading is non-interactive. No interactive states.
| State | Visual |
|---|---|
| Default | Typography per variant token |
When to use
- Any title or header that establishes information hierarchy.
When not to use
- Bold body text that is not actually a heading — use
fontWeight: "600"in body text styles instead. Misusing headings breaks screen reader navigation.
Do
- Use exactly one
<h1>per page — always the Page Header title. - Maintain strict heading level hierarchy — never skip from
<h2>to<h4>. - Use
sizeprop to decouple visual size from semantic level when needed (e.g. a sidebar section label should be<h2>semantically but look likeheading-5visually).
Don't
- Don't use headings for decoration — bold a
<p>or<span>instead. - Don't use
heading-displayinside page content — reserve it for onboarding and marketing sections.
- Use heading hierarchy correctly: one H1 per page, H2 for major sections, H3 for subsections.
- Keep headings concise — describe what follows, not what the user should do.
- Sentence case: "User settings" not "User Settings". Exception: proper nouns.
- Do not use headings for decorative large text — use the Display component.
Keyboard
Heading is non-interactive and has no keyboard behavior.
Accessibility
- Heading levels create the page's document outline — screen reader users navigate by heading.
- Never use a heading purely for visual size without semantic intent.
- When using
sizeto override visual appearance, ensure the semanticlevelstill correctly reflects the document hierarchy.
Spec
Values and token references resolved straight from the Zetta spec.
heading-display
- fontFamily
- Inter
- fontSize
- 36px
- fontWeight
- 700
- lineHeight
- 1.20
- letterSpacing
- -0.02em
- textColor
- {colors.ink}
heading-1
- fontFamily
- Inter
- fontSize
- 28px
- fontWeight
- 700
- lineHeight
- 1.25
- letterSpacing
- -0.01em
- textColor
- {colors.ink}
heading-2
- fontFamily
- Inter
- fontSize
- 22px
- fontWeight
- 600
- lineHeight
- 1.30
- letterSpacing
- -0.01em
- textColor
- {colors.ink}
heading-3
- fontFamily
- Inter
- fontSize
- 18px
- fontWeight
- 600
- lineHeight
- 1.35
- letterSpacing
- 0
- textColor
- {colors.ink}
heading-4
- fontFamily
- Inter
- fontSize
- 16px
- fontWeight
- 600
- lineHeight
- 1.40
- letterSpacing
- 0
- textColor
- {colors.ink}
heading-5
- fontFamily
- Inter
- fontSize
- 14px
- fontWeight
- 600
- lineHeight
- 1.40
- letterSpacing
- 0
- textColor
- {colors.ink}
heading-6
- fontFamily
- Inter
- fontSize
- 12px
- fontWeight
- 600
- lineHeight
- 1.50
- letterSpacing
- 0.01em
- textColor
- {colors.muted}
- textTransform
- uppercase