Task header

The focused header of the stand-alone apps (contact, health check, survey): the logo, the task's name and one or two ways back, with no navigation that would pull the reader out of the task.

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

Do and don't

Do: Health check

Rendered by task-header.ts

Open example: Task header · Do: Health check Use the full-page example to follow page links.

The task and its privacy page.

Do: Contact

Rendered by task-header.ts

Open example: Task header · Do: Contact Use the full-page example to follow page links.

Translated by the app.

Don't: The full navigation

Rendered by task-header.ts

Open example: Task header · Don't: The full navigation Use the full-page example to follow page links.

A task page keeps the reader on the task.

Don't: A call to action

Rendered by task-header.ts

Open example: Task header · Don't: A call to action Use the full-page example to follow page links.

The task is the action.

Rules

RuleWhyCheck
Task pages carry no site navigation, only ways back.Fewer exits keep the reader on a three-minute task.Review: Site system lead

API

PropTypeRequiredDefaultWhat it does
taskstringYesThe task's name.
taskI18nstringNoThe i18n key the app's script fills.
homeI18nbooleanNofalseThe logo's label is translated by the app.
linkslistYesLinks in the actions (label, href, i18n key).
langSwitchbooleanNofalseMount point for the app's language switch.

Contract details

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

Identity

AspectValue
Idtask-header
LayerOrganisms
Categorynavigation
OwnerSite system lead
Statusstable
Version1.0.0
Sourceapps/showcase/site/system/organisms/task-header.ts (private repository; the contract and the render function are this one module)
VersionDateChange
1.0.02026-10-26Task header as one module: its markup moved out of the page builder (scripts/site) into the system.

Use when

  • The contact form, the health check, the team survey and their privacy pages. Why: A task page keeps the reader on the task; the full header would invite them away.

Do not use when

  • On content pages. Why: Content pages use the site header with the full navigation.

Anatomy

PartWhat it is
rootheader.site-header.is-focused
brandspan.header-brand: a.wordmark with the logo (filled at build time) and span.wordmark-task
actionsdiv.header-actions: links, and the app's language switch mount

Made of: logo, text-link.

Used in: task-page.

Variants

VariantWhenWhy
defaultWherever the page declaration places it.One shape per job keeps pages predictable.

States

StateRendered or not applicable
defaultdefault
hoverLinks underline.
focus-visibleThe --focus ring.
activeNot applicable: Links.
disabledNot applicable: Nothing disabled.
loadingThe language switch is hidden until the app's script fills it.
emptyNo links: the actions stay empty (survey results).
errorNot applicable: No data.
currentNot applicable: One task, no current item.
visitedNot applicable: Links keep one colour.
expandedNot applicable: Does not open.

Tokens

PartToken
root.background--cotton
task.font--type-small-strong

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.
textExpansionJapanese runs 20 to 40% longer; headings break between phrases (jaBreaks) and blocks grow downwards.

Spacing and rhythm

AspectValue
internalAs the site header.
externalSticky at the top.
rhythmAlways first.

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
rolea landmark or list, as stated in its parts
nameIts visible text
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
task3 wordsThe task

Good: “Health check”

Bad: “Loom Health Check Wizard”

Japanese: Filled by the app from its i18n/ja.json.

Icons and illustrations

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

Decisions and exceptions

  • None.

Usage

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

Shared styles

The focused site header reuses header frame, wordmark-task and header-link rules; the task app owns language enhancement.

Style owners: header, logo, text-link, language-switch

  • apps/showcase/site/system/styles/core/header.css

Remaining review: Existing positive specimens fit light/dark 320/390/1440; task-language loading/empty states and focus order remain open.

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.