Task footer

The compact footer of the stand-alone apps: one note about the reader's data, and the ways back.

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-footer.ts

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

The data note and the ways back.

Do: Privacy page

Rendered by task-footer.ts

Open example: Task footer · Do: Privacy page Use the full-page example to follow page links.

Just the way back.

Don't: The site map

Rendered by task-footer.ts

Open example: Task footer · Don't: The site map Use the full-page example to follow page links.

A task page keeps the reader on the task.

Don't: No data note on a form page

Rendered by task-footer.ts

Open example: Task footer · Don't: No data note on a form page Use the full-page example to follow page links.

Say what happens to the data where it is entered.

Rules

RuleWhyCheck
The task footer has no woven edge: the task and the footer are both cotton.The edge sits only at joins between a field and cotton (D-SITE-003).Automated: tests/unit/site-system.test.ts

API

PropTypeRequiredDefaultWhat it does
notestringNoThe data note.
noteI18nstringNoIts i18n key.
linkslistYesLinks (label, href, i18n key).
narrowbooleanNofalseThe task column width (is-task).

Contract details

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

Identity

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

Use when

  • The contact form, health check, survey and their privacy pages. Why: The note where the reader enters data says what happens to it.

Do not use when

  • On content pages. Why: They use the site footer with the map.

Anatomy

PartWhat it is
rootfooter.site-footer.is-compact on cotton
notep.footer-note
linksp.footer-small, links separated by a middle dot

Made of: text, text-link.

Used in: task-page, page-apps.

Variants

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

States

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

Tokens

PartToken
root.background--cotton
note.color--ink-2

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
internal--space-9 above.
externalLast on the page.
rhythmAfter the task.

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
note2 sentencesWhat happens to the reader's data

Good: “Your answers stay in your browser until you ask for your full report.”

Bad: “© Loom”

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

Usage

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

Shared styles

The compact footer reuses site-footer/is-compact, footer-note and footer-small; no duplicate component stylesheet is needed.

Style owners: footer, text-link

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

Remaining review: Existing positive specimens fit light/dark 320/390/1440; task-link destination and content-state review 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.