Cela is a simple, lightweight Zola theme, inspired by Hugo PaperMod.
The style sheet is adapted from Catppuccin. If you like it, please give it a 🌟 on GitHub. Thanks!

en / zh)Cela provides Hexo/Hugo-like tags and categories, compatible with Zola taxonomies. In front matter:
[taxonomies]
tags = ["Rust", "Zola"]
categories = ["Programming"]
or in YAML style:
taxonomies:
tags: ["Rust", "Zola"]
categories: ["Programming"]
Zola taxonomies as recommended are more powerful for structuring your contents. See zola taxonomies for more information.
If you only need installation of the theme, skip to Theme Installation.
Cela is developed and validated against Zola 0.22.1.
For syntax highlighting on Zola 0.22.x, use the nested
[markdown.highlighting] table instead of the older flat
highlight_code setting. See the official configuration docs:
https://www.getzola.org/documentation/getting-started/configuration/
# macOS
brew install zola
# Alpine Linux
apk add zola
# Arch Linux
pacman -S zola
# Docker
docker pull ghcr.io/getzola/zola:v0.22.1Creates your first Zola site.
If myblog already exists but only contains hidden files (like .git), Zola will alswo populate the site.
zola init myblog
# or
# populate the current directory
zola init
Any choices you make during the initialization can be changed later in the config.toml file.
git submodule add https://github.com/edwardzcn-decade/cela themes/cela
git submodule update --init --force --recursive
git submodule sync
Then set the theme in your config.toml file.
theme = "cela"theme in config.toml.[!NOTE]
If you find this project helpful and would like to support its development, see our CONTRIBUTING and CODE_OF_CONDUCT guidelines.
Cela stays a pure static Zola theme:
Node.js is used only for theme development to generate static CSS.
The final CSS stack is split into two layers:
static/css/theme-runtime.css: a thin runtime theme layer for light/dark semantic color variablesstyles/tailwind.css -> static/css/theme.css: the generated Tailwind-controlled main stylesheetThe generated CSS file is committed so downstream theme users still only need Zola. Legacy files are no longer part of the runtime load path.
Install the development dependencies:
npm install
Build the generated CSS once:
npm run build:css
Watch CSS changes during theme development:
npm run watch:css
Validate and build the site:
npm run build:css
zola check
zola buildSee docs/smoke-checklist.md for the baseline routes and interactions to verify after template or CSS changes.
Homepage motion is intentionally scoped to the landing page hero, social icons,
year or section headers, and home post lists. It uses CSS animation plus
IntersectionObserver, and degrades cleanly when JavaScript is disabled or
prefers-reduced-motion is enabled.
Mapping between semantic template class names and their Tailwind token equivalents.
| Class | File | Role | Key Tailwind tokens used |
|---|---|---|---|
.post-single | page.html | Article page container | max-w-main, px-gap |
.search-page | search.html | Search page container | max-w-main, px-gap |
.search-box | search.html | Search input wrapper | — |
.post-entry | post_card.html | Post card | bg-surface, border, shadow-card |
.post-header | page.html, search.html | Page/post header block | — |
.post-title | multiple | Page <h1> title | — |
.entry-header | post_card.html | Card title area | — |
.entry-content | post_card.html | Card summary area | text-content |
.entry-footer | post_card.html | Card meta area | text-muted |
.entry-link | post_card.html | Full-card click overlay | — |
.breadcrumbs | page.html, search.html, robot.html, section_post.html | <nav> breadcrumb trail | text-muted |
.pagination | section_post.html | Prev/next page nav | — |
.pagination .previous | section_post.html | Previous page link | bg-text, text-theme |
.pagination .next | section_post.html | Next page link | bg-text, text-theme |
.footer-credits | home_footer.html | Copyright + powered-by row | text-muted |
.footer-scheme | home_footer.html | Color scheme selector row | text-muted |
#scheme-select | home_footer.html | Color scheme <select> | border, text-muted |
Tailwind token names correspond to keys in
tailwind.config.js→theme.extend.
surface-card, theme-action-button, theme-pill, and link-panel now use Tailwind @apply, and several component styles already consume theme() tokens from tailwind.config.js. Remaining work: continue moving semantic component rules away from raw CSS values where a real Tailwind token exists, while keeping runtime color variables in static/css/theme-runtime.css.share_icons.html partial for optional post share buttons in page.html after include post_nav_links.html. Should be configured in show_share_buttons and disable_share. Status: not started; .share-buttons CSS is still intentionally commented out.tailwind.config.js in favor of @theme blocks in CSS, aligns naturally with the CSS variable architecture, and offers significantly faster build times. Status: future investigation; current tooling remains Tailwind CSS 3.4.MIT