Skip to content

Typography

Governs the two type families, the scales, weights, tracking, measure and optical alignment that every Fernando Kylas surface sets type by, on screen, on a social canvas and in print.

Status
Approved
Status note
Canonical. The type system of the Fernando Kylas Brand System; three items are acknowledged and intentionally excluded (§14).
Version
4
Updated
2026-08-26
Approved by
Fernando Kylas
Approved
2026-08-26
Supersedes
the Host Grotesk and Inter pairing used in v3. That pairing is Superseded and must not be carried forward.
Open items
3 open, 3 resolved, of 6 recorded
Canonical source
foundations/typography.md

Read the illustrated chapter, which demonstrates this foundation with live specimens rather than describing it.

Go deeper Typography Laboratory: the working specimens and experiments behind this chapter. Forty-one boards across website, social and business-document formats, rendering the real licensed faces. It shows the thinking rather than the conclusion.

This is the canonical typography chapter of the Fernando Kylas Brand System. It governs the two type families, the four scales, the weights, the tracking curve, the reading measure, optical alignment, and the rules that hold when type leaves the website for a social canvas or a printed page.

Typography carries the identity here, and that is a load-bearing claim rather than a compliment. Cover the colour on any page of this system and the identity survives: the low x-height, the long ascenders, the geometric evenness, the measure, the rhythm. Reverse it (keep the colour and set the type in Arial) and nothing of the brand remains. So typography is given the most work to do, and everything else is given less. brand-principles.md §2.1 states the principle; this chapter is where it is paid for.

What is approved

Fernando Kylas approved Typography on 2026-08-26. The approval covers the type system entire: the two families and the purpose that splits them (§1), the measured metrics (§2), the four scales (§3), the weight table signed the same day (§4), the tracking curve (§5), the responsive step table (§5.1), the measure and line length (§6), optical alignment and its size threshold (§7), the canvas-relative rule governing every surface off the website (§8), the signature (§10), and the application table (§12).

Three items are acknowledged and intentionally excluded:

What approval does to TYPE-06. Before today the engine's tracking was neither right nor wrong, because nothing was canonical: §5's curve was a proposal and §5.1 did not exist. From today those four departures are defects against an approved chapter, not discrepancies between two undecided things. display at 36px tracking −0.022, metric-lg holding −0.018 at 56 and 48px, lead at −0.004 where Geomanist's band is 0 em, and optical alignment released by viewport rather than by rendered size, are each now measurably wrong against canon. They stay unfixed because correcting them changes output already issued as PDF, which wants a superseding decision under AGENTS.md §6.

That is a deliberate trade and it is worth stating plainly. Approving a chapter its own implementation does not yet meet is defensible only because the gap is measured, bounded and recorded. It would not be defensible if the number of departures were unknown, and §5.2 is what makes it known.

No undocumented change may modify the approved type system. A change supersedes a decision in DECISIONS.md, with a reason; it does not quietly replace one.


Three things follow from it. Type is how a reader is told what matters, so hierarchy is a typographic problem before it is a spatial one. Type is what makes a paragraph readable at length, so the measure and the leading are specified from measured character widths rather than chosen. And type is what has to work when the logo is absent, which is most of the time: the identity chapter is explicit that the mark appears once per surface at most, and where it is absent typography is doing the identifying.

The two families are split by purpose, not by heading and body, which is the first thing to understand about this chapter and the most common way a type system of this kind is misread. §1 explains the split; §11 gives the test any layout must pass.

Every metric here was measured from the licensed OTFs rather than assumed. Two figures in this chapter are judgements rather than measurements (the minimum sizes and the tracking curve) and this chapter does not yet label them as such, which every other chapter does. That is recorded as PRINCIPLE-01 rather than left for a reader to discover. Font files and licences: assets/fonts/.


1. Two voices, split by purpose

The families are not split into headings and body. They are split by what the text is doing.

Strawford: the memorable voice

For ideas that should be held in mind after the reader looks away: hero statements, editorial headlines, pull quotes, section introductions, case-study titles, and the short phrases the brand is remembered by.

Strawford's low x-height and long ascenders give it air and poise at large sizes. That quality collapses below roughly 22 px, where the small lowercase simply reads as weak. Never use Strawford for anything the reader has to work through.

