Dark mode · Figma variables

Dark tokens: what to change in Figma

Everything below is named exactly as it appears in your Figma variables (dark/… for semantic tokens, Family/Name for primitives). Two groups: (1) tokens pointing at a colour outside the approved 34, and (2) duplicate variables to fold in, plus the roles that need a brand-new token.

Nothing has been changed in Figma. This is the change-list only. The component / code side is the engineering migration and is handled separately, so this page stays purely about your variables.
Group 1

Tokens pointing at a non-approved primitive

14 dark tokens alias to 9 primitives that aren't in the approved 34. For each: add that primitive to the approved palette, or re-alias the token to an approved one.

Dark token (Figma)Aliases toValueWhat to change
dark/bg/pageNeutral/975#030F1AAdd Neutral/975 to the palette, or re-alias to Slate/Slate-900
dark/bg/successGreen/Green-900#236C18Add Green-900, or re-alias to Green/Green-800
dark/bg/errorRed/Red-900#470E00Add Red-900, or re-alias to Red/Red-800
dark/bg/warningYellow/Yellow-900#332D00Add Yellow-900, or re-alias to Yellow/Yellow-800
dark/text/secondary, dark/icon/secondaryNeutral/300#C9D1D9Re-alias to Slate/Slate-300
dark/text/inverse, dark/icon/inverseNeutral/900#0D1117Re-alias to Slate/Slate-900
dark/text/brand, dark/icon/brand, dark/feedback/infoBlue/Blue-400#8CA1EERe-alias to Blue/Blue-300
dark/text/warning, dark/feedback/warningYellow/Yellow-300#FFEF75Re-alias to Yellow/Yellow-400
dark/feedback/pendingYellow/Yellow-200#FFF5ABRe-alias to Yellow/Yellow-400

The 4 deep surface tints (Add) have no close approved match, so they likely need adding to the palette. The other 5 (Re-alias) each have a near-identical approved stop.

Group 2

Extra dark variables, and the gaps

Your live Semantic Dark collection holds more than the 36 canonical tokens. Two parts: fold the duplicates into a canonical token, and add a token for the roles the 36 don't cover.

2A Duplicate variables to fold into a canonical token

Each of these resolves to the same value as a canonical token, so point it at (or retire it for) the canonical one.

Extra Figma variableFold into
Surfaces
dark/bg/raised-disabled, dark/bg/disabled, dark/bg/inset, dark/bg/inset-disableddark/bg/page-subtle
dark/bg/glassdark/bg/raised
dark/bg/inverse-muteddark/bg/inverse
dark/bg/infodark/feedback/info
Text
dark/text/on-filldark/text/inverse
dark/text/infodark/feedback/info
Icons
dark/icon/tertiary, dark/icon/disableddark/icon/secondary
dark/icon/on-filldark/icon/primary
dark/icon/successdark/feedback/success
dark/icon/errordark/feedback/error
dark/icon/warningdark/feedback/warning
dark/icon/infodark/feedback/info
Borders
dark/border/disableddark/border/subtle
dark/border/warningdark/feedback/warning
dark/border/infodark/feedback/info
Actions
dark/action/secondary-borderdark/action/primary
dark/action/disabled-textdark/text/disabled

2B Roles the 36 don't cover — add a new token

These can't fold into anything because the 36 have no equivalent. Each is one new variable decision.

Missing roleToday in FigmaDecision
Transparentdark/overlay/transparent onlyAdd a proper dark/transparent token (or accept the literal).
Overlay / scrimdark/overlay/light, /medium, /heavy (all currently the opaque page colour)Define a real translucent scrim value, or confirm modals use the opaque page.
GlassNo semantic token; uses the Glass/* primitivesAdd a translucent dark/bg/glass value (today it just equals raised), or keep glass as primitives.
Chart paletteNo tokens; charts use raw Blue/*, Neutral/* primitivesAdd chart-series tokens so charts stop reaching into primitives.
Also your call (not in the 36): the product variables dark/product/number/*, /entity/*, /deal/*, /badge/*, /premium/*. Keep them as a separate product layer, or drop them. They're domain colours, so they sit outside the core set either way.