{
"schemaVersion": 2,
"generatedAt": "2026-09-19T21:29:36Z",
"title": "Design System: lodge",
"extensions": {
"colorMeta": {
"survey-green": {
"role": "primary",
"displayName": "Survey Green",
"canonical": "#24694f",
"tonalRamp": [
"oklch(15% 0.081 165)",
"oklch(27% 0.081 165)",
"oklch(38% 0.081 165)",
"oklch(50% 0.081 165)",
"oklch(61% 0.081 165)",
"oklch(73% 0.081 165)",
"oklch(84% 0.081 165)",
"oklch(95% 0.081 165)"
]
},
"curve-red": {
"role": "secondary",
"displayName": "Curve Red",
"canonical": "#b3341f",
"tonalRamp": [
"oklch(15% 0.167 32)",
"oklch(27% 0.167 32)",
"oklch(38% 0.167 32)",
"oklch(50% 0.167 32)",
"oklch(61% 0.167 32)",
"oklch(73% 0.167 32)",
"oklch(84% 0.167 32)",
"oklch(95% 0.167 32)"
]
},
"ochre": {
"role": "tertiary",
"displayName": "Ochre",
"canonical": "#c9a24a",
"tonalRamp": [
"oklch(15% 0.115 85)",
"oklch(27% 0.115 85)",
"oklch(38% 0.115 85)",
"oklch(50% 0.115 85)",
"oklch(61% 0.115 85)",
"oklch(73% 0.115 85)",
"oklch(84% 0.115 85)",
"oklch(95% 0.115 85)"
]
},
"log-paper": {
"role": "neutral",
"displayName": "Log Paper",
"canonical": "#eef0e6",
"tonalRamp": [
"oklch(15% 0.013 116)",
"oklch(27% 0.013 116)",
"oklch(38% 0.013 116)",
"oklch(50% 0.013 116)",
"oklch(61% 0.013 116)",
"oklch(73% 0.013 116)",
"oklch(84% 0.013 116)",
"oklch(95% 0.013 116)"
]
},
"log-paper-2": {
"role": "neutral",
"displayName": "Log Paper 2",
"canonical": "#e3e7d8",
"tonalRamp": [
"oklch(15% 0.020 119)",
"oklch(27% 0.020 119)",
"oklch(38% 0.020 119)",
"oklch(50% 0.020 119)",
"oklch(61% 0.020 119)",
"oklch(73% 0.020 119)",
"oklch(84% 0.020 119)",
"oklch(95% 0.020 119)"
]
},
"ink": {
"role": "neutral",
"displayName": "Ink",
"canonical": "#15211d",
"tonalRamp": [
"oklch(15% 0.019 172)",
"oklch(27% 0.019 172)",
"oklch(38% 0.019 172)",
"oklch(50% 0.019 172)",
"oklch(61% 0.019 172)",
"oklch(73% 0.019 172)",
"oklch(84% 0.019 172)",
"oklch(95% 0.019 172)"
]
},
"ink-2": {
"role": "neutral",
"displayName": "Ink 2",
"canonical": "#46544d",
"tonalRamp": [
"oklch(15% 0.021 164)",
"oklch(27% 0.021 164)",
"oklch(38% 0.021 164)",
"oklch(50% 0.021 164)",
"oklch(61% 0.021 164)",
"oklch(73% 0.021 164)",
"oklch(84% 0.021 164)",
"oklch(95% 0.021 164)"
]
},
"night-survey-green": {
"role": "primary",
"displayName": "Survey Green, night print",
"canonical": "#74caa6",
"tonalRamp": [
"oklch(15% 0.099 165)",
"oklch(27% 0.099 165)",
"oklch(38% 0.099 165)",
"oklch(50% 0.099 165)",
"oklch(61% 0.099 165)",
"oklch(73% 0.099 165)",
"oklch(84% 0.099 165)",
"oklch(95% 0.099 165)"
]
},
"night-curve-red": {
"role": "secondary",
"displayName": "Curve Red, night print",
"canonical": "#f08a74",
"tonalRamp": [
"oklch(15% 0.129 33)",
"oklch(27% 0.129 33)",
"oklch(38% 0.129 33)",
"oklch(50% 0.129 33)",
"oklch(61% 0.129 33)",
"oklch(73% 0.129 33)",
"oklch(84% 0.129 33)",
"oklch(95% 0.129 33)"
]
},
"night-ochre": {
"role": "tertiary",
"displayName": "Ochre, night print",
"canonical": "#d9b45e",
"tonalRamp": [
"oklch(15% 0.113 86)",
"oklch(27% 0.113 86)",
"oklch(38% 0.113 86)",
"oklch(50% 0.113 86)",
"oklch(61% 0.113 86)",
"oklch(73% 0.113 86)",
"oklch(84% 0.113 86)",
"oklch(95% 0.113 86)"
]
},
"night-ground": {
"role": "neutral",
"displayName": "Night Ground",
"canonical": "#162026",
"tonalRamp": [
"oklch(15% 0.018 235)",
"oklch(27% 0.018 235)",
"oklch(38% 0.018 235)",
"oklch(50% 0.018 235)",
"oklch(61% 0.018 235)",
"oklch(73% 0.018 235)",
"oklch(84% 0.018 235)",
"oklch(95% 0.018 235)"
]
},
"night-ground-2": {
"role": "neutral",
"displayName": "Night Ground 2",
"canonical": "#1d2a31",
"tonalRamp": [
"oklch(15% 0.022 232)",
"oklch(27% 0.022 232)",
"oklch(38% 0.022 232)",
"oklch(50% 0.022 232)",
"oklch(61% 0.022 232)",
"oklch(73% 0.022 232)",
"oklch(84% 0.022 232)",
"oklch(95% 0.022 232)"
]
},
"night-ink": {
"role": "neutral",
"displayName": "Night Ink",
"canonical": "#e6eadc",
"tonalRamp": [
"oklch(15% 0.019 120)",
"oklch(27% 0.019 120)",
"oklch(38% 0.019 120)",
"oklch(50% 0.019 120)",
"oklch(61% 0.019 120)",
"oklch(73% 0.019 120)",
"oklch(84% 0.019 120)",
"oklch(95% 0.019 120)"
]
},
"night-ink-2": {
"role": "neutral",
"displayName": "Night Ink 2",
"canonical": "#a5b2a8",
"tonalRamp": [
"oklch(15% 0.020 153)",
"oklch(27% 0.020 153)",
"oklch(38% 0.020 153)",
"oklch(50% 0.020 153)",
"oklch(61% 0.020 153)",
"oklch(73% 0.020 153)",
"oklch(84% 0.020 153)",
"oklch(95% 0.020 153)"
]
},
"rule": {
"role": "neutral",
"displayName": "Rule (ink at 20%)"
},
"grid": {
"role": "neutral",
"displayName": "Depth Grid"
},
"grid-strong": {
"role": "neutral",
"displayName": "Depth Grid, 40px line"
},
"green-wash": {
"role": "neutral",
"displayName": "Green Wash"
},
"red-wash": {
"role": "neutral",
"displayName": "Red Wash"
},
"night-rule": {
"role": "neutral",
"displayName": "Rule, night print"
},
"night-grid": {
"role": "neutral",
"displayName": "Depth Grid, night print"
},
"night-grid-strong": {
"role": "neutral",
"displayName": "Depth Grid 40px line, night print"
},
"night-green-wash": {
"role": "neutral",
"displayName": "Green Wash, night print"
},
"night-red-wash": {
"role": "neutral",
"displayName": "Red Wash, night print"
}
},
"typographyMeta": {
"display": {
"displayName": "Display",
"purpose": "Repository names on the index and the Machines heading; Archivo at 66% width."
},
"headline": {
"displayName": "Headline",
"purpose": "File name above a note; 1.75rem below 56rem."
},
"title": {
"displayName": "Stamp",
"purpose": "Condensed tabular stamp for names, depths and counts, 0.8125rem to 1.75rem."
},
"body": {
"displayName": "Body",
"purpose": "Interface text; meta lines at 0.875rem in ink-2."
},
"prose": {
"displayName": "Prose",
"purpose": "Rendered notes at a 70ch measure."
},
"label": {
"displayName": "Label",
"purpose": "Uppercase field and group names; always names the value or list under it."
},
"mono": {
"displayName": "Mono",
"purpose": "SHAs, keys, paths, commands, code, source and diffs; ligatures off."
}
},
"shadows": [],
"motion": [
{
"name": "ease",
"value": "cubic-bezier(0.16, 1, 0.3, 1)",
"purpose": "The one easing curve, for every transition and the settle reveal."
},
{
"name": "state",
"value": "150ms",
"purpose": "Colour, background, underline and opacity changes on hover and selection."
},
{
"name": "settle",
"value": "600ms clip-path inset(0 0 100% 0) to inset(0)",
"purpose": "A revision arriving over SSE reveals top-down onto the surface. Nothing else animates."
},
{
"name": "reduced-motion",
"value": "1ms",
"purpose": "All transition and animation durations under prefers-reduced-motion."
}
],
"breakpoints": [
{
"name": "bar-compact",
"value": "40rem"
},
{
"name": "machines-stack",
"value": "48rem"
},
{
"name": "rail",
"value": "56rem"
},
{
"name": "sheet-narrow",
"value": "72rem"
}
],
"themes": {
"selector": ".dark",
"customProperties": {
"light": {
"--paper": "#eef0e6",
"--paper-2": "#e3e7d8",
"--ink": "#15211d",
"--ink-2": "#46544d",
"--rule": "rgb(21 33 29 / 0.2)",
"--grid": "rgb(36 105 79 / 0.13)",
"--grid-strong": "rgb(36 105 79 / 0.3)",
"--green": "#24694f",
"--green-wash": "rgb(36 105 79 / 0.12)",
"--red": "#b3341f",
"--red-wash": "rgb(179 52 31 / 0.11)",
"--ochre": "#c9a24a"
},
"dark": {
"--paper": "#162026",
"--paper-2": "#1d2a31",
"--ink": "#e6eadc",
"--ink-2": "#a5b2a8",
"--rule": "rgb(230 234 220 / 0.2)",
"--grid": "rgb(111 199 163 / 0.09)",
"--grid-strong": "rgb(111 199 163 / 0.24)",
"--green": "#74caa6",
"--green-wash": "rgb(116 202 166 / 0.14)",
"--red": "#f08a74",
"--red-wash": "rgb(240 138 116 / 0.14)",
"--ochre": "#d9b45e"
}
}
}
},
"components": [
{
"name": "Text Action",
"kind": "button",
"refersTo": "action-text",
"description": "Default action: green weight-600 text on a 1px rule, wash on hover. No box.",
"html": "",
"css": ".ds-act { font-family: var(--sans); font-size: 1rem; font-weight: 600; padding: 0.125rem 0; color: var(--green); background: none; border: 0; border-bottom: 1px solid currentColor; cursor: pointer; transition: color 150ms var(--ease), background-color 150ms var(--ease); } .ds-act:hover { background: var(--green-wash); } .ds-act:focus-visible { outline: 2px solid var(--red); outline-offset: 2px; }"
},
{
"name": "Text Action, Danger",
"kind": "button",
"refersTo": "action-text-danger",
"description": "Destructive or declining text action in curve red.",
"html": "",
"css": ".ds-act { font-family: var(--sans); font-size: 1rem; font-weight: 600; padding: 0.125rem 0; color: var(--green); background: none; border: 0; border-bottom: 1px solid currentColor; cursor: pointer; transition: color 150ms var(--ease), background-color 150ms var(--ease); } .ds-act:hover { background: var(--green-wash); } .ds-act:focus-visible { outline: 2px solid var(--red); outline-offset: 2px; } .ds-act-danger { color: var(--red); } .ds-act-danger:hover { background: var(--red-wash); }"
},
{
"name": "Solid Action",
"kind": "button",
"refersTo": "action-solid",
"description": "The single primary act of a page: paper text on ink, green on hover.",
"html": "",
"css": ".ds-solid { font-family: var(--sans); font-size: 1rem; font-weight: 600; padding: 0.625rem 1rem; color: var(--paper); background: var(--ink); border: 0; border-radius: 0; cursor: pointer; transition: background-color 150ms var(--ease); } .ds-solid:hover { background: var(--green); } .ds-solid:focus-visible { outline: 2px solid var(--red); outline-offset: 2px; }"
},
{
"name": "Solid Action, Danger",
"kind": "button",
"refersTo": "action-solid-danger",
"description": "Irreversible deletion, enabled only after the name is typed.",
"html": "",
"css": ".ds-solid-danger { font-family: var(--sans); font-size: 1rem; font-weight: 600; padding: 0.625rem 1rem; color: var(--paper); background: var(--red); border: 0; border-radius: 0; cursor: pointer; } .ds-solid-danger:disabled { opacity: 0.5; cursor: default; } .ds-solid-danger:focus-visible { outline: 2px solid var(--red); outline-offset: 2px; }"
},
{
"name": "Field",
"kind": "input",
"refersTo": "field",
"description": "Underlined input: 2px ink rule that turns curve red on focus.",
"html": "",
"css": ".ds-label { display: block; font-family: var(--sans); font-size: 0.75rem; font-weight: 500; font-stretch: 80%; color: var(--ink-2); text-transform: uppercase; letter-spacing: 0.06em; } .ds-field { width: 100%; padding: 0.5rem 0; font-family: var(--mono); font-size: 0.8125rem; color: var(--ink); caret-color: var(--red); background: transparent; border: 0; border-bottom: 2px solid var(--ink); border-radius: 0; } .ds-field::placeholder { color: var(--ink-2); } .ds-field:focus-visible { outline: none; border-bottom-color: var(--red); }"
},
{
"name": "Top Bar",
"kind": "nav",
"refersTo": "top-bar",
"description": "3rem bar: condensed wordmark, section links with a red underline on the current one, plain tools on the right.",
"html": "