Geomanist: the clear voice

For comprehension over character: long-form copy, navigation, cards, interface, forms, lists, explanations, metadata, captions, and most calls to action.

Its larger x-height and tighter line box make it dense, calm, and highly legible at text sizes.

Geomanist Bold: the confident voice

Geomanist Bold has a larger x-height than Geomanist Book (525 against 500), so it reads bigger and more insistent at identical size. Use it when a statement must land immediately rather than gracefully:

Use Strawford as display voice for positioning statements and brand lines, case-study and proposal covers, pull quotes, and anything meant to feel considered rather than urgent.

One display voice per layout. Strawford display and Geomanist Bold display in the same frame produce two competing headlines.


2. Measured metrics

Both families measured from the installed OTFs, normalised to a 1000-unit em.

MetricStrawfordGeomanistConsequence
Cap height700700Caps match exactly, so uppercase labels need no size compensation when swapping families
x-height450500Strawford lowercase is 11% smaller at the same size
x-height : cap0.6430.714Strawford reads smaller and more elegant; Geomanist larger and more direct
Ascender (hhea)900750
Descender (hhea)−300−250
Total line box1.20 em1.00 emStrawford needs more vertical headroom
Lowercase alphabet width1291612992Effectively identical, so one measure specification serves both
Width of n543 (all weights)537–583Strawford does not reflow across weights; Geomanist does

Three findings drive the whole system.

  1. Strawford's smaller footprint is an x-height effect, not a width effect. Both families set to almost exactly the same length. Size compensation therefore applies to sentence-case display type, and not to uppercase labels or measure calculations.
  2. Strawford needs more leading than Geomanist, not less. Real ink span ≈ 0.96 em against Geomanist's 0.94 em; nominal line box 1.20 em against 1.00 em. Any Strawford line height below ~0.96 risks descenders touching the ascenders below.
  3. Strawford is width-duplexed. Every weight sets n at 543 units, so weight can change without reflowing a headline. Light can be tested against Regular on a fixed line break.

Compensating against the previous system

Host Grotesk sat at ~0.72 x-height : cap; Strawford at 0.643.

ContextAdjustment
Sentence-case display and headingsIncrease 8–10%, restoring lowercase presence
Uppercase labels and eyebrowsNo change; cap heights are identical
Measure and paragraph widthNo change; set widths are equivalent
Numerals and statisticsNo change; figures align to cap height in both

Do not apply a flat multiplier across the scale. A headline running mostly lowercase needs the full 10%; one dominated by capitals needs none.


3. Type scales

3.1 Strawford display scale

Sizes are optical, not derived from a single ratio. The step narrows as the scale descends, because perceived difference compresses at smaller sizes.

TokenSizeLine heightRatioTrackingWeight
display-xxl1281240.97−0.035 emLight
display-xl1041020.98−0.032 emLight
display-l84841.00−0.030 emRegular
display-m64661.03−0.026 emRegular
display-s48531.10−0.022 emRegular
heading-l36421.16−0.016 emRegular
heading-m28341.21−0.012 emMedium
heading-s22281.27−0.006 emMedium

Strawford Light is specified above 96 px only. Below that it loses stem weight against the paper and reads uncertain rather than refined.

Strawford Bold and Black are not in the system. At display size the bold weights thicken the round bowls and lose the elegance that justifies the family. A headline needing that weight is a Geomanist Bold headline.

3.2 Card and row titles: Geomanist Medium

TokenSizeLine heightTrackingWeight
card-title2228−0.004 emGeomanist Medium
card-title--lg2836−0.006 emGeomanist Medium

The reason is legibility of the system, not of the type. At 28 px, Strawford and Geomanist are hard to tell apart to anyone who is not a type designer, differing mainly in x-height. Spending Strawford there buys no distinctiveness and costs the clarity of the two-voice split. Strawford earns its place where its silhouette is visible: display size.

3.3 Geomanist statement scale

For layouts where Geomanist Bold is the display voice.

TokenSizeLine heightRatioTrackingWeight
statement-xl96920.96−0.024 emBold
statement-l72700.97−0.020 emBold
statement-m52541.04−0.016 emBold
stat-xl88840.95−0.022 emBold
stat-l64620.97−0.018 emBold

3.4 Geomanist text scale

