{ "schemaVersion": 2, "generatedAt": "2026-09-02T22:42:36Z", "title": "Design System: Fiesta", "extensions": { "colorMeta": { "bg": { "role": "neutral", "displayName": "Page", "canonical": "light-dark(#fbfbfc, #0c0d0f)", "tonalRamp": [ "#0b0d10", "#111418", "#1a1f26", "#2a3038", "#4b5563", "#9aa2ad", "#d7dbe0", "#ffffff" ] }, "surface": { "role": "neutral", "displayName": "Surface", "canonical": "light-dark(#ffffff, #141518)", "tonalRamp": [ "#0e1116", "#141820", "#1a1f26", "#2a3038", "#525a66", "#9aa2ad", "#e3e6ea", "#ffffff" ] }, "surface-2": { "role": "neutral", "displayName": "Surface Sunken", "canonical": "light-dark(#f3f3f5, #18191d)", "tonalRamp": [ "#0b0e12", "#15191f", "#1f242b", "#2f353d", "#565d67", "#9ba2ab", "#dfe2e5", "#f6f7f8" ] }, "line": { "role": "neutral", "displayName": "Hairline", "canonical": "light-dark(#e6e6ea, #26282e)", "tonalRamp": [ "#14171c", "#2a3038", "#3b424c", "#59616c", "#7f8792", "#adb3bc", "#e5e7eb", "#f7f8f9" ] }, "line-strong": { "role": "neutral", "displayName": "Control Edge", "canonical": "light-dark(#868691, #71737c)", "tonalRamp": [ "#181b20", "#2b3038", "#414852", "#5b636e", "#7f8792", "#a5abb4", "#cbcfd5", "#eceef0" ] }, "text": { "role": "neutral", "displayName": "Ink", "canonical": "light-dark(#18181b, #ededf0)", "tonalRamp": [ "#0a0c0e", "#1a1d21", "#2e333a", "#4b5563", "#727a86", "#a3aab4", "#cfd4d9", "#e8eaed" ] }, "text-muted": { "role": "neutral", "displayName": "Ink Muted", "canonical": "light-dark(#52525c, #a1a1aa)", "tonalRamp": [ "#12161b", "#232a33", "#374151", "#4b5563", "#6b7382", "#949ca8", "#c3c9d1", "#e6e9ed" ] }, "text-faint": { "role": "neutral", "displayName": "Ink Faint", "canonical": "light-dark(#6b6b75, #8c8c96)", "tonalRamp": [ "#151920", "#262c34", "#3c434e", "#535a66", "#656c78", "#98a1ac", "#c6cbd2", "#e9ebee" ] }, "accent": { "role": "primary", "displayName": "Interface Blue", "canonical": "light-dark(#1f56d6, #7aa2ff)", "tonalRamp": [ "#0a1b3f", "#102a63", "#173d8f", "#1a4fc0", "#2464e0", "#5b8bee", "#7ba7ff", "#eef3fe" ] }, "accent-strong": { "role": "primary", "displayName": "Interface Blue Deep", "canonical": "light-dark(#1844ac, #a3c0ff)", "tonalRamp": [ "#08152f", "#0e2354", "#143a86", "#1a4fc0", "#3a6ddc", "#6e97f2", "#a3c0ff", "#e4ecff" ] }, "accent-soft": { "role": "primary", "displayName": "Interface Blue Wash", "canonical": "light-dark(#ecf1ff, #16234a)", "tonalRamp": [ "#0c1526", "#17233a", "#22334f", "#33496b", "#5d7cae", "#93a9cf", "#cbd9f4", "#eef3fe" ] }, "on-accent": { "role": "primary", "displayName": "On Accent", "canonical": "light-dark(#ffffff, #0c0d0f)", "tonalRamp": [ "#0b1220", "#16203a", "#293c5a", "#475874", "#7386a3", "#a6b4c9", "#d3dae5", "#ffffff" ] }, "accent-fill": { "role": "primary", "displayName": "Accent Fill", "canonical": "light-dark(#2257df, #2f61e8)" }, "on-accent-fill": { "role": "primary", "displayName": "On Accent Fill", "canonical": "#ffffff" }, "danger-fill": { "role": "primary", "displayName": "Danger Fill", "canonical": "light-dark(#c62f2f, #c43232)" }, "control-border": { "role": "neutral", "displayName": "Control Border", "canonical": "light-dark(#d0d4dc, #343843)" }, "tone-neutral-fg": { "role": "tertiary", "displayName": "Neutral Tone Ink", "canonical": "light-dark(#374151, #c3c9d1)", "tonalRamp": [ "#0f1318", "#1c222a", "#293240", "#374151", "#5b6675", "#8b95a3", "#c3c9d1", "#eef0f2" ] }, "tone-neutral-bg": { "role": "tertiary", "displayName": "Neutral Tone Ground", "canonical": "light-dark(#eef0f2, #262c34)", "tonalRamp": [ "#12151a", "#262c34", "#39414c", "#525b68", "#78818e", "#a6adb7", "#d2d7dc", "#eef0f2" ] }, "tone-positive-fg": { "role": "tertiary", "displayName": "Positive Tone Ink", "canonical": "light-dark(#166534, #6ee7a8)", "tonalRamp": [ "#04170c", "#0a2e18", "#0f4724", "#166534", "#22874a", "#3fb673", "#6ee7a8", "#dcfce7" ] }, "tone-positive-bg": { "role": "tertiary", "displayName": "Positive Tone Ground", "canonical": "light-dark(#dcfce7, #10281c)", "tonalRamp": [ "#06150e", "#10281c", "#1b432e", "#2a6647", "#3f8f65", "#6bbb8e", "#a6dcbf", "#dcfce7" ] }, "tone-warning-fg": { "role": "tertiary", "displayName": "Warning Tone Ink", "canonical": "light-dark(#854d0e, #f0c46a)", "tonalRamp": [ "#1c1104", "#38230a", "#573710", "#854d0e", "#b3741f", "#d69f3f", "#f0c46a", "#fef3c7" ] }, "tone-warning-bg": { "role": "tertiary", "displayName": "Warning Tone Ground", "canonical": "light-dark(#fef3c7, #2c2110)", "tonalRamp": [ "#150f07", "#2c2110", "#46351a", "#665029", "#8f733f", "#bda067", "#e0cb9b", "#fef3c7" ] }, "tone-negative-fg": { "role": "tertiary", "displayName": "Negative Tone Ink", "canonical": "light-dark(#b91c1c, #f79aa0)", "tonalRamp": [ "#210607", "#420b0c", "#6d1414", "#b91c1c", "#d64a48", "#ea7377", "#f79aa0", "#fee2e2" ] }, "tone-negative-bg": { "role": "tertiary", "displayName": "Negative Tone Ground", "canonical": "light-dark(#fee2e2, #331819)", "tonalRamp": [ "#190b0c", "#331819", "#502527", "#73393b", "#9c5c5e", "#c58a8c", "#e6b8ba", "#fee2e2" ] } }, "typographyMeta": { "display": { "displayName": "Display", "purpose": "The lead reading in a stat band, and nothing else. The only genuinely large type in the system." }, "headline": { "displayName": "Headline", "purpose": "A screen's h1 in the page header. 1.25rem in day, 1.375rem in plain and signal; capped at 1.25rem under 34rem." }, "field": { "displayName": "Field", "purpose": "The form's headline input — a title, a name. The only control that leaves the body step, and the one exception to the Weight-Not-Size Rule, because what grows is the reader's own words rather than chrome." }, "title": { "displayName": "Title", "purpose": "Section headings in a card head, button labels, a row's name. Body-sized; separates by weight." }, "body": { "displayName": "Body", "purpose": "Everything else. 14px base. Subheads cap at 44rem." }, "label": { "displayName": "Label", "purpose": "The eyebrow over a value: stat labels, column heads, rail section names. Sentence case in day, uppercase in plain and signal." }, "stat": { "displayName": "Stat", "purpose": "A stat's number when it is not the lead. A role because a dashboard uses it as one." }, "mono": { "displayName": "Mono", "purpose": "Reference codes, identifiers and machine values, on the rst-mono utility. A real second family, so they read as things to copy rather than to read." } }, "themes": [ { "name": "day", "role": "default", "font": "system UI stack", "radius": "6px / 4px", "accent": "light-dark(#1f56d6, #7aa2ff)", "headerRule": "var(--rst-line)", "character": "Crisp and lit from above: near-greyscale neutrals, cobalt for anything that acts, natural depth, shadows lit by the hour and a sheen under the pointer." }, { "name": "plain", "role": "alternate", "font": "system UI stack", "radius": "4px / 3px", "accent": "light-dark(#111111, #f2f2f2)", "headerRule": "var(--rst-line)", "character": "Nearly square, near-black accent, one hairline shadow layer." }, { "name": "signal", "role": "alternate", "font": "Helvetica Neue stack", "radius": "4px / 2px", "accent": "light-dark(#1a56ff, #6d90ff)", "headerRule": "color-mix(in oklab, var(--rst-accent) 45%, var(--rst-line))", "character": "Milled: short dense shadows, electric blue, tightest corners." } ], "shadows": [ { "name": "pop", "value": "0 2px 4px light-dark(rgba(16, 24, 40, 0.06), rgba(0, 0, 0, 0.35)), 0 8px 16px -4px light-dark(rgba(16, 24, 40, 0.1), rgba(0, 0, 0, 0.5))", "purpose": "Surfaces that float over the page: an open menu, a dropdown panel, a modal. Real elevation, kept tight. Theme-owned; signal uses 0 4px 10px and plain 0 1px 3px." }, { "name": "knob", "value": "0 1px 2px light-dark(rgba(16, 24, 40, 0.18), rgba(0, 0, 0, 0.4))", "purpose": "The moving part of a control, such as a switch's knob." }, { "name": "lift", "value": "0 1px 2px light-dark(rgba(16, 24, 40, 0.08), rgba(0, 0, 0, 0.3))", "purpose": "Barely-there separation on a raised strip." }, { "name": "overlay", "value": "light-dark(rgba(0, 0, 0, 0.45), rgba(0, 0, 0, 0.6))", "purpose": "The modal scrim. Deeper in dark because black reads lighter against a dark backdrop." } ], "motion": [ { "name": "reduced-motion", "value": "@media (prefers-reduced-motion: reduce)", "purpose": "Honoured throughout; animated affordances fall back to a static treatment rather than disappearing." } ], "breakpoints": [ { "name": "reflow-floor", "value": "320px" }, { "name": "header-stack", "value": "34rem" }, { "name": "rail-collapse", "value": "800px" }, { "name": "page-column-cap", "value": "64rem" } ] }, "components": [ { "name": "Primary Button", "kind": "button", "refersTo": "button-primary", "description": "The one action a screen most wants taken. One per screen head.", "html": "Write a post", "css": ".ds-btn { align-items: center; background: var(--rst-surface, #ffffff); border: 1px solid var(--rst-line-strong, #7f8792); border-radius: var(--rst-radius-sm, 6px); color: var(--rst-text, #1a1d21); cursor: pointer; display: inline-flex; font-family: inherit; font-size: 0.78125rem; font-weight: 600; gap: 0.5rem; line-height: 1.4; padding: 0.45rem 0.75rem; text-decoration: none; } .ds-btn svg { block-size: 1em; inline-size: 1em; flex: none; } .ds-btn-primary { background: var(--rst-accent, #2464e0); border-color: var(--rst-accent, #2464e0); color: var(--rst-on-accent, #ffffff); } .ds-btn-primary:hover { background: var(--rst-accent-strong, #1a4fc0); border-color: var(--rst-accent-strong, #1a4fc0); } .ds-btn-primary:focus-visible { outline: 2px solid var(--rst-accent, #2464e0); outline-offset: 2px; }" }, { "name": "Default Button", "kind": "button", "refersTo": "button", "description": "Every other action. Hover moves the border and label to the accent rather than filling.", "html": "Edit", "css": ".ds-btn-default { align-items: center; background: var(--rst-surface, #ffffff); border: 1px solid var(--rst-line-strong, #7f8792); border-radius: var(--rst-radius-sm, 6px); color: var(--rst-text, #1a1d21); cursor: pointer; display: inline-flex; font-family: inherit; font-size: 0.78125rem; font-weight: 600; gap: 0.5rem; line-height: 1.4; padding: 0.45rem 0.75rem; text-decoration: none; } .ds-btn-default:hover { border-color: var(--rst-accent, #2464e0); color: var(--rst-accent, #2464e0); } .ds-btn-default:focus-visible { outline: 2px solid var(--rst-accent, #2464e0); outline-offset: 2px; }" }, { "name": "Text Input", "kind": "input", "refersTo": "input", "description": "A labelled field with its hint. Focus is an offset outline, never a border swap, so focus never resizes the control.", "html": "
Everything on a screen sits inside boxes.