Customer theme skins
A customer installation can optionally restyle the entire admin with one tokens-only CSS file. No admin fork, no per-customer admin build.
How it works
- Author a skin from
customer-theme-skin.template.css— redefine only the design tokens you want, under:root(light) and[data-theme="dark"](dark). Delete the rest. - Ship the file in the customer module (convention:
ui/theme.css). - Set the platform env var
SYNTEC_THEME_CSSto the file's absolute path on the platform host (e.g./app/modules/crm/ui/theme.css). Leave it unset for the default themes.
The platform serves the active skin at GET /api/v1/theme.css (public, ETag-cached;
empty when unset). The admin injects one <link> to it after its default tokens, so
your overrides win. The light/dark toggle is unchanged — both palettes come from the
single file.
Notes
- One file covers both modes (
:root+[data-theme="dark"]). No second request. - Misconfiguration (missing file, non-
.csspath) serves empty CSS — the admin falls back to the default themes, never errors. - Changing the skin is a deployment action (set the env, redeploy).