TokenSizeLine heightRatioTrackingWeight
lead22341.55−0.004 emBook
body-l19311.630Book
body17281.650Book
body-s15241.60+0.004 emBook
caption13191.46+0.010 emRegular
label12161.33+0.140 emMedium, uppercase
button16161.00+0.006 emMedium
nav16241.50+0.002 emMedium

Geomanist Book is the body weight, not Regular. Book holds a paragraph more calmly at 17–19 px; Regular is reserved for captions and metadata, where slightly more weight aids legibility at small size.

Body text never drops below 16 px in main content.


4. Weights

Measured from the installed files.

Approved by Fernando Kylas on 2026-08-26 (TYPE-05), after reviewing every one of the thirteen faces rendered from its own file at the size its row describes, rejections included. Seven approved, six not used. Using a "Not used" weight is now a change that supersedes this table, not an oversight.

WeightStatusUse
Strawford LightApprovedDisplay at 96 px and above
Strawford RegularApprovedDisplay 36–84 px
Strawford MediumApprovedHeadings 22–32 px
Strawford Bold, BlackNot usedLoses the family's refinement at display size
Strawford Thin, ExtraLightNot usedInsufficient stem weight at web rendering sizes
Geomanist BookApprovedBody copy
Geomanist RegularApprovedCaptions and metadata
Geomanist MediumApprovedLabels, navigation, buttons, card headings
Geomanist BoldApprovedStatements, statistics, confident display
Geomanist Black, UltraNot usedReads promotional rather than considered

Geomanist italics: available everywhere, adopted once

Corrected 2026-08-25. This section previously stated that the desktop OTFs were romans only, and that a design working in both desktop and web had to treat Geomanist as roman throughout. That was wrong, and the constraint it imposed did not exist.

Both packages carry an italic for all nine weights:

One measured oddity, recorded because this chapter says its values are measured: the foundry leaves post.italicAngle at 0.00 in all nine desktop italics. The italic bit is set and the outlines are genuinely italic, so applications select them correctly; only the declared angle is absent.

Strawford carries a matching italic for each of its seven weights, 14 OTFs.

What the system adopts

One italic: Geomanist Book Italic at 350, the body weight. Registering it at the reading weight is what makes <em> in prose resolve to a drawn italic through the browser's own default, with no selector and no change to any type value.

Emphasis at any other weight still synthesises, deliberately. Forcing <em> to 350 inside a heading would render the emphasis lighter than the heading it sits in, which is worse than the artefact it removes. Adopting a second italic is a decision for the weight that needs it, not a gap to close pre-emptively.


5. Tracking curve

Tracking is a function of size, not a fixed value per family.

Size rangeStrawfordGeomanist
96 px and above−0.035 to −0.030 em−0.024 to −0.020 em
64–95 px−0.030 to −0.026 em−0.020 to −0.018 em
40–63 px−0.026 to −0.016 em−0.016 to −0.012 em
24–39 px−0.016 to −0.006 em−0.012 to −0.004 em
17–23 px−0.006 to 0 em0 em
13–16 pxnot used0 to +0.010 em
Uppercase labelsnot used+0.08 to +0.14 em

Strawford is a geometric with wide, round bowls. Tracking tighter than −0.035 em closes the counters between adjacent round letters and the headline looks clotted.

Never track uppercase labels below +0.08 em. Never track lowercase positively except at caption size.

5.1 The responsive step table

Resolves TYPE-02, 2026-08-26.

Type steps at named breakpoints and never interpolates, and tracking is re-declared at every step that changes a size. The second half is the point: tracking is a property of rendered size (§5), so a size that steps while its tracking holds walks off this chapter's own curve. A fluid clamp() does the same thing continuously, which is why it is prohibited.

The rungs are grid-layout-rhythm.md §10.1's: 30 / 40 / 48 / 64rem. Type steps at three of the four. It has no use for md 40rem, and a rung nothing steps at is not a defect: the ladder is the canvas's, and each system takes the rungs it needs.

