Pairing

One markup, two resolutions. The miniature below is rendered twice — the right copy sits under the dark scope, and no line of it changes.

light — the default scope

dark — [data-theme="dark"] on a wrapper

Surfaces

The same semantic names, resolved twice — light values and dark values, side by side, straight from the tokens.

Surfaces

--page-background

--component-background

--section-background

--nested-background

Ink & lines

--text-primary

--text-secondary

--border-default

Left chip resolves in the light scope, right chip in the dark — the pairs are the contract; features pick a name, never a value.