How the site speaks: plain words, short sentences, real numbers with their sources, no metaphors in headlines, no status chips, and nothing claimed that does not run (site-content/voice.md, enforced by npm run site:copy).

Foundation · stable · v1.0.0 · owner: Site system lead · contract 18 of 20 points (open: usage, no owned-class occurrences in built pages or metadata-token references in built CSS; application declarations and executed coverage are separate; figma)

Reference

Source reference; not an executed check.

good
Real audit output, scored with Loom's own open rubric.
bad
Next-generation AI-powered platform

Do and don't

2 positive / 2 negative authored documentation examples (2 each required); 1 reference (1 required); 0 failed. References and failures do not count; this is not behavior acceptance.

Do: Say what the mechanism does

Authored by voice.ts

Rendered consumer example; not an executed correctness check. text Isolated document follows the browser's colour and contrast preferences. The outer theme toolbar does not control this document.

Open example: Voice · Do: Say what the mechanism does Use the full-page example to follow page links.

The actual paragraph describes the mechanism and preserves the team's authority, without claiming an unmeasured benefit or automatic release.

Do: Plans are explicitly future work

Authored by voice.ts

Rendered consumer example; not an executed correctness check. titled-section Isolated document follows the browser's colour and contrast preferences. The outer theme toolbar does not control this document.

Open example: Voice · Do: Plans are explicitly future work Use the full-page example to follow page links.

The native section keeps proposed work separate from working capability; its example wording makes no new product promise.

Don't: Hype replaces an explanation

Authored by voice.ts

Rendered misuse illustration; not an executed correctness check. text Isolated document follows the browser's colour and contrast preferences. The outer theme toolbar does not control this document.

Open example: Voice · Don't: Hype replaces an explanation Use the full-page example to follow page links.

The actual Text renderer can display this copy, but the wording withholds the concrete mechanism. It is a rendered content misuse rather than an automated rejection.

Don't: A sample becomes an unsupported outcome claim

Authored by voice.ts

Rule illustration; not an executed check. voice / voice.truthful

A scripted sample is described as proven client savings, without a measured client case or attributable result.
The claim is written in the present tense as if already established.
An example that runs cannot establish adoption or savings; the prose must retain the evidence boundary.

Rules

RuleWhyCheck
Plain words; no 'next-generation', no hype.Readers trust specifics, not adjectives.Automated: npm run site:copy
Nothing unbuilt is described as working; plans sit under Coming next.Truthfulness (AGR-0001).Automated: scripts/site/markdown.ts (status gate) and site-claims

API

No props.

Contract details

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

Identity

AspectValue
Idvoice
LayerFoundations
Categoryfoundation
OwnerSite system lead
Statusstable
Version1.0.0
Sourceapps/showcase/site/system/foundations/voice.ts (private repository; the contract and the render function are this one module)
VersionDateChange
1.0.02026-10-26Voice as one module: its markup moved out of the page builder (scripts/site) into the system.

Use when

  • Every string on the site. Why: One voice is part of the brand.

Do not use when

  • Engine output inside showcases. Why: That is the product's real output, shown as is (in English).

Anatomy

PartWhat it is
guideapps/showcase/site-content/voice.md
rulesapps/showcase/site/loom/rules (content rules)
checkernpm run site:copy

Made of: nothing (a base element).

Used in: pages directly.

Variants

VariantWhenWhy
light and darkEvery page, following the reader's setting.The same roles resolve to light or dark values, so no element chooses its own.

States

StateRendered or not applicable
defaultThe specimen.
hoverNot applicable: A foundation is not interactive.
focus-visibleNot applicable: Not focusable.
activeNot applicable: Not interactive.
disabledNot applicable: Nothing to disable.
loadingNot applicable: Values are built into the stylesheet.
emptyNot applicable: The build fails if a value is missing.
errorNot applicable: Unresolved values fail the brand gate, not the reader.
currentNot applicable: No current item.
visitedNot applicable: Not a link.
expandedNot applicable: Does not open.

Tokens

PartToken
content tokensapps/showcase/site/loom/content (cta.primary, caption.sample, band.*, job.*)

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
internalNot applicable: a foundation has no box of its own.
externalNot applicable.
rhythmApplies to every element that reads it.

Motion

AspectValue
NoneA foundation does not move.

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
roleNot rendered on the site; its specimen in the Library is a list
nameThe foundation's name
keyboardNot interactive.
focusNot focusable.
screenReaderThe specimen is a plain list of names and values.
contrastEvery text and ground pair in the palette is checked (check-brand).
targetNot a target.

Content

SlotLengthVoice
authored page headingThe consuming Heading or page template budgetState the page claim in plain words; no metaphor headline or unbuilt capability in the present tense.
authored body copyTwo to four sentences per paragraph (voice guide); the consuming component owns any tighter budgetBritish English, concrete mechanisms and sourced numbers. Preserve engine output as its original English evidence instead of rewriting it as marketing.

Good: “Real audit output, scored with Loom's own open rubric.” · “No client has used Loom yet.”

Bad: “Next-generation AI-powered platform” · “Client savings presented without a measured case”

Japanese: Use the same evidence and capability limits in the existing Japanese edition. Keep the native-review-pending note; engine output remains explicitly English. This foundation documents copy obligations, not a translation prop or completed native review.

Icons and illustrations

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

Decisions and exceptions

Usage

0 owned-class occurrences in built pages plus metadata-token references in built CSS (measured by npm run site:system).

Application and coverage

Content policy (declared): Strict copy checks apply supported accepted/error rules such as site-banned-words, site-no-stock-phrases and site-honesty-unbuilt. markdown.ts compares status markers with claims and keeps unbuilt work under Coming next. Scope remains pattern-based: site-future-outside-coming-next emits warning findings, and proposed/advisory rules remain nonblocking.

Current check result: not assessed by this report. Declarations and source-file presence do not establish executed enforcement or accepted coverage.

Source authority and implementation (paths in the private checkout):

  • apps/showcase/site-content/voice.md
  • scripts/site/copy-governance.ts
  • scripts/site/check-copy.ts
  • scripts/site/markdown.ts
  • apps/showcase/site/loom/rules/site-banned-words.json
  • apps/showcase/site/loom/rules/site-future-outside-coming-next.json

Declared rules and checks (not execution results):

  • voice.plain: Plain words; no 'next-generation', no hype. Automated check declared: npm run site:copy
  • voice.truthful: Nothing unbuilt is described as working; plans sit under Coming next. Automated check declared: scripts/site/markdown.ts (status gate) and site-claims

Coverage still needed (not assessed here):

  • Retain current strict-copy and status-gate results plus hype/overclaim canaries; inspect actual pages for working-versus-planned capability wording.
  • Human copy/source review is still required for claims and paraphrases that supported patterns cannot decide; successful rendering or authored examples are not enforcement results.

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.