Foundations

Typography

Typography establishes hierarchy and trust. In government services, clarity is not optional — every citizen, regardless of literacy level, device or connectivity, must be able to read and act on what they see.

Principles

Three rules behind every type decision.

01

Optimise for readability

Every size, weight and line-height decision serves the reader first. Decorative or arbitrary type choices undermine trust in government interfaces.

02

Communicate hierarchy clearly

Use the type scale to signal importance — not color alone. Any UX4G screen should be scannable; the user should know what to read first.

03

Accessible for everyone

UX4G serves citizens across all literacy levels, device types and network conditions. Type decisions meet WCAG 2.1 AA and GIGW 3.0 minimum sizes.

Typefaces

Two families, each with a role. Both cover Hindi and English.

Type scale mirrors the Figma spec; heading font family is under review.

If Noto Sans fails to load, the system-ui fallback ensures users see a native system font (SF Pro on iOS/macOS, Segoe UI on Windows) rather than a browser default — critical for government services accessed on low-bandwidth or rural networks.

Noto Sans

UI typeface · all product interfaces

--ux4g-font-family-base

Designed by Google to render text in all scripts. "Noto" stands for "No Tofu" — the blank boxes (□) shown when a font lacks a character. Noto Sans renders consistently in Hindi and English.

Noto SansNoto SansNoto SansNoto Sans

Weights: Regular 400 · Medium 500 · Semibold 600 · Bold 700. Used for all headings, body text, labels and UI.

Noto Sans Display

Display typeface · Display styles only (36px+)

--ux4g-font-family-display

An optical variant of Noto Sans tuned for large display sizes, with slightly more refined stroke contrast and wider tracking so headings stay legible at scale. Reserve it for the Display category; everything else uses the base family.

Noto Sans Display

Weights: Semibold 600 · Bold 700.

Font stack

/* Base — all UI text */

font-family: "Noto Sans", system-ui, sans-serif;

/* Display — large editorial headings only */

font-family: "Noto Sans Display", "Noto Sans", sans-serif;

Type scale

Five style categories, each with a fixed scale. Toggle Default / Strong on any style to switch between its lighter and heavier weight.

Display

Noto Sans Display
The quick brown fox
Display/L
.ux4g-display-l-default
60px / 3.75remline 80px / 5remSemibold

Hero banners — exceptional, full-page landing only

The quick brown fox
Display/M
.ux4g-display-m-default
52px / 3.25remline 72px / 4.5remSemibold

Large campaign or section hero headings

The quick brown fox
Display/S
.ux4g-display-s-default
40px / 2.5remline 52px / 3.25remSemibold

Section title on a dashboard landing

The quick brown fox
Display/XS
.ux4g-display-xs-default
36px / 2.25remline 44px / 2.75remSemibold

Section-level hero in compact layouts

Heading

Noto Sans
The quick brown fox
Heading/XXL
.ux4g-heading-xxl-default
40px / 2.5remline 44px / 2.75remSemibold<h1>

Top-level page title (form, dashboard, landing)

The quick brown fox
Heading/XL
.ux4g-heading-xl-default
32px / 2remline 36px / 2.25remSemibold<h1–h2>

Primary section heading

The quick brown fox
Heading/L
.ux4g-heading-l-default
28px / 1.75remline 32px / 2remSemibold<h2>

Secondary section heading

The quick brown fox
Heading/M
.ux4g-heading-m-default
24px / 1.5remline 28px / 1.75remSemibold<h3>

Card title, panel heading

The quick brown fox
Heading/S
.ux4g-heading-s-default
20px / 1.25remline 24px / 1.5remSemibold<h4>

Sub-section heading

The quick brown fox
Heading/XS
.ux4g-heading-xs-default
16px / 1remline 20px / 1.25remSemibold<h5>

Small heading, grouped fields title

The quick brown fox
Heading/XXS
.ux4g-heading-xxs-default
14px / 0.875remline 16px / 1remSemibold<h6>

Smallest heading — sidebar label, data table column header

Title

Noto Sans
The quick brown fox
Title/L
.ux4g-title-l-default
24px / 1.5remline 28px / 1.75remSemibold

Component title in a card or modal

The quick brown fox
Title/M
.ux4g-title-m-default
20px / 1.25remline 24px / 1.5remSemibold

Form section title

The quick brown fox
Title/S
.ux4g-title-s-default
16px / 1remline 20px / 1.25remSemibold

Small label-weight title, button group heading

Body

Noto Sans
The quick brown fox
Body/L
.ux4g-body-l-default
18px / 1.125remline 24px / 1.5remRegular

Long-form instructions, multi-paragraph content

The quick brown fox
Body/M
.ux4g-body-m-default
16px / 1remline 24px / 1.5remRegular

Default body text for most UI

The quick brown fox
Body/S
.ux4g-body-s-default
14px / 0.875remline 20px / 1.25remRegular

Helper text, secondary descriptions

The quick brown fox
Body/XS
.ux4g-body-xs-default
12px / 0.75remline 16px / 1remRegular

Captions, legal text, timestamps — minimum usable size

Label

