{
  "name": "@gabrielpule/mcss-lite",
  "version": "0.4.1",
  "description": "Contract-first CSS design system: every class, state and token is declared in machine-readable contracts, so people and AI agents build UI with the right parts.",
  "generatedFrom": [
    "tokens/*.tokens.json",
    "components/*.json"
  ],
  "cascade": [
    "global",
    "layout",
    "component",
    "utility"
  ],
  "prefixes": {
    "l-": "layout primitive",
    "c-": "component",
    "u-": "utility"
  },
  "naming": "BEM: block, block__element, block--modifier. State: data-state=\"value\" on the block.",
  "themes": {
    "attribute": "data-theme",
    "default": "light",
    "values": {
      "light": "Light theme. Also the default when no data-theme attribute is set.",
      "dark": "Dark theme.",
      "auto": "Follows the operating system via prefers-color-scheme."
    }
  },
  "rules": [
    {
      "id": "golden-rule",
      "title": "Components never set their own outer margin",
      "text": "Never add margin to a c-* root element. Put components inside a layout primitive (l-stack, l-cluster, l-grid, l-sidebar, l-switcher) and let it provide the spacing."
    },
    {
      "id": "lookup-order",
      "title": "Layout, then component, then utility, then token",
      "text": "Solve a need with an l-* layout primitive first, then a c-* component and its modifiers, then a u-* utility. Only write custom CSS as a last resort, and then use var(--token) values only."
    },
    {
      "id": "no-invention",
      "title": "Never invent class or token names",
      "text": "Use only the classes, modifiers, elements, data-state values and tokens listed in this file. If something is missing, write custom CSS with existing tokens instead of guessing a name such as c-button--warning."
    },
    {
      "id": "states",
      "title": "States use data-state plus the native or ARIA pair",
      "text": "Express component state with data-state=\"…\" (for example data-state=\"error\"), and always add the paired native attribute or ARIA listed for that state (disabled, aria-invalid, aria-busy). Checkboxes, radios and toggles are the exception: their states are native (checked, disabled, aria-invalid) and never use data-state."
    },
    {
      "id": "theming",
      "title": "Theme with semantic tokens, never raw values",
      "text": "Never hard-code colors (#hex, rgb()) or pixel spacing. Use semantic tokens (--color-text-default, --color-action-primary…) or component tokens (--button-primary-background…). Primitive color tokens (--color-gray-*, --color-blue-*) do not adapt to dark mode."
    }
  ],
  "contentRules": [
    {
      "id": "sentence-case",
      "title": "Write in sentence case",
      "text": "Capitalize only the first word and proper nouns in labels, titles, buttons and badges. Title Case is harder to scan and reads as shouting in long labels.",
      "do": "Create account",
      "dont": "Create Account",
      "enforcedBy": "content-case"
    },
    {
      "id": "button-verbs",
      "title": "Buttons say what happens",
      "text": "Start with a verb and name the thing it acts on. A person should know the result before they click.",
      "do": "Save changes",
      "dont": "OK"
    },
    {
      "id": "no-vague-labels",
      "title": "No vague labels",
      "text": "\"Submit\", \"Click here\", \"Yes\" and \"More\" say nothing out of context. Screen reader users often hear a list of every link or button on the page, with no surrounding text.",
      "do": "Download the invoice",
      "dont": "Click here",
      "enforcedBy": "content-vague"
    },
    {
      "id": "error-messages",
      "title": "Errors say what went wrong and how to fix it",
      "text": "Name the problem in plain words and tell the person what to do. Don't blame, don't use codes, don't say \"invalid\".",
      "do": "Enter a date after 1 January 2020",
      "dont": "Invalid input"
    },
    {
      "id": "error-timing",
      "title": "Show errors at the right moment",
      "text": "Check a field when the person leaves it or submits the form, not while they type its first value. Once a field shows an error, clear it as soon as the value is fixed. After a failed submit, list every error at the top of the form, each linked to its field.",
      "do": "There is a problem: Enter your email address",
      "dont": "Email is invalid (shown after the first keystroke)"
    },
    {
      "id": "optional-fields",
      "title": "Mark optional fields, not required ones",
      "text": "Ask only for what you need, then add \"(optional)\" to the few fields people may skip. Rows of asterisks add noise and need a legend.",
      "do": "Phone number (optional)",
      "dont": "Phone number *"
    },
    {
      "id": "positive-choices",
      "title": "Write choices as positive statements",
      "text": "A checkbox label is a statement the person agrees with by ticking it. Negatives make them untick to say yes, and people get it wrong.",
      "do": "Email me about new releases",
      "dont": "Don't email me about new releases"
    },
    {
      "id": "setting-names",
      "title": "Name the setting, not the action",
      "text": "A toggle's label names what it controls and never changes; the switch itself says on or off. Labels like \"Turn on\" leave people guessing which state is current.",
      "do": "Dark mode",
      "dont": "Enable dark mode"
    },
    {
      "id": "punctuation",
      "title": "Keep punctuation light",
      "text": "No full stops on buttons, titles, labels or badges. Use full stops in help text and messages that are sentences. Avoid exclamation marks.",
      "do": "Delete project",
      "dont": "Delete project!"
    },
    {
      "id": "numbers-dates",
      "title": "Write numbers and dates the same way everywhere",
      "text": "Use numerals for numbers, the full month name in dates and a consistent time format. Avoid ambiguous dates like 03/04.",
      "do": "1 March 2026, 12 of 20 seats",
      "dont": "03/01/26, twelve of twenty seats"
    },
    {
      "id": "inclusive",
      "title": "Write for everyone",
      "text": "Use plain words, active voice and \"you\". Avoid idioms, jargon and gendered defaults. Describe what something does, not how it looks (\"select\", not \"click the blue button\").",
      "do": "Choose a plan to continue",
      "dont": "Just hit the big blue button, guys"
    }
  ],
  "icons": {
    "sprite": "dist/mcss-lite.icons.svg",
    "idPrefix": "mcss-icon-",
    "names": [
      "arrow-right",
      "check",
      "chevron-down",
      "chevron-left",
      "chevron-right",
      "chevron-up",
      "close",
      "copy",
      "download",
      "edit",
      "error",
      "external-link",
      "info",
      "menu",
      "minus",
      "plus",
      "search",
      "success",
      "trash",
      "warning"
    ]
  },
  "pages": [
    "demo/index.html",
    "demo/status.html",
    "demo/content.html",
    "demo/components/center.html",
    "demo/components/cluster.html",
    "demo/components/container.html",
    "demo/components/grid.html",
    "demo/components/section.html",
    "demo/components/sidebar.html",
    "demo/components/stack.html",
    "demo/components/switcher.html",
    "demo/components/alert.html",
    "demo/components/badge.html",
    "demo/components/button.html",
    "demo/components/card.html",
    "demo/components/checkbox.html",
    "demo/components/form-field.html",
    "demo/components/icon.html",
    "demo/components/input.html",
    "demo/components/label.html",
    "demo/components/modal.html",
    "demo/components/radio.html",
    "demo/components/toggle.html",
    "demo/components/utilities.html"
  ],
  "blocks": [
    {
      "name": "Center",
      "block": "l-center",
      "layer": "layout",
      "status": "stable",
      "since": "0.1.0",
      "description": "Centers a block horizontally at reading width without side gutters.",
      "guidelines": {
        "whenToUse": [
          "Long-form text or a single form that should sit at a comfortable reading width."
        ],
        "whenNotToUse": [
          "The outermost page wrapper that also needs side gutters: use `l-container`.",
          "Inside another centered block: one reading width per column is enough."
        ],
        "doDont": [
          {
            "do": {
              "text": "Center one column of reading content.",
              "html": "<div class=\"l-center\">\n  <p class=\"u-margin-0\">Articles read best at 60 to 75 characters per line.</p>\n</div>"
            },
            "dont": {
              "text": "Don't nest centered blocks inside each other.",
              "html": "<div class=\"l-center\">\n  <div class=\"l-center\">\n    <p class=\"u-margin-0\">Twice centered.</p>\n  </div>\n</div>"
            }
          }
        ]
      },
      "tokens": [
        "--container-narrow"
      ],
      "related": [
        "l-container"
      ],
      "examples": [
        {
          "file": "components/layouts.html",
          "html": "<section class=\"l-section l-section--sm\">\n  <div class=\"l-container\">\n    <div class=\"l-stack l-stack--lg\">\n      <h3>Projects</h3>\n\n      <div class=\"l-sidebar\">\n        <nav class=\"l-sidebar__sidebar\" aria-label=\"Filters\">\n          <div class=\"l-stack l-stack--sm\">\n            <a class=\"c-button c-button--ghost c-button--sm\" href=\"#all\" aria-current=\"page\">All projects</a>\n            <a class=\"c-button c-button--ghost c-button--sm\" href=\"#mine\">My projects</a>\n          </div>\n        </nav>\n        <div class=\"l-sidebar__content\">\n          <div class=\"l-grid l-grid--3-col\">\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Atlas</h4>\n              <p class=\"c-card__body\">12 pages</p>\n            </article>\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Borealis</h4>\n              <p class=\"c-card__body\">4 pages</p>\n            </article>\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Cirrus</h4>\n              <p class=\"c-card__body\">7 pages</p>\n            </article>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"l-switcher\" style=\"--switcher-threshold: 40rem\">\n        <div class=\"c-card\">Side by side on wide screens</div>\n        <div class=\"c-card\">Stacked on narrow screens</div>\n      </div>\n\n      <div class=\"l-center\">\n        <p class=\"u-text-center\">Centered at reading width.</p>\n      </div>\n    </div>\n  </div>\n</section>"
        }
      ],
      "sources": [
        {
          "title": "Every Layout: The Center",
          "url": "https://every-layout.dev/layouts/center/"
        }
      ]
    },
    {
      "name": "Cluster",
      "block": "l-cluster",
      "layer": "layout",
      "status": "stable",
      "since": "0.1.0",
      "description": "Horizontal group that wraps, with a gap and vertically centered items: button groups, badge lists, tags.",
      "guidelines": {
        "whenToUse": [
          "Button groups, badge lists, tags and metadata rows that should wrap on narrow screens."
        ],
        "whenNotToUse": [
          "Two columns of page content: use `l-sidebar` or `l-grid`.",
          "Items that must stay equal width: use `l-switcher`."
        ],
        "use": [
          "Group inline items such as buttons and badges."
        ],
        "avoid": [
          "Using l-cluster for two-column page layouts; use l-sidebar or l-grid."
        ],
        "doDont": [
          {
            "do": {
              "text": "Let items wrap; the gap holds on every row.",
              "html": "<div class=\"l-cluster\">\n  <span class=\"c-badge\">Design</span>\n  <span class=\"c-badge\">Research</span>\n  <span class=\"c-badge\">Accessibility</span>\n</div>"
            },
            "dont": {
              "text": "Don't space items with margins.",
              "html": "<div class=\"l-cluster\">\n  <button type=\"button\" class=\"c-button\" style=\"margin-right: 8px\">Back</button>\n  <button type=\"button\" class=\"c-button c-button--primary\">Next</button>\n</div>",
              "rule": "golden-rule"
            }
          }
        ]
      },
      "tokens": [
        "--space-3"
      ],
      "related": [
        "c-button",
        "c-badge"
      ],
      "examples": [
        {
          "file": "components/layouts.html",
          "html": "<section class=\"l-section l-section--sm\">\n  <div class=\"l-container\">\n    <div class=\"l-stack l-stack--lg\">\n      <h3>Projects</h3>\n\n      <div class=\"l-sidebar\">\n        <nav class=\"l-sidebar__sidebar\" aria-label=\"Filters\">\n          <div class=\"l-stack l-stack--sm\">\n            <a class=\"c-button c-button--ghost c-button--sm\" href=\"#all\" aria-current=\"page\">All projects</a>\n            <a class=\"c-button c-button--ghost c-button--sm\" href=\"#mine\">My projects</a>\n          </div>\n        </nav>\n        <div class=\"l-sidebar__content\">\n          <div class=\"l-grid l-grid--3-col\">\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Atlas</h4>\n              <p class=\"c-card__body\">12 pages</p>\n            </article>\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Borealis</h4>\n              <p class=\"c-card__body\">4 pages</p>\n            </article>\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Cirrus</h4>\n              <p class=\"c-card__body\">7 pages</p>\n            </article>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"l-switcher\" style=\"--switcher-threshold: 40rem\">\n        <div class=\"c-card\">Side by side on wide screens</div>\n        <div class=\"c-card\">Stacked on narrow screens</div>\n      </div>\n\n      <div class=\"l-center\">\n        <p class=\"u-text-center\">Centered at reading width.</p>\n      </div>\n    </div>\n  </div>\n</section>"
        }
      ],
      "sources": [
        {
          "title": "Every Layout: The Cluster",
          "url": "https://every-layout.dev/layouts/cluster/"
        },
        {
          "title": "LogRocket: CSS gap vs margin",
          "url": "https://blog.logrocket.com/css-gap-vs-margin/"
        }
      ]
    },
    {
      "name": "Container",
      "block": "l-container",
      "layer": "layout",
      "status": "stable",
      "since": "0.1.0",
      "description": "Centers page content horizontally with a max width and side gutters.",
      "modifiers": [
        {
          "group": "width",
          "exclusive": true,
          "values": [
            {
              "name": "narrow",
              "description": "Reading width (48rem) for articles and forms."
            }
          ]
        }
      ],
      "guidelines": {
        "whenToUse": [
          "The outermost wrapper of each page region: header, main content, footer."
        ],
        "whenNotToUse": [
          "Narrowing text inside a region: use `l-center`.",
          "Inside another container."
        ],
        "use": [
          "Use once per page region, as the outermost wrapper of the content."
        ],
        "avoid": [
          "Nesting containers."
        ],
        "doDont": [
          {
            "do": {
              "text": "Use one container per region.",
              "html": "<header>\n  <div class=\"l-container\">\n    <p class=\"u-margin-0\">Acme</p>\n  </div>\n</header>"
            },
            "dont": {
              "text": "Don't invent width modifiers.",
              "html": "<div class=\"l-container l-container--wide\">\n  <p class=\"u-margin-0\">Acme</p>\n</div>",
              "rule": "unknown-class"
            }
          }
        ]
      },
      "tokens": [
        "--container-max-width",
        "--container-narrow",
        "--space-4"
      ],
      "related": [
        "l-section",
        "l-center"
      ],
      "examples": [
        {
          "file": "components/layouts.html",
          "html": "<section class=\"l-section l-section--sm\">\n  <div class=\"l-container\">\n    <div class=\"l-stack l-stack--lg\">\n      <h3>Projects</h3>\n\n      <div class=\"l-sidebar\">\n        <nav class=\"l-sidebar__sidebar\" aria-label=\"Filters\">\n          <div class=\"l-stack l-stack--sm\">\n            <a class=\"c-button c-button--ghost c-button--sm\" href=\"#all\" aria-current=\"page\">All projects</a>\n            <a class=\"c-button c-button--ghost c-button--sm\" href=\"#mine\">My projects</a>\n          </div>\n        </nav>\n        <div class=\"l-sidebar__content\">\n          <div class=\"l-grid l-grid--3-col\">\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Atlas</h4>\n              <p class=\"c-card__body\">12 pages</p>\n            </article>\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Borealis</h4>\n              <p class=\"c-card__body\">4 pages</p>\n            </article>\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Cirrus</h4>\n              <p class=\"c-card__body\">7 pages</p>\n            </article>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"l-switcher\" style=\"--switcher-threshold: 40rem\">\n        <div class=\"c-card\">Side by side on wide screens</div>\n        <div class=\"c-card\">Stacked on narrow screens</div>\n      </div>\n\n      <div class=\"l-center\">\n        <p class=\"u-text-center\">Centered at reading width.</p>\n      </div>\n    </div>\n  </div>\n</section>"
        }
      ]
    },
    {
      "name": "Grid",
      "block": "l-grid",
      "layer": "layout",
      "status": "stable",
      "since": "0.1.0",
      "description": "Two-dimensional grid with a fixed gap. Column modifiers collapse to one column below 768px.",
      "modifiers": [
        {
          "group": "columns",
          "exclusive": true,
          "values": [
            {
              "name": "2-col",
              "description": "Two equal columns."
            },
            {
              "name": "3-col",
              "description": "Three equal columns."
            },
            {
              "name": "4-col",
              "description": "Four equal columns."
            },
            {
              "name": "responsive",
              "description": "As many 280px-minimum columns as fit; no breakpoint needed."
            }
          ]
        }
      ],
      "guidelines": {
        "whenToUse": [
          "Card collections of unknown length: l-grid--responsive fits as many columns as there is room for.",
          "Dashboards with a fixed number of equal columns: l-grid--2-col, --3-col or --4-col."
        ],
        "whenNotToUse": [
          "A main area with a narrower side column: use `l-sidebar`.",
          "A row of equal items that should all stack at once: use `l-switcher`."
        ],
        "use": [
          "Prefer l-grid--responsive for card collections of unknown length."
        ],
        "avoid": [
          "Adding margins to grid children; the gap already spaces them."
        ],
        "doDont": [
          {
            "do": {
              "text": "Keep the source order the same as the visual order.",
              "html": "<div class=\"l-grid l-grid--3-col\">\n  <section class=\"c-card\"><p class=\"u-margin-0\">Step 1</p></section>\n  <section class=\"c-card\"><p class=\"u-margin-0\">Step 2</p></section>\n  <section class=\"c-card\"><p class=\"u-margin-0\">Step 3</p></section>\n</div>"
            },
            "dont": {
              "text": "Don't combine column modifiers.",
              "html": "<div class=\"l-grid l-grid--2-col l-grid--responsive\">\n  <section class=\"c-card\"><p class=\"u-margin-0\">Step 1</p></section>\n</div>",
              "rule": "exclusive-modifiers"
            }
          }
        ],
        "content": [
          "If you reorder items visually with CSS, keyboard and screen reader users still get the source order, so change the markup instead."
        ]
      },
      "tokens": [
        "--space-6"
      ],
      "related": [
        "c-card",
        "l-switcher"
      ],
      "examples": [
        {
          "file": "components/layouts.html",
          "html": "<section class=\"l-section l-section--sm\">\n  <div class=\"l-container\">\n    <div class=\"l-stack l-stack--lg\">\n      <h3>Projects</h3>\n\n      <div class=\"l-sidebar\">\n        <nav class=\"l-sidebar__sidebar\" aria-label=\"Filters\">\n          <div class=\"l-stack l-stack--sm\">\n            <a class=\"c-button c-button--ghost c-button--sm\" href=\"#all\" aria-current=\"page\">All projects</a>\n            <a class=\"c-button c-button--ghost c-button--sm\" href=\"#mine\">My projects</a>\n          </div>\n        </nav>\n        <div class=\"l-sidebar__content\">\n          <div class=\"l-grid l-grid--3-col\">\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Atlas</h4>\n              <p class=\"c-card__body\">12 pages</p>\n            </article>\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Borealis</h4>\n              <p class=\"c-card__body\">4 pages</p>\n            </article>\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Cirrus</h4>\n              <p class=\"c-card__body\">7 pages</p>\n            </article>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"l-switcher\" style=\"--switcher-threshold: 40rem\">\n        <div class=\"c-card\">Side by side on wide screens</div>\n        <div class=\"c-card\">Stacked on narrow screens</div>\n      </div>\n\n      <div class=\"l-center\">\n        <p class=\"u-text-center\">Centered at reading width.</p>\n      </div>\n    </div>\n  </div>\n</section>"
        }
      ],
      "sources": [
        {
          "title": "Defensive CSS: auto-fit vs auto-fill",
          "url": "https://defensivecss.dev/tip/auto-fit-fill/"
        },
        {
          "title": "MDN: Grid layout and accessibility",
          "url": "https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_grid_layout/Grid_layout_and_accessibility"
        }
      ]
    },
    {
      "name": "Section",
      "block": "l-section",
      "layer": "layout",
      "status": "stable",
      "since": "0.1.0",
      "description": "Vertical padding for a full-width page section.",
      "modifiers": [
        {
          "group": "size",
          "exclusive": true,
          "values": [
            {
              "name": "sm",
              "description": "Smaller vertical padding (2.5rem instead of 4rem)."
            }
          ]
        }
      ],
      "guidelines": {
        "whenToUse": [
          "Full-width bands of a page that need vertical breathing room, such as a hero or a feature row."
        ],
        "whenNotToUse": [
          "Spacing between components inside a section: use `l-stack`.",
          "A bordered group of content: use `c-card`."
        ],
        "doDont": [
          {
            "do": {
              "text": "Put a container inside the section for the side gutters.",
              "html": "<section class=\"l-section\">\n  <div class=\"l-container\">\n    <h2 class=\"u-margin-0\">Features</h2>\n  </div>\n</section>"
            },
            "dont": {
              "text": "Don't invent size modifiers; use l-section--sm for a tighter band.",
              "html": "<section class=\"l-section l-section--xl\">\n  <h2 class=\"u-margin-0\">Features</h2>\n</section>",
              "rule": "unknown-class"
            }
          }
        ]
      },
      "tokens": [
        "--space-10",
        "--space-16"
      ],
      "children": [
        "Usually contains one l-container."
      ],
      "related": [
        "l-container"
      ],
      "examples": [
        {
          "file": "components/layouts.html",
          "html": "<section class=\"l-section l-section--sm\">\n  <div class=\"l-container\">\n    <div class=\"l-stack l-stack--lg\">\n      <h3>Projects</h3>\n\n      <div class=\"l-sidebar\">\n        <nav class=\"l-sidebar__sidebar\" aria-label=\"Filters\">\n          <div class=\"l-stack l-stack--sm\">\n            <a class=\"c-button c-button--ghost c-button--sm\" href=\"#all\" aria-current=\"page\">All projects</a>\n            <a class=\"c-button c-button--ghost c-button--sm\" href=\"#mine\">My projects</a>\n          </div>\n        </nav>\n        <div class=\"l-sidebar__content\">\n          <div class=\"l-grid l-grid--3-col\">\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Atlas</h4>\n              <p class=\"c-card__body\">12 pages</p>\n            </article>\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Borealis</h4>\n              <p class=\"c-card__body\">4 pages</p>\n            </article>\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Cirrus</h4>\n              <p class=\"c-card__body\">7 pages</p>\n            </article>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"l-switcher\" style=\"--switcher-threshold: 40rem\">\n        <div class=\"c-card\">Side by side on wide screens</div>\n        <div class=\"c-card\">Stacked on narrow screens</div>\n      </div>\n\n      <div class=\"l-center\">\n        <p class=\"u-text-center\">Centered at reading width.</p>\n      </div>\n    </div>\n  </div>\n</section>"
        }
      ]
    },
    {
      "name": "Sidebar",
      "block": "l-sidebar",
      "layer": "layout",
      "status": "stable",
      "since": "0.1.0",
      "description": "A sidebar next to main content that stacks when the content would get narrower than 50%.",
      "elements": [
        {
          "name": "sidebar",
          "description": "The narrow side (16rem basis).",
          "required": true
        },
        {
          "name": "content",
          "description": "The main content; takes the remaining space.",
          "required": true
        }
      ],
      "guidelines": {
        "whenToUse": [
          "Filters next to results, a form label next to its field, an avatar next to text.",
          "Any side column that should drop below the content when space runs out."
        ],
        "whenNotToUse": [
          "Equal columns: use `l-grid` or `l-switcher`.",
          "Page-level navigation that must stay fixed while scrolling: that is app chrome, outside this layout."
        ],
        "doDont": [
          {
            "do": {
              "text": "Put the side column first in the source only if it should also be read first.",
              "html": "<div class=\"l-sidebar\">\n  <aside class=\"l-sidebar__sidebar\"><p class=\"u-margin-0\">Filters</p></aside>\n  <div class=\"l-sidebar__content\"><p class=\"u-margin-0\">42 results</p></div>\n</div>"
            },
            "dont": {
              "text": "Don't use the sidebar elements on their own.",
              "html": "<aside class=\"l-sidebar__sidebar\"><p class=\"u-margin-0\">Filters</p></aside>",
              "rule": "element-outside-block"
            }
          }
        ]
      },
      "children": [
        "Exactly two children: l-sidebar__sidebar and l-sidebar__content, in either order."
      ],
      "tokens": [
        "--space-6"
      ],
      "related": [
        "l-grid",
        "l-switcher"
      ],
      "examples": [
        {
          "file": "components/layouts.html",
          "html": "<section class=\"l-section l-section--sm\">\n  <div class=\"l-container\">\n    <div class=\"l-stack l-stack--lg\">\n      <h3>Projects</h3>\n\n      <div class=\"l-sidebar\">\n        <nav class=\"l-sidebar__sidebar\" aria-label=\"Filters\">\n          <div class=\"l-stack l-stack--sm\">\n            <a class=\"c-button c-button--ghost c-button--sm\" href=\"#all\" aria-current=\"page\">All projects</a>\n            <a class=\"c-button c-button--ghost c-button--sm\" href=\"#mine\">My projects</a>\n          </div>\n        </nav>\n        <div class=\"l-sidebar__content\">\n          <div class=\"l-grid l-grid--3-col\">\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Atlas</h4>\n              <p class=\"c-card__body\">12 pages</p>\n            </article>\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Borealis</h4>\n              <p class=\"c-card__body\">4 pages</p>\n            </article>\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Cirrus</h4>\n              <p class=\"c-card__body\">7 pages</p>\n            </article>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"l-switcher\" style=\"--switcher-threshold: 40rem\">\n        <div class=\"c-card\">Side by side on wide screens</div>\n        <div class=\"c-card\">Stacked on narrow screens</div>\n      </div>\n\n      <div class=\"l-center\">\n        <p class=\"u-text-center\">Centered at reading width.</p>\n      </div>\n    </div>\n  </div>\n</section>"
        }
      ],
      "sources": [
        {
          "title": "Every Layout: The Sidebar",
          "url": "https://every-layout.dev/layouts/sidebar/"
        },
        {
          "title": "Josh Comeau: Container queries",
          "url": "https://www.joshwcomeau.com/css/container-queries-introduction/"
        }
      ]
    },
    {
      "name": "Stack",
      "block": "l-stack",
      "layer": "layout",
      "status": "stable",
      "since": "0.1.0",
      "description": "Vertical flow: adds space between consecutive children, which keep their own width. Bare inline children (links, spans) stack too. The default way to space components vertically.",
      "modifiers": [
        {
          "group": "gap",
          "exclusive": true,
          "values": [
            {
              "name": "sm",
              "description": "Tight spacing (0.5rem), e.g. form-field internals or list items."
            },
            {
              "name": "lg",
              "description": "Loose spacing (2rem), e.g. between page blocks."
            }
          ]
        }
      ],
      "guidelines": {
        "whenToUse": [
          "Anything that flows top to bottom: form fields, paragraphs, a card body, a page column.",
          "Changing rhythm: nest a smaller stack (l-stack--sm) inside a larger one."
        ],
        "whenNotToUse": [
          "Items in a row that wrap: use `l-cluster`.",
          "Two-dimensional layouts: use `l-grid`."
        ],
        "use": [
          "Nest stacks with different gaps to build rhythm."
        ],
        "avoid": [
          "Adding margins to children to fix spacing; change the stack modifier instead."
        ],
        "doDont": [
          {
            "do": {
              "text": "Let the stack own the space between its children.",
              "html": "<div class=\"l-stack\">\n  <h2 class=\"u-margin-0\">Billing</h2>\n  <p class=\"u-margin-0\">Your plan renews on 1 March.</p>\n  <div class=\"l-cluster\">\n    <button type=\"button\" class=\"c-button\">Change plan</button>\n  </div>\n</div>"
            },
            "dont": {
              "text": "Don't fix spacing with margins on the children.",
              "html": "<div class=\"l-stack\">\n  <section class=\"c-card\" style=\"margin-top: 32px\"><p class=\"u-margin-0\">Plan</p></section>\n</div>",
              "rule": "golden-rule"
            }
          },
          {
            "do": {
              "text": "Pick the gap with a modifier.",
              "html": "<div class=\"l-stack l-stack--sm\">\n  <p class=\"u-margin-0\">Line one</p>\n  <p class=\"u-margin-0\">Line two</p>\n</div>"
            },
            "dont": {
              "text": "Don't combine two gap modifiers.",
              "html": "<div class=\"l-stack l-stack--sm l-stack--lg\">\n  <p class=\"u-margin-0\">Line one</p>\n</div>",
              "rule": "exclusive-modifiers"
            }
          }
        ]
      },
      "tokens": [
        "--space-2",
        "--space-4",
        "--space-8"
      ],
      "related": [
        "l-cluster",
        "c-form-field"
      ],
      "examples": [
        {
          "file": "components/layouts.html",
          "html": "<section class=\"l-section l-section--sm\">\n  <div class=\"l-container\">\n    <div class=\"l-stack l-stack--lg\">\n      <h3>Projects</h3>\n\n      <div class=\"l-sidebar\">\n        <nav class=\"l-sidebar__sidebar\" aria-label=\"Filters\">\n          <div class=\"l-stack l-stack--sm\">\n            <a class=\"c-button c-button--ghost c-button--sm\" href=\"#all\" aria-current=\"page\">All projects</a>\n            <a class=\"c-button c-button--ghost c-button--sm\" href=\"#mine\">My projects</a>\n          </div>\n        </nav>\n        <div class=\"l-sidebar__content\">\n          <div class=\"l-grid l-grid--3-col\">\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Atlas</h4>\n              <p class=\"c-card__body\">12 pages</p>\n            </article>\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Borealis</h4>\n              <p class=\"c-card__body\">4 pages</p>\n            </article>\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Cirrus</h4>\n              <p class=\"c-card__body\">7 pages</p>\n            </article>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"l-switcher\" style=\"--switcher-threshold: 40rem\">\n        <div class=\"c-card\">Side by side on wide screens</div>\n        <div class=\"c-card\">Stacked on narrow screens</div>\n      </div>\n\n      <div class=\"l-center\">\n        <p class=\"u-text-center\">Centered at reading width.</p>\n      </div>\n    </div>\n  </div>\n</section>"
        }
      ],
      "sources": [
        {
          "title": "Every Layout: The Stack",
          "url": "https://every-layout.dev/layouts/stack/"
        },
        {
          "title": "LogRocket: CSS gap vs margin",
          "url": "https://blog.logrocket.com/css-gap-vs-margin/"
        }
      ]
    },
    {
      "name": "Switcher",
      "block": "l-switcher",
      "layer": "layout",
      "status": "stable",
      "since": "0.1.0",
      "description": "Children sit side by side until the container is narrower than a threshold, then all stack at once.",
      "customProperties": [
        {
          "name": "--switcher-threshold",
          "default": "30rem",
          "description": "Container width below which children stack. Set inline, e.g. style=\"--switcher-threshold: 40rem\"."
        }
      ],
      "guidelines": {
        "whenToUse": [
          "Two to four items of equal importance, such as pricing tiers or steps, that should switch from a row to a column all at once."
        ],
        "whenNotToUse": [
          "Items of unequal importance: use `l-sidebar`.",
          "Five or more items, or a list of unknown length: use `l-grid` with l-grid--responsive."
        ],
        "doDont": [
          {
            "do": {
              "text": "Set the threshold with the custom property.",
              "html": "<div class=\"l-switcher\" style=\"--switcher-threshold: 40rem\">\n  <section class=\"c-card\"><p class=\"u-margin-0\">Free</p></section>\n  <section class=\"c-card\"><p class=\"u-margin-0\">Team</p></section>\n</div>"
            },
            "dont": {
              "text": "Don't invent size modifiers.",
              "html": "<div class=\"l-switcher l-switcher--wide\">\n  <section class=\"c-card\"><p class=\"u-margin-0\">Free</p></section>\n</div>",
              "rule": "unknown-class"
            }
          }
        ]
      },
      "tokens": [
        "--space-4"
      ],
      "related": [
        "l-grid",
        "l-sidebar"
      ],
      "examples": [
        {
          "file": "components/layouts.html",
          "html": "<section class=\"l-section l-section--sm\">\n  <div class=\"l-container\">\n    <div class=\"l-stack l-stack--lg\">\n      <h3>Projects</h3>\n\n      <div class=\"l-sidebar\">\n        <nav class=\"l-sidebar__sidebar\" aria-label=\"Filters\">\n          <div class=\"l-stack l-stack--sm\">\n            <a class=\"c-button c-button--ghost c-button--sm\" href=\"#all\" aria-current=\"page\">All projects</a>\n            <a class=\"c-button c-button--ghost c-button--sm\" href=\"#mine\">My projects</a>\n          </div>\n        </nav>\n        <div class=\"l-sidebar__content\">\n          <div class=\"l-grid l-grid--3-col\">\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Atlas</h4>\n              <p class=\"c-card__body\">12 pages</p>\n            </article>\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Borealis</h4>\n              <p class=\"c-card__body\">4 pages</p>\n            </article>\n            <article class=\"c-card\">\n              <h4 class=\"c-card__title\">Cirrus</h4>\n              <p class=\"c-card__body\">7 pages</p>\n            </article>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"l-switcher\" style=\"--switcher-threshold: 40rem\">\n        <div class=\"c-card\">Side by side on wide screens</div>\n        <div class=\"c-card\">Stacked on narrow screens</div>\n      </div>\n\n      <div class=\"l-center\">\n        <p class=\"u-text-center\">Centered at reading width.</p>\n      </div>\n    </div>\n  </div>\n</section>"
        }
      ],
      "sources": [
        {
          "title": "Every Layout: The Switcher",
          "url": "https://every-layout.dev/layouts/switcher/"
        }
      ]
    },
    {
      "name": "Alert",
      "block": "c-alert",
      "layer": "component",
      "status": "beta",
      "since": "0.4.0",
      "description": "A printed notice on the page: tells people about something that affects what they are doing, with its severity in an icon, a word and a heavier bottom edge.",
      "tags": [
        "div",
        "section",
        "aside"
      ],
      "modifiers": [
        {
          "group": "tone",
          "exclusive": true,
          "values": [
            {
              "name": "info",
              "description": "Neutral information. Circle icon, \"Information:\" prefix."
            },
            {
              "name": "success",
              "description": "Something finished well. Square check icon, \"Success:\" prefix."
            },
            {
              "name": "warning",
              "description": "Something may go wrong unless the person acts. Triangle icon, \"Warning:\" prefix."
            },
            {
              "name": "error",
              "description": "Something went wrong; also the error summary at the top of a form. Octagon icon, \"Error:\" prefix."
            }
          ]
        }
      ],
      "elements": [
        {
          "name": "icon",
          "description": "The keylined tile that holds the severity icon (a c-icon, aria-hidden).",
          "tags": [
            "span",
            "div"
          ]
        },
        {
          "name": "body",
          "description": "Title, text and actions.",
          "tags": [
            "div"
          ],
          "required": true
        },
        {
          "name": "title",
          "description": "One short line. Starts with the visually hidden severity prefix.",
          "tags": [
            "p",
            "h2",
            "h3",
            "h4",
            "strong"
          ]
        },
        {
          "name": "actions",
          "description": "Buttons or links that resolve the alert, in an l-cluster.",
          "tags": [
            "div"
          ]
        },
        {
          "name": "close",
          "description": "Dismiss button, 44px, with aria-label. The app sets hidden on the alert when it is pressed.",
          "tags": [
            "button"
          ]
        }
      ],
      "children": [
        "Order: c-alert__icon, c-alert__body (c-alert__title, text, c-alert__actions), then an optional c-alert__close.",
        "Start c-alert__title with <span class=\"u-sr-only\">Error: </span> (or Warning, Success, Information), so severity never relies on the icon or the edge."
      ],
      "guidelines": {
        "whenToUse": [
          "Something on this page needs attention: a failed save, an expiring plan, a limit reached.",
          "The error summary at the top of a form after a failed submit, with a link to each field.",
          "Confirming that an action finished, when the page stays where it is."
        ],
        "whenNotToUse": [
          "An error about one field: use its `c-form-field` error message.",
          "A decision the person must make before going on: use `c-modal`.",
          "A status label on an item: use `c-badge`."
        ],
        "use": [
          "Say what happened and what to do next, in that order.",
          "Keep alerts in the page flow near what they are about, spaced by a layout primitive.",
          "Give role=\"alert\" only to urgent messages that appear after something the person just did. Leave it off alerts that are there when the page loads."
        ],
        "avoid": [
          "More than one alert of the same tone at once; combine them.",
          "A dismiss button on a warning about data loss or cost; it must stay until resolved.",
          "Moving focus to a success alert; move focus only to an error summary after a failed submit."
        ],
        "doDont": [
          {
            "do": {
              "text": "Give every toned alert its icon and a hidden severity prefix, so it never relies on color.",
              "html": "<div class=\"c-alert c-alert--warning\">\n  <span class=\"c-alert__icon\"><svg class=\"c-icon\" aria-hidden=\"true\" focusable=\"false\"><use href=\"#mcss-icon-warning\"></use></svg></span>\n  <div class=\"c-alert__body\">\n    <p class=\"c-alert__title\"><span class=\"u-sr-only\">Warning: </span>Your trial ends on 12 October 2026</p>\n    <p>Choose a plan to keep your projects.</p>\n  </div>\n</div>"
            },
            "dont": {
              "text": "Don't signal severity with color alone: screen readers and people who can't tell the edge color apart miss it.",
              "html": "<div class=\"c-alert c-alert--warning\">\n  <div class=\"c-alert__body\">\n    <p class=\"c-alert__title\">Your trial ends on 12 October 2026</p>\n  </div>\n</div>",
              "rule": "alert-severity"
            }
          },
          {
            "do": {
              "text": "After a failed submit, list every error in an error alert, each linked to its field, and move focus to it.",
              "html": "<div class=\"c-alert c-alert--error\" tabindex=\"-1\" aria-labelledby=\"summary-title\">\n  <span class=\"c-alert__icon\"><svg class=\"c-icon\" aria-hidden=\"true\" focusable=\"false\"><use href=\"#mcss-icon-error\"></use></svg></span>\n  <div class=\"c-alert__body\">\n    <h2 class=\"c-alert__title\" id=\"summary-title\"><span class=\"u-sr-only\">Error: </span>There is a problem</h2>\n    <ul>\n      <li><a href=\"#email\">Enter your email address</a></li>\n      <li><a href=\"#terms\">Agree to the terms of service</a></li>\n    </ul>\n  </div>\n</div>"
            },
            "dont": {
              "text": "Don't build an alert from elements outside the block: the tile and edge lose their shape.",
              "html": "<div class=\"c-card\">\n  <p class=\"c-alert__title\">There is a problem</p>\n</div>",
              "rule": "element-outside-block"
            }
          }
        ],
        "content": [
          "Titles say what happened in plain words, in sentence case, with no exclamation mark.",
          "The text says what to do next. Name the action: \"Choose a plan\", not \"Click here\".",
          "Keep the hidden prefix to one word and a colon: \"Error:\", \"Warning:\", \"Success:\", \"Information:\"."
        ]
      },
      "tokens": [
        "--alert-background",
        "--alert-border",
        "--alert-edge-info",
        "--alert-edge-success",
        "--alert-edge-warning",
        "--alert-edge-error"
      ],
      "a11y": [
        "Severity is carried three ways: the hidden text prefix, the icon shape and the bottom edge.",
        "role=\"alert\" interrupts the screen reader: only for urgent messages that appear after an action.",
        "An error summary gets tabindex=\"-1\" and focus after a failed submit; its links move focus to each field.",
        "c-alert__close needs aria-label, and the app moves focus to a sensible place after hiding the alert."
      ],
      "keyboard": [
        {
          "key": "Tab",
          "action": "Moves through the links and buttons inside the alert, then the close button."
        },
        {
          "key": "Enter",
          "action": "Follows a link in an error summary to its field."
        }
      ],
      "related": [
        "c-icon",
        "c-form-field",
        "c-modal",
        "c-badge"
      ],
      "examples": [
        {
          "file": "components/alert.html",
          "html": "<div class=\"l-stack\">\n  <div class=\"c-alert c-alert--info\">\n    <span class=\"c-alert__icon\"><svg class=\"c-icon\" aria-hidden=\"true\" focusable=\"false\"><use href=\"#mcss-icon-info\"></use></svg></span>\n    <div class=\"c-alert__body\">\n      <p class=\"c-alert__title\"><span class=\"u-sr-only\">Information: </span>Maintenance on 3 October 2026</p>\n      <p>Sign-in is paused from 22:00 to 23:00 UTC.</p>\n    </div>\n  </div>\n  <div class=\"c-alert c-alert--success\">\n    <span class=\"c-alert__icon\"><svg class=\"c-icon\" aria-hidden=\"true\" focusable=\"false\"><use href=\"#mcss-icon-success\"></use></svg></span>\n    <div class=\"c-alert__body\">\n      <p class=\"c-alert__title\"><span class=\"u-sr-only\">Success: </span>Invoice sent</p>\n      <p>Acme Inc. will get it by email in a few minutes.</p>\n    </div>\n  </div>\n  <div class=\"c-alert c-alert--warning\">\n    <span class=\"c-alert__icon\"><svg class=\"c-icon\" aria-hidden=\"true\" focusable=\"false\"><use href=\"#mcss-icon-warning\"></use></svg></span>\n    <div class=\"c-alert__body\">\n      <p class=\"c-alert__title\"><span class=\"u-sr-only\">Warning: </span>Your trial ends on 12 October 2026</p>\n      <p>Choose a plan to keep your 4 projects.</p>\n      <div class=\"c-alert__actions l-cluster\">\n        <a class=\"c-button c-button--primary c-button--sm\" href=\"#plans\">Choose a plan</a>\n      </div>\n    </div>\n  </div>\n  <div class=\"c-alert c-alert--error\">\n    <span class=\"c-alert__icon\"><svg class=\"c-icon\" aria-hidden=\"true\" focusable=\"false\"><use href=\"#mcss-icon-error\"></use></svg></span>\n    <div class=\"c-alert__body\">\n      <p class=\"c-alert__title\"><span class=\"u-sr-only\">Error: </span>The changes weren't saved</p>\n      <p>The connection dropped. Check your network and save again.</p>\n    </div>\n    <button type=\"button\" class=\"c-alert__close\" aria-label=\"Dismiss this error\"><svg class=\"c-icon\" aria-hidden=\"true\" focusable=\"false\"><use href=\"#mcss-icon-close\"></use></svg></button>\n  </div>\n</div>"
        }
      ],
      "sources": [
        {
          "title": "GOV.UK Design System: Error summary",
          "url": "https://design-system.service.gov.uk/components/error-summary"
        },
        {
          "title": "GOV.UK Design System: Notification banner",
          "url": "https://design-system.service.gov.uk/components/notification-banner"
        },
        {
          "title": "GitLab Pajamas: Alert",
          "url": "https://design.gitlab.com/components/alert"
        },
        {
          "title": "WAI-ARIA APG: Alert pattern",
          "url": "https://www.w3.org/WAI/ARIA/apg/patterns/alert/"
        },
        {
          "title": "Scott O'Hara: Are we live? (live regions)",
          "url": "https://www.scottohara.me/blog/2022/02/05/are-we-live.html"
        }
      ]
    },
    {
      "name": "Badge",
      "block": "c-badge",
      "layer": "component",
      "status": "stable",
      "since": "0.1.0",
      "description": "A short, non-interactive label for status or category, such as \"Beta\" or \"Paid\".",
      "tags": [
        "span"
      ],
      "modifiers": [
        {
          "group": "tone",
          "exclusive": true,
          "values": [
            {
              "name": "primary",
              "description": "Brand emphasis, e.g. \"New\"."
            },
            {
              "name": "success",
              "description": "Positive status, e.g. \"Active\"."
            },
            {
              "name": "warning",
              "description": "Needs attention, e.g. \"Expiring\"."
            },
            {
              "name": "error",
              "description": "Negative status, e.g. \"Failed\"."
            },
            {
              "name": "info",
              "description": "Neutral information, e.g. \"Draft\"."
            }
          ]
        }
      ],
      "guidelines": {
        "whenToUse": [
          "Showing the status of an item: Draft, Active, Failed.",
          "A short category or plan label: Beta, Pro."
        ],
        "whenNotToUse": [
          "Anything clickable, removable or filterable: use `c-button` with c-button--sm.",
          "A count on a navigation item: badges here are for status words, not numbers.",
          "A sentence: use body text or an alert."
        ],
        "use": [
          "Keep badge text to one or two words.",
          "Group several badges with l-cluster."
        ],
        "avoid": [
          "Making a badge clickable; use c-button--sm instead.",
          "Relying on badge color alone to convey meaning; the text must carry the status."
        ],
        "doDont": [
          {
            "do": {
              "text": "Say the status in words; the tone only supports it.",
              "html": "<div class=\"l-cluster\">\n  <span class=\"c-badge c-badge--error\">Failed</span>\n  <span class=\"c-badge c-badge--success\">Passed</span>\n</div>"
            },
            "dont": {
              "text": "Don't make a badge clickable or invent tones.",
              "html": "<span class=\"c-badge c-badge--danger\">Failed</span>",
              "rule": "unknown-class"
            }
          }
        ],
        "content": [
          "One or two words, sentence case: \"In review\", not \"IN REVIEW\".",
          "Each tone keeps one meaning across the product: error always means something failed."
        ]
      },
      "tokens": [
        "--badge-background",
        "--badge-text",
        "--color-action-primary",
        "--color-text-on-action"
      ],
      "a11y": [
        "Color is decorative; the badge text must describe the status on its own."
      ],
      "related": [
        "l-cluster",
        "c-card"
      ],
      "examples": [
        {
          "file": "components/badge.html",
          "html": "<div class=\"l-cluster\">\n  <span class=\"c-badge\">Draft</span>\n  <span class=\"c-badge c-badge--primary\">New</span>\n  <span class=\"c-badge c-badge--success\">Active</span>\n  <span class=\"c-badge c-badge--warning\">Expiring</span>\n  <span class=\"c-badge c-badge--error\">Failed</span>\n  <span class=\"c-badge c-badge--info\">Beta</span>\n</div>"
        }
      ],
      "sources": [
        {
          "title": "GitLab Pajamas: Badge",
          "url": "https://design.gitlab.com/components/badge/"
        },
        {
          "title": "Atlassian: Badge",
          "url": "https://atlassian.design/components/badge"
        },
        {
          "title": "Smart Interface Design Patterns: Badges, chips, tags, pills",
          "url": "https://smart-interface-design-patterns.com/articles/badges-chips-tags-pills/"
        }
      ]
    },
    {
      "name": "Button",
      "block": "c-button",
      "layer": "component",
      "status": "stable",
      "since": "0.1.0",
      "description": "Triggers an action. Apply to <button>. Apply to <a> only when the control navigates. Parts have a 2px keyline and a brick edge that drops when pressed.",
      "tags": [
        "button",
        "a"
      ],
      "modifiers": [
        {
          "group": "variant",
          "exclusive": true,
          "values": [
            {
              "name": "primary",
              "description": "The main action in a view region. Use at most one per region."
            },
            {
              "name": "secondary",
              "description": "Outlined in the action color; for important but not main actions."
            },
            {
              "name": "ghost",
              "description": "No border or background; for low-emphasis actions such as Cancel."
            },
            {
              "name": "danger",
              "description": "Destructive, hard-to-undo actions such as Delete. Brick red."
            }
          ]
        },
        {
          "group": "size",
          "exclusive": true,
          "values": [
            {
              "name": "sm",
              "description": "Compact button for dense UI such as tables and toolbars."
            },
            {
              "name": "lg",
              "description": "Large button for hero or empty-state calls to action."
            }
          ]
        }
      ],
      "states": [
        {
          "name": "disabled",
          "description": "The action cannot run right now. Rendered ghosted with a dashed keyline.",
          "pair": "Prefer aria-disabled=\"true\": the button stays focusable, so link a visible reason with aria-describedby and ignore activation in your handler. The disabled attribute also works on <button> but removes it from the tab order. On <a>, set aria-disabled=\"true\" and remove href."
        },
        {
          "name": "loading",
          "description": "The action is in progress. Shows moving stripes; text keeps full contrast.",
          "pair": "Set aria-busy=\"true\" and aria-disabled=\"true\", keep the visible label (for example \"Saving…\"), and ignore activation in your handler."
        }
      ],
      "guidelines": {
        "whenToUse": [
          "The control does something on this page: submits a form, saves, deletes, opens a dialog, toggles a setting.",
          "A confirming or cancelling action in a form or `c-modal` footer.",
          "An on/off toolbar control such as Bold or Mute, with aria-pressed."
        ],
        "whenNotToUse": [
          "The control goes to another page or URL: use a plain link. Apply c-button to an <a> only when a link must look like a button, such as a start-page call to action.",
          "Showing a status that does nothing when clicked: use `c-badge`.",
          "Filtering or removing items in a list of tags: that is a chip, which MCSS-Lite does not ship yet."
        ],
        "use": [
          "Group buttons with l-cluster; it provides the gap.",
          "Order a button group as secondary or ghost actions first, then the primary action last.",
          "Write labels as verbs that name the outcome: \"Save changes\", not \"OK\".",
          "For toggle buttons (for example a theme switch), set aria-pressed=\"true\" on the selected one; it gets the pressed style automatically.",
          "Use c-button--danger for the confirming action of anything destructive, never c-button--primary."
        ],
        "avoid": [
          "Adding margin to .c-button. Spacing belongs to the layout parent.",
          "Combining two variant modifiers (for example c-button--primary c-button--ghost).",
          "Using c-button on a <div> or <span>."
        ],
        "doDont": [
          {
            "do": {
              "text": "Use one primary button per region, placed last in its group.",
              "html": "<div class=\"l-cluster\">\n  <button type=\"button\" class=\"c-button c-button--ghost\">Cancel</button>\n  <button type=\"submit\" class=\"c-button c-button--primary\">Save changes</button>\n</div>"
            },
            "dont": {
              "text": "Don't combine two variants on one button to make it stand out more.",
              "html": "<button type=\"submit\" class=\"c-button c-button--primary c-button--danger\">Save changes</button>",
              "rule": "exclusive-modifiers"
            }
          },
          {
            "do": {
              "text": "Keep an unavailable action focusable and say why it can't run, with aria-disabled and a linked reason.",
              "html": "<div class=\"l-stack l-stack--sm\">\n  <button type=\"button\" class=\"c-button c-button--primary\" data-state=\"disabled\" aria-disabled=\"true\" aria-describedby=\"publish-why\">Publish</button>\n  <p id=\"publish-why\" class=\"u-margin-0\">Add a title before you publish.</p>\n</div>"
            },
            "dont": {
              "text": "Don't grey out a button without saying why, or set the state without its native pair.",
              "html": "<button type=\"button\" class=\"c-button\" data-state=\"disabled\">Publish</button>",
              "rule": "state-pair"
            }
          },
          {
            "do": {
              "text": "Invent nothing: a warning-style action is c-button--danger or a plain button.",
              "html": "<button type=\"button\" class=\"c-button c-button--danger\">Delete project</button>"
            },
            "dont": {
              "text": "Don't guess a modifier that isn't in the contract.",
              "html": "<button type=\"button\" class=\"c-button c-button--warning\">Delete project</button>",
              "rule": "unknown-class"
            }
          },
          {
            "do": {
              "text": "Label the button with what happens: a verb and the thing it acts on.",
              "html": "<button type=\"submit\" class=\"c-button c-button--primary\">Create account</button>"
            },
            "dont": {
              "text": "Don't use vague labels: \"OK\" or \"Submit\" say nothing when a screen reader lists every button on the page.",
              "html": "<button type=\"submit\" class=\"c-button c-button--primary\">Submit</button>",
              "rule": "content-vague"
            }
          },
          {
            "do": {
              "text": "Use a real <button> for actions; it brings focus, Enter and Space for free.",
              "html": "<button type=\"button\" class=\"c-button\" hx-post=\"/projects/42/archive\">Archive project</button>"
            },
            "dont": {
              "text": "Don't make a div clickable: it has no role, no focus and no keyboard, even with the button classes.",
              "html": "<div class=\"c-button\" hx-post=\"/projects/42/archive\">Archive project</div>",
              "rule": "clickable-div"
            }
          }
        ],
        "content": [
          "Write a verb plus the thing it acts on: \"Save changes\", \"Delete project\". Never \"OK\", \"Submit\" or \"Click here\".",
          "Use sentence case: \"Create account\", not \"Create Account\".",
          "Keep the label the same when a toggle changes state; aria-pressed carries the state.",
          "A danger button names what is destroyed: \"Delete account\", not \"Confirm\".",
          "No full stop at the end of a label."
        ]
      },
      "tokens": [
        "--button-background",
        "--button-background-hover",
        "--button-border",
        "--button-text",
        "--button-radius",
        "--button-shadow",
        "--button-primary-background",
        "--button-primary-background-hover",
        "--button-primary-text",
        "--button-secondary-text",
        "--button-secondary-border",
        "--button-ghost-background-hover",
        "--button-danger-background",
        "--button-danger-background-hover",
        "--button-danger-text",
        "--button-pressed-background",
        "--button-pressed-border",
        "--button-pressed-text",
        "--button-primary-border",
        "--button-danger-border",
        "--button-primary-background-active"
      ],
      "a11y": [
        "A button needs a visible text label, or aria-label when it only contains an icon.",
        "Do not remove the :focus-visible outline.",
        "Use type=\"button\" unless the button submits a form.",
        "c-button--sm looks compact but keeps a 44px tall hit area.",
        "Don't disable a submit button until the form is valid. Let people submit, then show what is missing."
      ],
      "keyboard": [
        {
          "key": "Enter",
          "action": "Activates the button."
        },
        {
          "key": "Space",
          "action": "Activates the button (not links)."
        },
        {
          "key": "Tab",
          "action": "Moves focus to the button, including one marked aria-disabled."
        }
      ],
      "related": [
        "l-cluster",
        "c-modal"
      ],
      "examples": [
        {
          "file": "components/button.html",
          "html": "<div class=\"l-cluster\">\n  <button type=\"button\" class=\"c-button c-button--ghost\">Cancel</button>\n  <button type=\"button\" class=\"c-button\">Save draft</button>\n  <button type=\"button\" class=\"c-button c-button--primary\">Publish post</button>\n</div>\n\n<div class=\"l-cluster\">\n  <button type=\"button\" class=\"c-button c-button--secondary c-button--sm\">Export CSV</button>\n  <button type=\"button\" class=\"c-button c-button--secondary\">Duplicate post</button>\n  <button type=\"button\" class=\"c-button c-button--lg\">Create a project</button>\n</div>\n\n<div class=\"l-stack l-stack--sm\">\n  <div class=\"l-cluster\">\n    <button type=\"button\" class=\"c-button\" data-state=\"disabled\" aria-disabled=\"true\" aria-describedby=\"schedule-reason\">Schedule post</button>\n    <button type=\"button\" class=\"c-button\" data-state=\"loading\" aria-busy=\"true\" aria-disabled=\"true\">Saving…</button>\n  </div>\n  <p class=\"u-margin-0\" id=\"schedule-reason\">Add a publish date to schedule the post.</p>\n</div>\n\n<div class=\"l-cluster\" role=\"group\" aria-label=\"View\">\n  <button type=\"button\" class=\"c-button c-button--sm\" aria-pressed=\"true\">List</button>\n  <button type=\"button\" class=\"c-button c-button--sm\" aria-pressed=\"false\">Grid</button>\n</div>\n\n<button type=\"button\" class=\"c-button c-button--danger\">Delete project</button>"
        }
      ],
      "sources": [
        {
          "title": "GOV.UK Design System: Button",
          "url": "https://design-system.service.gov.uk/components/button/"
        },
        {
          "title": "Primer: Button guidelines",
          "url": "https://primer.style/product/components/button/guidelines/"
        },
        {
          "title": "NN/g: Why disabled buttons hurt UX",
          "url": "https://www.nngroup.com/videos/why-disabled-buttons-hurt-ux-and-how-to-fix-them/"
        },
        {
          "title": "Axess Lab: Disabled buttons suck",
          "url": "https://axesslab.com/disabled-buttons-suck/"
        },
        {
          "title": "Bekk: Accessible loading button",
          "url": "https://www.bekk.christmas/post/2023/24/accessible-loading-button"
        },
        {
          "title": "Sara Soueidan: Accessible icon buttons",
          "url": "https://www.sarasoueidan.com/blog/accessible-icon-buttons/"
        },
        {
          "title": "Adrian Roselli: Be careful with dynamic accessible names",
          "url": "https://adrianroselli.com/2020/12/be-careful-with-dynamic-accessible-names.html"
        }
      ]
    },
    {
      "name": "Card",
      "block": "c-card",
      "layer": "component",
      "status": "stable",
      "since": "0.1.0",
      "description": "A raised surface that groups related content, such as a summary, a settings group or a list item.",
      "tags": [
        "article",
        "section",
        "div",
        "li",
        "a"
      ],
      "modifiers": [
        {
          "group": "surface",
          "exclusive": true,
          "values": [
            {
              "name": "elevated",
              "description": "Stronger shadow to lift the card above its neighbors."
            },
            {
              "name": "bordered",
              "description": "Keyline only, no brick edge; for flat, dense layouts."
            }
          ]
        },
        {
          "group": "behavior",
          "exclusive": false,
          "values": [
            {
              "name": "interactive",
              "description": "The whole card is clickable; shows hover feedback."
            }
          ]
        }
      ],
      "elements": [
        {
          "name": "header",
          "description": "Top area; holds the title and optional badges.",
          "tags": [
            "header",
            "div"
          ]
        },
        {
          "name": "title",
          "description": "Card heading. Use the heading level that fits the page outline.",
          "tags": [
            "h2",
            "h3",
            "h4",
            "h5",
            "h6"
          ]
        },
        {
          "name": "body",
          "description": "Main content.",
          "tags": [
            "div",
            "p"
          ]
        },
        {
          "name": "footer",
          "description": "Bottom area for actions or metadata; has a top divider.",
          "tags": [
            "footer",
            "div"
          ]
        }
      ],
      "guidelines": {
        "whenToUse": [
          "A collection of similar items people browse and open one at a time: projects, articles, plans.",
          "A dashboard summary that groups a figure with its actions.",
          "A group of related settings."
        ],
        "whenNotToUse": [
          "People compare items side by side or scan dense data: use a list or table.",
          "Grouping inside another card: use `l-stack` and a heading instead of a card in a card.",
          "A page section with no border of its own: use `l-section`."
        ],
        "use": [
          "Place cards in l-grid or l-stack; the layout sets the gap between cards.",
          "For c-card--interactive, make the card an <a> or put one link inside whose area covers the card."
        ],
        "avoid": [
          "Nesting cards inside cards.",
          "Adding margin to .c-card.",
          "Putting several competing links inside a c-card--interactive."
        ],
        "doDont": [
          {
            "do": {
              "text": "Put the link on the title and add c-card--interactive; the link covers the card and other actions stay clickable.",
              "html": "<article class=\"c-card c-card--interactive\">\n  <div class=\"c-card__header\">\n    <h3 class=\"c-card__title\"><a href=\"#atlas\">Atlas</a></h3>\n  </div>\n  <div class=\"c-card__body\">\n    <p class=\"u-margin-0\">Updated 2 hours ago</p>\n  </div>\n</article>"
            },
            "dont": {
              "text": "Don't wrap the whole card in a link: screen readers read the entire card as one long link name.",
              "html": "<a class=\"c-card c-card--interactive\" href=\"#atlas\">\n  <h3 class=\"c-card__title\">Atlas</h3>\n  <p class=\"u-margin-0\">Updated 2 hours ago</p>\n</a>",
              "rule": "card-link"
            }
          },
          {
            "do": {
              "text": "Let the grid space the cards.",
              "html": "<div class=\"l-grid l-grid--responsive\">\n  <section class=\"c-card c-card--bordered\"><p class=\"u-margin-0\">Storage: 4 GB of 10 GB</p></section>\n  <section class=\"c-card c-card--bordered\"><p class=\"u-margin-0\">Seats: 12 of 20</p></section>\n</div>"
            },
            "dont": {
              "text": "Don't space cards with their own margin.",
              "html": "<section class=\"c-card\" style=\"margin-block-end: 16px\"><p class=\"u-margin-0\">Storage: 4 GB of 10 GB</p></section>",
              "rule": "golden-rule"
            }
          },
          {
            "do": {
              "text": "Group content inside a card with headings and l-stack.",
              "html": "<article class=\"c-card\">\n  <h3 class=\"c-card__title\">Billing</h3>\n  <div class=\"c-card__body l-stack l-stack--sm\">\n    <p class=\"u-margin-0\">Team plan, 12 of 20 seats.</p>\n    <p class=\"u-margin-0\">Next invoice on 1 November 2026.</p>\n  </div>\n</article>"
            },
            "dont": {
              "text": "Don't put a card inside a card: the nested keylines read as clutter and flatten the hierarchy.",
              "html": "<article class=\"c-card\">\n  <h3 class=\"c-card__title\">Billing</h3>\n  <div class=\"c-card\">\n    <p>Team plan, 12 of 20 seats.</p>\n  </div>\n</article>",
              "rule": "card-nesting"
            }
          }
        ],
        "content": [
          "The title names the thing, not the action: \"Atlas\", not \"View Atlas\".",
          "Keep the body to one or two lines of summary; details belong on the page the card opens."
        ]
      },
      "children": [
        "Elements appear in the order header, body, footer. All are optional.",
        "c-card__title goes inside c-card__header."
      ],
      "tokens": [
        "--card-background",
        "--card-border",
        "--card-border-hover",
        "--card-radius",
        "--card-padding",
        "--card-shadow",
        "--card-shadow-elevated"
      ],
      "a11y": [
        "An interactive card must be reachable with the keyboard: use a real <a> or <button>, never a click handler on a <div>.",
        "Keep the title a real heading so screen reader users can navigate by headings."
      ],
      "keyboard": [
        {
          "key": "Tab",
          "action": "Focuses the title link (the card shows the focus ring), then any other actions in the card."
        }
      ],
      "related": [
        "l-grid",
        "l-stack",
        "c-badge",
        "c-button"
      ],
      "examples": [
        {
          "file": "components/card.html",
          "html": "<div class=\"l-grid l-grid--responsive\">\n  <article class=\"c-card\">\n    <header class=\"c-card__header\">\n      <div class=\"l-cluster\">\n        <h3 class=\"c-card__title\">Team plan</h3>\n        <span class=\"c-badge c-badge--success\">Active</span>\n      </div>\n    </header>\n    <div class=\"c-card__body\">\n      <p class=\"u-margin-0\">12 of 20 seats used. Renews on 1 March.</p>\n    </div>\n    <footer class=\"c-card__footer\">\n      <div class=\"l-cluster\">\n        <button type=\"button\" class=\"c-button c-button--sm\">Manage seats</button>\n      </div>\n    </footer>\n  </article>\n\n  <article class=\"c-card c-card--interactive\">\n    <div class=\"c-card__header\">\n      <h3 class=\"c-card__title\"><a href=\"/projects/atlas\">Atlas</a></h3>\n    </div>\n    <div class=\"c-card__body\">\n      <p class=\"u-margin-0\">Updated 2 hours ago</p>\n    </div>\n  </article>\n\n  <section class=\"c-card c-card--bordered\">\n    <div class=\"c-card__body\">\n      <p class=\"u-margin-0\">Invoices go to finance@example.com on the 1st of each month.</p>\n    </div>\n  </section>\n</div>"
        }
      ],
      "sources": [
        {
          "title": "Adrian Roselli: Block links, cards, clickable regions",
          "url": "https://adrianroselli.com/2020/02/block-links-cards-clickable-regions-etc.html"
        },
        {
          "title": "Inclusive Components: Cards",
          "url": "https://inclusive-components.design/cards/"
        },
        {
          "title": "NN/g: Cards component",
          "url": "https://www.nngroup.com/articles/cards-component/"
        }
      ]
    },
    {
      "name": "Checkbox",
      "block": "c-checkbox",
      "layer": "component",
      "status": "beta",
      "since": "0.4.0",
      "description": "A native checkbox with its label: pick any number of options, or confirm one statement.",
      "tags": [
        "div"
      ],
      "elements": [
        {
          "name": "input",
          "description": "The native control. Carries every state: checked, disabled, aria-invalid.",
          "tags": [
            "input"
          ],
          "required": true
        },
        {
          "name": "label",
          "description": "The visible label, linked with for/id. Clicking it toggles the control and pads the hit area.",
          "tags": [
            "label"
          ],
          "required": true
        },
        {
          "name": "hint",
          "description": "Optional one-line hint under the label, linked with aria-describedby.",
          "tags": [
            "p",
            "div",
            "span"
          ]
        }
      ],
      "states": [
        {
          "name": "checked",
          "native": true,
          "selector": ":checked",
          "description": "Selected: the box seats and fills with ink, with a paper tick.",
          "pair": "Use the checked attribute, never data-state."
        },
        {
          "name": "indeterminate",
          "native": true,
          "selector": ":indeterminate",
          "description": "Mixed: some, not all, of the options below it are selected. Drawn as a flat bar.",
          "pair": "Set input.indeterminate = true from JavaScript; HTML has no attribute for it. It is a display state, never a submitted value."
        },
        {
          "name": "disabled",
          "native": true,
          "selector": ":disabled",
          "description": "Cannot be changed. Dashed keyline, ghosted label.",
          "pair": "Use the disabled attribute, and say nearby why it is unavailable."
        },
        {
          "name": "error",
          "native": true,
          "selector": "[aria-invalid=\"true\"]",
          "description": "Needs attention, e.g. an unticked agreement on submit. Red keyline with a heavier bottom edge.",
          "pair": "Set aria-invalid=\"true\" and aria-describedby pointing at the c-form-field__error message."
        }
      ],
      "children": [
        "Order: c-checkbox__input, then c-checkbox__label, then an optional c-checkbox__hint.",
        "Group related checkboxes in fieldset.c-form-field with a legend.c-form-field__label, stacked with l-stack--sm."
      ],
      "guidelines": {
        "whenToUse": [
          "Choosing any number of options from a short list, including none.",
          "Confirming one statement before submitting, such as agreeing to terms.",
          "A setting that is saved when the form is submitted, not straight away."
        ],
        "whenNotToUse": [
          "Exactly one option must be chosen: use `c-radio`.",
          "The setting takes effect the moment it changes, with no submit button: use `c-toggle`.",
          "More than about 7 options: use a `c-input` on a <select multiple> or a searchable list."
        ],
        "use": [
          "Write labels as positive statements: \"Email me about new releases\".",
          "Put the group question in the legend and keep each label short."
        ],
        "avoid": [
          "Negative labels such as \"Don't email me\": people tick them wrongly.",
          "Using a checkbox to trigger an action immediately; that is a toggle or a button."
        ],
        "doDont": [
          {
            "do": {
              "text": "Group related checkboxes in a fieldset with a legend that asks the question.",
              "html": "<fieldset class=\"c-form-field\">\n  <legend class=\"c-form-field__label\">Which updates do you want?</legend>\n  <div class=\"l-stack l-stack--sm\">\n    <div class=\"c-checkbox\">\n      <input class=\"c-checkbox__input\" type=\"checkbox\" id=\"news-releases\" name=\"news\" value=\"releases\" checked>\n      <label class=\"c-checkbox__label\" for=\"news-releases\">New releases</label>\n    </div>\n    <div class=\"c-checkbox\">\n      <input class=\"c-checkbox__input\" type=\"checkbox\" id=\"news-security\" name=\"news\" value=\"security\">\n      <label class=\"c-checkbox__label\" for=\"news-security\">Security notices</label>\n    </div>\n  </div>\n</fieldset>"
            },
            "dont": {
              "text": "Don't fake the checked state with data-state: it isn't submitted and screen readers never hear it.",
              "html": "<div class=\"c-checkbox\" data-state=\"checked\">\n  <input class=\"c-checkbox__input\" type=\"checkbox\" id=\"terms-fake\">\n  <label class=\"c-checkbox__label\" for=\"terms-fake\">I agree to the terms</label>\n</div>",
              "rule": "invalid-state"
            }
          },
          {
            "do": {
              "text": "Show an unticked agreement as an error with aria-invalid and a linked message.",
              "html": "<div class=\"c-form-field\">\n  <div class=\"c-checkbox\">\n    <input class=\"c-checkbox__input\" type=\"checkbox\" id=\"terms\" aria-invalid=\"true\" aria-describedby=\"terms-error\">\n    <label class=\"c-checkbox__label\" for=\"terms\">I agree to the terms of service</label>\n  </div>\n  <p class=\"c-form-field__error\" id=\"terms-error\">Agree to the terms of service to create an account.</p>\n</div>"
            },
            "dont": {
              "text": "Don't leave a checkbox without its label: \"on\" and \"off\" mean nothing without the statement they answer.",
              "html": "<div class=\"c-checkbox\">\n  <input class=\"c-checkbox__input\" type=\"checkbox\" id=\"news-alone\">\n  <p class=\"c-checkbox__hint\">Weekly, no ads.</p>\n</div>",
              "rule": "label-missing"
            }
          }
        ],
        "content": [
          "Labels are positive statements in sentence case, with no full stop.",
          "The legend asks the question; the labels are the answers.",
          "Mark an optional group \"(optional)\" in the legend."
        ]
      },
      "tokens": [
        "--checkbox-size",
        "--checkbox-background",
        "--checkbox-border",
        "--checkbox-checked-background",
        "--checkbox-mark",
        "--checkbox-radius"
      ],
      "a11y": [
        "Keep the native <input type=\"checkbox\">: it brings the role, the checked state, Space to toggle and form submission for free.",
        "Every checkbox needs a <label for> on c-checkbox__label; a group needs fieldset + legend.",
        "The box is 24px and the label extends the hit area; never hide the input with display: none.",
        "aria-invalid is allowed on a checkbox; on a group, put data-state=\"error\" on the fieldset instead."
      ],
      "keyboard": [
        {
          "key": "Tab",
          "action": "Moves focus to the next checkbox."
        },
        {
          "key": "Space",
          "action": "Ticks or clears the focused checkbox."
        }
      ],
      "related": [
        "c-radio",
        "c-toggle",
        "c-form-field",
        "l-stack"
      ],
      "examples": [
        {
          "file": "components/checkbox.html",
          "html": "<fieldset class=\"c-form-field\">\n  <legend class=\"c-form-field__label\">Which updates do you want? (optional)</legend>\n  <div class=\"l-stack l-stack--sm\">\n    <div class=\"c-checkbox\">\n      <input class=\"c-checkbox__input\" type=\"checkbox\" id=\"updates-releases\" name=\"updates\" value=\"releases\" checked>\n      <label class=\"c-checkbox__label\" for=\"updates-releases\">New releases</label>\n    </div>\n    <div class=\"c-checkbox\">\n      <input class=\"c-checkbox__input\" type=\"checkbox\" id=\"updates-security\" name=\"updates\" value=\"security\" aria-describedby=\"updates-security-hint\">\n      <label class=\"c-checkbox__label\" for=\"updates-security\">Security notices</label>\n      <p class=\"c-checkbox__hint\" id=\"updates-security-hint\">Sent within a day of a fix.</p>\n    </div>\n    <div class=\"c-checkbox\">\n      <input class=\"c-checkbox__input\" type=\"checkbox\" id=\"updates-digest\" name=\"updates\" value=\"digest\" disabled aria-describedby=\"updates-digest-hint\">\n      <label class=\"c-checkbox__label\" for=\"updates-digest\">Monthly digest</label>\n      <p class=\"c-checkbox__hint\" id=\"updates-digest-hint\">Coming in March 2027.</p>\n    </div>\n  </div>\n</fieldset>"
        }
      ],
      "sources": [
        {
          "title": "GOV.UK Design System: Checkboxes",
          "url": "https://design-system.service.gov.uk/components/checkboxes"
        },
        {
          "title": "NN/g: Checkboxes vs. radio buttons",
          "url": "https://www.nngroup.com/articles/checkboxes-vs-radio-buttons/"
        },
        {
          "title": "WAI-ARIA APG: Checkbox pattern (mixed state)",
          "url": "https://www.w3.org/WAI/ARIA/apg/patterns/checkbox/"
        },
        {
          "title": "Sara Soueidan: Inclusively hiding and styling checkboxes and radio buttons",
          "url": "https://www.sarasoueidan.com/blog/inclusively-hiding-and-styling-checkboxes-and-radio-buttons/"
        }
      ]
    },
    {
      "name": "Form field",
      "block": "c-form-field",
      "layer": "component",
      "status": "stable",
      "since": "0.1.0",
      "description": "Wraps one form control with its label, help text and error message.",
      "tags": [
        "div",
        "fieldset"
      ],
      "elements": [
        {
          "name": "label",
          "description": "The field label.",
          "tags": [
            "label",
            "legend"
          ],
          "required": true
        },
        {
          "name": "help",
          "description": "Hint shown below the control.",
          "tags": [
            "p",
            "div",
            "span"
          ]
        },
        {
          "name": "error",
          "description": "Error message shown when the control has data-state=\"error\".",
          "tags": [
            "p",
            "div",
            "span"
          ]
        }
      ],
      "guidelines": {
        "whenToUse": [
          "Any form control that needs a label, help text or an error message.",
          "Each field of a form; stack the fields with `l-stack`."
        ],
        "whenNotToUse": [
          "A search box in a toolbar with a visible button: a labelled `c-input` inside `l-cluster` is enough, with a visually hidden label."
        ],
        "use": [
          "Stack several c-form-field blocks with l-stack."
        ],
        "avoid": [
          "Adding margin to .c-form-field; the layout parent spaces fields."
        ],
        "doDont": [
          {
            "do": {
              "text": "Link help and error text to the control with aria-describedby.",
              "html": "<div class=\"c-form-field\">\n  <label class=\"c-form-field__label\" for=\"phone\">Phone number (optional)</label>\n  <p class=\"c-form-field__help\" id=\"phone-help\">For delivery updates only.</p>\n  <input class=\"c-input\" id=\"phone\" type=\"tel\" autocomplete=\"tel\" aria-describedby=\"phone-help\">\n</div>"
            },
            "dont": {
              "text": "Don't use the elements outside their block: the help text loses its spacing and link.",
              "html": "<p class=\"c-form-field__help\">For delivery updates only.</p>",
              "rule": "element-outside-block"
            }
          },
          {
            "do": {
              "text": "Space fields with l-stack.",
              "html": "<form class=\"l-stack\">\n  <div class=\"c-form-field\">\n    <label class=\"c-form-field__label\" for=\"first\">First name</label>\n    <input class=\"c-input\" id=\"first\" autocomplete=\"given-name\">\n  </div>\n  <div class=\"c-form-field\">\n    <label class=\"c-form-field__label\" for=\"last\">Last name</label>\n    <input class=\"c-input\" id=\"last\" autocomplete=\"family-name\">\n  </div>\n</form>"
            },
            "dont": {
              "text": "Don't push fields apart with margins on the field.",
              "html": "<div class=\"c-form-field\" style=\"margin-bottom: 24px\">\n  <label class=\"c-form-field__label\" for=\"first2\">First name</label>\n  <input class=\"c-input\" id=\"first2\">\n</div>",
              "rule": "golden-rule"
            }
          }
        ],
        "content": [
          "Labels are short nouns in sentence case: \"Email address\", not \"Please Enter Your Email\".",
          "Help text explains format or why you ask; keep it to one sentence.",
          "Mark optional fields \"(optional)\" and ask only for what you need.",
          "After a failed submit, list every error at the top of the form, each linked to its field."
        ]
      },
      "children": [
        "Order: c-form-field__label, then the control (c-input), then c-form-field__help and/or c-form-field__error."
      ],
      "tokens": [
        "--color-text-muted",
        "--color-text-subtle",
        "--color-text-error"
      ],
      "a11y": [
        "Connect label and control with for/id.",
        "Give help and error elements ids and list them in the control's aria-describedby.",
        "Use role=\"alert\" or a live region on the error when it appears after submit."
      ],
      "related": [
        "c-input",
        "l-stack",
        "c-checkbox",
        "c-radio"
      ],
      "examples": [
        {
          "file": "components/form-field.html",
          "html": "<form class=\"l-stack\" novalidate>\n  <div class=\"c-form-field\">\n    <label class=\"c-form-field__label\" for=\"email\">Work email</label>\n    <input class=\"c-input\" id=\"email\" type=\"email\" autocomplete=\"email\" aria-describedby=\"email-help\">\n    <p class=\"c-form-field__help\" id=\"email-help\">We'll send the invite here.</p>\n  </div>\n\n  <div class=\"c-form-field\">\n    <label class=\"c-form-field__label\" for=\"password\">Password</label>\n    <input class=\"c-input\" id=\"password\" type=\"password\" data-state=\"error\" aria-invalid=\"true\" aria-describedby=\"password-error\">\n    <p class=\"c-form-field__error\" id=\"password-error\">Use at least 12 characters.</p>\n  </div>\n\n  <div class=\"c-form-field\">\n    <label class=\"c-form-field__label\" for=\"org\">Organization</label>\n    <input class=\"c-input\" id=\"org\" type=\"text\" value=\"Acme Inc.\" data-state=\"disabled\" disabled>\n  </div>\n\n  <div class=\"l-cluster\">\n    <button type=\"submit\" class=\"c-button c-button--primary\">Create account</button>\n  </div>\n</form>"
        }
      ],
      "sources": [
        {
          "title": "GOV.UK Design System: Error message",
          "url": "https://design-system.service.gov.uk/components/error-message"
        },
        {
          "title": "GOV.UK Design System: Validation",
          "url": "https://design-system.service.gov.uk/patterns/validation"
        },
        {
          "title": "NN/g: Error-message guidelines for forms",
          "url": "https://www.nngroup.com/articles/errors-forms-design-guidelines/"
        },
        {
          "title": "NN/g: Marking required fields in forms",
          "url": "https://www.nngroup.com/articles/required-fields/"
        }
      ],
      "states": [
        {
          "name": "error",
          "description": "A group of checkboxes or radios needs attention. Put it on the fieldset: the controls in it take the error keyline.",
          "pair": "Set aria-describedby on the fieldset pointing at its c-form-field__error; ARIA doesn't allow aria-invalid on a fieldset or a radio."
        }
      ]
    },
    {
      "name": "Icon",
      "block": "c-icon",
      "layer": "component",
      "status": "beta",
      "since": "0.4.0",
      "description": "A line icon from the MCSS-Lite sprite, drawn with a 2px stroke in the current text color.",
      "tags": [
        "svg"
      ],
      "modifiers": [
        {
          "group": "size",
          "exclusive": true,
          "values": [
            {
              "name": "sm",
              "description": "16px, for dense text and small buttons."
            },
            {
              "name": "lg",
              "description": "24px, for alerts and empty states."
            }
          ]
        }
      ],
      "children": [
        "Exactly one <use href=\"#mcss-icon-<name>\">; the names are listed under Icons in AGENTS.md."
      ],
      "guidelines": {
        "whenToUse": [
          "Next to a label, to help people scan: a download button, an external link.",
          "Inside a severity tile in `c-alert`, where each tone has its own shape.",
          "An icon-only button, with an accessible name on the button."
        ],
        "whenNotToUse": [
          "As the only way to show meaning when a word would do: write the word.",
          "For decoration that repeats a nearby label; leave it out."
        ],
        "use": [
          "Inline the sprite once per page, then reference symbols by id.",
          "Let the icon inherit the text color; change color on the parent."
        ],
        "avoid": [
          "Linking the sprite from a CDN: browsers block <use> across origins.",
          "Coloring icons blue for decoration: blue means \"act\"."
        ],
        "doDont": [
          {
            "do": {
              "text": "Hide a decorative icon from screen readers; the button text names the action.",
              "html": "<button type=\"button\" class=\"c-button\">\n  <svg class=\"c-icon\" aria-hidden=\"true\" focusable=\"false\"><use href=\"#mcss-icon-download\"></use></svg>\n  Download the invoice\n</button>"
            },
            "dont": {
              "text": "Don't leave an icon exposed and unnamed: screen readers announce an unlabelled image, or nothing.",
              "html": "<svg class=\"c-icon\"><use href=\"#mcss-icon-download\"></use></svg>",
              "rule": "a11y"
            }
          },
          {
            "do": {
              "text": "Give an icon-only button its name with aria-label.",
              "html": "<button type=\"button\" class=\"c-button\" aria-label=\"Copy the API key\">\n  <svg class=\"c-icon\" aria-hidden=\"true\" focusable=\"false\"><use href=\"#mcss-icon-copy\"></use></svg>\n</button>"
            },
            "dont": {
              "text": "Don't invent icon names: an unknown symbol draws nothing.",
              "html": "<svg class=\"c-icon\" aria-hidden=\"true\"><use href=\"#mcss-icon-rocket\"></use></svg>",
              "rule": "unknown-icon"
            }
          }
        ]
      },
      "tokens": [
        "--icon-size",
        "--icon-size-sm",
        "--icon-size-lg"
      ],
      "a11y": [
        "Decorative icons: aria-hidden=\"true\" and focusable=\"false\".",
        "Meaningful icons with no visible text: role=\"img\" and aria-label on the <svg>.",
        "Severity must never rely on an icon alone; pair it with text."
      ],
      "related": [
        "c-button",
        "c-alert"
      ],
      "examples": [
        {
          "file": "components/icon.html",
          "html": "<div class=\"l-cluster\">\n  <button type=\"button\" class=\"c-button\">\n    <svg class=\"c-icon\" aria-hidden=\"true\" focusable=\"false\"><use href=\"#mcss-icon-download\"></use></svg>\n    Download the invoice\n  </button>\n  <a class=\"c-button c-button--ghost\" href=\"https://design.gitlab.com/\">\n    Pajamas docs\n    <svg class=\"c-icon c-icon--sm\" aria-hidden=\"true\" focusable=\"false\"><use href=\"#mcss-icon-external-link\"></use></svg>\n  </a>\n  <button type=\"button\" class=\"c-button\" aria-label=\"Copy the API key\">\n    <svg class=\"c-icon\" aria-hidden=\"true\" focusable=\"false\"><use href=\"#mcss-icon-copy\"></use></svg>\n  </button>\n</div>"
        }
      ],
      "sources": [
        {
          "title": "Sara Soueidan: Accessible icon buttons",
          "url": "https://www.sarasoueidan.com/blog/accessible-icon-buttons/"
        },
        {
          "title": "GitLab Pajamas: Icons",
          "url": "https://design.gitlab.com/product-foundations/iconography"
        }
      ]
    },
    {
      "name": "Input",
      "block": "c-input",
      "layer": "component",
      "status": "stable",
      "since": "0.1.0",
      "description": "Single-line text entry. Also styles <textarea> and <select>.",
      "tags": [
        "input",
        "textarea",
        "select"
      ],
      "states": [
        {
          "name": "error",
          "description": "The value is invalid. Adds a heavier bottom edge so the state does not rely on color.",
          "pair": "Set aria-invalid=\"true\" and aria-describedby pointing at the c-form-field__error message."
        },
        {
          "name": "success",
          "description": "The value was validated successfully."
        },
        {
          "name": "disabled",
          "description": "The field cannot be edited. Rendered ghosted with a dashed keyline.",
          "pair": "Also set the disabled attribute."
        }
      ],
      "guidelines": {
        "whenToUse": [
          "One line of free text: a name, an email address, a search query, a number.",
          "Multi-line text on a <textarea>, or a choice from many options on a <select>."
        ],
        "whenNotToUse": [
          "Choosing among 2 to 6 visible options: `c-radio` buttons read faster than a select.",
          "A yes/no choice: `c-checkbox`, or `c-toggle` when it applies straight away.",
          "Showing a value that cannot change: plain text, not a read-only input."
        ],
        "use": [
          "Always wrap in c-form-field with a c-form-field__label.",
          "Use the right type attribute (email, tel, number, search) so mobile keyboards match."
        ],
        "avoid": [
          "Using placeholder text as the only label.",
          "Setting a width on .c-input; it fills its container. Constrain the container instead."
        ],
        "doDont": [
          {
            "do": {
              "text": "Give every input a visible label that stays visible while typing.",
              "html": "<div class=\"c-form-field\">\n  <label class=\"c-form-field__label\" for=\"email\">Email address</label>\n  <input class=\"c-input\" id=\"email\" type=\"email\" autocomplete=\"email\">\n</div>"
            },
            "dont": {
              "text": "Don't use the placeholder as the label: it disappears as soon as someone types.",
              "html": "<input class=\"c-input\" type=\"email\" placeholder=\"Email address\">",
              "rule": "label-missing"
            }
          },
          {
            "do": {
              "text": "Pair the error state with aria-invalid and link the message with aria-describedby.",
              "html": "<div class=\"c-form-field\">\n  <label class=\"c-form-field__label\" for=\"start\">Start date</label>\n  <input class=\"c-input\" id=\"start\" data-state=\"error\" aria-invalid=\"true\" aria-describedby=\"start-error\">\n  <p class=\"c-form-field__error\" id=\"start-error\">Enter a start date after 1 January 2020.</p>\n</div>"
            },
            "dont": {
              "text": "Don't show an error with a red border alone.",
              "html": "<input class=\"c-input\" data-state=\"error\">",
              "rule": "state-pair"
            }
          }
        ],
        "content": [
          "Error messages say what went wrong and how to fix it: \"Enter a date after 1 January 2020\", not \"Invalid date\".",
          "Show errors when the person leaves the field or submits, not while they type the first value. Once a field is in error, clear the message as soon as it is fixed.",
          "Mark the few optional fields with \"(optional)\" in the label; don't add asterisks to required ones."
        ]
      },
      "tokens": [
        "--input-background",
        "--input-border",
        "--input-border-focus",
        "--input-text",
        "--input-placeholder",
        "--input-radius",
        "--color-focus-ring",
        "--color-focus-ring-error"
      ],
      "a11y": [
        "Every input needs a programmatic label: <label for> on c-form-field__label.",
        "Error text must be linked with aria-describedby, not only shown in red."
      ],
      "keyboard": [
        {
          "key": "Tab",
          "action": "Moves focus into and out of the field."
        }
      ],
      "related": [
        "c-form-field",
        "l-stack"
      ],
      "examples": [
        {
          "file": "components/input.html",
          "html": "<div class=\"c-form-field\">\n  <label class=\"c-form-field__label\" for=\"search\">Search projects</label>\n  <input class=\"c-input\" id=\"search\" type=\"search\" placeholder=\"Name or ID\">\n</div>"
        }
      ],
      "sources": [
        {
          "title": "GOV.UK Design System: Error message",
          "url": "https://design-system.service.gov.uk/components/error-message"
        },
        {
          "title": "GOV.UK Design System: Validation",
          "url": "https://design-system.service.gov.uk/patterns/validation"
        },
        {
          "title": "NN/g: Error-message guidelines for forms",
          "url": "https://www.nngroup.com/articles/errors-forms-design-guidelines/"
        },
        {
          "title": "Smashing: Inline validation in web forms",
          "url": "https://www.smashingmagazine.com/2022/09/inline-validation-web-forms-ux/"
        },
        {
          "title": "NN/g: Marking required fields in forms",
          "url": "https://www.nngroup.com/articles/required-fields/"
        },
        {
          "title": "NN/g: Placeholders in form fields are harmful",
          "url": "https://www.nngroup.com/articles/form-design-placeholders/"
        }
      ]
    },
    {
      "name": "Label",
      "block": "c-label",
      "layer": "component",
      "status": "deprecated",
      "replacement": "c-form-field__label",
      "since": "0.1.0",
      "description": "Deprecated standalone label. Use c-form-field__label inside c-form-field instead; c-label will be removed in 1.0.",
      "tags": [
        "label"
      ],
      "guidelines": {
        "whenToUse": [
          "Never in new code. Existing c-label markup keeps working until 1.0."
        ],
        "whenNotToUse": [
          "Labelling any form control: use `c-form-field` with c-form-field__label."
        ],
        "doDont": [
          {
            "do": {
              "text": "Use the form-field label.",
              "html": "<div class=\"c-form-field\">\n  <label class=\"c-form-field__label\" for=\"name\">Name</label>\n  <input class=\"c-input\" id=\"name\">\n</div>"
            },
            "dont": {
              "text": "Don't use the deprecated block.",
              "html": "<label class=\"c-label\" for=\"name2\">Name</label>",
              "rule": "deprecated"
            }
          }
        ]
      },
      "tokens": [
        "--color-text-muted"
      ],
      "related": [
        "c-form-field"
      ],
      "examples": []
    },
    {
      "name": "Modal",
      "block": "c-modal",
      "layer": "component",
      "status": "stable",
      "since": "0.1.0",
      "description": "A dialog over the page that blocks interaction until dismissed. Works on <dialog> (preferred, opened with showModal()) or on a <div role=\"dialog\">.",
      "tags": [
        "dialog",
        "div"
      ],
      "elements": [
        {
          "name": "backdrop",
          "description": "Dimmed layer behind the dialog; clicking it may close the modal.",
          "tags": [
            "div"
          ]
        },
        {
          "name": "container",
          "description": "The dialog panel.",
          "tags": [
            "div",
            "form"
          ],
          "required": true
        },
        {
          "name": "header",
          "description": "Holds the title and close button.",
          "tags": [
            "header",
            "div"
          ]
        },
        {
          "name": "title",
          "description": "Dialog heading, referenced by aria-labelledby.",
          "tags": [
            "h2",
            "h3"
          ],
          "required": true
        },
        {
          "name": "close",
          "description": "Icon button that closes the dialog.",
          "tags": [
            "button"
          ]
        },
        {
          "name": "body",
          "description": "Dialog content.",
          "tags": [
            "div"
          ]
        },
        {
          "name": "footer",
          "description": "Actions, right-aligned. Put the primary action last.",
          "tags": [
            "footer",
            "div"
          ]
        }
      ],
      "states": [
        {
          "name": "closed",
          "description": "Hidden (div form). With <dialog>, use the open attribute / showModal() instead.",
          "pair": "When closed, return focus to the control that opened the modal."
        }
      ],
      "guidelines": {
        "whenToUse": [
          "Confirming a destructive or irreversible action, such as deleting a project.",
          "A short task that must not lose the page behind it, such as renaming an item.",
          "Warning that unsaved work will be lost."
        ],
        "whenNotToUse": [
          "Long or scrolling content, or anything with its own navigation: make it a page.",
          "Success messages and tips: show them inline on the page.",
          "Opening a dialog from a dialog: keep it to one level where you can, two at most."
        ],
        "use": [
          "Use for short, focused tasks: confirmations, small forms.",
          "Buttons in c-modal__footer are c-button; the footer provides the gap. Use c-button--danger for destructive confirmations."
        ],
        "avoid": [
          "Opening a modal from another modal.",
          "Long, scrolling content; use a page instead."
        ],
        "doDont": [
          {
            "do": {
              "text": "Use <dialog> opened with showModal(), named by its title, with verb buttons.",
              "html": "<dialog class=\"c-modal\" aria-labelledby=\"leave-title\">\n  <div class=\"c-modal__container\">\n    <div class=\"c-modal__header\">\n      <h2 class=\"c-modal__title\" id=\"leave-title\">Discard your changes?</h2>\n    </div>\n    <div class=\"c-modal__footer\">\n      <div class=\"l-cluster\">\n        <button type=\"button\" class=\"c-button c-button--ghost\">Keep editing</button>\n        <button type=\"button\" class=\"c-button c-button--danger\">Discard changes</button>\n      </div>\n    </div>\n  </div>\n</dialog>"
            },
            "dont": {
              "text": "Don't build a dialog from a bare <div>: no focus handling, no Escape, nothing announced.",
              "html": "<div class=\"c-modal\">\n  <div class=\"c-modal__container\">Discard your changes?</div>\n</div>",
              "rule": "a11y"
            }
          },
          {
            "do": {
              "text": "Label the close button.",
              "html": "<dialog class=\"c-modal\" aria-labelledby=\"share-title\">\n  <div class=\"c-modal__container\">\n    <div class=\"c-modal__header\">\n      <h2 class=\"c-modal__title\" id=\"share-title\">Share project</h2>\n      <button type=\"button\" class=\"c-modal__close\" aria-label=\"Close\"><svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M4 4l8 8M12 4l-8 8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/></svg></button>\n    </div>\n  </div>\n</dialog>"
            },
            "dont": {
              "text": "Don't leave an icon-only close button without a name.",
              "html": "<dialog class=\"c-modal\" aria-labelledby=\"share-title2\">\n  <div class=\"c-modal__container\">\n    <h2 class=\"c-modal__title\" id=\"share-title2\">Share project</h2>\n    <button type=\"button\" class=\"c-modal__close\">×</button>\n  </div>\n</dialog>",
              "rule": "a11y"
            }
          }
        ],
        "content": [
          "Title the dialog with the question or task: \"Delete this project?\"",
          "Button labels repeat the verb: \"Delete project\" and \"Keep project\", never \"OK\" and \"Cancel\".",
          "Say what happens next in one or two sentences in the body."
        ]
      },
      "children": [
        "c-modal contains c-modal__backdrop and c-modal__container as siblings.",
        "c-modal__container contains header, body and footer in that order."
      ],
      "tokens": [
        "--modal-background",
        "--modal-backdrop",
        "--modal-border",
        "--modal-radius",
        "--modal-shadow",
        "--z-index-modal",
        "--z-index-modal-backdrop"
      ],
      "a11y": [
        "Prefer <dialog class=\"c-modal\"> opened with showModal(): the browser then handles focus, Escape and inertness. With a <div>, set role=\"dialog\", aria-modal=\"true\" and manage focus yourself.",
        "Reference the title with aria-labelledby.",
        "With the <div> form, make the page behind inert and lock scrolling while open, trap focus, close on Escape, and return focus to the opener.",
        "c-modal__close needs aria-label=\"Close\" and an SVG icon, not a text glyph."
      ],
      "keyboard": [
        {
          "key": "Escape",
          "action": "Closes the dialog and returns focus to the control that opened it."
        },
        {
          "key": "Tab",
          "action": "Moves focus between controls inside the dialog only."
        }
      ],
      "related": [
        "c-button"
      ],
      "examples": [
        {
          "file": "components/modal.html",
          "html": "<div class=\"c-modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"delete-title\">\n  <div class=\"c-modal__backdrop\"></div>\n  <div class=\"c-modal__container\">\n    <header class=\"c-modal__header\">\n      <h2 class=\"c-modal__title\" id=\"delete-title\">Delete project?</h2>\n      <button type=\"button\" class=\"c-modal__close\" aria-label=\"Close\"><svg viewBox=\"0 0 20 20\" aria-hidden=\"true\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M5 5l10 10M15 5L5 15\"/></svg></button>\n    </header>\n    <div class=\"c-modal__body\">\n      <p class=\"u-margin-0\">Atlas and its 12 pages will be deleted. This can't be undone.</p>\n    </div>\n    <footer class=\"c-modal__footer\">\n      <button type=\"button\" class=\"c-button c-button--ghost\">Keep project</button>\n      <button type=\"button\" class=\"c-button c-button--danger\">Delete project</button>\n    </footer>\n  </div>\n</div>"
        }
      ],
      "sources": [
        {
          "title": "NN/g: Overuse of overlays",
          "url": "https://www.nngroup.com/articles/overuse-of-overlays/"
        },
        {
          "title": "NN/g: Modal and nonmodal dialogs",
          "url": "https://www.nngroup.com/articles/modal-nonmodal-dialog/"
        },
        {
          "title": "Scott O'Hara: Use the dialog element (reasonably)",
          "url": "https://www.scottohara.me/blog/2023/01/26/use-the-dialog-element.html"
        },
        {
          "title": "Primer: Dialog guidelines",
          "url": "https://primer.style/product/components/dialog/guidelines/"
        },
        {
          "title": "Frontend Masters: Scroll-locked dialogs",
          "url": "https://frontendmasters.com/blog/scroll-locked-dialogs/"
        }
      ]
    },
    {
      "name": "Radio",
      "block": "c-radio",
      "layer": "component",
      "status": "beta",
      "since": "0.4.0",
      "description": "A native radio button with its label: pick exactly one option from a short, visible list.",
      "tags": [
        "div"
      ],
      "elements": [
        {
          "name": "input",
          "description": "The native control. Carries every state: checked, disabled.",
          "tags": [
            "input"
          ],
          "required": true
        },
        {
          "name": "label",
          "description": "The visible label, linked with for/id. Clicking it toggles the control and pads the hit area.",
          "tags": [
            "label"
          ],
          "required": true
        },
        {
          "name": "hint",
          "description": "Optional one-line hint under the label, linked with aria-describedby.",
          "tags": [
            "p",
            "div",
            "span"
          ]
        }
      ],
      "states": [
        {
          "name": "checked",
          "native": true,
          "selector": ":checked",
          "description": "Selected: an ink stud seated in the ring.",
          "pair": "Use the checked attribute, never data-state."
        },
        {
          "name": "disabled",
          "native": true,
          "selector": ":disabled",
          "description": "Cannot be chosen. Dashed ring, ghosted label.",
          "pair": "Use the disabled attribute, and say nearby why it is unavailable."
        }
      ],
      "children": [
        "Order: c-radio__input, then c-radio__label, then an optional c-radio__hint.",
        "Every radio group lives in fieldset.c-form-field with a legend.c-form-field__label; all radios in it share one name.",
        "Show a group error with data-state=\"error\" on the fieldset, aria-describedby pointing at its c-form-field__error."
      ],
      "guidelines": {
        "whenToUse": [
          "Exactly one choice from 2 to 6 options that people should compare side by side.",
          "A choice where seeing every option helps the decision, such as a delivery speed or a plan."
        ],
        "whenNotToUse": [
          "Any number of options may be chosen: use `c-checkbox`.",
          "An on/off setting that applies immediately: use `c-toggle`.",
          "More than about 7 options: use a `c-input` on a <select>."
        ],
        "use": [
          "Preselect the safest or most common option when there is one; leave the group empty when every answer needs a conscious choice.",
          "Order options logically: by size, frequency or time, not alphabetically by accident."
        ],
        "avoid": [
          "A single radio button on its own: it can never be cleared.",
          "Radios that trigger navigation or reveal large sections without warning."
        ],
        "doDont": [
          {
            "do": {
              "text": "Put the group in a fieldset with a legend, and give every radio the same name.",
              "html": "<fieldset class=\"c-form-field\">\n  <legend class=\"c-form-field__label\">Delivery speed</legend>\n  <div class=\"l-stack l-stack--sm\">\n    <div class=\"c-radio\">\n      <input class=\"c-radio__input\" type=\"radio\" id=\"speed-standard\" name=\"speed\" value=\"standard\" checked aria-describedby=\"speed-standard-hint\">\n      <label class=\"c-radio__label\" for=\"speed-standard\">Standard</label>\n      <p class=\"c-radio__hint\" id=\"speed-standard-hint\">3 to 5 working days, free.</p>\n    </div>\n    <div class=\"c-radio\">\n      <input class=\"c-radio__input\" type=\"radio\" id=\"speed-next\" name=\"speed\" value=\"next-day\">\n      <label class=\"c-radio__label\" for=\"speed-next\">Next day</label>\n    </div>\n  </div>\n</fieldset>"
            },
            "dont": {
              "text": "Don't mark a group error with aria-invalid on each radio; ARIA doesn't allow it there. Put the error on the fieldset.",
              "html": "<fieldset class=\"c-form-field\" data-state=\"error\">\n  <legend class=\"c-form-field__label\">Delivery speed</legend>\n  <div class=\"c-radio\">\n    <input class=\"c-radio__input\" type=\"radio\" id=\"speed-x\" name=\"speed-x\" value=\"standard\">\n    <label class=\"c-radio__label\" for=\"speed-x\">Standard</label>\n  </div>\n</fieldset>",
              "rule": "state-pair"
            }
          }
        ],
        "content": [
          "The legend asks the question; each label is a short answer in sentence case.",
          "Use a hint for the detail that decides the choice: price, time, consequence."
        ]
      },
      "tokens": [
        "--checkbox-size",
        "--checkbox-background",
        "--checkbox-border",
        "--radio-dot"
      ],
      "a11y": [
        "Keep native <input type=\"radio\"> elements sharing one name: the browser handles arrow keys and single selection.",
        "Wrap the group in fieldset + legend so the question is read with every option.",
        "Link hints with aria-describedby on the input."
      ],
      "keyboard": [
        {
          "key": "Tab",
          "action": "Moves focus into the group, to the checked radio (or the first), and out again."
        },
        {
          "key": "Arrow keys",
          "action": "Move to and select the next or previous radio."
        },
        {
          "key": "Space",
          "action": "Selects the focused radio if nothing is selected."
        }
      ],
      "related": [
        "c-checkbox",
        "c-toggle",
        "c-form-field",
        "l-stack"
      ],
      "examples": [
        {
          "file": "components/radio.html",
          "html": "<fieldset class=\"c-form-field\">\n  <legend class=\"c-form-field__label\">Delivery speed</legend>\n  <div class=\"l-stack l-stack--sm\">\n    <div class=\"c-radio\">\n      <input class=\"c-radio__input\" type=\"radio\" id=\"delivery-standard\" name=\"delivery\" value=\"standard\" checked aria-describedby=\"delivery-standard-hint\">\n      <label class=\"c-radio__label\" for=\"delivery-standard\">Standard</label>\n      <p class=\"c-radio__hint\" id=\"delivery-standard-hint\">3 to 5 working days, free.</p>\n    </div>\n    <div class=\"c-radio\">\n      <input class=\"c-radio__input\" type=\"radio\" id=\"delivery-next\" name=\"delivery\" value=\"next-day\" aria-describedby=\"delivery-next-hint\">\n      <label class=\"c-radio__label\" for=\"delivery-next\">Next day</label>\n      <p class=\"c-radio__hint\" id=\"delivery-next-hint\">Order by 4pm, £4.99.</p>\n    </div>\n    <div class=\"c-radio\">\n      <input class=\"c-radio__input\" type=\"radio\" id=\"delivery-same\" name=\"delivery\" value=\"same-day\" disabled>\n      <label class=\"c-radio__label\" for=\"delivery-same\">Same day (not available in your area)</label>\n    </div>\n  </div>\n</fieldset>"
        }
      ],
      "sources": [
        {
          "title": "GOV.UK Design System: Radios",
          "url": "https://design-system.service.gov.uk/components/radios"
        },
        {
          "title": "NN/g: Checkboxes vs. radio buttons",
          "url": "https://www.nngroup.com/articles/checkboxes-vs-radio-buttons/"
        },
        {
          "title": "WAI-ARIA APG: Radio group pattern",
          "url": "https://www.w3.org/WAI/ARIA/apg/patterns/radio/"
        },
        {
          "title": "Sara Soueidan: Inclusively hiding and styling checkboxes and radio buttons",
          "url": "https://www.sarasoueidan.com/blog/inclusively-hiding-and-styling-checkboxes-and-radio-buttons/"
        }
      ]
    },
    {
      "name": "Toggle",
      "block": "c-toggle",
      "layer": "component",
      "status": "beta",
      "since": "0.4.0",
      "description": "An on/off switch built on a native checkbox with role=\"switch\": the setting applies as soon as it changes.",
      "tags": [
        "div"
      ],
      "elements": [
        {
          "name": "input",
          "description": "The native control: <input type=\"checkbox\" role=\"switch\">. Carries checked and disabled.",
          "tags": [
            "input"
          ],
          "required": true
        },
        {
          "name": "label",
          "description": "The name of the setting, linked with for/id. It stays the same when the switch flips.",
          "tags": [
            "label"
          ],
          "required": true
        },
        {
          "name": "hint",
          "description": "Optional one-line hint under the label, linked with aria-describedby.",
          "tags": [
            "p",
            "div",
            "span"
          ]
        }
      ],
      "states": [
        {
          "name": "checked",
          "native": true,
          "selector": ":checked",
          "description": "On: the thumb slides to the end on an ink track and shows a tick.",
          "pair": "Use the checked attribute; role=\"switch\" makes screen readers say on and off."
        },
        {
          "name": "disabled",
          "native": true,
          "selector": ":disabled",
          "description": "Cannot be changed. Dashed track, ghosted label.",
          "pair": "Use the disabled attribute, and say nearby why it is unavailable."
        },
        {
          "name": "loading",
          "description": "The change is being saved. The track turns neutral with moving stripes.",
          "pair": "Set aria-busy=\"true\" on the c-toggle and disable the input until the save finishes."
        }
      ],
      "children": [
        "Order: c-toggle__input, then c-toggle__label, then an optional c-toggle__hint."
      ],
      "guidelines": {
        "whenToUse": [
          "A setting that takes effect immediately, with no save or submit button: notifications, dark mode, a feature flag.",
          "A system state people expect to flip back and forth."
        ],
        "whenNotToUse": [
          "A choice inside a form that is saved on submit: use `c-checkbox`.",
          "Choosing between two named options that are not on/off, such as \"Monthly\" and \"Yearly\": use `c-radio`.",
          "Triggering an action, such as \"Export\": use `c-button`."
        ],
        "use": [
          "Save the change straight away and show that it saved; if it can fail, use the loading state and report errors next to the switch.",
          "Label the setting, not the action: \"Email notifications\", and let the switch say on or off."
        ],
        "avoid": [
          "Labels that change with the state (\"Turn on\" / \"Turn off\"): people can't tell which is current.",
          "A div with a click handler drawn to look like a switch; it has no role, no keyboard and no state."
        ],
        "doDont": [
          {
            "do": {
              "text": "Build the switch on a real checkbox with role=\"switch\" and a fixed noun label.",
              "html": "<div class=\"c-toggle\">\n  <input class=\"c-toggle__input\" type=\"checkbox\" role=\"switch\" id=\"notify\" checked aria-describedby=\"notify-hint\">\n  <label class=\"c-toggle__label\" for=\"notify\">Email notifications</label>\n  <p class=\"c-toggle__hint\" id=\"notify-hint\">Applies straight away.</p>\n</div>"
            },
            "dont": {
              "text": "Don't fake the on state with data-state: the control has to carry it.",
              "html": "<div class=\"c-toggle\" data-state=\"checked\">\n  <input class=\"c-toggle__input\" type=\"checkbox\" role=\"switch\" id=\"notify-fake\">\n  <label class=\"c-toggle__label\" for=\"notify-fake\">Email notifications</label>\n</div>",
              "rule": "invalid-state"
            }
          },
          {
            "do": {
              "text": "While a change saves, mark the switch busy and disable the input.",
              "html": "<div class=\"c-toggle\" data-state=\"loading\" aria-busy=\"true\">\n  <input class=\"c-toggle__input\" type=\"checkbox\" role=\"switch\" id=\"beta\" checked disabled>\n  <label class=\"c-toggle__label\" for=\"beta\">Beta features</label>\n</div>"
            },
            "dont": {
              "text": "Don't show the loading stripes without aria-busy; screen readers can't tell the save is still running.",
              "html": "<div class=\"c-toggle\" data-state=\"loading\">\n  <input class=\"c-toggle__input\" type=\"checkbox\" role=\"switch\" id=\"beta-x\" checked disabled>\n  <label class=\"c-toggle__label\" for=\"beta-x\">Beta features</label>\n</div>",
              "rule": "state-pair"
            }
          }
        ],
        "content": [
          "Toggle labels are nouns naming the setting, in sentence case: \"Dark mode\", not \"Enable dark mode\".",
          "Never change the label when the state changes."
        ]
      },
      "tokens": [
        "--toggle-track-off",
        "--toggle-track-on",
        "--toggle-thumb",
        "--toggle-border",
        "--toggle-mark",
        "--color-action-loading-stripe"
      ],
      "a11y": [
        "Use <input type=\"checkbox\" role=\"switch\">: screen readers that know switches say \"on\" and \"off\", and the rest still say \"checked\".",
        "The thumb shows a tick when on and stays empty when off, so state never relies on position or color alone.",
        "Movement stops under prefers-reduced-motion."
      ],
      "keyboard": [
        {
          "key": "Tab",
          "action": "Moves focus to the switch."
        },
        {
          "key": "Space",
          "action": "Turns the setting on or off."
        }
      ],
      "related": [
        "c-checkbox",
        "c-radio",
        "c-button"
      ],
      "examples": [
        {
          "file": "components/toggle.html",
          "html": "<div class=\"l-stack l-stack--sm\">\n  <div class=\"c-toggle\">\n    <input class=\"c-toggle__input\" type=\"checkbox\" role=\"switch\" id=\"setting-email\" checked aria-describedby=\"setting-email-hint\">\n    <label class=\"c-toggle__label\" for=\"setting-email\">Email notifications</label>\n    <p class=\"c-toggle__hint\" id=\"setting-email-hint\">Applies straight away.</p>\n  </div>\n  <div class=\"c-toggle\">\n    <input class=\"c-toggle__input\" type=\"checkbox\" role=\"switch\" id=\"setting-digest\">\n    <label class=\"c-toggle__label\" for=\"setting-digest\">Weekly digest</label>\n  </div>\n  <div class=\"c-toggle\" data-state=\"loading\" aria-busy=\"true\">\n    <input class=\"c-toggle__input\" type=\"checkbox\" role=\"switch\" id=\"setting-beta\" checked disabled>\n    <label class=\"c-toggle__label\" for=\"setting-beta\">Beta features</label>\n  </div>\n</div>"
        }
      ],
      "sources": [
        {
          "title": "NN/g: Toggle-switch guidelines",
          "url": "https://www.nngroup.com/articles/toggle-switch-guidelines/"
        },
        {
          "title": "WAI-ARIA APG: Switch pattern",
          "url": "https://www.w3.org/WAI/ARIA/apg/patterns/switch/"
        },
        {
          "title": "GitLab Pajamas: Toggle",
          "url": "https://design.gitlab.com/components/toggle"
        }
      ]
    },
    {
      "name": "Utilities",
      "block": "u-*",
      "layer": "utility",
      "status": "stable",
      "since": "0.1.0",
      "description": "Single-purpose overrides with !important. Use sparingly; reach for a layout or component first.",
      "classes": [
        {
          "name": "u-text-center",
          "description": "Center-align text."
        },
        {
          "name": "u-text-left",
          "description": "Align text to the start (left in left-to-right languages)."
        },
        {
          "name": "u-text-right",
          "description": "Align text to the end (right in left-to-right languages)."
        },
        {
          "name": "u-hidden",
          "description": "display: none."
        },
        {
          "name": "u-visible",
          "description": "visibility: visible."
        },
        {
          "name": "u-invisible",
          "description": "visibility: hidden; keeps the space."
        },
        {
          "name": "u-margin-0",
          "description": "Remove margin, e.g. from a heading or paragraph inside a component."
        },
        {
          "name": "u-padding-0",
          "description": "Remove padding."
        },
        {
          "name": "u-font-normal",
          "description": "Normal font weight."
        },
        {
          "name": "u-font-medium",
          "description": "Medium font weight."
        },
        {
          "name": "u-font-semibold",
          "description": "Semibold font weight."
        },
        {
          "name": "u-font-bold",
          "description": "Bold font weight."
        },
        {
          "name": "u-font-mono",
          "description": "Monospace font."
        },
        {
          "name": "u-truncate",
          "description": "Single line with an ellipsis."
        },
        {
          "name": "u-sr-only",
          "description": "Visually hidden but read by screen readers."
        }
      ],
      "guidelines": {
        "whenToUse": [
          "A single, local override that no layout or component covers, such as removing a paragraph margin inside a card.",
          "u-sr-only for text that screen readers need but the layout already shows visually, such as an icon-only label."
        ],
        "whenNotToUse": [
          "Spacing between components: use `l-stack` or `l-cluster`.",
          "Restyling a component everywhere: set its component token on :root."
        ],
        "use": [
          "u-sr-only for accessible labels on icon-only controls."
        ],
        "avoid": [
          "Stacking several utilities to restyle a component; add a modifier to its contract instead."
        ],
        "doDont": [
          {
            "do": {
              "text": "Remove a paragraph margin inside a component.",
              "html": "<section class=\"c-card\">\n  <p class=\"u-margin-0\">Storage: 4 GB of 10 GB</p>\n</section>"
            },
            "dont": {
              "text": "Don't guess a utility that doesn't exist.",
              "html": "<p class=\"u-mt-4\">Storage: 4 GB of 10 GB</p>",
              "rule": "unknown-class"
            }
          }
        ]
      },
      "examples": [
        {
          "file": "components/utilities.html",
          "html": "<div class=\"l-grid l-grid--2-col\">\n  <div class=\"c-card\">\n    <p class=\"c-card__body u-truncate u-font-mono\">quarterly-board-report-reviewed-by-finance-and-legal-v14.pdf</p>\n  </div>\n  <div class=\"c-card\">\n    <p class=\"c-card__body u-truncate u-font-mono\">brand-guidelines-2026-with-every-approved-logo-lockup.pdf</p>\n  </div>\n</div>\n\n<button type=\"button\" class=\"c-button c-button--ghost\">\n  <svg class=\"c-icon\" aria-hidden=\"true\" focusable=\"false\"><use href=\"#mcss-icon-edit\"></use></svg>\n  <span class=\"u-sr-only\">Edit post</span>\n</button>"
        }
      ]
    }
  ],
  "tokens": [
    {
      "name": "--color-white",
      "path": "color.white",
      "tier": "primitive",
      "type": "color",
      "value": "#ffffff",
      "figma": true
    },
    {
      "name": "--color-black",
      "path": "color.black",
      "tier": "primitive",
      "type": "color",
      "value": "#000000",
      "figma": true
    },
    {
      "name": "--color-gray-50",
      "path": "color.gray.50",
      "tier": "primitive",
      "type": "color",
      "value": "#f8f9fa",
      "figma": true
    },
    {
      "name": "--color-gray-100",
      "path": "color.gray.100",
      "tier": "primitive",
      "type": "color",
      "value": "#e9ecef",
      "figma": true
    },
    {
      "name": "--color-gray-200",
      "path": "color.gray.200",
      "tier": "primitive",
      "type": "color",
      "value": "#dee2e6",
      "figma": true
    },
    {
      "name": "--color-gray-300",
      "path": "color.gray.300",
      "tier": "primitive",
      "type": "color",
      "value": "#ced4da",
      "figma": true
    },
    {
      "name": "--color-gray-400",
      "path": "color.gray.400",
      "tier": "primitive",
      "type": "color",
      "value": "#adb5bd",
      "figma": true
    },
    {
      "name": "--color-gray-450",
      "path": "color.gray.450",
      "tier": "primitive",
      "type": "color",
      "value": "#868e96",
      "description": "Lightest gray with 3:1 contrast on white and on gray-800; used for control borders.",
      "figma": true
    },
    {
      "name": "--color-gray-500",
      "path": "color.gray.500",
      "tier": "primitive",
      "type": "color",
      "value": "#6c757d",
      "figma": true
    },
    {
      "name": "--color-gray-600",
      "path": "color.gray.600",
      "tier": "primitive",
      "type": "color",
      "value": "#495057",
      "figma": true
    },
    {
      "name": "--color-gray-700",
      "path": "color.gray.700",
      "tier": "primitive",
      "type": "color",
      "value": "#343a40",
      "figma": true
    },
    {
      "name": "--color-gray-800",
      "path": "color.gray.800",
      "tier": "primitive",
      "type": "color",
      "value": "#212529",
      "figma": true
    },
    {
      "name": "--color-gray-850",
      "path": "color.gray.850",
      "tier": "primitive",
      "type": "color",
      "value": "#2b3035",
      "figma": true
    },
    {
      "name": "--color-gray-900",
      "path": "color.gray.900",
      "tier": "primitive",
      "type": "color",
      "value": "#1a1d20",
      "figma": true
    },
    {
      "name": "--color-primary",
      "path": "color.primary.$root",
      "tier": "primitive",
      "type": "color",
      "value": "#005a9c",
      "description": "Brand color. For UI, prefer --color-action-primary, which adapts to dark mode.",
      "figma": true
    },
    {
      "name": "--color-primary-hover",
      "path": "color.primary.hover",
      "tier": "primitive",
      "type": "color",
      "value": "#004a80",
      "figma": true
    },
    {
      "name": "--color-primary-active",
      "path": "color.primary.active",
      "tier": "primitive",
      "type": "color",
      "value": "#003860",
      "figma": true
    },
    {
      "name": "--color-accent",
      "path": "color.accent",
      "tier": "primitive",
      "type": "color",
      "value": "#00d4aa",
      "figma": true
    },
    {
      "name": "--color-blue-50",
      "path": "color.blue.50",
      "tier": "primitive",
      "type": "color",
      "value": "#eef6fc",
      "figma": true
    },
    {
      "name": "--color-blue-100",
      "path": "color.blue.100",
      "tier": "primitive",
      "type": "color",
      "value": "#c7e2f8",
      "figma": true
    },
    {
      "name": "--color-blue-150",
      "path": "color.blue.150",
      "tier": "primitive",
      "type": "color",
      "value": "#dcedf9",
      "description": "Instruction-page sky: the demo canvas.",
      "figma": true
    },
    {
      "name": "--color-blue-200",
      "path": "color.blue.200",
      "tier": "primitive",
      "type": "color",
      "value": "#9ccdf4",
      "figma": true
    },
    {
      "name": "--color-blue-300",
      "path": "color.blue.300",
      "tier": "primitive",
      "type": "color",
      "value": "#7cbff1",
      "figma": true
    },
    {
      "name": "--color-blue-400",
      "path": "color.blue.400",
      "tier": "primitive",
      "type": "color",
      "value": "#4d90fe",
      "figma": true
    },
    {
      "name": "--color-blue-600",
      "path": "color.blue.600",
      "tier": "primitive",
      "type": "color",
      "value": "#2576cc",
      "description": "Night-build primary: white text 4.6:1, at least 3:1 on every navy surface.",
      "figma": true
    },
    {
      "name": "--color-blue-700",
      "path": "color.blue.700",
      "tier": "primitive",
      "type": "color",
      "value": "#185da6",
      "figma": true
    },
    {
      "name": "--color-blue-800",
      "path": "color.blue.800",
      "tier": "primitive",
      "type": "color",
      "value": "#144d8a",
      "figma": true
    },
    {
      "name": "--color-green-100",
      "path": "color.green.100",
      "tier": "primitive",
      "type": "color",
      "value": "#d4edda",
      "figma": true
    },
    {
      "name": "--color-green-200",
      "path": "color.green.200",
      "tier": "primitive",
      "type": "color",
      "value": "#c3e6cb",
      "figma": true
    },
    {
      "name": "--color-green-300",
      "path": "color.green.300",
      "tier": "primitive",
      "type": "color",
      "value": "#a3d9b1",
      "figma": true
    },
    {
      "name": "--color-green-800",
      "path": "color.green.800",
      "tier": "primitive",
      "type": "color",
      "value": "#1e5631",
      "figma": true
    },
    {
      "name": "--color-green-900",
      "path": "color.green.900",
      "tier": "primitive",
      "type": "color",
      "value": "#155724",
      "figma": true
    },
    {
      "name": "--color-green-950",
      "path": "color.green.950",
      "tier": "primitive",
      "type": "color",
      "value": "#0f2e1a",
      "figma": true
    },
    {
      "name": "--color-yellow-100",
      "path": "color.yellow.100",
      "tier": "primitive",
      "type": "color",
      "value": "#fff3cd",
      "figma": true
    },
    {
      "name": "--color-yellow-200",
      "path": "color.yellow.200",
      "tier": "primitive",
      "type": "color",
      "value": "#ffeaa7",
      "figma": true
    },
    {
      "name": "--color-yellow-300",
      "path": "color.yellow.300",
      "tier": "primitive",
      "type": "color",
      "value": "#f5d77a",
      "figma": true
    },
    {
      "name": "--color-yellow-400",
      "path": "color.yellow.400",
      "tier": "primitive",
      "type": "color",
      "value": "#f2cd37",
      "description": "Brick yellow: new-part call-out and focus halo only.",
      "figma": true
    },
    {
      "name": "--color-yellow-800",
      "path": "color.yellow.800",
      "tier": "primitive",
      "type": "color",
      "value": "#6b5310",
      "figma": true
    },
    {
      "name": "--color-yellow-900",
      "path": "color.yellow.900",
      "tier": "primitive",
      "type": "color",
      "value": "#856404",
      "figma": true
    },
    {
      "name": "--color-yellow-950",
      "path": "color.yellow.950",
      "tier": "primitive",
      "type": "color",
      "value": "#3a2e05",
      "figma": true
    },
    {
      "name": "--color-red-100",
      "path": "color.red.100",
      "tier": "primitive",
      "type": "color",
      "value": "#f8d7da",
      "figma": true
    },
    {
      "name": "--color-red-200",
      "path": "color.red.200",
      "tier": "primitive",
      "type": "color",
      "value": "#f5c6cb",
      "figma": true
    },
    {
      "name": "--color-red-300",
      "path": "color.red.300",
      "tier": "primitive",
      "type": "color",
      "value": "#f4a9b0",
      "figma": true
    },
    {
      "name": "--color-red-600",
      "path": "color.red.600",
      "tier": "primitive",
      "type": "color",
      "value": "#c91a09",
      "description": "Brick red.",
      "figma": true
    },
    {
      "name": "--color-red-700",
      "path": "color.red.700",
      "tier": "primitive",
      "type": "color",
      "value": "#a01408",
      "figma": true
    },
    {
      "name": "--color-red-800",
      "path": "color.red.800",
      "tier": "primitive",
      "type": "color",
      "value": "#6e2129",
      "figma": true
    },
    {
      "name": "--color-red-900",
      "path": "color.red.900",
      "tier": "primitive",
      "type": "color",
      "value": "#721c24",
      "figma": true
    },
    {
      "name": "--color-red-950",
      "path": "color.red.950",
      "tier": "primitive",
      "type": "color",
      "value": "#3b1216",
      "figma": true
    },
    {
      "name": "--color-cyan-100",
      "path": "color.cyan.100",
      "tier": "primitive",
      "type": "color",
      "value": "#d1ecf1",
      "figma": true
    },
    {
      "name": "--color-cyan-200",
      "path": "color.cyan.200",
      "tier": "primitive",
      "type": "color",
      "value": "#bee5eb",
      "figma": true
    },
    {
      "name": "--color-cyan-300",
      "path": "color.cyan.300",
      "tier": "primitive",
      "type": "color",
      "value": "#9ad4df",
      "figma": true
    },
    {
      "name": "--color-cyan-800",
      "path": "color.cyan.800",
      "tier": "primitive",
      "type": "color",
      "value": "#155a66",
      "figma": true
    },
    {
      "name": "--color-cyan-900",
      "path": "color.cyan.900",
      "tier": "primitive",
      "type": "color",
      "value": "#0c5460",
      "figma": true
    },
    {
      "name": "--color-cyan-950",
      "path": "color.cyan.950",
      "tier": "primitive",
      "type": "color",
      "value": "#0b2d33",
      "figma": true
    },
    {
      "name": "--color-navy-100",
      "path": "color.navy.100",
      "tier": "primitive",
      "type": "color",
      "value": "#e6edf4",
      "figma": true
    },
    {
      "name": "--color-navy-200",
      "path": "color.navy.200",
      "tier": "primitive",
      "type": "color",
      "value": "#cfdae5",
      "figma": true
    },
    {
      "name": "--color-navy-300",
      "path": "color.navy.300",
      "tier": "primitive",
      "type": "color",
      "value": "#a9bacb",
      "figma": true
    },
    {
      "name": "--color-navy-400",
      "path": "color.navy.400",
      "tier": "primitive",
      "type": "color",
      "value": "#7f95ab",
      "figma": true
    },
    {
      "name": "--color-navy-600",
      "path": "color.navy.600",
      "tier": "primitive",
      "type": "color",
      "value": "#3b5988",
      "figma": true
    },
    {
      "name": "--color-navy-700",
      "path": "color.navy.700",
      "tier": "primitive",
      "type": "color",
      "value": "#27436f",
      "figma": true
    },
    {
      "name": "--color-navy-800",
      "path": "color.navy.800",
      "tier": "primitive",
      "type": "color",
      "value": "#1b335c",
      "figma": true
    },
    {
      "name": "--color-navy-850",
      "path": "color.navy.850",
      "tier": "primitive",
      "type": "color",
      "value": "#14294d",
      "figma": true
    },
    {
      "name": "--color-navy-900",
      "path": "color.navy.900",
      "tier": "primitive",
      "type": "color",
      "value": "#0f2140",
      "figma": true
    },
    {
      "name": "--color-navy-950",
      "path": "color.navy.950",
      "tier": "primitive",
      "type": "color",
      "value": "#0b1a33",
      "description": "Navy ink: the night-build canvas.",
      "figma": true
    },
    {
      "name": "--font-family-sans",
      "path": "font.family.sans",
      "tier": "primitive",
      "type": "fontFamily",
      "value": "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",
      "figma": false
    },
    {
      "name": "--font-family-mono",
      "path": "font.family.mono",
      "tier": "primitive",
      "type": "fontFamily",
      "value": "'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, 'Courier New', monospace",
      "figma": false
    },
    {
      "name": "--font-family-display",
      "path": "font.family.display",
      "tier": "primitive",
      "type": "fontFamily",
      "value": "Rubik, ui-rounded, system-ui, sans-serif",
      "description": "Rounded display face for step numerals and wordmarks. Not loaded by the framework; load Rubik yourself or it falls back to the system face.",
      "figma": false
    },
    {
      "name": "--font-size-xs",
      "path": "font.size.xs",
      "tier": "primitive",
      "type": "dimension",
      "value": "0.75rem",
      "figma": true
    },
    {
      "name": "--font-size-sm",
      "path": "font.size.sm",
      "tier": "primitive",
      "type": "dimension",
      "value": "0.875rem",
      "figma": true
    },
    {
      "name": "--font-size-base",
      "path": "font.size.base",
      "tier": "primitive",
      "type": "dimension",
      "value": "1rem",
      "figma": true
    },
    {
      "name": "--font-size-lg",
      "path": "font.size.lg",
      "tier": "primitive",
      "type": "dimension",
      "value": "1.125rem",
      "figma": true
    },
    {
      "name": "--font-size-xl",
      "path": "font.size.xl",
      "tier": "primitive",
      "type": "dimension",
      "value": "1.25rem",
      "figma": true
    },
    {
      "name": "--font-size-2xl",
      "path": "font.size.2xl",
      "tier": "primitive",
      "type": "dimension",
      "value": "1.5rem",
      "figma": true
    },
    {
      "name": "--font-size-3xl",
      "path": "font.size.3xl",
      "tier": "primitive",
      "type": "dimension",
      "value": "1.875rem",
      "figma": true
    },
    {
      "name": "--font-size-4xl",
      "path": "font.size.4xl",
      "tier": "primitive",
      "type": "dimension",
      "value": "2.25rem",
      "figma": true
    },
    {
      "name": "--font-size-5xl",
      "path": "font.size.5xl",
      "tier": "primitive",
      "type": "dimension",
      "value": "3rem",
      "figma": true
    },
    {
      "name": "--font-weight-normal",
      "path": "font.weight.normal",
      "tier": "primitive",
      "type": "fontWeight",
      "value": "400",
      "figma": true
    },
    {
      "name": "--font-weight-medium",
      "path": "font.weight.medium",
      "tier": "primitive",
      "type": "fontWeight",
      "value": "500",
      "figma": true
    },
    {
      "name": "--font-weight-semibold",
      "path": "font.weight.semibold",
      "tier": "primitive",
      "type": "fontWeight",
      "value": "600",
      "figma": true
    },
    {
      "name": "--font-weight-bold",
      "path": "font.weight.bold",
      "tier": "primitive",
      "type": "fontWeight",
      "value": "700",
      "figma": true
    },
    {
      "name": "--font-weight-extrabold",
      "path": "font.weight.extrabold",
      "tier": "primitive",
      "type": "fontWeight",
      "value": "800",
      "description": "Display weight for step numerals and wordmarks.",
      "figma": true
    },
    {
      "name": "--line-height-tight",
      "path": "line-height.tight",
      "tier": "primitive",
      "type": "number",
      "value": "1.25",
      "figma": true
    },
    {
      "name": "--line-height-normal",
      "path": "line-height.normal",
      "tier": "primitive",
      "type": "number",
      "value": "1.5",
      "figma": true
    },
    {
      "name": "--line-height-relaxed",
      "path": "line-height.relaxed",
      "tier": "primitive",
      "type": "number",
      "value": "1.75",
      "figma": true
    },
    {
      "name": "--space-0",
      "path": "space.0",
      "tier": "primitive",
      "type": "dimension",
      "value": "0",
      "figma": true
    },
    {
      "name": "--space-1",
      "path": "space.1",
      "tier": "primitive",
      "type": "dimension",
      "value": "0.25rem",
      "figma": true
    },
    {
      "name": "--space-2",
      "path": "space.2",
      "tier": "primitive",
      "type": "dimension",
      "value": "0.5rem",
      "figma": true
    },
    {
      "name": "--space-3",
      "path": "space.3",
      "tier": "primitive",
      "type": "dimension",
      "value": "0.75rem",
      "figma": true
    },
    {
      "name": "--space-4",
      "path": "space.4",
      "tier": "primitive",
      "type": "dimension",
      "value": "1rem",
      "figma": true
    },
    {
      "name": "--space-5",
      "path": "space.5",
      "tier": "primitive",
      "type": "dimension",
      "value": "1.25rem",
      "figma": true
    },
    {
      "name": "--space-6",
      "path": "space.6",
      "tier": "primitive",
      "type": "dimension",
      "value": "1.5rem",
      "figma": true
    },
    {
      "name": "--space-8",
      "path": "space.8",
      "tier": "primitive",
      "type": "dimension",
      "value": "2rem",
      "figma": true
    },
    {
      "name": "--space-10",
      "path": "space.10",
      "tier": "primitive",
      "type": "dimension",
      "value": "2.5rem",
      "figma": true
    },
    {
      "name": "--space-12",
      "path": "space.12",
      "tier": "primitive",
      "type": "dimension",
      "value": "3rem",
      "figma": true
    },
    {
      "name": "--space-16",
      "path": "space.16",
      "tier": "primitive",
      "type": "dimension",
      "value": "4rem",
      "figma": true
    },
    {
      "name": "--space-20",
      "path": "space.20",
      "tier": "primitive",
      "type": "dimension",
      "value": "5rem",
      "figma": true
    },
    {
      "name": "--space-24",
      "path": "space.24",
      "tier": "primitive",
      "type": "dimension",
      "value": "6rem",
      "figma": true
    },
    {
      "name": "--border-radius-none",
      "path": "border-radius.none",
      "tier": "primitive",
      "type": "dimension",
      "value": "0",
      "figma": true
    },
    {
      "name": "--border-radius-sm",
      "path": "border-radius.sm",
      "tier": "primitive",
      "type": "dimension",
      "value": "0.125rem",
      "figma": true
    },
    {
      "name": "--border-radius-base",
      "path": "border-radius.base",
      "tier": "primitive",
      "type": "dimension",
      "value": "0.25rem",
      "figma": true
    },
    {
      "name": "--border-radius-md",
      "path": "border-radius.md",
      "tier": "primitive",
      "type": "dimension",
      "value": "0.375rem",
      "figma": true
    },
    {
      "name": "--border-radius-lg",
      "path": "border-radius.lg",
      "tier": "primitive",
      "type": "dimension",
      "value": "0.5rem",
      "figma": true
    },
    {
      "name": "--border-radius-xl",
      "path": "border-radius.xl",
      "tier": "primitive",
      "type": "dimension",
      "value": "0.75rem",
      "figma": true
    },
    {
      "name": "--border-radius-2xl",
      "path": "border-radius.2xl",
      "tier": "primitive",
      "type": "dimension",
      "value": "1rem",
      "figma": true
    },
    {
      "name": "--border-radius-full",
      "path": "border-radius.full",
      "tier": "primitive",
      "type": "dimension",
      "value": "9999px",
      "figma": true
    },
    {
      "name": "--border-width-0",
      "path": "border-width.0",
      "tier": "primitive",
      "type": "dimension",
      "value": "0",
      "figma": true
    },
    {
      "name": "--border-width-thin",
      "path": "border-width.thin",
      "tier": "primitive",
      "type": "dimension",
      "value": "1px",
      "figma": true
    },
    {
      "name": "--border-width-thick",
      "path": "border-width.thick",
      "tier": "primitive",
      "type": "dimension",
      "value": "2px",
      "figma": true
    },
    {
      "name": "--border-width-thicker",
      "path": "border-width.thicker",
      "tier": "primitive",
      "type": "dimension",
      "value": "4px",
      "figma": true
    },
    {
      "name": "--shadow-xs",
      "path": "shadow.xs",
      "tier": "primitive",
      "type": "shadow",
      "value": "0 1px 2px rgb(0 0 0 / 0.05)",
      "figma": false
    },
    {
      "name": "--shadow-sm",
      "path": "shadow.sm",
      "tier": "primitive",
      "type": "shadow",
      "value": "0 1px 3px rgb(0 0 0 / 0.1)",
      "figma": false
    },
    {
      "name": "--shadow-base",
      "path": "shadow.base",
      "tier": "primitive",
      "type": "shadow",
      "value": "0 4px 6px rgb(0 0 0 / 0.1)",
      "figma": false
    },
    {
      "name": "--shadow-md",
      "path": "shadow.md",
      "tier": "primitive",
      "type": "shadow",
      "value": "0 8px 25px rgb(0 0 0 / 0.1)",
      "figma": false
    },
    {
      "name": "--shadow-lg",
      "path": "shadow.lg",
      "tier": "primitive",
      "type": "shadow",
      "value": "0 25px 50px rgb(0 0 0 / 0.15)",
      "figma": false
    },
    {
      "name": "--shadow-xl",
      "path": "shadow.xl",
      "tier": "primitive",
      "type": "shadow",
      "value": "0 25px 50px rgb(0 0 0 / 0.25)",
      "figma": false
    },
    {
      "name": "--ease-linear",
      "path": "ease.linear",
      "tier": "primitive",
      "type": "cubicBezier",
      "value": "linear",
      "figma": false
    },
    {
      "name": "--ease-in",
      "path": "ease.in",
      "tier": "primitive",
      "type": "cubicBezier",
      "value": "ease-in",
      "figma": false
    },
    {
      "name": "--ease-out",
      "path": "ease.out",
      "tier": "primitive",
      "type": "cubicBezier",
      "value": "ease-out",
      "figma": false
    },
    {
      "name": "--ease-in-out",
      "path": "ease.in-out",
      "tier": "primitive",
      "type": "cubicBezier",
      "value": "ease-in-out",
      "figma": false
    },
    {
      "name": "--ease-out-expo",
      "path": "ease.out-expo",
      "tier": "primitive",
      "type": "cubicBezier",
      "value": "cubic-bezier(0.16, 1, 0.3, 1)",
      "description": "Fast start, long settle: a part dropping into place.",
      "figma": false
    },
    {
      "name": "--duration-instant",
      "path": "duration.instant",
      "tier": "primitive",
      "type": "duration",
      "value": "0ms",
      "figma": true
    },
    {
      "name": "--duration-fast",
      "path": "duration.fast",
      "tier": "primitive",
      "type": "duration",
      "value": "150ms",
      "figma": true
    },
    {
      "name": "--duration-base",
      "path": "duration.base",
      "tier": "primitive",
      "type": "duration",
      "value": "250ms",
      "figma": true
    },
    {
      "name": "--duration-slow",
      "path": "duration.slow",
      "tier": "primitive",
      "type": "duration",
      "value": "350ms",
      "figma": true
    },
    {
      "name": "--duration-slower",
      "path": "duration.slower",
      "tier": "primitive",
      "type": "duration",
      "value": "500ms",
      "figma": true
    },
    {
      "name": "--z-index-hide",
      "path": "z-index.hide",
      "tier": "primitive",
      "type": "number",
      "value": "-1",
      "figma": true
    },
    {
      "name": "--z-index-base",
      "path": "z-index.base",
      "tier": "primitive",
      "type": "number",
      "value": "0",
      "figma": true
    },
    {
      "name": "--z-index-docked",
      "path": "z-index.docked",
      "tier": "primitive",
      "type": "number",
      "value": "10",
      "figma": true
    },
    {
      "name": "--z-index-dropdown",
      "path": "z-index.dropdown",
      "tier": "primitive",
      "type": "number",
      "value": "1000",
      "figma": true
    },
    {
      "name": "--z-index-sticky",
      "path": "z-index.sticky",
      "tier": "primitive",
      "type": "number",
      "value": "1020",
      "figma": true
    },
    {
      "name": "--z-index-modal-backdrop",
      "path": "z-index.modal-backdrop",
      "tier": "primitive",
      "type": "number",
      "value": "1040",
      "figma": true
    },
    {
      "name": "--z-index-modal",
      "path": "z-index.modal",
      "tier": "primitive",
      "type": "number",
      "value": "1050",
      "figma": true
    },
    {
      "name": "--z-index-popover",
      "path": "z-index.popover",
      "tier": "primitive",
      "type": "number",
      "value": "1060",
      "figma": true
    },
    {
      "name": "--z-index-toast",
      "path": "z-index.toast",
      "tier": "primitive",
      "type": "number",
      "value": "1070",
      "figma": true
    },
    {
      "name": "--z-index-tooltip",
      "path": "z-index.tooltip",
      "tier": "primitive",
      "type": "number",
      "value": "1080",
      "figma": true
    },
    {
      "name": "--container-max-width",
      "path": "container.max-width",
      "tier": "primitive",
      "type": "dimension",
      "value": "72rem",
      "figma": true
    },
    {
      "name": "--container-narrow",
      "path": "container.narrow",
      "tier": "primitive",
      "type": "dimension",
      "value": "48rem",
      "figma": true
    },
    {
      "name": "--space-component-padding",
      "path": "space.component-padding",
      "tier": "semantic",
      "type": "dimension",
      "alias": "--space-4",
      "value": "1rem",
      "description": "Default inner padding for components.",
      "figma": true
    },
    {
      "name": "--space-element-gap",
      "path": "space.element-gap",
      "tier": "semantic",
      "type": "dimension",
      "alias": "--space-3",
      "value": "0.75rem",
      "description": "Gap between sibling elements inside a component.",
      "figma": true
    },
    {
      "name": "--space-section-gap",
      "path": "space.section-gap",
      "tier": "semantic",
      "type": "dimension",
      "alias": "--space-8",
      "value": "2rem",
      "description": "Gap between page sections.",
      "figma": true
    },
    {
      "name": "--color-text-default",
      "path": "color.text.default",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-gray-900",
        "dark": "--color-navy-100"
      },
      "value": {
        "light": "#1a1d20",
        "dark": "#e6edf4"
      },
      "description": "Default body and heading text.",
      "figma": true
    },
    {
      "name": "--color-text-muted",
      "path": "color.text.muted",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-gray-700",
        "dark": "--color-navy-200"
      },
      "value": {
        "light": "#343a40",
        "dark": "#cfdae5"
      },
      "description": "Secondary text: labels, supporting copy.",
      "figma": true
    },
    {
      "name": "--color-text-subtle",
      "path": "color.text.subtle",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-gray-600",
        "dark": "--color-navy-300"
      },
      "value": {
        "light": "#495057",
        "dark": "#a9bacb"
      },
      "description": "Tertiary text: help text, placeholders, icons. 4.5:1 on every background, canvas included.",
      "figma": true
    },
    {
      "name": "--color-text-inverse",
      "path": "color.text.inverse",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-white",
        "dark": "--color-navy-900"
      },
      "value": {
        "light": "#ffffff",
        "dark": "#0f2140"
      },
      "description": "Text on an inverted background.",
      "figma": true
    },
    {
      "name": "--color-text-on-action",
      "path": "color.text.on-action",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-white",
        "dark": "--color-white"
      },
      "value": {
        "light": "#ffffff",
        "dark": "#ffffff"
      },
      "description": "Text on --color-action-primary.",
      "figma": true
    },
    {
      "name": "--color-text-on-danger",
      "path": "color.text.on-danger",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-white",
        "dark": "--color-white"
      },
      "value": {
        "light": "#ffffff",
        "dark": "#ffffff"
      },
      "description": "Text on --color-action-danger.",
      "figma": true
    },
    {
      "name": "--color-text-link",
      "path": "color.text.link",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-primary",
        "dark": "--color-blue-300"
      },
      "value": {
        "light": "#005a9c",
        "dark": "#7cbff1"
      },
      "description": "Link text. Links are also underlined.",
      "figma": true
    },
    {
      "name": "--color-text-link-hover",
      "path": "color.text.link-hover",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-primary-hover",
        "dark": "--color-blue-200"
      },
      "value": {
        "light": "#004a80",
        "dark": "#9ccdf4"
      },
      "description": "Link text on hover.",
      "figma": true
    },
    {
      "name": "--color-text-disabled",
      "path": "color.text.disabled",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-gray-500",
        "dark": "--color-navy-400"
      },
      "value": {
        "light": "#6c757d",
        "dark": "#7f95ab"
      },
      "description": "Text in disabled (ghosted) controls.",
      "figma": true
    },
    {
      "name": "--color-text-success",
      "path": "color.text.success",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-green-900",
        "dark": "--color-green-300"
      },
      "value": {
        "light": "#155724",
        "dark": "#a3d9b1"
      },
      "description": "Text on --color-background-success.",
      "figma": true
    },
    {
      "name": "--color-text-warning",
      "path": "color.text.warning",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-yellow-900",
        "dark": "--color-yellow-300"
      },
      "value": {
        "light": "#856404",
        "dark": "#f5d77a"
      },
      "description": "Text on --color-background-warning.",
      "figma": true
    },
    {
      "name": "--color-text-error",
      "path": "color.text.error",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-red-900",
        "dark": "--color-red-300"
      },
      "value": {
        "light": "#721c24",
        "dark": "#f4a9b0"
      },
      "description": "Text on --color-background-error.",
      "figma": true
    },
    {
      "name": "--color-text-info",
      "path": "color.text.info",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-cyan-900",
        "dark": "--color-cyan-300"
      },
      "value": {
        "light": "#0c5460",
        "dark": "#9ad4df"
      },
      "description": "Text on --color-background-info.",
      "figma": true
    },
    {
      "name": "--color-background-default",
      "path": "color.background.default",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-white",
        "dark": "--color-navy-900"
      },
      "value": {
        "light": "#ffffff",
        "dark": "#0f2140"
      },
      "description": "Page background.",
      "figma": true
    },
    {
      "name": "--color-background-canvas",
      "path": "color.background.canvas",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-blue-150",
        "dark": "--color-navy-950"
      },
      "value": {
        "light": "#dcedf9",
        "dark": "#0b1a33"
      },
      "description": "Instruction-page canvas for showcase and marketing pages; not for dense product UI.",
      "figma": true
    },
    {
      "name": "--color-background-subtle",
      "path": "color.background.subtle",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-gray-50",
        "dark": "--color-navy-800"
      },
      "value": {
        "light": "#f8f9fa",
        "dark": "#1b335c"
      },
      "description": "Subtle section or hover background.",
      "figma": true
    },
    {
      "name": "--color-background-muted",
      "path": "color.background.muted",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-gray-100",
        "dark": "--color-navy-700"
      },
      "value": {
        "light": "#e9ecef",
        "dark": "#27436f"
      },
      "description": "Muted fill for neutral badges and chips.",
      "figma": true
    },
    {
      "name": "--color-background-raised",
      "path": "color.background.raised",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-white",
        "dark": "--color-navy-850"
      },
      "value": {
        "light": "#ffffff",
        "dark": "#14294d"
      },
      "description": "Cards, modals and other raised surfaces.",
      "figma": true
    },
    {
      "name": "--color-background-interactive",
      "path": "color.background.interactive",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-white",
        "dark": "--color-navy-850"
      },
      "value": {
        "light": "#ffffff",
        "dark": "#14294d"
      },
      "description": "Resting background of controls (buttons, inputs).",
      "figma": true
    },
    {
      "name": "--color-background-interactive-hover",
      "path": "color.background.interactive-hover",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-blue-50",
        "dark": "--color-navy-800"
      },
      "value": {
        "light": "#eef6fc",
        "dark": "#1b335c"
      },
      "description": "Hover background of controls.",
      "figma": true
    },
    {
      "name": "--color-background-disabled",
      "path": "color.background.disabled",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-gray-100",
        "dark": "--color-navy-800"
      },
      "value": {
        "light": "#e9ecef",
        "dark": "#1b335c"
      },
      "description": "Background of disabled (ghosted) controls.",
      "figma": true
    },
    {
      "name": "--color-background-callout",
      "path": "color.background.callout",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-yellow-100",
        "dark": "--color-navy-700"
      },
      "value": {
        "light": "#fff3cd",
        "dark": "#27436f"
      },
      "description": "The 1:1 call-out that introduces a new part.",
      "figma": true
    },
    {
      "name": "--color-background-overlay",
      "path": "color.background.overlay",
      "tier": "semantic",
      "type": "color",
      "value": {
        "light": "rgb(15 33 64 / 0.55)",
        "dark": "rgb(0 0 0 / 0.72)"
      },
      "description": "Modal backdrop.",
      "figma": true
    },
    {
      "name": "--color-background-success",
      "path": "color.background.success",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-green-100",
        "dark": "--color-green-950"
      },
      "value": {
        "light": "#d4edda",
        "dark": "#0f2e1a"
      },
      "description": "Background for success messages and badges.",
      "figma": true
    },
    {
      "name": "--color-background-warning",
      "path": "color.background.warning",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-yellow-100",
        "dark": "--color-yellow-950"
      },
      "value": {
        "light": "#fff3cd",
        "dark": "#3a2e05"
      },
      "description": "Background for warning messages and badges.",
      "figma": true
    },
    {
      "name": "--color-background-error",
      "path": "color.background.error",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-red-100",
        "dark": "--color-red-950"
      },
      "value": {
        "light": "#f8d7da",
        "dark": "#3b1216"
      },
      "description": "Background for error messages and badges.",
      "figma": true
    },
    {
      "name": "--color-background-info",
      "path": "color.background.info",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-cyan-100",
        "dark": "--color-cyan-950"
      },
      "value": {
        "light": "#d1ecf1",
        "dark": "#0b2d33"
      },
      "description": "Background for info messages and badges.",
      "figma": true
    },
    {
      "name": "--color-border-default",
      "path": "color.border.default",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-gray-300",
        "dark": "--color-navy-700"
      },
      "value": {
        "light": "#ced4da",
        "dark": "#27436f"
      },
      "description": "Quiet dividers inside a part.",
      "figma": true
    },
    {
      "name": "--color-border-strong",
      "path": "color.border.strong",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-gray-500",
        "dark": "--color-navy-600"
      },
      "value": {
        "light": "#6c757d",
        "dark": "#3b5988"
      },
      "description": "Emphasized dividers.",
      "figma": true
    },
    {
      "name": "--color-border-keyline",
      "path": "color.border.keyline",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-gray-900",
        "dark": "--color-navy-200"
      },
      "value": {
        "light": "#1a1d20",
        "dark": "#cfdae5"
      },
      "description": "The 2px ink keyline around every part: cards, controls, call-outs.",
      "figma": true
    },
    {
      "name": "--color-border-interactive",
      "path": "color.border.interactive",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-gray-900",
        "dark": "--color-navy-300"
      },
      "value": {
        "light": "#1a1d20",
        "dark": "#a9bacb"
      },
      "description": "Borders of controls (inputs, default buttons). Meets 3:1 non-text contrast.",
      "figma": true
    },
    {
      "name": "--color-border-focus",
      "path": "color.border.focus",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-gray-900",
        "dark": "--color-yellow-400"
      },
      "value": {
        "light": "#1a1d20",
        "dark": "#f2cd37"
      },
      "description": "Focus ring color. Same as --color-focus-ring.",
      "figma": true
    },
    {
      "name": "--color-border-success",
      "path": "color.border.success",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-green-800",
        "dark": "--color-green-300"
      },
      "value": {
        "light": "#1e5631",
        "dark": "#a3d9b1"
      },
      "description": "Border for the success state. At least 3:1 against fields.",
      "figma": true
    },
    {
      "name": "--color-border-warning",
      "path": "color.border.warning",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-yellow-900",
        "dark": "--color-yellow-300"
      },
      "value": {
        "light": "#856404",
        "dark": "#f5d77a"
      },
      "description": "Border for the warning state. At least 3:1 against fields.",
      "figma": true
    },
    {
      "name": "--color-border-error",
      "path": "color.border.error",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-red-600",
        "dark": "--color-red-300"
      },
      "value": {
        "light": "#c91a09",
        "dark": "#f4a9b0"
      },
      "description": "Border for the error state. At least 3:1 against fields.",
      "figma": true
    },
    {
      "name": "--color-border-info",
      "path": "color.border.info",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-cyan-900",
        "dark": "--color-cyan-300"
      },
      "value": {
        "light": "#0c5460",
        "dark": "#9ad4df"
      },
      "description": "Border for the info state. At least 3:1 against fields.",
      "figma": true
    },
    {
      "name": "--color-action-primary",
      "path": "color.action.primary.$root",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-primary",
        "dark": "--color-blue-600"
      },
      "value": {
        "light": "#005a9c",
        "dark": "#2576cc"
      },
      "description": "Primary action background. Brick blue.",
      "figma": true
    },
    {
      "name": "--color-action-primary-hover",
      "path": "color.action.primary.hover",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-primary-hover",
        "dark": "--color-blue-700"
      },
      "value": {
        "light": "#004a80",
        "dark": "#185da6"
      },
      "description": "Primary action on hover.",
      "figma": true
    },
    {
      "name": "--color-action-primary-active",
      "path": "color.action.primary.active",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-primary-active",
        "dark": "--color-blue-800"
      },
      "value": {
        "light": "#003860",
        "dark": "#144d8a"
      },
      "description": "Primary action while pressed.",
      "figma": true
    },
    {
      "name": "--color-action-danger",
      "path": "color.action.danger.$root",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-red-600",
        "dark": "--color-red-600"
      },
      "value": {
        "light": "#c91a09",
        "dark": "#c91a09"
      },
      "description": "Destructive action background. Brick red.",
      "figma": true
    },
    {
      "name": "--color-action-danger-hover",
      "path": "color.action.danger.hover",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-red-700",
        "dark": "--color-red-700"
      },
      "value": {
        "light": "#a01408",
        "dark": "#a01408"
      },
      "description": "Destructive action on hover.",
      "figma": true
    },
    {
      "name": "--color-action-neutral-hover",
      "path": "color.action.neutral-hover",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-gray-100",
        "dark": "--color-navy-700"
      },
      "value": {
        "light": "#e9ecef",
        "dark": "#27436f"
      },
      "description": "Hover background for ghost and icon buttons.",
      "figma": true
    },
    {
      "name": "--color-action-loading-stripe",
      "path": "color.action.loading-stripe",
      "tier": "semantic",
      "type": "color",
      "value": {
        "light": "rgb(0 0 0 / 0.14)",
        "dark": "rgb(0 0 0 / 0.22)"
      },
      "description": "Moving stripes on a loading control. Always darkens, so light text keeps its contrast.",
      "figma": true
    },
    {
      "name": "--color-focus-ring",
      "path": "color.focus-ring.$root",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-gray-900",
        "dark": "--color-yellow-400"
      },
      "value": {
        "light": "#1a1d20",
        "dark": "#f2cd37"
      },
      "description": "Solid 2px focus ring: at least 3:1 on every background in its theme.",
      "figma": true
    },
    {
      "name": "--color-focus-ring-error",
      "path": "color.focus-ring.error",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-red-600",
        "dark": "--color-red-300"
      },
      "value": {
        "light": "#c91a09",
        "dark": "#f4a9b0"
      },
      "description": "Focus ring on a control in the error state.",
      "figma": true
    },
    {
      "name": "--color-focus-halo",
      "path": "color.focus-halo",
      "tier": "semantic",
      "type": "color",
      "alias": {
        "light": "--color-yellow-400",
        "dark": "--color-navy-950"
      },
      "value": {
        "light": "#f2cd37",
        "dark": "#0b1a33"
      },
      "description": "Outer halo around the focus ring: the yellow \"new part\" highlight in light, a dark gap in dark.",
      "figma": true
    },
    {
      "name": "--shadow-raised",
      "path": "shadow.raised",
      "tier": "semantic",
      "type": "shadow",
      "value": {
        "light": "0 2px 0 #1a1d20, 0 3px 8px rgb(26 29 32 / 0.12)",
        "dark": "0 2px 0 rgb(207 218 229 / 0.45), 0 4px 10px rgb(0 0 0 / 0.35)"
      },
      "description": "Brick-edge depth for raised parts: a 2px edge plus a soft blur.",
      "figma": false
    },
    {
      "name": "--shadow-elevated",
      "path": "shadow.elevated",
      "tier": "semantic",
      "type": "shadow",
      "value": {
        "light": "0 2px 0 #1a1d20, 0 10px 24px -4px rgb(26 29 32 / 0.22)",
        "dark": "0 2px 0 rgb(207 218 229 / 0.5), 0 12px 28px -4px rgb(0 0 0 / 0.6)"
      },
      "description": "Lifted parts (elevated cards, modals). In dark mode a light rim keeps the edge visible.",
      "figma": false
    },
    {
      "name": "--button-background",
      "path": "button.background",
      "tier": "component",
      "type": "color",
      "alias": "--color-background-interactive",
      "value": {
        "light": "#ffffff",
        "dark": "#14294d"
      },
      "figma": true
    },
    {
      "name": "--button-background-hover",
      "path": "button.background-hover",
      "tier": "component",
      "type": "color",
      "alias": "--color-background-interactive-hover",
      "value": {
        "light": "#eef6fc",
        "dark": "#1b335c"
      },
      "figma": true
    },
    {
      "name": "--button-border",
      "path": "button.border",
      "tier": "component",
      "type": "color",
      "alias": "--color-border-interactive",
      "value": {
        "light": "#1a1d20",
        "dark": "#a9bacb"
      },
      "figma": true
    },
    {
      "name": "--button-text",
      "path": "button.text",
      "tier": "component",
      "type": "color",
      "alias": "--color-text-default",
      "value": {
        "light": "#1a1d20",
        "dark": "#e6edf4"
      },
      "figma": true
    },
    {
      "name": "--button-radius",
      "path": "button.radius",
      "tier": "component",
      "type": "dimension",
      "alias": "--border-radius-base",
      "value": "0.25rem",
      "figma": true
    },
    {
      "name": "--button-shadow",
      "path": "button.shadow",
      "tier": "component",
      "type": "shadow",
      "alias": "--shadow-raised",
      "value": {
        "light": "0 2px 0 #1a1d20, 0 3px 8px rgb(26 29 32 / 0.12)",
        "dark": "0 2px 0 rgb(207 218 229 / 0.45), 0 4px 10px rgb(0 0 0 / 0.35)"
      },
      "figma": false
    },
    {
      "name": "--button-primary-background",
      "path": "button.primary.background",
      "tier": "component",
      "type": "color",
      "alias": "--color-action-primary",
      "value": {
        "light": "#005a9c",
        "dark": "#2576cc"
      },
      "figma": true
    },
    {
      "name": "--button-primary-background-hover",
      "path": "button.primary.background-hover",
      "tier": "component",
      "type": "color",
      "alias": "--color-action-primary-hover",
      "value": {
        "light": "#004a80",
        "dark": "#185da6"
      },
      "figma": true
    },
    {
      "name": "--button-primary-text",
      "path": "button.primary.text",
      "tier": "component",
      "type": "color",
      "alias": "--color-text-on-action",
      "value": "#ffffff",
      "figma": true
    },
    {
      "name": "--button-primary-border",
      "path": "button.primary.border",
      "tier": "component",
      "type": "color",
      "alias": "--color-border-keyline",
      "value": {
        "light": "#1a1d20",
        "dark": "#cfdae5"
      },
      "description": "Ink keyline around the primary piece.",
      "figma": true
    },
    {
      "name": "--button-primary-background-active",
      "path": "button.primary.background-active",
      "tier": "component",
      "type": "color",
      "alias": "--color-action-primary-active",
      "value": {
        "light": "#003860",
        "dark": "#144d8a"
      },
      "figma": true
    },
    {
      "name": "--button-secondary-text",
      "path": "button.secondary.text",
      "tier": "component",
      "type": "color",
      "alias": "--color-text-link",
      "value": {
        "light": "#005a9c",
        "dark": "#7cbff1"
      },
      "figma": true
    },
    {
      "name": "--button-secondary-border",
      "path": "button.secondary.border",
      "tier": "component",
      "type": "color",
      "alias": "--color-action-primary",
      "value": {
        "light": "#005a9c",
        "dark": "#2576cc"
      },
      "figma": true
    },
    {
      "name": "--button-ghost-background-hover",
      "path": "button.ghost.background-hover",
      "tier": "component",
      "type": "color",
      "alias": "--color-action-neutral-hover",
      "value": {
        "light": "#e9ecef",
        "dark": "#27436f"
      },
      "figma": true
    },
    {
      "name": "--button-danger-background",
      "path": "button.danger.background",
      "tier": "component",
      "type": "color",
      "alias": "--color-action-danger",
      "value": "#c91a09",
      "figma": true
    },
    {
      "name": "--button-danger-background-hover",
      "path": "button.danger.background-hover",
      "tier": "component",
      "type": "color",
      "alias": "--color-action-danger-hover",
      "value": "#a01408",
      "figma": true
    },
    {
      "name": "--button-danger-text",
      "path": "button.danger.text",
      "tier": "component",
      "type": "color",
      "alias": "--color-text-on-danger",
      "value": "#ffffff",
      "figma": true
    },
    {
      "name": "--button-danger-border",
      "path": "button.danger.border",
      "tier": "component",
      "type": "color",
      "alias": "--color-border-keyline",
      "value": {
        "light": "#1a1d20",
        "dark": "#cfdae5"
      },
      "description": "Ink keyline around the danger piece.",
      "figma": true
    },
    {
      "name": "--button-pressed-background",
      "path": "button.pressed.background",
      "tier": "component",
      "type": "color",
      "alias": "--color-text-default",
      "value": {
        "light": "#1a1d20",
        "dark": "#e6edf4"
      },
      "description": "Selected toggle (aria-pressed=\"true\"): an ink-filled piece.",
      "figma": true
    },
    {
      "name": "--button-pressed-border",
      "path": "button.pressed.border",
      "tier": "component",
      "type": "color",
      "alias": "--color-border-keyline",
      "value": {
        "light": "#1a1d20",
        "dark": "#cfdae5"
      },
      "figma": true
    },
    {
      "name": "--button-pressed-text",
      "path": "button.pressed.text",
      "tier": "component",
      "type": "color",
      "alias": "--color-text-inverse",
      "value": {
        "light": "#ffffff",
        "dark": "#0f2140"
      },
      "figma": true
    },
    {
      "name": "--input-background",
      "path": "input.background",
      "tier": "component",
      "type": "color",
      "alias": "--color-background-interactive",
      "value": {
        "light": "#ffffff",
        "dark": "#14294d"
      },
      "figma": true
    },
    {
      "name": "--input-border",
      "path": "input.border",
      "tier": "component",
      "type": "color",
      "alias": "--color-border-interactive",
      "value": {
        "light": "#1a1d20",
        "dark": "#a9bacb"
      },
      "figma": true
    },
    {
      "name": "--input-border-focus",
      "path": "input.border-focus",
      "tier": "component",
      "type": "color",
      "alias": "--color-action-primary",
      "value": {
        "light": "#005a9c",
        "dark": "#2576cc"
      },
      "figma": true
    },
    {
      "name": "--input-text",
      "path": "input.text",
      "tier": "component",
      "type": "color",
      "alias": "--color-text-default",
      "value": {
        "light": "#1a1d20",
        "dark": "#e6edf4"
      },
      "figma": true
    },
    {
      "name": "--input-placeholder",
      "path": "input.placeholder",
      "tier": "component",
      "type": "color",
      "alias": "--color-text-subtle",
      "value": {
        "light": "#495057",
        "dark": "#a9bacb"
      },
      "figma": true
    },
    {
      "name": "--input-radius",
      "path": "input.radius",
      "tier": "component",
      "type": "dimension",
      "alias": "--border-radius-base",
      "value": "0.25rem",
      "figma": true
    },
    {
      "name": "--card-background",
      "path": "card.background",
      "tier": "component",
      "type": "color",
      "alias": "--color-background-raised",
      "value": {
        "light": "#ffffff",
        "dark": "#14294d"
      },
      "figma": true
    },
    {
      "name": "--card-border",
      "path": "card.border",
      "tier": "component",
      "type": "color",
      "alias": "--color-border-keyline",
      "value": {
        "light": "#1a1d20",
        "dark": "#cfdae5"
      },
      "figma": true
    },
    {
      "name": "--card-border-hover",
      "path": "card.border-hover",
      "tier": "component",
      "type": "color",
      "alias": "--color-action-primary",
      "value": {
        "light": "#005a9c",
        "dark": "#2576cc"
      },
      "figma": true
    },
    {
      "name": "--card-radius",
      "path": "card.radius",
      "tier": "component",
      "type": "dimension",
      "alias": "--border-radius-lg",
      "value": "0.5rem",
      "figma": true
    },
    {
      "name": "--card-padding",
      "path": "card.padding",
      "tier": "component",
      "type": "dimension",
      "alias": "--space-6",
      "value": "1.5rem",
      "figma": true
    },
    {
      "name": "--card-shadow",
      "path": "card.shadow",
      "tier": "component",
      "type": "shadow",
      "alias": "--shadow-raised",
      "value": {
        "light": "0 2px 0 #1a1d20, 0 3px 8px rgb(26 29 32 / 0.12)",
        "dark": "0 2px 0 rgb(207 218 229 / 0.45), 0 4px 10px rgb(0 0 0 / 0.35)"
      },
      "figma": false
    },
    {
      "name": "--card-shadow-elevated",
      "path": "card.shadow-elevated",
      "tier": "component",
      "type": "shadow",
      "alias": "--shadow-elevated",
      "value": {
        "light": "0 2px 0 #1a1d20, 0 10px 24px -4px rgb(26 29 32 / 0.22)",
        "dark": "0 2px 0 rgb(207 218 229 / 0.5), 0 12px 28px -4px rgb(0 0 0 / 0.6)"
      },
      "figma": false
    },
    {
      "name": "--badge-background",
      "path": "badge.background",
      "tier": "component",
      "type": "color",
      "alias": "--color-background-muted",
      "value": {
        "light": "#e9ecef",
        "dark": "#27436f"
      },
      "figma": true
    },
    {
      "name": "--badge-text",
      "path": "badge.text",
      "tier": "component",
      "type": "color",
      "alias": "--color-text-muted",
      "value": {
        "light": "#343a40",
        "dark": "#cfdae5"
      },
      "figma": true
    },
    {
      "name": "--modal-background",
      "path": "modal.background",
      "tier": "component",
      "type": "color",
      "alias": "--color-background-raised",
      "value": {
        "light": "#ffffff",
        "dark": "#14294d"
      },
      "figma": true
    },
    {
      "name": "--modal-backdrop",
      "path": "modal.backdrop",
      "tier": "component",
      "type": "color",
      "alias": "--color-background-overlay",
      "value": {
        "light": "rgb(15 33 64 / 0.55)",
        "dark": "rgb(0 0 0 / 0.72)"
      },
      "figma": true
    },
    {
      "name": "--modal-border",
      "path": "modal.border",
      "tier": "component",
      "type": "color",
      "alias": "--color-border-keyline",
      "value": {
        "light": "#1a1d20",
        "dark": "#cfdae5"
      },
      "figma": true
    },
    {
      "name": "--modal-radius",
      "path": "modal.radius",
      "tier": "component",
      "type": "dimension",
      "alias": "--border-radius-lg",
      "value": "0.5rem",
      "figma": true
    },
    {
      "name": "--modal-shadow",
      "path": "modal.shadow",
      "tier": "component",
      "type": "shadow",
      "alias": "--shadow-elevated",
      "value": {
        "light": "0 2px 0 #1a1d20, 0 10px 24px -4px rgb(26 29 32 / 0.22)",
        "dark": "0 2px 0 rgb(207 218 229 / 0.5), 0 12px 28px -4px rgb(0 0 0 / 0.6)"
      },
      "figma": false
    },
    {
      "name": "--checkbox-size",
      "path": "checkbox.size",
      "tier": "component",
      "type": "dimension",
      "alias": "--space-6",
      "value": "1.5rem",
      "description": "Box and ring size for checkbox and radio (24px).",
      "figma": true
    },
    {
      "name": "--checkbox-background",
      "path": "checkbox.background",
      "tier": "component",
      "type": "color",
      "alias": "--color-background-interactive",
      "value": {
        "light": "#ffffff",
        "dark": "#14294d"
      },
      "figma": true
    },
    {
      "name": "--checkbox-border",
      "path": "checkbox.border",
      "tier": "component",
      "type": "color",
      "alias": "--color-border-interactive",
      "value": {
        "light": "#1a1d20",
        "dark": "#a9bacb"
      },
      "figma": true
    },
    {
      "name": "--checkbox-checked-background",
      "path": "checkbox.checked-background",
      "tier": "component",
      "type": "color",
      "alias": "--color-text-default",
      "value": {
        "light": "#1a1d20",
        "dark": "#e6edf4"
      },
      "description": "Checked fill: the ink of a seated piece, not action blue.",
      "figma": true
    },
    {
      "name": "--checkbox-mark",
      "path": "checkbox.mark",
      "tier": "component",
      "type": "color",
      "alias": "--color-text-inverse",
      "value": {
        "light": "#ffffff",
        "dark": "#0f2140"
      },
      "description": "Tick and bar drawn on the checked fill.",
      "figma": true
    },
    {
      "name": "--checkbox-radius",
      "path": "checkbox.radius",
      "tier": "component",
      "type": "dimension",
      "alias": "--border-radius-base",
      "value": "0.25rem",
      "figma": true
    },
    {
      "name": "--radio-dot",
      "path": "radio.dot",
      "tier": "component",
      "type": "color",
      "alias": "--color-text-default",
      "value": {
        "light": "#1a1d20",
        "dark": "#e6edf4"
      },
      "description": "The ink stud seated in a checked radio.",
      "figma": true
    },
    {
      "name": "--toggle-track-off",
      "path": "toggle.track-off",
      "tier": "component",
      "type": "color",
      "alias": "--color-background-muted",
      "value": {
        "light": "#e9ecef",
        "dark": "#27436f"
      },
      "figma": true
    },
    {
      "name": "--toggle-track-on",
      "path": "toggle.track-on",
      "tier": "component",
      "type": "color",
      "alias": "--color-text-default",
      "value": {
        "light": "#1a1d20",
        "dark": "#e6edf4"
      },
      "description": "On: an ink track, like a pressed piece.",
      "figma": true
    },
    {
      "name": "--toggle-thumb",
      "path": "toggle.thumb",
      "tier": "component",
      "type": "color",
      "alias": "--color-background-interactive",
      "value": {
        "light": "#ffffff",
        "dark": "#14294d"
      },
      "figma": true
    },
    {
      "name": "--toggle-border",
      "path": "toggle.border",
      "tier": "component",
      "type": "color",
      "alias": "--color-border-keyline",
      "value": {
        "light": "#1a1d20",
        "dark": "#cfdae5"
      },
      "figma": true
    },
    {
      "name": "--toggle-mark",
      "path": "toggle.mark",
      "tier": "component",
      "type": "color",
      "alias": "--color-text-default",
      "value": {
        "light": "#1a1d20",
        "dark": "#e6edf4"
      },
      "description": "Tick drawn on the thumb when on.",
      "figma": true
    },
    {
      "name": "--icon-size",
      "path": "icon.size",
      "tier": "component",
      "type": "dimension",
      "alias": "--space-5",
      "value": "1.25rem",
      "description": "Default icon size (20px).",
      "figma": true
    },
    {
      "name": "--icon-size-sm",
      "path": "icon.size-sm",
      "tier": "component",
      "type": "dimension",
      "alias": "--space-4",
      "value": "1rem",
      "figma": true
    },
    {
      "name": "--icon-size-lg",
      "path": "icon.size-lg",
      "tier": "component",
      "type": "dimension",
      "alias": "--space-6",
      "value": "1.5rem",
      "figma": true
    },
    {
      "name": "--alert-background",
      "path": "alert.background",
      "tier": "component",
      "type": "color",
      "alias": "--color-background-raised",
      "value": {
        "light": "#ffffff",
        "dark": "#14294d"
      },
      "description": "Every tone sits on paper; tone comes from the edge, the icon and the hidden prefix.",
      "figma": true
    },
    {
      "name": "--alert-border",
      "path": "alert.border",
      "tier": "component",
      "type": "color",
      "alias": "--color-border-keyline",
      "value": {
        "light": "#1a1d20",
        "dark": "#cfdae5"
      },
      "figma": true
    },
    {
      "name": "--alert-edge-info",
      "path": "alert.edge-info",
      "tier": "component",
      "type": "color",
      "alias": "--color-border-info",
      "value": {
        "light": "#0c5460",
        "dark": "#9ad4df"
      },
      "description": "4px bottom edge and icon color for info.",
      "figma": true
    },
    {
      "name": "--alert-edge-success",
      "path": "alert.edge-success",
      "tier": "component",
      "type": "color",
      "alias": "--color-border-success",
      "value": {
        "light": "#1e5631",
        "dark": "#a3d9b1"
      },
      "figma": true
    },
    {
      "name": "--alert-edge-warning",
      "path": "alert.edge-warning",
      "tier": "component",
      "type": "color",
      "alias": "--color-border-warning",
      "value": {
        "light": "#856404",
        "dark": "#f5d77a"
      },
      "figma": true
    },
    {
      "name": "--alert-edge-error",
      "path": "alert.edge-error",
      "tier": "component",
      "type": "color",
      "alias": "--color-border-error",
      "value": {
        "light": "#c91a09",
        "dark": "#f4a9b0"
      },
      "figma": true
    }
  ]
}
