Skip to content

Typography

Typography

WEC Design System uses Poppins as the primary font family for its modern, geometric sans-serif design, complemented by Telkomsel Batik for brand headlines. Our type scale ensures visual hierarchy and readability across all device sizes.

WeightFont FileFont WeightUsage
Thinpoppins-thin.woff2100Display, decorative
Lightpoppins-light.woff2300Subheadings, emphasis
Regularpoppins-regular.woff2400Body text, default
Mediumpoppins-medium.woff2500Emphasized text, labels
Boldpoppins-bold.woff2700Headings, strong emphasis
Extra Boldpoppins-extra-bold.woff2800Display headings
WeightFont FileFont WeightUsage
Regulartelkomsel-batik-regular.woff2400Brand headlines
Boldtelkomsel-batik-bold.woff2700Brand headlines (emphasis)

Note: Telkomsel Batik is used exclusively for brand headlines and hero sections to maintain brand identity.

/* Primary font stack */
font-family: 'Poppins', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
/* Brand font stack */
font-family: 'Telkomsel Batik', 'Poppins', sans-serif;
TokenSizeLine HeightFont WeightUsage
.text-desktop-h164px72pxBold/Extra BoldHero titles, main headings
.text-desktop-h256px72pxBoldPage titles
.text-desktop-h344px56pxBold/MediumSection titles
.text-desktop-h432px48pxMedium/Semi BoldSubsection titles
.text-desktop-h524px32pxMediumCard titles
.text-desktop-h618px24pxMediumSmall headings
.text-desktop-body218px32pxRegularBody text, paragraphs
.text-desktop-body315px24pxRegularSecondary text
.text-desktop-body413px24pxRegularCaptions, labels
TokenSizeLine HeightFont WeightUsage
.text-mobile-h132px40pxBoldHero titles
.text-mobile-h232px36pxBoldPage titles
.text-mobile-h320px24pxMediumSection titles
.text-mobile-h416px24pxMediumSubsection titles
.text-mobile-body214px24pxRegularBody text
.text-mobile-body314px16pxRegularSecondary text
.text-mobile-body-small12px24pxRegularCaptions
.text-mobile-small11px16pxRegularTiny labels
.text-mobile-extra-small8px12pxRegularMicro text
<h1 className="text-desktop-h1 md:text-mobile-h1 font-bold">
Build Consistent User Experiences
</h1>

Usage: Landing page heroes, main section headers

<h2 className="text-desktop-h2 md:text-mobile-h2 font-bold">
Package Details
</h2>

Usage: Page titles, modal titles

<h3 className="text-desktop-h3 md:text-mobile-h3 font-medium">
Choose Your Plan
</h3>

Usage: Section headers, card categories

<p className="text-desktop-body2 md:text-mobile-body2 font-normal">
WEC Design System provides accessible components for building modern web applications.
</p>

Usage: Paragraphs, descriptions, content

<span className="text-desktop-body4 md:text-mobile-body-small">
Optional field
</span>

Usage: Form labels, captions, hints

Use Telkomsel Batik for brand moments:

<h1 className="font-telkomsel-batik text-6xl">
MyTelkomsel
</h1>

Usage:

  • Application name/logo
  • Hero section brand headlines
  • Special campaign headers
ContextLetter SpacingUsage
Headings (H1-H3)-0.02em to -0.03emTighter spacing for large text
Body textNormal (0)Default readability
Small text (captions)0.05emSlightly expanded for clarity
All caps/Buttons0.05em to 0.1emExpanded for emphasis
/* Example letter spacing */
.heading-large {
letter-spacing: -0.02em;
}
.button {
letter-spacing: 0.05em;
text-transform: uppercase;
}
.caption {
letter-spacing: 0.05em;
}
WeightWhen to UseExamples
100 (Thin)Display, decorativeHero overlays, artistic headlines
300 (Light)SubheadingsSecondary headings, labels
400 (Regular)Body text defaultParagraphs, descriptions
500 (Medium)Emphasis, labelsForm labels, card titles
700 (Bold)HeadingsAll heading levels (H1-H6)
800 (Extra Bold)Display headingsHero titles, landing page headlines

Typography scales between mobile and desktop:

