Typography
v0.2.9
Ready for Production

Installation and usage of PMI's brand typeface Aeonik using either Tailwind CSS or direct imports from CDN.

Preview

Certifications

Advance your career with a PMP certification

The Project Management Professional (PMP) is the world's leading project management certification. Join over one million certified professionals driving change globally.

Installation

  1. Install the package:
npm install @pmi/catalyst-typography
  1. Add the preset to tailwind.config.ts:
tailwind.config.ts
import { tailwindTypographyPreset } from '@pmi/catalyst-typography';

export default {
  presets: [tailwindTypographyPreset],
};
  1. Register the Aeonik @font-face rules in app/globals.css:
app/globals.css
@tailwind base;
@tailwind components;
@tailwind utilities;

@layer base {
  @font-face {
    font-family: 'Aeonik';
    src: url('https://cdn.pmi.org/dsm/fonts/Aeonik/Aeonik-Regular.woff2');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
  }

  @font-face {
    font-family: 'Aeonik';
    src: url('https://cdn.pmi.org/dsm/fonts/Aeonik/Aeonik-Medium.woff2');
    font-weight: 500;
    font-style: normal;
    font-display: swap;
  }

  @font-face {
    font-family: 'Aeonik';
    src: url('https://cdn.pmi.org/dsm/fonts/Aeonik/Aeonik-Bold.woff2');
    font-weight: 700;
    font-style: normal;
    font-display: swap;
  }

  @font-face {
    font-family: 'Aeonik';
    src: url('https://cdn.pmi.org/dsm/fonts/Aeonik/Aeonik-Black.woff2');
    font-weight: 900;
    font-style: normal;
    font-display: swap;
  }
}
  1. Apply the font globally in app/layout.tsx:
app/layout.tsx
export default function RootLayout({ children }) {
  return (
    <html>
      <body className="font-display font-normal">{children}</body>
    </html>
  );
}

Font Scale

Designs on the product side of PMI use the standard Tailwind font scale. See the Tailwind CSS font size documentation for full usage details. Check out the Marketing tab for marketing-related projects like .org and MyPMI.

These role names give designers and developers a shared vocabulary — each maps directly to a Tailwind class in the underlying scale.

RoleTailwind classSizeUse
displaytext-header-3xl120px / 110px lhHero backgrounds, oversized brand moments
display-smtext-header-2xl72px / 72px lhLarge hero headings
headingtext-header-xl56px / 62px lhPrimary page headings
heading-smtext-header-lg40px / 44px lhSection headings
subheadingtext-header-md32px / 36px lhSubsection headings
subheading-smtext-header-sm24px / 28px lhCard and panel titles
titletext-header-xs22px / 26px lhSmall titles, list headings
title-smtext-header-2xs18px / 22px lhExtra small titles
body-lgtext-body-xl24px / 30px lhLead paragraphs
bodytext-body-lg20px / 26px lhStandard reading text
body-smtext-body-md18px / 24px lhSupporting body copy
captiontext-body-sm16px / 20px lhCaptions, secondary text
caption-smtext-body-xs14px / 18px lhFine print
labeltext-eyebrow14px / 18px lhOverlines, eyebrow labels

For teams not yet on Tailwind, replicate these utilities in your own stylesheet as a step toward the standard. Reference:

Font Weight

Font weight is controlled by Tailwind utility classes regardless of whether you are using the product scale or the marketing semantic scale. See the Tailwind Font Weight documentation for the full reference.

Aeonik X Height

Aeonik's x-height requires a small bottom padding offset to align correctly inside flex containers. Some Catalyst components (Badge, Button) already include this. For custom components, add pb-2 to the text node only — icons and non-text elements do not need it.

<div className="h-40 flex items-center justify-center">
  <span className="pb-2">Text Node</span>
  <ArrowRightIcon />
</div>

Accessibility

All type sizes meet WCAG 2.2 AA minimum size requirements, with line heights preset for comfortable reading at each scale step. Key points:

  • Font loadingfont-display: swap prevents invisible text during the font load.
  • Scaling — All sizes use rem units so they respect user browser preferences.
  • Semantics — Typography classes are presentation-only; pair them with appropriate semantic HTML (<h1><h6>, <p>) for correct document structure.

On this page