Layouts and shared settings
Section groups, global configuration and page templates.
Wrap page content
layout/theme.html is the default wrapper. Use the exact content placeholder:
<div class="theme" style="background:[[ settings.background ]]">
<template gs-group="header"></template>
<template gs-slot="layout"></template>
<template gs-group="footer"></template>
</div>Do not emit a second HTML document with html, head and body; GrowSite owns the surrounding document. In page JSON choose "layout":"landing" to use layout/landing.html, or "layout":false to disable the theme wrapper. Omission selects theme.
Shared section groups
Create sections/header.json:
{"type":"header","sections":{"main":{"type":"header"}},"order":["main"]}The main instance uses sections/header.html. Its schema still requires a name and can define settings. Sections need presets to be offered for addition. Groups let a common header/footer be edited across pages, rather than duplicating values in every page template.
Saved group overrides live in theme_settings.html.groups. Individual page sections live in the page document. Keep the group section IDs and order list consistent. A new native theme should include global settings so the current Loom settings panel exposes its shared configuration.
Platform navigation, legal information and branding remain platform features. A theme group does not automatically replace all system chrome. Check the installed theme in the actual builder and public renderer for duplicated headers.
Global settings
config/settings_schema.json:
[{"name":"Appearance","settings":[{"type":"color","id":"background","label":"Background","default":"#f4f6ef"},{"type":"font_picker","id":"font","label":"Font","default":"Inter"}]}]config/settings_data.json:
{"current":{"background":"#f4f6ef","font":"Inter"}}Read them as settings.background and settings.font, not section.settings. Customer overrides are stored in theme_settings.html.settings. Global IDs must stay stable; setting a field named accent does not automatically restyle platform buttons. Use the value explicitly in your markup or styles.
Multi-page templates
Add another templates/<name>.json with a title, sections and order, referencing existing definitions. Keep home.json for the catalog entry. A template initializes a page; editing its defaults is not a bulk rewrite of customers' saved content. Verify new sites and existing sites separately when releasing changes.