Semantic Density and Coupling Tokens (CEM) — Canonical Spec

Status: Canonical (v1.0)

Last updated: December 17, 2025

Audience: Design Systems, Product Design, Front-End Engineering

Applies to: Modality-neutral interactive operability (pointer, touch, stylus, gaze, switch, remote)

Companion specs:


1. Why “Coupling”

In CEM terms, coupling names the moment when user intent successfully binds to an interactive affordance—independent of input modality:

This supports the UI-space meaning you called out: proximity implies relationship/coupling between controls, and insufficient distancing causes interference.


2. Taxonomy placement

Boundary heuristic:


3. Coupling vocabulary (semantic + dimensional)

To keep the naming dimensional and unambiguous, use three core nouns:


4. Canonical D2 coupling tokens

4.1 Hard safety minimums (policy anchors)

These values are mode-invariant — density modes MUST NOT change zone-min or guard-min.

cem-coupling-minimums
Token Value Description tier
--cem-coupling-zone-min 3rem Minimum operable zone in both dimensions; nominally 48 px @ 16 px root required
--cem-coupling-guard-min 0.5rem Minimum distancing between adjacent operable zones; nominally 8 px required
--cem-coupling-halo 0.25rem Invisible expansion beyond visuals; may vary by mode (nominally 4 px) required

Interpretation:

Accessibility baseline:

4.1.1 D2/D5 compatibility: guard must cover indicator outset (normative)

When D5 indicators render outside the control edge (e.g., outline-offset, zebra rings), --cem-coupling-guard-min SHOULD be large enough to prevent indicator collisions between adjacent controls.

Define the worst-case outward indicator extent as:

Compatibility guideline:

--cem-coupling-guard-min SHOULD be ≥ max(4 * --cem-zebra-strip-size, --cem-stroke-indicator-offset + --cem-stroke-focus)

Default CEM values satisfy this (8px guard vs 8px zebra extent when --cem-zebra-strip-size = 2px).

4.2 Control geometry endpoints (visual sizing — D2c Controls)

Visual control geometry — --cem-control-height, --cem-control-padding-x, --cem-control-padding-y, --cem-icon-button-size, --cem-icon-button-icon-size, and the list/menu/table row heights — is defined and governed in D2c Controls (cem-controls).

D2 references this geometry only as a normative constraint: visual sizes MUST NOT shrink the operable zone below --cem-coupling-zone-min, and adjacent layouts MUST NOT shrink distancing below --cem-coupling-guard-min, regardless of how Controls geometry varies across coupling modes. When visuals fall below the zone, components MUST use halo expansion (see §6.1).

Coupling-mode overrides for visual geometry live in D2c Controls; D2 owns only the operability portions of mode behavior (halo policy, see §5).


5. Coupling modes (consumer semantics)

5.1 Mode meanings

5.2 Mode switch (halo policy)

D2 owns only the halo portion of mode behavior. Visual geometry overrides live in D2c Controls (see cem-controls §3.2).

:root { --cem-coupling: balanced; }

:root[data-cem-coupling="balanced"] { /* baseline halo */ }

:root[data-cem-coupling="forgiving"] {
  /* Visuals are larger (D2c); halo can be smaller because visuals already meet the zone */
  --cem-coupling-halo: 0.125rem;
}

:root[data-cem-coupling="compact"] {
  /* Visuals shrink (D2c); halo grows to preserve the operable zone */
  --cem-coupling-halo: 0.375rem;
}
cem-coupling-halo-overrides
Token forgiving compact
--cem-coupling-halo 0.125rem 0.375rem

Governance rule: do not reduce --cem-coupling-zone-min or --cem-coupling-guard-min per mode. Visual geometry overrides are governed in D2c Controls.


6. Implementation patterns

6.1 Halo-based operability (compact visuals, safe coupling)

--cem-control-padding-* come from D2c Controls; the safety floor (min-block-size: --cem-coupling-zone-min) is the D2 contribution.

Token generation is necessary but not sufficient. A component is only coupling-safe when its rendered implementation preserves the zone, guard, and halo contract:

.cem-control {
  min-inline-size: var(--cem-coupling-zone-min);
  min-block-size: var(--cem-coupling-zone-min);
  padding-inline: var(--cem-control-padding-x);
  padding-block: var(--cem-control-padding-y);
}

/* Optional: halo expansion when visible chrome is smaller than the operable contract */
.cem-coupling-halo {
  position: relative;
}

