Tessa Wardlow

Reference

Design system

Every ratio was computed with tools/a11y/contrast.py against all three grounds. This page is noindex: it documents the template for whoever builds with it.

The letters are generated, not drawn

src/data/skeletons.ts holds four skeletons — the paths a hand travels — and a sweep() that offsets each point by the nib and closes the polygon. A broad edge offsets by a constant vector, because the nib never rotates in the hand, so strokes running along the pen angle come out hairline and strokes across it come out full width. A pointed nib offsets perpendicular to travel, scaled by how much of the movement is a pull, because that is when the tines spread. Change angle in config.ts and every thick and thin on the page moves. There are no letterform outlines anywhere in this template and no images at all.

Why the accent is terre verte

Green earth is a manuscript pigment — the underpaint beneath skin tones in illumination for a thousand years. #42621A sits at hue 87°, inside the emptiest band of the library's 118-accent corpus (90–105° held two entries), ΔE 9.0 from its nearest neighbour. It is used for the skeleton overlay, the nib in the angle diagram and the figures in the tables: the three places the page is showing you a mechanism rather than a result.

The ruling never sits behind text

--rule is 1.54:1 against the ground, which is correct for a guide line and illegal behind a paragraph. It appears only under specimen bands and inside the guide sheets — which is also the only place a calligrapher rules a real sheet. Body copy is set on plain paper.

Prices: the opposite call to day 128, on the same rule

Day 128 (tattoo-artist-portfolio) withheld price and priceRange entirely, because a session's length is set by placement and skin — there was no settled number to assert. Here there is: an envelope is $4.50, every time, and a six-week course is $340 with eight seats, so a UnitPriceSpecification with unitText: "envelope" is emitted and is accurate. The rule was never "never state a price" — it is assert what is settled, withhold what is not, and the two days are that rule producing opposite markup. The two "from" rates carry no price specification, because a floor is not a price.

What the Course blocks refuse to say

Every class emits Course with coursePrerequisites, courseWorkload and maximumAttendeeCapacity — all facts about the room. None emits educationalCredentialAwarded or numberOfCredits, because a six-week evening class awards nothing at all, and schema's course vocabulary was built for institutions that do. Filling that field to look complete is exactly how a rich result starts overstating.

Tokens

All colour lives here; the Tailwind config declares no ramps
TokenValueNotes
--color-bg #F2EFE6 Laid paper
--color-bg-alt #E4DFD1 Banding
--color-surface #FBFAF5 Cards, ductus figures, guide sheets
--color-text #211C15 14.71 / 12.71 / 16.18:1 · AAA — and the ink every letter is filled with
--color-text-muted #57503F 6.96 / 6.01 / 7.66:1 · AA
--color-border #7E7462 4.00 / 3.46 / 4.41 — non-text only
--color-accent #42621A Terre verte — 6.10 / 5.27 / 6.71:1 · AA
--rule #B9C4CE Guide-sheet ruling. Decorative, never behind text
--rule-soft #DCE2E8 Ascender and descender lines
--color-band #211C15 The stock section inverts
--color-on-band #F2EFE6 14.71:1 on band · AAA
--color-on-band-muted #A79E8C 6.37:1 on band · AA
--color-accent-on-band #A8CC66 9.26:1 on band · AAA

Type

Forum for display — drawn from broad-pen Roman capitals, which makes it the one face in the catalogue built the way this page argues letters are built. It ships one weight and is used at one weight. Host Grotesk carries figures and UI. Both are unused elsewhere in the library.