Theming guide
A theme is a single JSON file. It maps Lurelock's known slots to override values, which the manager applies to the client's shared UI at stamp time (or live, in the preview pane). Themes only change what the flag list calls aesthetics — they never touch behaviour.
01Shape
{
"id": "brimnight",
"name": "Brimnight",
"version": "1.0.0",
"slot_format": 1,
"slots": {
"accent": "#a9f387",
"accent_contrast": "#0b110e",
"panel": "#111a15",
"panel_raise": "#16221b",
"ink": "#0b110e",
"text": "#efe7d0",
"text_muted": "#92a296",
"border": "#23362a",
"danger": "#e0664f",
"radius": 10
}
}
Unknown keys are ignored with a warning — old themes keep working against new slot sets.
02The keys
| slot | default | touches |
|---|---|---|
| accent | #a9f387 | primary highlight, active states |
| accent_contrast | #0b110e | text on accent |
| panel | #111a15 | card and panel fills |
| panel_raise | #16221b | hover/raised surfaces |
| ink | #0b110e | page background |
| text | #efe7d0 | body text |
| text_muted | #92a296 | secondary text |
| border | #23362a | hairlines and edges |
| danger | #e0664f | rejected states |
| radius | 10 | corner radius for cards |
Colors are #rrggbb or #rrggbbaa. The `radius` slot is a number, 0–24.
03Live preview
In the manager's Look page, a live pane renders the current instance's UI using the active theme before you commit. Press Ctrl+Enter to apply it to the whole instance.
04Packing & import
The manager can pack the active theme into a .lurelock zip (the JSON at the root). Import validates slot_format and normalizes colors; a theme with an invalid accent is imported with the slot dropped rather than the whole file rejected — failures are per-slot, never total.
05Manifest notes
Themes are stamped like mods and tracked in the same instance manifest, but they also feed the appearance pane directly. When a theme changes, the stamp diff is computed against the manifest — only changed files are rewritten, and unchanged originals are never copied twice.