RoleFamily≥64rem48–64rem30–48rem<30rem
displayStrawford64px −0.02652px −0.02644px −0.02236px −0.022
report-titleStrawford48px −0.02240px −0.02236px −0.01630px −0.012
section-titleStrawford36px −0.01632px −0.01628px −0.01224px −0.006
quoteStrawford30px −0.01230px −0.01226px −0.01224px −0.012
leadGeomanist22px −0.00422px −0.00422px −0.00419px −0.004
metricGeomanist48px −0.01648px −0.01640px −0.01640px −0.016
metric-lgGeomanist64px −0.01856px −0.01848px −0.01848px −0.018

Body, caption and label do not step. They are set at the reading sizes §3.4 specifies and hold at every width, because a reading size that shrinks with the viewport is the failure §11 describes: the reader who needs it most is on the smallest screen.

Boundaries are declared mobile-first, as min-width, matching §10.1 of the spatial chapter. The implementation currently expresses them as max-width in px, which places the boundary one pixel differently at each rung; that is recorded in §5.2 rather than corrected here.

5.2 Where the implementation departs from the curve

Every step above was read from the implementation, then checked against §5's curve. Three roles fall outside it, and each failure is the one this item predicted: a size steps and its tracking does not follow.

RoleWhereDeclaredThe curve allowsWhy
display<30rem36px at −0.022−0.016 to −0.006tracking not re-declared when the size fell 44 → 36
metric-lg48–64rem and below56, 48px at −0.018−0.016 to −0.012tracking held while the size fell 64 → 56 → 48
leadevery width22 and 19px at −0.0040 em for Geomanist at 17–23pxnot a stepping fault: the base value is off-curve

Recorded, not corrected. Every one of these changes rendered output already issued as PDF, which is a rendering change under AGENTS.md §6 and wants a superseding decision rather than a quiet edit. Opened as TYPE-06.

The audit is the argument for the table. Before this section the divergences were invisible, because nothing stated what tracking each step should have. A specification that makes its own implementation checkable is worth more than one that merely describes it.


6. Measure and line length

Because both families set to the same width, one specification serves both. Average character width measured from the rendered specimen: Geomanist text 0.45 em, Strawford display 0.39 em.

Characters per line ≈ width / (size × 0.45) for text, width / (size × 0.39) for display.

RoleWidthCharacters
Lead paragraph620–70056–64
Long-form body580–66062–70
Editorial section intro700–76060–68
Card body280–34033–40
Social body on 1080760–82045–55
Caption and metadata400–52055–70

Display type is governed by characters per line, not pixel width.

Display roleCharacters per lineMax lines
Hero statement18–283
Section introduction24–343
Social headline on 108014–204
Story headline12–184
Pull quote26–364

A display line past 34 characters stops reading as a statement and starts reading as a sentence.

Headline balance

Set display line breaks by hand. Aim for a descending or near-equal rag, longest line first or second, shortest never in the middle. A headline where line two is markedly shorter than lines one and three reads as a mistake.

Where a headline breaks to three lines, the last line should carry the emphasis, because it is where the eye rests.


7. Optical alignment

Mathematical alignment is not optical alignment.

Action groups

A primary button and a secondary link belong on one horizontal row, not stacked.

PropertyValue
DirectionRow; wraps to a stack only when space genuinely runs out
Vertical alignmentCentre, corrected for the link's asymmetric box
Gap, button to link32
Gap, button to explanatory note40
Button labelNever wraps: white-space: nowrap, and prevent shrinking

The button must never shrink or wrap to make room for adjacent text. Where space is tight, the adjacent text stacks below and the button keeps its shape. A wrapped button label reads as a broken component in a way a stacked note does not.


8. Canvas-relative type: the rule governing everything off the website

The website canvas displays at 1:1. No other canvas does. A social image authored at 1080–1200 is viewed at roughly 360–390 px, dividing every value by about three. An A4 page authored at 1240 px prints at 210 mm, so 1 px becomes 0.169 mm.

Type tiers carried unchanged onto these surfaces are not small; they are invisible. A 12 px label on a 1200 canvas reaches the reader at 3.6 px; a 19 px body-l at 6.9 px. Below roughly 8–9 px effective, strokes fall under the resolving limit at normal phone viewing distance.

SurfaceDivisorNothing meaning-bearing belowAnything to be read, at least
1080 social÷ 2.830 px34 px
1200 social÷ 3.330 px34 px
1240 A40.169 mm/px21 px (10 pt)24 px (11.5 pt)