Noto Sans
The quick brown fox
Label/XL
.ux4g-label-xl-default
16px / 1remline 20px / 1.25remMedium

Form field labels (default)

The quick brown fox
Label/L
.ux4g-label-l-default
14px / 0.875remline 18px / 1.125remMedium

Secondary labels, table column headers

The quick brown fox
Label/M
.ux4g-label-m-default
12px / 0.75remline 16px / 1remMedium

Badge text, chip labels, tag text

The quick brown fox
Label/S
.ux4g-label-s-default
11px / 0.688remline 14px / 0.875remMedium

Micro labels — status tags, compact data; use sparingly

Default vs Strong. Within each style, Default uses the lighter weight and Strong uses the heavier one. Use Strong to add emphasis within a size — do not jump to a larger size for emphasis.

Font weights

Four weights. Use them sparingly — visual emphasis only works if it's rare.

Aa

Regular 400

Body text, descriptions, form labels

Aa

Medium 500

Labels, UI controls, navigation items

Aa

Semibold 600

Sub-headings, emphasis, navigation

Aa

Bold 700

Headings, page titles, CTAs

Avoid Bold for long text. Bold draws the eye — if everything is bold, nothing is. Reserve it for short headings, primary actions and moments of critical importance.

Usage guidance

Quick-reference card for the most-asked designer question — "which style do I use here?"

If you need…Use this
Page or screen title (main h1)Heading/XXL · Heading/XL
Section heading (primary division)Heading/L · Heading/M
Card or panel titleHeading/M · Title/L
Form section titleTitle/M
Form field labelLabel/XL · Label/L
Default body / paragraph textBody/M Default
Instructions / longer copyBody/L Default
Helper text below an inputBody/S Default
Caption, timestamp, legal textBody/XS Default
Button labelLabel/XL Strong
Badge, chip or tag textLabel/M · Label/S Strong
Navigation itemLabel/XL Default
Data table column headerHeading/XXS · Label/L
Large display / campaign heroDisplay/S · Display/XS

Responsive behaviour

UX4G type tokens are currently fixed at all breakpoints. At small breakpoints (≤576px) and below, reduce Display and large Heading styles to keep mobile legible.

StyleDesktopRecommended mobile
Display/L60px40px (Display/S)
Display/M52px36px (Display/XS)
Display/S40px36px (Display/XS)
Heading/XXL40px32px (Heading/XL)
Heading/XL32px28px (Heading/L)
Heading/L28px24px (Heading/M)

Body, Label and Title styles render well at every breakpoint without adjustment. Token-level responsive scaling is on the UX4G roadmap.

Accessibility

GIGW 3.0 and WCAG 2.1 AA are mandatory for all Government of India digital services. Type sizes and structure must clear these thresholds.

RuleWhy
Minimum body size 16px (absolute floor 12px)Smaller text fails AA for many readers
Line height ≥ 1.5× the font size for body textWCAG 1.4.12 — spacing for low-vision readers
Don't override letter-spacing into unreadable valuesCustom tracking breaks legibility for dyslexic readers
Text resizes to 200% without loss of contentWCAG 1.4.4 — browser zoom must work

Heading level rules

  • Use only one <h1> per page — typically the page title.
  • Use heading levels in descending order. Don't skip (no h2 → h4).
  • Use headings for structure, not visual appearance. For a heading look without semantic meaning, use a Title or Label style.
  • Screen reader users navigate by headings — correct semantic structure is as important as color contrast.
Why rem units? UX4G type tokens use rem for font-size and line-height. 1rem = 16px at browser default. Unlike pixels, rem resizes when a user increases their browser's default font size — critical for low-vision users who rely on browser zoom.

Line length & readability

Aim for 50–90 characters per line, including spaces. Shorter lines are easier to track from line end to line start; very long lines increase reading fatigue.

✓ Optimal (max-width: 720px)

Government digital services must be accessible to all citizens regardless of their technical literacy, language preference, or assistive technology needs.

✗ Too wide (no max-width)

When text spans the full width of a large monitor it becomes extremely difficult to track from the end of one line to the beginning of the next, which significantly reduces reading speed and comprehension for all users — especially those with cognitive disabilities or reading difficulties.

Hindi Typography

Hindi script requires additional line-height and careful font selection for readability.

Devanagari (Hindi)

डिजिटल भारत पोर्टल

Line-height: 1.8 (increased for ascenders/descenders)

Dos and Don'ts

Seven common decisions, summarised.

Dos

  • Use Heading/2XL for the single h1 page title
  • Use heading levels in order (h1 → h2 → h3)
  • Use Body/M Default as the default reading text
  • Use Label/XL for form field labels
  • Use the Strong variant for emphasis within a size
  • Use rem-based sizes — let browser zoom work
  • Use Display styles only for large hero contexts

Don'ts

  • Use multiple h1s on one page
  • Skip heading levels for visual effect
  • Use sizes smaller than 12px for any text
  • Use Heading/XS as a form label (wrong semantic role)
  • Increase font size to add emphasis
  • Hard-code px values that block user zoom
  • Use Display for body content or normal page headings
UX4G Accessibility Tool
Dictionary
UX4G Accessibility Tool
Dictionary