Two themes ship out of the box. Add your own in themes.css.
Loop ships with two themes out of the box and a token system that makes adding your own a five-minute job.
By default the template includes:
Visitors can switch themes from the header toggle, and their choice persists across reloads via a cookie.
Every color is a CSS custom property defined per theme in src/styles/themes.css. Components never hardcode a hex value — they reference a token.
:root[data-theme="light"] {
--bg: #ffffff;
--fg: #0c0d10;
--accent: #5b5bd6;
--border: #e6e6ea;
--card-bg: #ffffff;
--card-fg: #0c0d10;
--card-line: #ececf1;
}
:root[data-theme="dark"] {
--bg: #0c0d10;
--fg: #f4f4f6;
--accent: #8b8bf0;
--border: #23242b;
--card-bg: #14151a;
--card-fg: #f4f4f6;
--card-line: #23242b;
}
:root[data-theme="…"] block in themes.css.data-theme="midnight".Cards use a dedicated set of tokens — --card-bg, --card-fg, and --card-line — so they read correctly on every theme, including darker palettes where a plain --bg would disappear.
Don't want runtime theme switching? Delete the toggle component from the header and hardcode data-theme on the <html> element. The token system keeps working without it.