fix(layout): align color scheme, content width and fonts with reference theme

- Color scheme: zibll field order/labels, theme_skin_custom overrides palette,
  hex palette swatches, dark_theme_skin_custom, light/dark background images,
  close_backdrop via body.fps-accelerat, theme_main_radius drives --main-radius
- Emit --theme-color / --focus-shadow-color / --focus-color-opacity* vars
- Drop border_radius, primary_color readers and legacy value maps
- Content max width: free 1200-2200 number field; fix font family/custom stack

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
kate522andClaude Fable 5 committed 2026-10-28 19:36:11 +08:00
1 parent 6da08d9d4f
commit 74021d26bb
8 files changed
+319 -221

No files matched your search

@@ -865,14 +865,14 @@ test('content max width is one contract from admin option to runtime var', () =>
const themeSearch = read('src/Settings/ThemeSearch.php');
const builder = read('src/Frontend/InlineStyleBuilder.php');
// Every width the settings UI offers must pass REST validation, or the save is
// rejected and the rendered width silently keeps the previous value.
const pxOptions = [...layoutSchema.matchAll(/value: (\d+) \}/g)].map((match) => Number(match[1]));
assert.ok(pxOptions.includes(1200));
assert.ok(pxOptions.includes(2200));
const schemaMax = Number(globalSchema.match(/'container_max_width'[\s\S]*?'max' => (\d+)/)[1]);
assert.equal(schemaMax, Math.max(...pxOptions));
assert.match(globalSchema.match(/'container_max_width'[^\n]*/)[0], /'min' => 0/);
// Free number input (zibll layout_max_width parity): UI range, REST validation
// and runtime clamp must agree, or saves are rejected / silently clamped.
const vueField = layoutSchema.match(/key: 'container_max_width'[^\n]*/)[0];
assert.match(vueField, /type: 'number'/);
assert.match(vueField, /min: 1200, max: 2200, step: 50/);
const phpField = globalSchema.match(/'container_max_width'[^\n]*/)[0];
assert.match(phpField, /'type' => 'number'/);
assert.match(phpField, /'min' => 1200, 'max' => 2200, 'step' => 50/);
assert.match(themeSearch, /max\(1200, min\(2200, \$width\)\)/);
assert.match(builder, /'--container'\s*=> \$content_width/);