Skip to content

Inverse Tokens

The problem

In a light theme (direction "down"), content is pushed to darker tones for contrast. But when a surface's tone crosses below 50 (dark enough to be "dark-mode-like"), dark content on a dark surface loses readability. The same happens in reverse for dark themes.

The solution

Systema generates inverse versions for every content and container entity:

  • inv-content -- uses the base direction's hue (so the color character stays the same) but the flipped direction's tone. If normal content goes darker, inv-content goes lighter.
  • inv-containers -- same principle applied to container backgrounds.

When to use inversions

ScenarioUse
Light card on a dark surfaceinv-containers for the card background
White text on a dark buttoninv-content for the text color
Dark overlay with light UI elementsinv-content on overlays
Accessibility mode with forced high contrastinv tokens naturally provide the opposite contrast direction

Inverse collection merging

Direct and inverse tokens now live in the same Figma variable collection, cutting the total number of collections in half. Inverse tokens are distinguished by a path prefix:

PrefixMeaning
inv/Inverse container or content
on-inv/Content computed on an inverse container
inv-on-inv/Inverse content on an inverse container

For example, in the collection default/containers/surfaces-0:

text
idle/c-0/brand          -- direct container token
inv/idle/c-0/brand      -- inverse container token (same collection)

Contrast values

Inverse tokens may show different WCAG contrast ratios than their direct counterparts. This is because the flipped tone direction may hit the gamut ceiling (tone 0 or 100) sooner. The preview shows real measured WCAG contrast for both direct and inverse swatches using Material's Contrast.ratioOfTones().


All rights reserved.