/* Mobile-first approach */
.heading {
font-size: 20px; /* Mobile */
line-height: 24px;
}
@media (min-width: 768px) {
.heading {
font-size: 44px; /* Desktop */
line-height: 56px;
}
}
ElementMobileDesktopScale Factor
H132px64px2.0x
H232px56px1.75x
H320px44px2.2x
H416px32px2.0x
Body14px18px1.28x
Caption12px13px1.08x
AlignmentWhen to Use
LeftBody text, most content (LTR languages)
CenterHeadings, hero sections, CTAs
RightNumbers, prices, data tables
JustifyAvoid - creates uneven word spacing
TransformWhen to UseExamples
NoneMost textBody text, headings
UppercaseButtons, badges, labels”BUY NOW”, “NEW”
CapitalizeNames, titlesProper nouns
LowercaseURLs, email addresseswww.example.com
/* Examples */
.button-primary {
text-transform: uppercase;
letter-spacing: 0.05em;
}
.brand-name {
text-transform: capitalize;
}
.url {
text-transform: lowercase;
}
TypeWhen to Use
NoneMost text (default)
UnderlineLinks only (on hover/focus)
Line-throughDeleted prices, completed tasks
No underlineNavigation, link buttons
/* Link styles */
a {
text-decoration: none;
border-bottom: 1px solid transparent;
transition: border-color 0.2s;
}
a:hover,
a:focus {
border-bottom-color: currentColor;
}
ContextLine HeightRatio
Headings (32px+)1.1 - 1.2Tighter for large text
Body text1.6 - 1.8Comfortable readability
Captions (12-14px)1.4 - 1.5Slightly tighter
Form inputs1.4 - 1.5Match input height
/* Line height examples */
.heading {
font-size: 44px;
line-height: 1.27; /* 56px */
}
.body {
font-size: 18px;
line-height: 1.78; /* 32px */
}
.caption {
font-size: 13px;
line-height: 1.85; /* 24px */
}
<h3 className="font-telkomsel-batik font-bold text-2xl md:text-3xl">
Combo Internet 50GB
</h3>
<div className="font-bold text-5xl md:text-7xl">
Rp 50.000
</div>
<p className="text-grey-60 text-sm">/month</p>
<label className="font-medium text-base md:text-lg">
Email Address
</label>
<p className="text-grey-60 text-sm">We'll send confirmation to this email</p>
<button className="font-bold text-base uppercase tracking-wide">
Continue
</button>
  • Body text: Minimum 14px on mobile, 16px on desktop
  • Form inputs: Minimum 16px to prevent iOS zoom
  • Touch targets: Text within buttons should be readable
  • Minimum 1.5x line height for body text
  • Minimum 1.2x line height for headings
  • Paragraph spacing: at least 1.5x font size
  • All text must meet WCAG 2.1 AA (4.5:1 for normal text)
  • Large text (18px+): 3:1 contrast ratio minimum
  • Use semantic HTML (<h1>-<h6>, <p>, <strong>, <em>)
  • Don’t rely on visual styling alone for emphasis
  • Provide alt text for text in images
:root {
/* Font Families */
--font-primary: 'Poppins', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--font-brand: 'Telkomsel Batik', 'Poppins', sans-serif;
/* Desktop Sizes */
--text-desktop-h1: 64px;
--text-desktop-h2: 56px;
--text-desktop-h3: 44px;
--text-desktop-h4: 32px;
--text-desktop-h5: 24px;
--text-desktop-h6: 18px;
--text-desktop-body2: 18px;
--text-desktop-body3: 15px;
--text-desktop-body4: 13px;
/* Mobile Sizes */
--text-mobile-h1: 32px;
--text-mobile-h2: 32px;
--text-mobile-h3: 20px;
--text-mobile-h4: 16px;
--text-mobile-body2: 14px;
--text-mobile-body3: 14px;
--text-mobile-body-small: 12px;
--text-mobile-small: 11px;
--text-mobile-extra-small: 8px;
/* Line Heights */
--leading-tight: 1.1;
--leading-snug: 1.25;
--leading-normal: 1.5;
--leading-relaxed: 1.75;
--leading-loose: 2;
/* Letter Spacing */
--tracking-tighter: -0.05em;
--tracking-tight: -0.025em;
--tracking-normal: 0;
--tracking-wide: 0.025em;
--tracking-wider: 0.05em;
--tracking-widest: 0.1em;
}
✅ Do❌ Don’t
Use Poppins for most UI textUse Telkomsel Batik for body text
Scale text proportionally (1.2-1.5x)Jump between unrelated sizes
Use appropriate line heightsUse single line height for paragraphs
Respect mobile minimum (14px)Use text smaller than 12px
Use font weights consistentlyUse too many weight variations
Maintain visual hierarchyMake everything the same size