# Theme Preset Schema — v0.6.0 A theme preset is a **bundle of design tokens** (colors, gradients, fonts) that an operator can apply to a site in one click. It's a gallery entry (discoverable via `/api/agent/cms-widgets`) but it isn't a "widget" — it's a `theme-bundle` atom type. ## Discovery Theme presets live at `/opt/vibecoder-bridge/cms-widgets/theme-presets/{slug}/` and are auto-included by `cms-widgets-registry.cjs` (any dir with `kind: "theme-bundle"` in module.json). `GET /api/agent/cms-widgets?kind=theme-bundle` returns the list. The existing endpoint already supports `?kind=` filtering (it was added in v0.4.x as a generic filter). ## Module shape ```json { "id": "coral-sunset", "kind": "theme-bundle", "name": "Coral Sunset", "version": "0.1.0", "atom_type": "theme-bundle", "provenance": { ... standard provenance ... }, "evolution": { ... standard ... }, "dependencies": { "tools": ["color-picker", "gradient-picker", "font-picker"], "widgets": [], "runtime": "fv-cms-runtime@^0.5.0", "fvw": "^8.3.0" }, "interface": { "inputs": [ { "name": "applyTo", "type": "string", "description": "Selector to apply (e.g. 'page', '.e-section-1', '#hero')" } ], "outputs": [ { "name": "tokens", "type": "object", "description": "The applied CSS variables as {name: value}" }, { "name": "css", "type": "string", "description": "Ready-to-inject CSS string" } ] }, "value": { "colors": { "background": "#FDF8F3", "surface": "#FFFFFF", "text": "#2D1810", "muted": "#8B7355", "primary": "#FF6B4A", "accent": "#F7931E", "border": "#F4E8DD" }, "gradient": { "type": "linear", "angle": 135, "stops": [ { "pos": 0, "color": "#FF6B4A" }, { "pos": 50, "color": "#F7931E" }, { "pos": 100, "color": "#FDF8F3" } ] }, "fonts": { "heading": { "family": "Inter", "weight": 700, "size": 32 }, "body": { "family": "Inter", "weight": 400, "size": 16 }, "code": { "family": "JetBrains Mono", "weight": 400, "size": 14 } } }, "template": "