Which master components in the WEB Design System are fully tokenised, which have gaps, and what v3 needs to add or rewire. Derived from the 9 brand instances in the Token Explorations file — if a fill/radius comes through as a variable in get_variable_defs for all brands, it's tokenised; if it varies without an explaining token, it's a literal.
pill.surface / pill.on-surface / pill.border; today pills borrow from Sub Menu/* or Main/Badge, causing cross-brand drift.Components are from WEB Design System (Brandtokens) — library key lk-46d42c00…. Findings below are observed via brand-instance variable resolution, not direct master inspection (master files sit in a separate library and are read-only from this vantage point).
Fill = Main/Primary, label = Main/On-Primary, radius = Extras/CTA Radius. All 9 brands resolve cleanly. Secondary / tertiary button variants use Main/Surface-1-Sidebar and Main/Text — all tokenised.
Three fills: leading icon (Main/Icons), label (Main/Text), trailing chevron (Main/Action-Icons). All tokenised — but the master binds leading icon and chevron to two different semantic tokens, not to aliased component tokens. That means marketing designers who want to split them must first understand the whole semantic layer.
menu-row.icon → color.icon.descriptive and menu-row.action → color.icon.action. Master repointed to these aliases; designers flip them in brand mode.No pill.* semantic family exists. Today the Pill component reaches for Sub Menu/* (default/selected colours) or for Main/Badge and Lobby Header/Surface-Secondary depending on the instance. That's why pills look different across brands in ways the brand team didn't plan.
pill.surface, pill.on-surface, pill.border, pill.surface.selected, pill.on-surface.selected, and use Extras/Pill Radius (already exists, resolves correctly).Lives in its own namespace (Lobby Header/Background, Surface-1, Surface-2, Surface-Primary, Surface-Secondary, On-Surface-1/2/Primary/Secondary, Text, Active-Selected, IOS-Bar). All 9 brands resolve independently.
Main/* — if so it'll pick up the page-primary rather than the header-primary and break snabbare's blue-header-green-brand split.Bottom Navbar/Background, Default, Selected-Icon, Selected-Text. All 9 brands resolve. The only brand that splits Selected-Icon ≠ Selected-Text today is reviant-A — no action needed beyond documenting the split as intentional.
Banner/Background and Banner/Stroke tokens exist per brand. Stroke is #00000000 on 8 brands, #ff4655 on reviant-B (the only brand with a visible banner border).
banner.surface / banner.stroke as-is; add banner.overlay and banner.on-surface so marketing can re-skin hero cards without forking.Already has its own mini-collection: Landing/Primary CTA, On-Primary CTA, Secondary CTA, On-Secondary CTA, Icon CTA (tertiary outline), On-Icon CTA, Tag, On-Tag, Text. Extras/CTA Radius and Extras/Pill Radius resolve per brand. This is the cleanest part of the system today.
Landing/Tag as its own role, not an alias to primary.Not a dedicated component — appears inline in Section headers on Casino Lobby. Today the label uses Main/Text-Primary and the chevron uses Main/Action-Icons; fine, but the pattern isn't named, so designers don't realise the divergence is expected.
Main/Badge exists per brand (values: #f02884 / #ef7171 / #c2185b / #c3ff00 / #ffee00 / #e26591 / #e71f00 / #ffffff / #5330ff). But there's no badge.radius, badge.on-surface, or badge.border. Currently the badge component inherits badge-surface and invents on-surface.
badge.surface (alias to Main/Badge), add badge.on-surface, badge.radius.Not visible in the 9 sampled screens, but user reported that rounded-corners "differ between brands" and some brands use square modals (reviant-B). Likely uses Extras/Card Radius today which is wrong — a card radius of 12 on modals that want sharp edges would get overridden inline.
radius.modal with per-brand values, independent of Card radius.Extras/Input Radius is already independent of CTA / Card / Nav radius. reviant-B sets it to 0 while Card is also 0; most other brands set it to 3. Fills route through Main/Background-Sidebar and Main/Text.
Sub Menu/Background, Default, On-Default, Selected, On-Selected all resolve. But these tokens are currently also being borrowed by pills (as noted above). v3 should make these strictly sub-menu-scoped and let Pill get its own family.
What I can verify from here vs. what has to happen inside Figma.
get_design_context on the Pill and Menu Item masters to confirm literal hexes vs. tokens — needs the master file keys from the Library.get_variable_defs on every brand-instance permutation to catch silent drift.pill.*, badge.*, radius.modal, banner.overlay/on-surface).menu-row.*, view-all.*, nav.selected-*).Sub Menu/* to the new pill.* tokens.