{
  "$comment": "Lucian Labs brand tokens. Machine-readable mirror of the look specs (console.md, house-pour.md, punch-clock.md, field-notes.md). Agents: read AGENT.md first — https://lucianlabs.ca/branding/AGENT.md",
  "version": "1.1.0",
  "shared": {
    "monospace": "Inconsolata",
    "monospaceStack": "'Inconsolata', 'IBM Plex Mono', monospace",
    "monospaceException": "field-notes uses Fira Code — part of the blog identity it was extracted from, see field-notes.md",
    "motion": {
      "duration": "150ms",
      "easing": "ease",
      "animatableProperties": ["color", "background-color", "border-color", "opacity", "filter"],
      "forbidden": ["entrance animation on page load"],
      "note": "Transforms are per-look, not universal — see each look's motion rules. Console and House Pour have none of consequence; Punch Clock springs on press by design."
    },
    "boundary": "Every edge is var(--line) at the look's border width — 1px in console and house-pour, 2px in punch-clock.",
    "banned": {
      "fonts": ["Inter", "Poppins", "Nunito", "Montserrat", "ui-monospace", "SFMono-Regular", "Menlo"],
      "colors": ["#6366f1", "#8b5cf6", "#a855f7", "purple-to-pink gradient"],
      "patterns": [
        "emoji in UI text",
        "multi-stop gradient on text or buttons",
        "rounded-2xl + shadow-lg card stack",
        "centered hero + three feature cards + CTA band",
        "more than one accent hue per view"
      ],
      "copy": ["seamlessly", "effortlessly", "powerful", "beautiful", "Get Started", "Welcome back", "Oops", "exclamation marks"]
    }
  },
  "looks": {
    "console": {
      "name": "Console",
      "slug": "console",
      "origin": "WaveLoop / Choppa",
      "mood": "instrument panel at 2am — dark, precise, sharp-cornered, nothing decorative",
      "useFor": ["audio tools", "dashboards", "dev tools", "monitors", "editors", "live state", "numeric readouts"],
      "spec": "https://lucianlabs.ca/branding/console.md",
      "stylesheet": "https://lucianlabs.ca/branding/console.css",
      "reference": "https://lucianlabs.ca/branding/console.html",
      "tokens": {
        "--bg": "#101014",
        "--bg-deep": "#07080d",
        "--panel": "rgb(17 20 30 / 88%)",
        "--panel-solid": "#111420",
        "--ink": "#eaecf2",
        "--muted": "#aaafbd",
        "--faint": "#6b7185",
        "--line": "#383c4a",
        "--line-soft": "rgb(56 60 74 / 55%)",
        "--accent": "#397fd9",
        "--accent-2": "#ffa40a",
        "--good": "#4db378",
        "--bad": "#e6404d",
        "--radius": "0",
        "--font-display": "'Micro 5', monospace",
        "--font-body": "system-ui, -apple-system, 'Segoe UI', sans-serif",
        "--font-mono": "'Inconsolata', 'IBM Plex Mono', monospace"
      },
      "rules": {
        "radius": "0 on everything, no exceptions",
        "shadow": "none — depth comes from hairlines and panel translucency",
        "accentBudget": "one accent-carrying element per view; --accent-2 (gold) only for record/armed/destructive-live state",
        "backdrop": "radial blue + amber wash on the page background only",
        "labels": "uppercase, 0.06–0.08em tracking, --font-display"
      },
      "fonts": [
        { "family": "Micro 5", "role": "display", "source": "https://fonts.googleapis.com/css2?family=Micro+5&display=swap" },
        { "family": "Inconsolata", "role": "mono", "source": "https://fonts.googleapis.com/css2?family=Inconsolata:wght@400;600&display=swap" }
      ]
    },
    "house-pour": {
      "name": "House Pour",
      "slug": "house-pour",
      "origin": "DrinkTix",
      "mood": "letterpressed card on ivory stock — warm, quiet, expensive",
      "useFor": ["events", "menus", "kiosks", "checkout", "invitations", "guest-facing single-session apps"],
      "spec": "https://lucianlabs.ca/branding/house-pour.md",
      "stylesheet": "https://lucianlabs.ca/branding/house-pour.css",
      "reference": "https://lucianlabs.ca/branding/house-pour.html",
      "tokens": {
        "--bg": "#f7f5ef",
        "--bg-2": "#f1eee6",
        "--panel": "#fffefa",
        "--ink": "#262319",
        "--muted": "#71695a",
        "--faint": "#a79f8d",
        "--line": "rgba(38, 35, 25, 0.11)",
        "--line-2": "rgba(38, 35, 25, 0.2)",
        "--accent": "#a4813b",
        "--accent-2": "#c9a961",
        "--accent-soft": "rgba(164, 129, 59, 0.14)",
        "--good": "#3c7a52",
        "--bad": "#a03d38",
        "--radius": "16px",
        "--radius-pill": "999px",
        "--font-display": "'Cormorant Garamond', Georgia, serif",
        "--font-body": "'Avenir Next', Avenir, -apple-system, sans-serif",
        "--font-mono": "'Inconsolata', 'IBM Plex Mono', monospace",
        "--font-brand": "'Kaushan Script', cursive"
      },
      "rules": {
        "radius": "16px on cards and inputs, 999px on buttons and pills, nothing else",
        "shadow": "one long soft shadow on raised surfaces: 0 1px 2px rgba(38,35,25,.04), 0 14px 34px -18px rgba(38,35,25,.18)",
        "accentBudget": "gold carries one primary action per view plus numeric totals; everything else is ink or muted",
        "backdrop": "faint gold + violet radial wash over a warm ivory gradient",
        "labels": "uppercase, 0.18–0.22em tracking, --font-body at 0.66rem, section headings trail a hairline rule"
      },
      "fonts": [
        { "family": "Cormorant Garamond", "role": "display", "source": "https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,500;0,600;0,700;1,500&display=swap" },
        { "family": "Kaushan Script", "role": "wordmark", "source": "https://fonts.googleapis.com/css2?family=Kaushan+Script&display=swap" },
        { "family": "Inconsolata", "role": "mono", "source": "https://fonts.googleapis.com/css2?family=Inconsolata:wght@400;600&display=swap" }
      ]
    },
    "punch-clock": {
      "name": "Punch Clock",
      "slug": "punch-clock",
      "origin": "Time Warrior",
      "mood": "an LED readout bolted to a steel box — one number rules the screen, a binary state says whether it's moving",
      "useFor": ["timers", "trackers", "counters", "meters", "money clocks", "streak apps", "anything that punches in and out"],
      "spec": "https://lucianlabs.ca/branding/punch-clock.md",
      "stylesheet": "https://lucianlabs.ca/branding/punch-clock.css",
      "reference": "https://lucianlabs.ca/branding/punch-clock.html",
      "tokens": {
        "--bg": "#0e0e10",
        "--panel": "#1a1a1e",
        "--panel-2": "#232329",
        "--line": "#33333a",
        "--ink": "#ededf0",
        "--dim": "#666666",
        "--green": "#3fcc60",
        "--red": "#cc4040",
        "--cyan": "#5fb5ff",
        "--orange": "#cc8020",
        "--accent": "var(--green)",
        "--border": "2px",
        "--radius": "0",
        "--font-display": "'Micro 5', monospace",
        "--font-body": "'Finlandica', ui-sans-serif, system-ui, sans-serif",
        "--font-mono": "'Inconsolata', 'IBM Plex Mono', monospace"
      },
      "rules": {
        "radius": "0 everywhere; the attention orb is the single deliberate circle",
        "border": "2px on every border, divider, table rule and input — dropping to 1px turns this into console",
        "shadow": "none — flat opaque panels, no blur, no translucency",
        "hero": "exactly one figure at 84px Micro 5 (60px under 640px); everything else on the page is 30px or smaller",
        "signalBudget": "no one-accent cap — instead, every coloured element must map to a state the user can name. green = money/running, red = stop/delete, cyan = focus, orange = owed/warning",
        "numerals": "every number the user watches is Micro 5, tabular; prose and labels are Finlandica and never take the display face",
        "labels": "lowercase, dim, tracked 0.04–0.18em; section headings stay small so the hero figure dominates"
      },
      "motion": {
        "press": "scale(0.96) + opacity dip, spring back ~0.2s — the one house look where an :active transform is correct",
        "livePixel": "8px square breathing 0.35→1 opacity over 0.9s ease-in-out alternate; square, never round",
        "odometer": "live numerals roll rather than cut",
        "orb": "13px circle, 1.7s expanding ping; at most one, only to summon the user"
      },
      "nativeParity": {
        "path": "time-warrior/apps/mac/Sources/TimeWarriorBar/Theme.swift",
        "note": "SwiftUI port mirrors these tokens (panel(), field(), BrandButtonStyle, PulseSquare, Tile). Known drift: --dim is #666 on web and #cfcfd6 in Theme.swift; web is canonical until reconciled."
      },
      "fonts": [
        { "family": "Micro 5", "role": "display", "source": "https://fonts.googleapis.com/css2?family=Micro+5&display=swap" },
        { "family": "Finlandica", "role": "body", "source": "https://fonts.googleapis.com/css2?family=Finlandica:wght@400;500;600&display=swap" },
        { "family": "Inconsolata", "role": "mono", "source": "https://fonts.googleapis.com/css2?family=Inconsolata:wght@400;600&display=swap" }
      ]
    },
    "field-notes": {
      "name": "Field Notes",
      "slug": "field-notes",
      "origin": "lucianlabs.ca/blog",
      "mood": "a reading lamp over a dark desk — serif prose on plum-black, amber headings, lavender in the margins",
      "useFor": ["blogs", "essays", "writeups", "build logs as narrative", "documentation that argues", "changelogs with a point of view"],
      "spec": "https://lucianlabs.ca/branding/field-notes.md",
      "stylesheet": "https://lucianlabs.ca/branding/field-notes.css",
      "reference": "https://lucianlabs.ca/branding/field-notes.html",
      "tokens": {
        "--bg": "#171519",
        "--panel": "#13111a",
        "--panel-2": "#1c1820",
        "--chip": "#221e2a",
        "--ink": "#d0ccd4",
        "--bright": "#ffffff",
        "--strong": "#e0dce4",
        "--soft": "#b8b0c0",
        "--muted": "#9990a0",
        "--faint": "#776e80",
        "--dim": "#554e5c",
        "--ghost": "#3a3440",
        "--line": "#2a2630",
        "--accent": "#e8a020",
        "--accent-2": "#c4a0d0",
        "--radius": "6px",
        "--radius-sm": "3px",
        "--font-display": "'Exo 2', sans-serif",
        "--font-body": "'Source Serif 4', Georgia, serif",
        "--font-mono": "'Fira Code', 'IBM Plex Mono', monospace"
      },
      "rules": {
        "radius": "6px on blocks, 3px on inline chips, nothing else",
        "shadow": "none — the only glow is text-shadow on reveal (h1, hovered post titles)",
        "accentBudget": "amber belongs to the text itself — links, h2, inline code, attribution; lavender only at the edges — hovers, curator, sign-off name, filed spines. They never trade jobs.",
        "type": "18px root and 1.8 leading are load-bearing; body is never pure white, h1 always is",
        "monospace": "Fira Code — the one exception to the house Inconsolata rule, inherited from the blog",
        "motion": "0.3s ease on color, border, padding, text-shadow; no transforms, nothing on load"
      },
      "fonts": [
        { "family": "Exo 2", "role": "display", "source": "https://fonts.googleapis.com/css2?family=Exo+2:wght@400;700&display=swap" },
        { "family": "Source Serif 4", "role": "body", "source": "https://fonts.googleapis.com/css2?family=Source+Serif+4:ital,wght@0,400;0,600;1,400&display=swap" },
        { "family": "Fira Code", "role": "mono", "source": "https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;500&display=swap" }
      ]
    }
  }
}
