Style variations are theme.json fragments in styles/

6.0 in May reads every JSON file in styles/ as an alternative set of settings and styles, merged over the base.

theme/
  theme.json
  styles/
    dark.json
    compact.json
    high-contrast.json

// each file has the same shape as theme.json, plus a
// title that appears in the editor:
{ "version": 2, "title": "Dark",
  "settings": { "color": { "palette": [...] } } }

The merge is deep, so a variation overriding one palette entry inherits the rest — which is what makes four client sites differing only in colour a single theme with four files. The title has to be translatable and is not by default, which needs the title to be added to the theme’s translation strings separately.