# weirsoe-theme
A tiny, framework-agnostic dark/light **design system** — the look from
[asger.weirsøe.dk](https://asger.weirsøe.dk), extracted so it can be reused
across sites.
- **Card-based**, deep-navy surfaces with a subtle blue/indigo glow.
- **Three palettes**: `dark` (default), `light`, `terminal` (green CRT).
- **Pure CSS**, **system fonts** by default → great TTFB, **no external
requests, no trackers, no build step**.
- Use the **CSS variables** directly, the **`.wt-*` components**, or the
**Bulma adapter** to theme an existing Bulma site without touching markup.
## Files
| File | What |
|---|---|
| `weirsoe-theme.css` | Tokens (`--color-*`) + base (glow, selection, transitions) + `.wt-card/.wt-btn/.wt-input/.wt-tag` + `.prose` + theme-toggle styles |
| `weirsoe-theme.js` | Persisted dark⇄light toggle + a no-flash snippet |
| `adapters/bulma.css` | Maps Bulma classes → tokens (for Bulma sites) |
| `examples/demo.html` | Standalone preview |
## Quick start (vanilla)
```html
Et kort
Med weirsoe-theme.
```
## Theming an existing Bulma site
Load the adapter **after** Bulma and **after** `weirsoe-theme.css`:
```html
```
Your existing `.box`, `.button`, `.input`, `.tag`, `.navbar`… are now dark and
card-styled. `wish.weircon.dk` (Christmas-Community fork) consumes it this way.
## Tokens
`--color-bg --color-surface --color-surface-2 --color-surface-3 --color-border
--color-text --color-muted --color-accent --color-accent-2 --color-accent-ink
--color-good --color-bad`, plus `--wt-radius --wt-radius-sm --wt-shadow
--wt-shadow-hover --wt-font-sans --wt-font-mono`.
Override any of them in your own `:root` to re-skin without forking.
## Theme switching
Set `data-theme` on ``: `dark` (default), `light`, or `terminal`.
`weirsoe-theme.js` wires any `[data-theme-toggle]` button to cycle dark⇄light and
persists the choice in `localStorage` (`wt-theme`). For a 3-way picker call
`weirsoeTheme.set('terminal')`.
## Notes
- Want pixel-exact Inter (like asger.weirsøe.dk)? Self-host
`@fontsource-variable/inter` and set `--wt-font-sans: "Inter Variable", …`.
The default system stack is used to keep TTFB optimal and avoid font requests.
- Source: the design originated in `agw/asger-web` (`src/styles/global.css`).