Skip to content

Usability — applying M3 Expressive

foundations specs/foundations/usability.kmd

Foundation guidance on applying Material 3 Expressive without sacrificing usability. Emphasis ladder (5 levels × 5 vectors), decision matrix for when to emphasize, accessibility constraints (Expressive cannot break AAA contrast or reduced-motion contract).

When this spec applies

Primary triggers

All triggers

Specification body

Spec — Usability (applying M3 Expressive)

Foundational companion para todas as specs Expressive. Resolve: "this surface uses M3 Expressive — qual nível de emphasis aplico? Como manter usabilidade?"

Princípios

  1. Emphasis is a ladder — 5 níveis (subtle / standard / emphasized / hero / critical).
  2. Five vectors — color / shape / size / motion / containment.
  3. Hierarchy = restraint — only ONE hero element per screen typically.
  4. Accessibility non-negotiable — Expressive cannot break AAA contrast, reduced-motion, screen-reader semantics.
  5. Research-grounded — based on Google 46 research studies, 18k+ participants (M3 Expressive launch).

R1 — Emphasis ladder

LevelVisual signatureTypical use
subtletext-muted color; baseline shape; standard size; no motionTertiary text, hint labels, secondary chips
standardtext color; standard shape; baseline size; standard motionDefault body content, most UI elements
emphasizedprimary color OR weight bump; tighter radius OR slightly larger; 1.05 scale on hoverSection headers, secondary CTAs, featured cards
herodisplay typography OR primary-container; rounded-extra-large radius; large size; spring entrancePage title, primary CTA, featured artifact
criticalerror/warning color; high contrast; banner; confirmation-required actionsDestructive actions, warnings, alerts

Per screen guidance:

  • 1 hero element max (page title OR primary CTA — choose one).
  • 2-3 emphasized elements acceptable (section headers, featured cards).
  • Standard is default — most content stays here.
  • Subtle for support — hints, captions.
  • Critical sparingly — overuse → habituation → ignored.

R2 — Five emphasis vectors

VectorHow it scalesToken source
Colortext-muted → text → primary → error/warningthemes/color-roles.kmd
Shapesharp → standard radius → larger radius → pill/extra-largethemes/shape-library.kmd
Sizesmall → default → large → displaythemes/typography.kmd R1+R4 (scale per window class)
Motionno animation → standard → spring → expressive overshootthemes/motion.kmd R9
Containmentno container → outlined → filled-tonal → filled-elevatedthemes/color-roles.kmd containers

A "hero" element pushes ALL 5 vectors. A "subtle" element pushes NONE.

R3 — Decision matrix: when to emphasize

Is this content the most important on this screen?
├── YES, and it's the primary user goal → hero (R1 level 4)
├── YES, but secondary support → emphasized (R1 level 3)
└── NO:
    ├── User needs to find/read this often → standard (R1 level 2)
    ├── Background/tertiary content → subtle (R1 level 1)
    └── Destructive/critical action → critical (R1 level 5)

Anti-patterns:

  • Everything emphasized: → user can't find what's important.
  • Hero on every screen: → hero loses signal value.
  • Critical for routine actions: → user ignores genuine critical alerts.
  • Subtle for primary text: → readability failure.

R4 — Accessibility constraints (NORMATIVE)

Expressive MUST NOT compromise:

R4.1 — Contrast (AAA per WCAG 2.2)

  • Text + background combinations always meet AAA in both light + dark themes.
  • Per themes/color-roles.kmd R4 — Expressive colors are subset of role tokens, not exceptions.
  • Emphasized text (per typography.kmd R9) MUST still pass AAA — heavier weight does NOT loosen contrast.

R4.2 — Reduced-motion

  • All motion.kmd R6 reduced-motion rules apply to Expressive springs (R9 motion tokens).
  • Hero element entrance animation → instant under prefers-reduced-motion.
  • Shape morph cycles → static fallback.
  • Hover scale → disabled.

R4.3 — Screen-reader semantics

  • Visual emphasis does NOT replace semantic HTML/ARIA.
  • A body-large-emphasized is still <p>, not <h2>.
  • An emphasized button is still role="button", NOT a custom widget.
  • Containment shifts (R2 vector 5) do NOT replace semantic landmarks.

R4.4 — Touch targets

  • ALL interactive Expressive elements ≥ 48dp tap area (per Material baseline).
  • Shape morph on press does NOT reduce target.
  • Compact button group sizes (XS = 28dp) — accept ≥ 28dp em hover-only contexts (desktop); mobile/touch enforces ≥ 32dp.

R5 — Research backing

Google M3 Expressive launch (2025) ran 46 research studies, 18k+ participants. Key findings adopted as Koder normative:

FindingKoder application
Emphasized elements increase task completion by ~12% when used sparinglyR1 hero limit (1 per screen)
Over-emphasis (everything emphasized) reduces completion by ~8%R3 anti-pattern "everything emphasized"
Reduced-motion users equally task-efficient when fallbacks honoredR4.2 reduced-motion NORMATIVE
Color emphasis WITHOUT shape emphasis often missed by colorblind usersR2 prefer multi-vector emphasis (color + shape/size)

R6 — Per-preset variation

Emphasis ladder respects preset:

PresetHero level visual
material3Subtle emphasized (subtle shape morph + spring)
material_expressiveFull emphasized (shape morph + spring + hover scale)
material2Color + size only (no shape morph, no spring)
terminal_classicUppercase + asterisk markers only (no visual change)
brutalistSharp corners + 2px border on hero; no spring
cyberpunk_neonGlow + neon outline on hero/critical
minimalist_monoBold weight + larger size only; no color shift

R7 — Surface bindings

Foundation-level — guidance only; no widget. Applied implicitly via:

  • koder_kit widgets honor emphasis parameter where applicable (e.g., KoderAIMessageBubble({emphasis: "emphasized"})).
  • Default emphasis = standard.

R8 — i18n

Foundation-level — no UI strings.

T-suite

Foundation-level — verified via per-spec T-clauses that consume this guidance:

  • Hero limit per screen: per-product audit (no per-page validation possible at framework).
  • AAA contrast (R4.1): verified per widget via existing color-roles.kmd T-suite.
  • Reduced-motion fallback (R4.2): verified per widget T-clauses (Wave 1-5 AI namespace each cover).
  • Screen-reader (R4.3): per widget aria semantic tests.
  • Touch targets (R4.4): per widget size-class tests.

This spec acts as policy reference consumed by component specs.

  • All themes/*.kmd (color/shape/motion/typography) provide the vectors.
  • All components/*.kmd apply emphasis levels in their R-suite.
  • elements.kmd — companion (foundational design principles).
  • themes/typography.kmd R9 — emphasized scale tokens.
  • themes/shape-library.kmd R5 — per-preset shape availability.
  • policies/security.kmd — accessibility contract overlap.
  • Refs: M3 Usability applying-m3-expressive; Google research blog

References