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.
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:
TYPE-03, Figma cannot build this system through the Claude connection. An external tooling limit: custom fonts need Figma shared fonts, which need an Organisation plan, and the team is on Pro. Nothing about this chapter is wrong, and Figma type is set by hand until that changes.TYPE-04, the previous website is not migrated and still declares Host Grotesk and Inter. A migration task, and the thing this chapter'sSupersedesfield already forbids carrying forward.TYPE-06, four departures between this chapter and its implementation. Approval changes what these are, and that is the point of naming them here.
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:
- Direct challenges and reframes, where the sentence is an argument, not an image
- Statistics and proof, where the figure is the message
- Educational and carousel formats, scanned at speed on a small screen
- Dark grounds at large sizes, where Strawford Light thins out
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.
| Metric | Strawford | Geomanist | Consequence |
|---|---|---|---|
| Cap height | 700 | 700 | Caps match exactly, so uppercase labels need no size compensation when swapping families |
| x-height | 450 | 500 | Strawford lowercase is 11% smaller at the same size |
| x-height : cap | 0.643 | 0.714 | Strawford reads smaller and more elegant; Geomanist larger and more direct |
| Ascender (hhea) | 900 | 750 | |
| Descender (hhea) | −300 | −250 | |
| Total line box | 1.20 em | 1.00 em | Strawford needs more vertical headroom |
| Lowercase alphabet width | 12916 | 12992 | Effectively identical, so one measure specification serves both |
Width of n | 543 (all weights) | 537–583 | Strawford does not reflow across weights; Geomanist does |
Three findings drive the whole system.
- 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.
- 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.
- Strawford is width-duplexed. Every weight sets
nat 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.
| Context | Adjustment |
|---|---|
| Sentence-case display and headings | Increase 8–10%, restoring lowercase presence |
| Uppercase labels and eyebrows | No change; cap heights are identical |
| Measure and paragraph width | No change; set widths are equivalent |
| Numerals and statistics | No 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.
| Token | Size | Line height | Ratio | Tracking | Weight |
|---|---|---|---|---|---|
display-xxl | 128 | 124 | 0.97 | −0.035 em | Light |
display-xl | 104 | 102 | 0.98 | −0.032 em | Light |
display-l | 84 | 84 | 1.00 | −0.030 em | Regular |
display-m | 64 | 66 | 1.03 | −0.026 em | Regular |
display-s | 48 | 53 | 1.10 | −0.022 em | Regular |
heading-l | 36 | 42 | 1.16 | −0.016 em | Regular |
heading-m | 28 | 34 | 1.21 | −0.012 em | Medium |
heading-s | 22 | 28 | 1.27 | −0.006 em | Medium |
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
| Token | Size | Line height | Tracking | Weight |
|---|---|---|---|---|
card-title | 22 | 28 | −0.004 em | Geomanist Medium |
card-title--lg | 28 | 36 | −0.006 em | Geomanist 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.
| Token | Size | Line height | Ratio | Tracking | Weight |
|---|---|---|---|---|---|
statement-xl | 96 | 92 | 0.96 | −0.024 em | Bold |
statement-l | 72 | 70 | 0.97 | −0.020 em | Bold |
statement-m | 52 | 54 | 1.04 | −0.016 em | Bold |
stat-xl | 88 | 84 | 0.95 | −0.022 em | Bold |
stat-l | 64 | 62 | 0.97 | −0.018 em | Bold |
3.4 Geomanist text scale
| Token | Size | Line height | Ratio | Tracking | Weight |
|---|---|---|---|---|---|
lead | 22 | 34 | 1.55 | −0.004 em | Book |
body-l | 19 | 31 | 1.63 | 0 | Book |
body | 17 | 28 | 1.65 | 0 | Book |
body-s | 15 | 24 | 1.60 | +0.004 em | Book |
caption | 13 | 19 | 1.46 | +0.010 em | Regular |
label | 12 | 16 | 1.33 | +0.140 em | Medium, uppercase |
button | 16 | 16 | 1.00 | +0.006 em | Medium |
nav | 16 | 24 | 1.50 | +0.002 em | Medium |
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.
- Strawford: Thin, ExtraLight, Light, Regular, Medium, Bold, Black, each with a matching italic (14 OTFs)
- Geomanist: Thin, ExtraLight, Light, Book, Regular, Medium, Bold, Black, Ultra, each with a matching italic (18 desktop OTFs)
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.
| Weight | Status | Use |
|---|---|---|
| Strawford Light | Approved | Display at 96 px and above |
| Strawford Regular | Approved | Display 36–84 px |
| Strawford Medium | Approved | Headings 22–32 px |
| Strawford Bold, Black | Not used | Loses the family's refinement at display size |
| Strawford Thin, ExtraLight | Not used | Insufficient stem weight at web rendering sizes |
| Geomanist Book | Approved | Body copy |
| Geomanist Regular | Approved | Captions and metadata |
| Geomanist Medium | Approved | Labels, navigation, buttons, card headings |
| Geomanist Bold | Approved | Statements, statistics, confident display |
| Geomanist Black, Ultra | Not used | Reads 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:
- Desktop:
assets/fonts/Geomanist/oft/holds 18 OTFs, nine roman and nine italic. Verified from each file's ownnameandheadtables rather than its filename: every italic declares its subfamily as "<Weight> Italic" and sets themacStyleitalic bit, and itsCFFoutline table differs from the roman's, so these are drawn italics and not renamed duplicates. - Webfont: the same nine weights, as WOFF2 and WOFF.
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 range | Strawford | Geomanist |
|---|---|---|
| 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 em | 0 em |
| 13–16 px | not used | 0 to +0.010 em |
| Uppercase labels | not 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.
| Role | Family | ≥64rem | 48–64rem | 30–48rem | <30rem |
|---|---|---|---|---|---|
display | Strawford | 64px −0.026 | 52px −0.026 | 44px −0.022 | 36px −0.022 |
report-title | Strawford | 48px −0.022 | 40px −0.022 | 36px −0.016 | 30px −0.012 |
section-title | Strawford | 36px −0.016 | 32px −0.016 | 28px −0.012 | 24px −0.006 |
quote | Strawford | 30px −0.012 | 30px −0.012 | 26px −0.012 | 24px −0.012 |
lead | Geomanist | 22px −0.004 | 22px −0.004 | 22px −0.004 | 19px −0.004 |
metric | Geomanist | 48px −0.016 | 48px −0.016 | 40px −0.016 | 40px −0.016 |
metric-lg | Geomanist | 64px −0.018 | 56px −0.018 | 48px −0.018 | 48px −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.
| Role | Where | Declared | The curve allows | Why |
|---|---|---|---|---|
display | <30rem | 36px at −0.022 | −0.016 to −0.006 | tracking not re-declared when the size fell 44 → 36 |
metric-lg | 48–64rem and below | 56, 48px at −0.018 | −0.016 to −0.012 | tracking held while the size fell 64 → 56 → 48 |
lead | every width | 22 and 19px at −0.004 | 0 em for Geomanist at 17–23px | not 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.
| Role | Width | Characters |
|---|---|---|
| Lead paragraph | 620–700 | 56–64 |
| Long-form body | 580–660 | 62–70 |
| Editorial section intro | 700–760 | 60–68 |
| Card body | 280–340 | 33–40 |
| Social body on 1080 | 760–820 | 45–55 |
| Caption and metadata | 400–520 | 55–70 |
Display type is governed by characters per line, not pixel width.
| Display role | Characters per line | Max lines |
|---|---|---|
| Hero statement | 18–28 | 3 |
| Section introduction | 24–34 | 3 |
| Social headline on 1080 | 14–20 | 4 |
| Story headline | 12–18 | 4 |
| Pull quote | 26–36 | 4 |
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.
- Large Strawford. At 64 px and above, shift display text left by ~0.022 em (about 3 px at 128 px) so the stem aligns optically with the column beneath. Left side bearings scale with size, so large type appears indented when set to the same coordinate as small type.
- Never the reverse. Small text indented further right than large display type reads as a broken column.
- The threshold is a rendered size, not a viewport width. Optical alignment applies where the type is 64px or larger, wherever that happens. It is not applied fluidly and not scoped by breakpoint: at a 900px viewport
displaysteps to 52px (§5.1) and must not be optically shifted, even though the viewport is wide. The implementation currently releases the shift below a 768px viewport rather than below 64px of type, so between 769 and 1024 it shifts 52px display text that this rule excludes. Recorded inTYPE-06. - Tracked uppercase. Positive tracking adds a trailing space after the final letter. Ignore it when aligning left; when centring, offset right by half the tracking value.
- Round letters. O, C, G, Q, o, c, e overshoot baseline and cap line by ~1.5% by design. Do not correct them.
- Quotation marks. Hang opening quotes outside the measure in pull quotes.
- Figures. Both families use cap-height lining figures, so numerals align to caps, not x-height. A statistic beside lowercase text sits high, so align statistics to their own baseline.
- Underlined links beside buttons. An underlined link has padding and a rule below but nothing above, so its box is vertically asymmetric. Centring that box against a button leaves the link's text sitting high, measured at 7 px in this system. Give the link a top padding equal to its bottom padding plus its border, so the box becomes symmetric. Verify by measuring rendered text, not element boxes.
Action groups
A primary button and a secondary link belong on one horizontal row, not stacked.
| Property | Value |
|---|---|
| Direction | Row; wraps to a stack only when space genuinely runs out |
| Vertical alignment | Centre, corrected for the link's asymmetric box |
| Gap, button to link | 32 |
| Gap, button to explanatory note | 40 |
| Button label | Never 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.
| Surface | Divisor | Nothing meaning-bearing below | Anything to be read, at least |
|---|---|---|---|
| 1080 social | ÷ 2.8 | 30 px | 34 px |
| 1200 social | ÷ 3.3 | 30 px | 34 px |
| 1240 A4 | 0.169 mm/px | 21 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.
| Property | Value |
|---|---|
| Type | Geomanist Medium, label scale for the canvas, +0.14 em, uppercase |
| Colour | Primary ink on light, primary reversed on dark. Never a tertiary grey |
| Baseline | Set from the frame padding edge, never from a sibling's alignment |
| Social form | Green rule above, 24 gap, signature below |
| Never | Applied 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
| Channel | Display voice | Notes |
|---|---|---|
| Website hero | Strawford display-xxl / display-xl | Three lines maximum, hand-set breaks |
| Website section intro | Strawford display-s / heading-l | Paired with a label eyebrow |
| Service cards | Geomanist Medium card-title | Card titles are interface, not editorial |
| Long-form article | Strawford display-m title, Geomanist body-l | Measure 620 |
| Case-study cover | Strawford display-l | Statistics in Geomanist Bold stat-xl |
| Testimonial | Strawford display-s, attribution caption | Hang the opening quote |
| LinkedIn single image | Geomanist Bold statement-l | Scanned at speed in feed |
| LinkedIn thought leadership | Strawford display-m | Slower, more reflective |
| LinkedIn carousel | Geomanist Bold statement-m | Consistency beats variety across slides |
| Instagram square / portrait | Either, chosen per post | Never both in one post |
| Instagram story | Geomanist Bold statement-l | Respect 250 top / 320 bottom clear zones |
| Proposal and presentation covers | Strawford display-l | Restraint is the point |
| PDF report and workbook covers | Strawford 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:
| Content | Destination | Status |
|---|---|---|
| Paper/ink tokens, text contrast ratios, green accent rules | colour.md | ✅ Migrated, authoritative for colour |
| Base unit, vertical rhythm scale, relationship spacing | grid-layout-rhythm.md | ✅ Migrated, 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 widths | grid-layout-rhythm.md | Partly: 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 thresholds | accessibility.md | ✅ Migrated, 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:
- Green is a marks-only accent on light paper, measured 2.65:1, below both the 4.5 body and 3.0 large-text thresholds. On dark ink it measures 6.86:1 and is text-capable. Never set type in green on light paper.
- Theme inversion must be a single class contract. Setting a dark ground by inline
backgroundinstead of the theme class detaches every token hung off that class, silently leaking light-paper text colours onto a dark ground. Treat an inlinebackgroundon a themed container as a lint error.
14. Open items
Carried forward from v3.1 §13. These must be settled before implementation, not after.
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-focustoken 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 statesfocus-ringas 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; andbase.cssimplements it,outline: 2px solid var(--fk-focus-ring)atoutline-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.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 ofgrid-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 afterGRID-13resolved: 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.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. TheFK Projectsteam is on Pro. Until that changes, Figma type must be set by hand in the desktop application.TYPE-04· Open · Website not yet migrated. The previous project'stokens.cssstill declares Host Grotesk and Inter.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.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:displayat 36px tracks −0.022 where the curve allows −0.016 to −0.006;metric-lgat 56 and 48px holds −0.018 where the curve allows −0.016 to −0.012;leadtracks −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
- Source:
typography-v3.1.md, read read-only and reconciled here perHANDOVER.md. Preserved in this repository atdocs/typography/; the original also remains in the previous website project. - Type system version: v3.1, Strawford and Geomanist. Declared as the
Versionheader field until 2026-08-25, when the metadata schema requiredVersionto count document revisions rather than number a release. The type system is still v3.1;Version: 1counts this chapter. - Rendered specimen:
typography-lab.html, 41 boards across website, LinkedIn, Facebook, Instagram, and business documents, rendering the real licensed faces from embedded WOFF2. Preserved atdocs/typography/typography-lab.html. - Not carried forward: node-count audit figures from the July 2026 review pass. The source marks them build-specific and explicitly warns against quoting them forward; they must be re-measured after any change.
- One unresolved conflict in the source: the dark-ground secondary text token is given as both
#A6A6A6(8.1:1) and#ADADAD(8.9:1). Resolve whencolour.mdis written.