A theme spent a hundred lines on add_theme_support calls and a stylesheet arguing with the editor, and 5.8 replaced both with one file.
{
"version": 1,
"settings": {
"color": {
"custom": false,
"palette": [
{ "slug": "brand", "color": "#1f6feb", "name": "Brand" },
{ "slug": "ink", "color": "#101418", "name": "Ink" }
]
},
"spacing": { "units": ["px", "rem"] }
}
}
"custom": false removes the arbitrary colour picker entirely, which is the difference between a palette and a suggestion — leaving it on means an editor can pick any hex value and the palette is decoration. The version field is required and is 1 in 5.8; version 2 arrives with 5.9 and renames several keys, so a file written now needs revisiting. The settings block only declares what is available; the styles block applies it.