Independent of canvas size: nothing below 2.8% of canvas width may carry meaning, and anything the reader must actually read sits at or above 3.1%.

Display tiers already clear both thresholds. It is only label, caption, body, and button that must be restated per canvas.

Print floors follow accessible-print guidance rather than WCAG, which does not govern images or paper: 8 pt is the accessibility floor; 10 pt upward suits documents a client reads while making a purchase decision.


9. Repeating sets: carousels and slide sequences

In a swipeable set the frame is fixed and only the content should move. Any element that changes position between slides reads as a different card rather than the next page of the same card.

Do not distribute slide content with space-between. It makes every element's position a residue of the other blocks' heights, so a one-line body instead of a two-line body moves the headline.

Pin instead. The statement top sits at a constant coordinate on every slide; the counter sits at the padding edge; the signature is pushed to the foot. Where a slide carries a numeral above the statement, the numeral occupies a fixed band so the statement still lands on the same line.

One display voice governs the whole set. A carousel is one post, so a Strawford numeral paired with a Geomanist Bold statement puts two display voices in a single asset. Demote the numeral to metadata.


10. The signature

The signature binds unrelated assets to one sender. If it moves, changes weight, and changes hue per channel, it stops doing that job and becomes decoration.

One component, one contract.

PropertyValue
TypeGeomanist Medium, label scale for the canvas, +0.14 em, uppercase
ColourPrimary ink on light, primary reversed on dark. Never a tertiary grey
BaselineSet from the frame padding edge, never from a sibling's alignment
Social formGreen rule above, 24 gap, signature below
NeverApplied to any string other than the name

Reserve the tertiary tone for counters and eyebrows. A right-flush signature needs margin-right: -0.14em to cancel the trailing letterspace, otherwise it sits inside the margin it appears to align to.


11. The two readers

The principles this serves are brand-principles.md §2.1 and §3.3.

Every layout must reward two people.

The scanner, at 10–20 seconds. Reads the label, the display line, and the call to action. Needs one dominant element, an obvious entry point, and a clear next step. Nothing at this level may depend on reading a paragraph.

The reader, at several minutes. Reads the supporting paragraph and the detail. Needs comfortable measure, generous leading, and reasoning that holds up.

The test. Cover every element set below 16 px. What remains must still communicate the proposition and the next action. If not, the hierarchy has failed the scanner. Then read only the covered text. If it merely restates the headline, it has failed the reader.

The threshold is 16 px, not 19 px, because button is a 16 px token. A 19 px threshold hides the call to action and every layout fails a test it should pass. A 16 px Medium label inside a filled pill carries its affordance from the shape, not the size.


12. Application by channel

ChannelDisplay voiceNotes
Website heroStrawford display-xxl / display-xlThree lines maximum, hand-set breaks
Website section introStrawford display-s / heading-lPaired with a label eyebrow
Service cardsGeomanist Medium card-titleCard titles are interface, not editorial
Long-form articleStrawford display-m title, Geomanist body-lMeasure 620
Case-study coverStrawford display-lStatistics in Geomanist Bold stat-xl
TestimonialStrawford display-s, attribution captionHang the opening quote
LinkedIn single imageGeomanist Bold statement-lScanned at speed in feed
LinkedIn thought leadershipStrawford display-mSlower, more reflective
LinkedIn carouselGeomanist Bold statement-mConsistency beats variety across slides
Instagram square / portraitEither, chosen per postNever both in one post
Instagram storyGeomanist Bold statement-lRespect 250 top / 320 bottom clear zones
Proposal and presentation coversStrawford display-lRestraint is the point
PDF report and workbook coversStrawford display-m with label eyebrow

13. Dependencies on other foundations

The v3.1 source document also carried colour, spacing, and layout rules. In this repository those belong to their own foundations and are pending migration, and the v3.1 source remains the reference until they are written:

ContentDestinationStatus
Paper/ink tokens, text contrast ratios, green accent rulescolour.mdMigrated, authoritative for colour
Base unit, vertical rhythm scale, relationship spacinggrid-layout-rhythm.mdMigrated, GRID-21 and GRID-03 resolved 2026-08-25: §6.1 states the 4px unit and the scale, §4.7 the pause values
Frame padding per canvas, content column widthsgrid-layout-rhythm.mdPartly: GRID-13 resolved 2026-08-25 (§10.1 names the four rungs). The page edge itself is still GRID-01
Focus-indicator ring values, contrast thresholdsaccessibility.mdMigrated, decided 2026-07-25 and measured

