Elevation

Flat at rest: one step of tone raises a panel; the only shadow is for things that float (menus, dialogs).

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

Reference

Source reference; not an executed check.

float
elevation.modal

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: A floating menu owns its shadow

Authored by elevation.ts

Rule illustration; not an executed check. elevation / elevation.float-only

The native Header uses --shadow-float on .mega-panel and .drawer-panel.
The panel floats above the page; this source illustration does not open or test a menu.
The actual menu's floating position gives the shadow meaning. Menu opening, focus and narrow behavior remain checks of Header.

Do: A resting tile uses a raised surface

Authored by elevation.ts

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

Open example: Elevation · Do: A resting tile uses a raised surface Use the full-page example to follow page links.

The native resting card uses its surface and structural top mark; the inset mark is not a floating drop shadow.

Don't: Every resting proof card floats

Authored by elevation.ts

Rule illustration; not an executed check. elevation / elevation.float-only

.resting-proof-card { box-shadow: var(--shadow-float); }
The card remains in normal document flow.
Borrowing the floating-panel shadow for every resting card erases the distinction between a raised surface and an overlay.

Don't: Selection incorrectly makes a resting card float

Authored by elevation.ts

Rule illustration; not an executed check. elevation / elevation.float-only

.resting-card[aria-current="true"] { box-shadow: var(--shadow-float); }
Selection changes, but the card never becomes a floating panel.
A selected item is still in document flow. Reusing the overlay shadow as its state treatment confuses selection with elevation.

Rules

RuleWhyCheck
Shadows only on floating elements.A shadow means it floats.Automated: scripts/site/check-brand.ts (box-shadow only from tokens)

API

No props.

Contract details

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

Identity

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

Use when

  • Mega-menu panels and anything that floats. Why: A shadow says 'above the page'.

Do not use when

  • Cards at rest. Why: Tone, not shadow, raises a panel; shadows everywhere flatten meaning.

Anatomy

PartWhat it is
tone--surface, --surface-2, --surface-3
float--elevation-2 (elevation.modal)

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
--surfaceRaised panel
--elevation-2elevation.modal

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
labels and links inside raised or floating surfacesThe consuming panel, navigation or link contract's budgetKeep the same meaningful labels when a menu opens. Elevation describes position and cannot stand in for a heading, accessible name or state message.
shadow name and value (fixed Library specimen)The full SHADOW entry from brand.ts; no content propShow the stored shadow value. A float token is not a new card variant or evidence of menu behaviour.

Good: “An open menu with named navigation links and the floating shadow (BRAND.md)” · “A card on --surface with readable ink text and no resting shadow (BRAND.md)”

Bad: “A card labelled important only by a stronger shadow” · “A resting proof card given a floating-menu shadow”

Japanese: The consuming navigation or panel owns Japanese labels and accessible names; keep shadow token names and CSS values unchanged. Check expanded Japanese menu text in its actual surface. This foundation has no locale prop and does not establish native-language or floating-panel acceptance.

Icons and illustrations

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

Decisions and exceptions

  • None.

Usage

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

No application mechanism is declared.

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

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.