/40), no ad-hoc color-mix in component code. Each derives from a semantic role, so the role map re-tints them like everything else: the glass follows --popover, the washes follow the accent, the scrim follows the background.A tint alone is not glass — it is a tint. Glass is a token plus a backdrop blur, and the blur radius is itself one token (--ambient-blur, currently …). These three classes are the only legal combinations.
--glass-fill over blur(--ambient-blur) saturate(1.5). The one glass recipe: every AI surface wears it, and no ambient surface may define its own blur.
--glass-veil over the same blur. Sits between a heat field and surface content.
--glass-veil-stage over half that blur, saturated further. For a field used as a page ground.
A look that exists as a class is configurable; a look that exists as scattered utilities is folklore. These eleven tokens replaced roughly thirty inline alpha expressions — every one of which had been an invisible design decision nobody could find or change.
Reaching for /50 or a new color-mix in a component is a governance event: either an existing token fits, or the set grows deliberately and is documented here.
Because every token derives from a role, translucency follows the theme automatically — the current accent (blue) and gray family (neutral) are already in the swatches above.