v3.0.2 is out — restored design-system guidance and corrected navigation. Read the notes
projectious·work
On this page

Typography

Three families, three roles, a scalable reading-first ramp, and the font cuts required to preserve meaning.

Typography answers one question before it answers any aesthetic one: what kind of information is this?

  • Plus Jakarta Sans is conviction. Use it for display, headings, navigation, buttons, and the wordmark.
  • Source Sans 3 is clarity. Use it for running copy, interface labels, descriptions, and captions.
  • IBM Plex Mono is precision. Use it for code, data, terminal output, versions, and machine identifiers.

Never mix those roles. If the text guides attention, use Jakarta. If it is read, use Source Sans. If it reports a system, use Plex Mono.

Families and required cuts#

FamilyRequired cutsRoleLicence
Plus Jakarta Sans400 · 500 · 600 · 700 · 800 uprightDisplay, headings, controlsSIL OFL 1.1
Source Sans 3400 · 500 · 600 uprightBody, UI, descriptionsSIL OFL 1.1
IBM Plex Mono400 · 500 · 600 · 700 upright and italicCode, data, terminalSIL OFL 1.1

The mono cuts are semantic, not optional polish. Keywords use 700, types use 600, functions use 500, and comments and decorators use italic. Omitting those files forces synthetic styles and removes the non-colour channel that keeps syntax structure legible in greyscale.

The ramp#

Every row is rendered in the family, size, weight, and line height it documents. It translates the supplied type-family, display, body, code, and scale preview cards into one responsive reference.

Display · 48/800/1.1
Redesigning work
H1 · 36/700/1.15
Agent-first consulting
H2 · 28/700/1.2
Composable infrastructure
H3 · 24/600/1.25
How the system fits together
H4 · 20/600/1.3
Working in the open
H5 · 17/600/1.35
Supporting detail
Body L · 18/400/1.65
Augmenting people's strengths through composable Cloud · Agile · Agentic AI infrastructure.
Body · 16/400/1.6
Direct, technical, humanistic, and restrained.
Caption · 13/400/1.5
Figure 1 — pipeline stages and their policy gates.
Overline · 12/600/1.3
SECTION LABEL
Code · 14/400/1.6
createPipeline({ policy: "strict" })
RoleSizeWeightLine height
Display48 px8001.1
H136 px7001.15
H228 px7001.2
H324 px6001.25
H420 px6001.3
H517 px6001.35
Body large18 px4001.65
Body16 px4001.6
Caption13 px4001.5
Overline12 px6001.3
Code14 px4001.6

Every size resolves through --font-scale. The accessibility settings raise the entire ramp to 112.5%, 125%, 150%, or 200% without per-component overrides.

Rules#

  • Tighten display tracking by -0.5px. Keep body tracking normal.
  • Use positive tracking only for overline labels: 12 px, 600, uppercase, 0.08em.
  • Use body large for standfirsts and body for sustained reading. Do not shrink prose to make a fixed box fit.
  • Use at most two sizes on one slide.
  • Keep system fallbacks, but never introduce a fourth brand family.
  • Do not disable font-synthesis as a substitute for shipping the required files; ship the cuts the semantics require.
Do

Pair an overline with a heading, keep the ramp intact, and prove every fixed-size artifact at 200% text and with loose text spacing.

Don't

Set body copy in Plus Jakarta Sans, headings in Source Sans 3, or code in a generic monospace when the brand font is available.

Updated Aug 17, 2026