Two colour rules bear directly on type. colour.md is authoritative for both; they are summarised here because they change how type may be set:


14. Open items

Carried forward from v3.1 §13. These must be settled before implementation, not after.

  1. TYPE-01 · RESOLVED 2026-08-26 · Focus states are undefined, and the token reserved for them is unusable. The brand-led answer was illegal, green measuring 2.65:1 against paper against a 3.0 minimum, and the old --shadow-focus token composited to roughly 1.1:1. This item proposed a 2px primary-ink ring at 2px offset, primary-reversed on dark. All three of its claims stopped being true and it was never closed. colour.md §4.2 states focus-ring as canon and measures it at 18.03:1 on paper and 19.04:1 on ink; accessibility.md §Interaction carries it as a target against WCAG 2.4.7; and base.css implements it, outline: 2px solid var(--fk-focus-ring) at outline-offset: 2px, with :focus:not(:focus-visible) { outline: none } beside it. The old token is Superseded (COLOUR-08). The values adopted are the ones proposed here, so nothing was decided elsewhere that this item would have decided differently.
  2. TYPE-02 · RESOLVED 2026-08-26 · A responsive step table is required. §5.1 is the table: seven roles across four bands, stepping at three of grid-layout-rhythm.md §10.1's four rungs, with tracking declared at every step. §5.2 audits the implementation against §5's curve and finds three departures, and §7 states that optical alignment is scoped by rendered size rather than by viewport. Written only after GRID-13 resolved: this item was recorded as the thing breakpoints waited on, and the dependency ran the other way. The canvas names the rungs; this table says what type does at each.
  3. TYPE-03 · Open · Figma cannot currently build this system via the Claude connection. The remote Figma MCP executes on Figma's infrastructure and sees only Figma's hosted font set. Locally installed fonts are invisible to it; custom fonts require Figma shared fonts, which need an Organisation or Enterprise plan. The FK Projects team is on Pro. Until that changes, Figma type must be set by hand in the desktop application.
  4. TYPE-04 · Open · Website not yet migrated. The previous project's tokens.css still declares Host Grotesk and Inter.
  5. TYPE-05 · RESOLVED 2026-08-26 · Weight approvals are provisional. The Approved/Not used table in §4 reflected the v3.1 working position rather than an explicit sign-off. Signed by Fernando on 2026-08-26, against all thirteen faces rendered from their own files at the sizes their rows describe, the six rejections included, on the ground that a rejection nobody can see is not a decision. Nothing rendered differently: no surface in the system used a rejected weight, so the sign-off converted a working position into canon rather than changing output.
  6. TYPE-06 · Open · Three type steps sit outside the tracking curve, and the optical threshold is scoped wrongly. Found by the §5.2 audit, all four recorded rather than corrected because each changes rendered output already issued as PDF: display at 36px tracks −0.022 where the curve allows −0.016 to −0.006; metric-lg at 56 and 48px holds −0.018 where the curve allows −0.016 to −0.012; lead tracks −0.004 at every width where Geomanist's 17–23px band is 0 em, which is a base value rather than a stepping fault; and optical alignment is released below a 768px viewport rather than below 64px of type, so 52px display text is shifted between 769 and 1024. Correcting them wants a superseding decision (AGENTS.md §6).

15. In closing

Two families, split by what the text is doing rather than by where it sits. That is the whole chapter, and every scale, weight and tracking value below follows from it. Strawford is for what should be remembered; Geomanist is for what has to be understood; Geomanist Bold is for what must land immediately.

The practical consequence is that a size is never chosen alone. A size implies a tracking value, a line height, a measure and a weight, and changing one without the others produces type that is technically on the scale and visibly wrong. The tables here are rows, not columns.

And one rule outranks the rest: cover everything set below 16 px, and what remains must still communicate the proposition and the next action. A layout that fails that test has failed the reader who gives it ten seconds, whatever its metrics say.

Next: Colour Language, which begins by explaining why it is given less work to do than this chapter.


16. Provenance