Radius and rules

Square cloth: one small radius for controls, pills for chips, and four rule weights (hair, rule, frame, heavy).

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

Reference

Source reference; not an executed check.

radius
radius.control
round
radius.pill
sample
radius.scale.3
hair
size.border.thick
rule
size.border.rule
frame
size.thread
heavy
size.scale.8

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 native action keeps its control radius

Authored by radius.ts

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

Open example: Radius and rules · Do: A native action keeps its control radius Use the full-page example to follow page links.

The native action uses its existing component radius and meaningful words, without extending rounded treatment to every panel.

Do: A square evidence frame keeps its caption

Authored by radius.ts

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

Open example: Radius and rules · Do: A square evidence frame keeps its caption Use the full-page example to follow page links.

The native figure retains its square frame and visible explanation, using existing rule weights rather than a newly shaped card.

Don't: The evidence panel becomes a rounded card

Authored by radius.ts

Rule illustration; not an executed check. radius / radius.square

.visual { border-radius: var(--round); }
A figure adopts the pill shape intended for other roles.
An existing radius token does not authorize using its shape on a square evidence panel.

Don't: Rounded clipping removes the source caption

Authored by radius.ts

Rule illustration; not an executed check. figure-frame / figure.caption

A figure is given a fixed rounded clipping box; its source caption falls outside the visible area.
Only the drawing remains readable.
Shaping a frame must not hide the provenance required to understand the evidence; this is an illustrated misuse, not a changed native variant.

Rules

RuleWhyCheck
Fields, panels and figures have no radius.Square cloth is part of the look.Automated: scripts/site/check-brand.ts (radius only from tokens)

API

No props.

Contract details

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

Identity

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

Use when

  • Controls, chips and dividers. Why: Cloth is square; rounding is kept for things you press.

Do not use when

  • Rounded cards or fields. Why: Fields and panels are square, like cloth.

Anatomy

PartWhat it is
radius--radius (controls), --round (pills)
rules--rule-hair, --rule, --rule-frame, --rule-heavy

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
--radiusradius.control
--roundradius.pill
--rulesize.border.rule
--rule-heavysize.scale.8

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
words inside controls or beside state marks (consumer-owned)The Button, Control or BandWord contract's existing budgetKeep the action or band name readable. A rounded outline or a heavy rule supplies shape, not a label, and cannot justify trimming the words.
radius and rule names/values (fixed Library specimen)The complete RADIUS and RULE entries from brand.tsRetain the native radius and rule vocabulary. These are design values with no editable wording props.

Good: “Settings page (Control's named preset inside its control outline)” · “A square figure under the --rule-frame top rule (BRAND.md)”

Bad: “An unnamed round control with only its shape to explain the action” · “A rounded proof figure with its caption clipped to the frame”

Japanese: Translate labels through their consuming components and allow their documented Japanese expansion. Do not abbreviate Japanese band names merely to fit a pill. Keep radius/rule identifiers unchanged; shape tokens do not supply locale behaviour, and native-language review remains open.

Icons and illustrations

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

Decisions and exceptions

  • None.

Usage

142 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.