{
  "_about": [
    "Input for ../../_tools/shells-variants.mjs. Hand-edited; the generator only reads it.",
    "Every colour token of a shell has a role (see roles). A theme says what each role becomes, once for light and once for dark:",
    "  neutral     keeps the shell's own lightness, takes the theme's hue h (0-360, OKLCH) at chroma c (0 = grey).",
    "  accent, accent-ink, accent-soft   are replaced by the theme's literal values.",
    "  spread      categorical and decorative colours: lightness kept, chroma multiplied by spread.chroma, hue pulled towards spread.h (pull 0 = all the theme hue, 1 = untouched).",
    "  brand       a large brand-coloured area (the panel of 21 auth): lightness and chroma kept (chroma times spread.chroma), hue set to spread.h.",
    "  status      colours that carry meaning (ok / warn / bad, water and parks on a map) keep their hue: only the chroma is multiplied by status.chroma.",
    "  fixed       left exactly as the shell has it.",
    "Type, radius, gutter and every other non-colour token are never touched.",
    "A token name that is not listed under roles stops the generator, so a new shell cannot be themed by accident."
  ],
  "shells": ["01", "30"],
  "roles": {
    "neutral": ["bg", "bg-2", "surface", "surface-2", "paper", "card", "card-2", "ink", "ink-2", "ink-3", "line", "line-2", "rule", "glass", "glass-strong", "glass-line", "ring-hole", "shadow", "map", "map-line", "map-road", "code-bg", "desk", "tint", "panel-ink"],
    "accent": ["accent", "mine", "unread", "k-mention", "improved"],
    "brand": ["panel"],
    "accent-ink": ["accent-ink", "mine-ink"],
    "accent-soft": ["accent-soft", "unread-bg"],
    "spread": ["accent-2", "blob-1", "blob-2", "blob-3", "c1", "c2", "c3", "c4", "l-bug", "l-feat", "l-doc", "l-ops", "c-work", "c-home", "c-travel", "c-due", "art-a", "art-b", "cover", "icon", "k-review", "k-deploy", "k-alert", "k-billing"],
    "status": ["ok", "warn", "bad", "bad-soft", "online", "note", "map-water", "map-park", "you", "new", "fixed", "paid", "due", "star", "mark", "link", "visited"],
    "fixed": ["knob", "ok-ink", "you-ring", "code-ink", "code-ink-3", "code-c", "code-k", "code-s", "code-f", "code-n"]
  },
  "themes": {
    "ocean": {
      "label": "Ocean",
      "note": "Cool blue-grey neutrals, one deep blue.",
      "light": {
        "neutral": { "h": 245, "c": 0.012 },
        "accent": "#0b5fb8", "accent-ink": "#ffffff", "accent-soft": "#e1ecfa",
        "spread": { "h": 235, "pull": 0.5, "chroma": 1 },
        "status": { "chroma": 1 }
      },
      "dark": {
        "neutral": { "h": 250, "c": 0.022 },
        "accent": "#6cb4ff", "accent-ink": "#06203f", "accent-soft": "#14294a",
        "spread": { "h": 235, "pull": 0.5, "chroma": 1 },
        "status": { "chroma": 1 }
      }
    },
    "ember": {
      "label": "Ember",
      "note": "Warm paper neutrals, burnt orange.",
      "light": {
        "neutral": { "h": 75, "c": 0.014 },
        "accent": "#b23a0e", "accent-ink": "#ffffff", "accent-soft": "#fbe8dd",
        "spread": { "h": 48, "pull": 0.5, "chroma": 1 },
        "status": { "chroma": 1 }
      },
      "dark": {
        "neutral": { "h": 52, "c": 0.014 },
        "accent": "#ff8f5c", "accent-ink": "#2b0f04", "accent-soft": "#3b1e12",
        "spread": { "h": 48, "pull": 0.5, "chroma": 1 },
        "status": { "chroma": 1 }
      }
    },
    "mono": {
      "label": "Mono",
      "note": "No hue at all in the neutrals; ink is the accent, categories are muted.",
      "light": {
        "neutral": { "h": 0, "c": 0 },
        "accent": "#1c1c1c", "accent-ink": "#ffffff", "accent-soft": "#e9e9e9",
        "spread": { "h": 0, "pull": 1, "chroma": 0.4 },
        "status": { "chroma": 0.6 }
      },
      "dark": {
        "neutral": { "h": 0, "c": 0 },
        "accent": "#ededed", "accent-ink": "#151515", "accent-soft": "#2b2b2b",
        "spread": { "h": 0, "pull": 1, "chroma": 0.4 },
        "status": { "chroma": 0.6 }
      }
    }
  }
}
