# Theme management ## Managing themes 1. Go to **Theme** in the admin menu 2. **Activate** — Choose the active theme (stored in `config.json`) 3. **Compile SCSS** — Process SCSS to CSS (forced) 4. **New theme** — Create a custom theme via admin or manually ## Theme structure ``` themes/default/ ├── theme.json # { title, config.default_template, template: layout→.twig } ├── base.twig # Main layout (head, header, nav, breadcrumb, footer) ├── full_content.twig # Layout: full width ├── left_sidebar.twig # Layout: sidebar on the left ├── right_sidebar.twig # Layout: sidebar on the right ├── custom1.twig # Layout: custom ├── guide.twig # Layout: guide with sidebar (Navigation plugin) ├── partials/ # header.twig, navigation.twig, footer.twig └── assets/ ├── scss/theme.scss # SCSS source (only CSS source — manual css/theme.css must not exist) ├── css_compiled/ # Generated by scssphp (read-only, do not edit manually) ├── css/ # External CSS (bootstrap.min.css, bootstrap-icons.css, mobile.css) ├── js/ # app.js, bootstrap.bundle.min.js ├── fonts/ # bootstrap-icons.woff, woff2 └── img/ # favicon, icon, world-map ``` ## theme.json ```json { "title": "default", "config": { "default_template": "full_content" }, "template": { "full_content": "full_content.twig", "left_sidebar": "left_sidebar.twig", "right_sidebar": "right_sidebar.twig", "custom1": "custom1.twig", "guide": "guide.twig" } } ``` - `title` — Display name in admin - `config.default_template` — Default layout for pages without a `layout:` frontmatter - `template` — Mapping from layout name to `.twig` file ## SCSS compilation - `ThemeManager` compiles `assets/scss/theme.scss` at runtime to `assets/css_compiled/theme.css` via scssphp - `css_compiled/` is **read-only** — do not edit manually - `assets/css/theme.css` must **not** exist; otherwise `ThemeManager::getCssUrl()` ignores the SCSS - After SCSS changes: remove `assets/css_compiled/theme.css` and `.mtime` to force recompilation ## Layouts Layouts are chosen via the frontmatter `layout:` key in content files. Unknown layouts fall back to `config.default_template` from `theme.json`. ## guide.twig Special layout for guides. Injects the Navigation plugin into the sidebar for sidebar navigation. Automatically used for pages in the `guide/` folder.