.cem-coupling-halo::after {
  content: "";
  position: absolute;
  inset: calc(-1 * var(--cem-coupling-halo));
  background: transparent;
  pointer-events: auto;
}

6.2 D1/D2 enforcement: spacing must not violate coupling guard

.cem-actions {
  display: flex;
  gap: max(var(--cem-gap-related, 0px), var(--cem-coupling-guard-min));
}

7. Optional: coupling semantics between controls (proximity implies relatedness)

If you want proximity to intentionally communicate relationship, add an optional D1/D2 bridge token set:

:root {
  /* Within this distance, controls are perceived as a group (segmented, paired actions). */
  --cem-coupling-affinity-max: 0.375rem;

  /* Beyond this distance, controls read as independent. */
  --cem-coupling-decouple-min: 0.75rem;
}

Guidance:



8. Material / Angular Material mapping (implementation layer)

Example mapping guidance:

(Exact numeric mapping remains an implementation choice per Angular Material version.)


9. Finalization checklist (what “done” means)

9.1 Canonical decisions to lock

9.2 Token set acceptance criteria

A draft becomes “canonical” when all of the following are true:

  1. Minimal core: only these coupling policy anchors are required:

  2. Invariants are explicit:

  3. Orthogonality is enforceable:

  4. Component mapping is possible without special cases:

  5. Accessibility posture is documented:

9.3 Mode matrix (canonical)

Mode Product intent Visual geometry Halo (--cem-coupling-halo) Typical surfaces
forgiving Minimize mis-coupling for imprecise input Larger controls/rows; more internal padding Smaller (visuals already meet zone) mobile-first, kiosks, accessibility-first, gaze/dwell
balanced General default across modalities Baseline control heights/rows Baseline mixed pointer + touch, general app UI
compact Increase information density without breaking operability Smaller visual heights/rows; reduced chrome Larger (use halo to preserve zone) data grids, admin tools, scan-heavy panels

Normative rule:

9.4 Component mapping checklist (how to apply)

Use this checklist to implement Coupling consistently. The same rules apply whether input is pointer, touch, stylus, gaze, switch scanning, or remote focus.

Common rules (apply to all components)

Buttons

Icon buttons

Chips / tags

List rows / menu rows

Table rows / data grids

9.5 Implementation proof points (required)

Validate each mode on at least one representative surface:

Pass criteria:

Proof surface A: form trio

Use a text field, primary action, and icon action in one row. This validates mixed-width controls and compact visual chrome.

.cem-proof-form-trio {
  display: flex;
  align-items: center;
  gap: max(var(--cem-gap-related, 0px), var(--cem-coupling-guard-min));
}

.cem-proof-form-trio :is(input, button) {
  min-block-size: var(--cem-coupling-zone-min);
}

.cem-proof-form-trio .cem-icon-button {
  min-inline-size: var(--cem-coupling-zone-min);
  min-block-size: var(--cem-coupling-zone-min);
}

Checks:

Proof surface B: navigation list with trailing actions

Use interactive rows with a trailing action cluster. This validates row affordances plus nested controls.

.cem-proof-nav-list {
  display: grid;
  gap: max(var(--cem-gap-related, 0px), var(--cem-coupling-guard-min));
}

.cem-proof-nav-row {
  min-block-size: var(--cem-coupling-zone-min);
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: center;
  column-gap: max(var(--cem-gap-related, 0px), var(--cem-coupling-guard-min));
}

.cem-proof-nav-actions {
  display: flex;
  gap: max(var(--cem-gap-related, 0px), var(--cem-coupling-guard-min));
}

Checks:

Proof surface C: data table row actions + selection

Use a dense data row with selection and inline row actions. This validates the hardest scan-heavy layout.

.cem-proof-data-row {
  min-block-size: var(--cem-table-row-height);
}

.cem-proof-data-row :is(input[type="checkbox"], button, a) {
  min-inline-size: var(--cem-coupling-zone-min);
  min-block-size: var(--cem-coupling-zone-min);
}

.cem-proof-data-actions {
  display: flex;
  gap: max(var(--cem-gap-related, 0px), var(--cem-coupling-guard-min));
}

Checks:


10. Change management (canonical governance)

11. Token manifest index

Source table Section Description
cem-coupling-minimums §4.1 Hard safety minimums: --cem-coupling-zone-min, --cem-coupling-guard-min, --cem-coupling-halo (mode-invariant safety contract)
cem-coupling-halo-overrides §5.2 Forgiving/compact override values for --cem-coupling-halo only (generator-only; no new tokens)

Generator derivation rules: