Theme packages, follow vs fork, and how a site binds one.
A theme is a versioned package of EJS (templates, partials), compiled CSS per skin, JS islands, and a manifest. A site that binds a theme is in the follow state: it renders the theme's files directly, no copies.
Customize on any theme entry forks it — copy-on-write into the site's own tree at the same relative path, which is what makes the fork shadow the theme original (resolution walks site files first, theme package second, per file). Reset deletes the fork and the site follows the theme again.
The same chain powers require() between templates: a theme file that
requires ./header.ejs picks up the site's fork of header.ejs when one
exists.
A theme ships one CSS build per skin; the site picks a skin and templates
receive theme_skin plus the resolved stylesheet chain. Bundle-based
themes can layer a <skin>-skin.css override.
Sites can publish to static output — the same rendered pages, serveable without the app — with a static-vs-live toggle per site. See the publish pipeline notes in Themes — design record and Deployment — operations record.
Themes — design record — the package format, variant/skin resolution, and the follow-state contract.