lurelockv1.0

Theming guide

format: JSON extension: .lurelock when packed

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

slotdefaulttouches
accent#a9f387primary highlight, active states
accent_contrast#0b110etext on accent
panel#111a15card and panel fills
panel_raise#16221bhover/raised surfaces
ink#0b110epage background
text#efe7d0body text
text_muted#92a296secondary text
border#23362ahairlines and edges
danger#e0664frejected states
radius10corner 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.