Page head

Opens every page below the landing: one full-bleed field of the page's colour (its job's colour on the four job pages) holding the breadcrumbs, the oversized title, the lede and actions, closed by the woven edge.

Template · stable · v1.0.0 · owner: Site system lead · contract 19 of 20 points (open: figma)

Do and don't

Do: A product page

Rendered by page-head.ts

Open example: Page head · Do: A product page Use the full-page example to follow page links.

Section colour, crumbs, title and promise.

Do: A bare head

Rendered by page-head.ts

Open example: Page head · Do: A bare head Use the full-page example to follow page links.

The section still shows.

Don't: A state colour

Rendered by page-head.ts

Open example: Page head · Don't: A state colour Use the full-page example to follow page links.

The field is the section's colour, not a mood.

Don't: A title that sells

Rendered by page-head.ts

Open example: Page head · Don't: A title that sells Use the full-page example to follow page links.

Titles say what the page is for.

Rules

RuleWhyCheck
Every page except the landing opens with one page head.One opening shape tells readers where they are.Automated: scripts/site/system/check-pages.ts (page sequence)
The page head never draws the woven edge; the composer places it at the join after the field.The edge marks every join between a field and cotton, and only the composer sees the joins (D-SITE-003).Automated: scripts/site/system/check-pages.ts (edges at joins)

API

PropTypeRequiredDefaultWhat it does
colourstringYesThe section colour (indigo, madder, saffron, teal, ink).
statestringNoA dye that overrides the colour (the 404 uses madder).
crumbslistNoThe breadcrumb trail.
titlehtmlYesThe page title (escaped by the caller).
ledehtmlNoThe first paragraph.
actionshtmlNoButtons (CtaPair).
asidehtmlNoA small figure beside the lede.
idstringNo"page-title"The h1 id.
langen | jaNo"en"Breadcrumb label language.
titleSizedisplay | h2NoOne size for a family of sibling pages (the four job pages use h2), instead of stepping down by length.

Contract details

The full contract: identity, anatomy, variants, states, tokens, layout, motion, accessibility, content, tests

Identity

AspectValue
Idpage-head
LayerTemplates
Categorysection
OwnerSite system lead
Statusstable
Version1.0.0
Sourceapps/showcase/site/system/templates/page-head.ts (private repository; the contract and the render function are this one module)
VersionDateChange
1.0.02026-10-26Page head as one module: its markup moved out of the page builder (scripts/site) into the system.

Use when

  • The first section of every page except the landing. Why: One opening for every page tells readers where they are and which section they are in.

Do not use when

  • On the landing. Why: The landing opens with the Hero template.
  • Twice on a page. Why: A page has one title.

Anatomy

PartWhat it is
rootsection.fell.field-<colour>, named by the h1: the whole head is one field
headdiv.fell-head: Breadcrumbs and h1.fell-title
bodydiv.fell-grid: the lede (p.lede, no bold run-in), actions and an optional aside
edgeNone of its own: the composer places the woven edge after the field (D-SITE-003)

Made of: breadcrumbs, heading, text, cta-pair, dye-field.

Used in: page-article, page-articles, page-deep, page-demo, page-hub, page-404, page-status, page-runs-on-loom.

Variants

VariantWhenWhy
with ledeAlmost every page.The lede on the field is the page's promise.
bareA page with no lede.The title alone on its field still marks the section.

States

StateRendered or not applicable
defaultdefault
hoverNot applicable: The page head is not interactive, so it has no hover state.
focus-visibleNot applicable: The page head does not take focus; links and buttons inside it carry their own focus ring.
activeNot applicable: The page head cannot be pressed.
disabledNot applicable: The page head has nothing to disable.
loadingNot applicable: The page head is rendered at build time and is complete when the page loads.
emptyNot applicable: The page head is not rendered without content; the builder skips it.
errorNot applicable: The page head shows no data that can fail.
currentNot applicable: The page head has no current item.
visitedNot applicable: The page head is not a link.
expandedNot applicable: The page head does not open or close.

Tokens

PartToken
title.font--type-display (is-mid and is-long step down for long titles)
field.background--field-bg of the section colour
lede.color--field-fg

Layout

AspectValue
breakpointsRequired review at 390, 768, 1024 and 1440 px; execution is not implied by this declaration; columns stack under 768 px; the wrap keeps a 16 px gutter on phones.
wrappingText wraps; nothing scrolls sideways.
textExpansionTitles over 26 characters use is-mid, over 44 is-long, so Japanese and long English titles stay on two or three lines. Lede text preserves its content and permits emergency wrapping of unbroken paths or identifiers within the available width.

Spacing and rhythm

AspectValue
internal--space-section-sm above the title; the field has one padding, --space-9 (D-SITE-005).
externalNone: it starts the page.
rhythmOne field (title, lede, actions), the edge, then cotton body.

Motion

AspectValue
NoneNo intrinsic element animation. The optional claude-entrance consumer profile may translate below-fold structure once (20px, --dur-weave, --ease-enter, --stagger); reduced motion disables it. This preserved baseline entrance is separate from element playback.

Runtime and reuse

  1. Render-only element; mount any registered child enhancements separately. Preserve required Site CSS, fonts, responsive and locale rules from nativeElement.

Accessibility passport

AspectValue
roleregion (section) named by its heading
nameIts h2, by aria-labelledby
keyboardLinks and buttons inside, in reading order.
focusThe --focus ring on every link and button inside.
screenReaderRead in source order; decorative weaving is aria-hidden.
contrastInk on cotton 14:1; text on every dye field 4.5:1 or better (checked by check-brand).
targetLinks and buttons are 44 px tall.

Content

SlotLengthVoice
title60 charactersSays what the page is for, in plain words
lede2 sentencesThe page's promise

Good: “How we run your design system with you”

Bad: “Welcome to our Product page”

Japanese: Titles and ledes come from the Japanese page; headings break between phrases.

Icons and illustrations

None: this element uses no icon or illustration of its own.

Decisions and exceptions

Usage

331 uses across the built pages (measured by npm run site:system).

Tests

AspectValue
unittests/unit/site-system.test.ts: renders every do and don't example through the registry and checks the classes it owns
visualNot yet: there are no screenshot baselines; the Library page is checked for sideways scroll at 1440 px by tests/site/system.spec.ts
a11ytests/site/system.spec.ts: axe (0 serious or critical) on the element's Library page in light and dark
parityscripts/site/system/check.ts: Library examples are rendered by the same render function the site imports

Figma

not-yet: The Loom Site Figma library is the last stage of the plan; this element is not mapped yet.

Open in Storybook

Start with a conversation about your system.

We read your system, show you what we found, and agree with your team what to fix first.