{
  "version": "v3.5",
  "origin": "https://design-system.sportingscouter.com",
  "pages": [
    {
      "slug": "components",
      "href": "/components/",
      "title": "Components",
      "area": "components",
      "group": "hub",
      "desc": "Browse every component recipe, with search.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "templates",
      "href": "/templates/",
      "title": "Templates",
      "area": "templates",
      "group": "hub",
      "desc": "Production-ready page models built from the same tokens.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "agents",
      "href": "/agents/",
      "title": "Agent docs",
      "area": "agents",
      "group": "hub",
      "desc": "Rules, implementing product UI, designing new layouts, catalog, and changelog for AI-assisted development.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "layout-components",
      "href": "/layout-components/",
      "title": "Layout components",
      "area": "components",
      "group": "layout",
      "desc": "Stack, panel, form layout, and App Shell - compose surfaces without ad hoc flex.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "app-shell",
      "href": "/app-shell/",
      "title": "App Shell",
      "area": "components",
      "group": "layout",
      "desc": "Side-nav application frame: collapsible rail, resize handle, scrollable main.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "side-nav",
      "href": "/side-nav/",
      "title": "Side nav",
      "area": "components",
      "group": "components",
      "desc": "Organiser rail plus edition workspace (event - edition header, Overview · Verified feedback · Public feedback · Promote · Settings tabs).",
      "demos": true,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "form-layout",
      "href": "/form-layout/",
      "title": "Form layout",
      "area": "components",
      "group": "layout",
      "desc": "Multi-field forms: width, sections, actions - wraps field(), not replaces it.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "empty-state",
      "href": "/empty-state/",
      "title": "Empty state",
      "area": "components",
      "group": "components",
      "desc": "Text and CTA when a list has no rows - no illustrations in this system.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "datepicker",
      "href": "/datepicker/",
      "title": "Date picker",
      "area": "components",
      "group": "components",
      "desc": "Calendar grid visual layer; behaviour wired in the app with Radix or native date input.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "dropdown-menu",
      "href": "/dropdown-menu/",
      "title": "Dropdown menu",
      "area": "components",
      "group": "components",
      "desc": "Row actions and overflow menus - not site navigation.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "popover",
      "href": "/popover/",
      "title": "Popover",
      "area": "components",
      "group": "components",
      "desc": "Anchored compact surface sharing Select popover tokens.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "progress-bar",
      "href": "/progress-bar/",
      "title": "Progress bar",
      "area": "components",
      "group": "components",
      "desc": "Linear progress for uploads and publishing - not the gauge ring.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "metadata-list",
      "href": "/metadata-list/",
      "title": "Metadata list",
      "area": "components",
      "group": "components",
      "desc": "Label–value rows for event and review detail.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "item-list",
      "href": "/item-list/",
      "title": "List",
      "area": "components",
      "group": "components",
      "desc": "Simple hairline list for activity feeds.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "file-input",
      "href": "/file-input/",
      "title": "File input",
      "area": "components",
      "group": "components",
      "desc": "Styled native file picker for imports and attachments.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "stepper",
      "href": "/stepper/",
      "title": "Stepper",
      "area": "components",
      "group": "components",
      "desc": "Wizard navigation - distinct from editorial steps().",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "status-dot",
      "href": "/status-dot/",
      "title": "Status dot",
      "area": "components",
      "group": "components",
      "desc": "Inline state indicator with required accessible name.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "command-palette",
      "href": "/command-palette/",
      "title": "Command palette",
      "area": "components",
      "group": "components",
      "desc": "⌘K surface; groups can mirror catalog.json.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "agents-changelog",
      "href": "/agents-changelog/",
      "title": "Changelog",
      "area": "agents",
      "group": "agents",
      "desc": "Design system release notes.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "agents-consumer-update",
      "href": "/agents-consumer-update/",
      "title": "Update consumer apps",
      "area": "agents",
      "group": "agents",
      "desc": "Short Cursor prompt to sync a tagged design-system release and verify dependent workspaces.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "agents-templates",
      "href": "/agents-templates/",
      "title": "Template authoring",
      "area": "agents",
      "group": "agents",
      "desc": "How to add a template page without breaking tokens.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "agents-mcp",
      "href": "/agents-mcp/",
      "title": "MCP",
      "area": "agents",
      "group": "agents",
      "desc": "Optional follow-up: serve catalog.json over MCP.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "shell-side-nav",
      "href": "/shell-side-nav/",
      "title": "Side nav",
      "area": "templates",
      "group": "templates",
      "desc": "Organiser rail with workspace header (event - edition) and tabs: Overview, Verified feedback, Public feedback, Promote, Settings.",
      "demos": false,
      "layout": "app",
      "templateCategory": "shell"
    },
    {
      "slug": "",
      "href": "/",
      "title": "Overview",
      "area": "docs",
      "group": "start",
      "desc": "One token set, six surfaces. Three layers, and only one you may touch.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "installation",
      "href": "/installation/",
      "title": "Installation",
      "area": "docs",
      "group": "start",
      "desc": "One CSS import brings Tailwind v4, the font, all three token layers and the density modes. No tailwind.config.js.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "principles",
      "href": "/principles/",
      "title": "Principles",
      "area": "docs",
      "group": "start",
      "desc": "Six enforceable rules that decide arguments - blue navigates, black commits; the system is flat; colour is never the only signal.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "color",
      "href": "/color/",
      "title": "Color",
      "area": "docs",
      "group": "foundations",
      "desc": "Scout Blue over a cool slate ramp, with every value measured against its intended ground. Includes a live contrast checker.",
      "demos": true,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "typography",
      "href": "/typography/",
      "title": "Typography",
      "area": "docs",
      "group": "foundations",
      "desc": "Twelve type roles in DM Sans, each carrying its own line-height and tracking.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "spacing",
      "href": "/spacing/",
      "title": "Spacing & density",
      "area": "docs",
      "group": "foundations",
      "desc": "Three densities plus widget scoping. Six surfaces share every token and differ only in rhythm.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "layout",
      "href": "/layout/",
      "title": "Layout & grid",
      "area": "docs",
      "group": "foundations",
      "desc": "Five container measures, one real breakpoint, and a safe-area-aware gutter. No 12-column grid.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "radius",
      "href": "/radius/",
      "title": "Radius",
      "area": "docs",
      "group": "foundations",
      "desc": "One soft, small corner. 4px is the system’s real radius.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "elevation",
      "href": "/elevation/",
      "title": "Elevation",
      "area": "docs",
      "group": "foundations",
      "desc": "The system is flat. Planes separate with a hairline; only floating layers cast a shadow.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "motion",
      "href": "/motion/",
      "title": "Motion",
      "area": "docs",
      "group": "foundations",
      "desc": "Functional, never decorative. Two curves, three durations, and nothing animates transform.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "layers",
      "href": "/layers/",
      "title": "Layers",
      "area": "docs",
      "group": "foundations",
      "desc": "One ordered z-index scale of six. Toast sits above modal on purpose.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "icons",
      "href": "/icons/",
      "title": "Icons",
      "area": "docs",
      "group": "foundations",
      "desc": "Lucide only, at currentColor. Search the full catalog, copy import paths, and see the seven ScoreBar category mappings.",
      "demos": true,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "button",
      "href": "/button/",
      "title": "Button",
      "area": "components",
      "group": "components",
      "desc": "Five variants, three sizes, an ink primary and no shadow anywhere. Interactive playground.",
      "demos": true,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "input",
      "href": "/input/",
      "title": "Input & Textarea",
      "area": "components",
      "group": "components",
      "desc": "A visible 3.06:1 boundary, no shadow, and an error state that is a border and a message - never a red fill.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "input-otp",
      "href": "/input-otp/",
      "title": "Input OTP",
      "area": "components",
      "group": "components",
      "desc": "The one-time code field — semantically one input, not six. Paste, autofill and screen readers all depend on that.",
      "demos": true,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "expanding-textarea",
      "href": "/expanding-textarea/",
      "title": "Expanding textarea",
      "area": "components",
      "group": "components",
      "desc": "A textarea that grows with its content, bounded at both ends — CSS field-sizing first, JS only as a fallback.",
      "demos": true,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "checkbox",
      "href": "/checkbox/",
      "title": "Checkbox",
      "area": "components",
      "group": "components",
      "desc": "A native input, restyled - with the indeterminate parent, the fieldset rule, and the line between a checkbox, a switch and a radio.",
      "demos": true,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "choicebox",
      "href": "/choicebox/",
      "title": "Choicebox",
      "area": "components",
      "group": "components",
      "desc": "A radio or checkbox with the whole card as its target, for the two or three moments where the options need explaining.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "select",
      "href": "/select/",
      "title": "Select",
      "area": "components",
      "group": "components",
      "desc": "Radix behaviour in our clothes. Placeholder and empty text are required props.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "combobox",
      "href": "/combobox/",
      "title": "Combobox",
      "area": "components",
      "group": "components",
      "desc": "A typeable field with a filterable list - same Input and Select language, no inline creation.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "multi-select",
      "href": "/multi-select/",
      "title": "Multi-select",
      "area": "components",
      "group": "components",
      "desc": "A combobox that stays open while you pick several things - selected options keep their place, and empty means everything.",
      "demos": true,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "search",
      "href": "/search/",
      "title": "Event search",
      "area": "components",
      "group": "components",
      "desc": "A combobox that finds an event or creates the one we do not have yet — with the create row placed so it cannot produce duplicates.",
      "demos": true,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "card",
      "href": "/card/",
      "title": "Card",
      "area": "components",
      "group": "components",
      "desc": "A hairline, a 4px corner, and padding from the density. No shadow, ever.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "badge",
      "href": "/badge/",
      "title": "Badge",
      "area": "components",
      "group": "components",
      "desc": "A badge is a label, and labels in this system are always uppercase.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "banner",
      "href": "/banner/",
      "title": "Banner",
      "area": "components",
      "group": "components",
      "desc": "A fact about the state of a surface - global or scoped. Includes the test that separates it from a callout, a toast and a dialog.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "breadcrumbs",
      "href": "/breadcrumbs/",
      "title": "Breadcrumbs",
      "area": "components",
      "group": "components",
      "desc": "Hierarchy, never history - four levels, a collapsed middle, and the BreadcrumbList JSON-LD that must match it.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "locale-switcher",
      "href": "/locale-switcher/",
      "title": "Locale switcher",
      "area": "components",
      "group": "components",
      "desc": "A disclosure chip with a Languages icon - same control as sportingscouter/www footer; not tabs, not Select, no chevron.",
      "demos": true,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "navigation-menu",
      "href": "/navigation-menu/",
      "title": "Navigation menu",
      "area": "components",
      "group": "components",
      "desc": "The site-wide nav bar with disclosure panels — a set of buttons and links, never role=\"menu\", and an accordion below 768px.",
      "demos": true,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "table",
      "href": "/table/",
      "title": "Table",
      "area": "components",
      "group": "components",
      "desc": "Eyebrow headers, hairline rows, right-aligned tabular numerics.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "data-table",
      "href": "/data-table/",
      "title": "Data table",
      "area": "components",
      "group": "components",
      "desc": "Composition, not a recipe - table() + pagination() + Select for page size. TanStack owns the model later.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "pagination",
      "href": "/pagination/",
      "title": "Pagination",
      "area": "components",
      "group": "components",
      "desc": "Page numbers navigate; they do not commit. Inverse fill on the current page, compact Prev/Next on the phone.",
      "demos": true,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "review-card",
      "href": "/review-card/",
      "title": "Review card",
      "area": "components",
      "group": "components",
      "desc": "Public athlete lists vs private organiser queues - one card recipe. Figure and stars, a compact row for score-only reviews, one action row with Report always on the right, the incentivised-review disclosure, a list summary of incentivised reviews, two reply threads, and the categories that need attention on business.",
      "demos": true,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "gauge",
      "href": "/gauge/",
      "title": "Gauge",
      "area": "components",
      "group": "components",
      "desc": "A ring, never without its number. Rating gauges derive their colour from the tier; progress gauges are primary at every value.",
      "demos": true,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "stat",
      "href": "/stat/",
      "title": "Stat",
      "area": "components",
      "group": "components",
      "desc": "One number with its label, an optional signed delta and a note. One plane per row; a missing value is a dash, never 0.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "code-block",
      "href": "/code-block/",
      "title": "Code block",
      "area": "components",
      "group": "components",
      "desc": "Monochrome by decision - every syntax theme we measured fails our own contrast floor on comments.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "collapse",
      "href": "/collapse/",
      "title": "Collapse",
      "area": "components",
      "group": "components",
      "desc": "Native details and summary, with the chevron swapped rather than rotated - and the list of things you may never collapse.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "skeleton",
      "href": "/skeleton/",
      "title": "Skeleton",
      "area": "components",
      "group": "components",
      "desc": "Sunken shapes matching the geometry of what is loading, behind motion-safe.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "tabs",
      "href": "/tabs/",
      "title": "Tabs",
      "area": "components",
      "group": "components",
      "desc": "Pill, underline and segmented. Pill is the default and the draft’s own selector.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "dialog",
      "href": "/dialog/",
      "title": "Dialog",
      "area": "components",
      "group": "components",
      "desc": "A 40% ink scrim, a question for a title, and a confirm verb that matches it.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "drawer",
      "href": "/drawer/",
      "title": "Drawer",
      "area": "components",
      "group": "components",
      "desc": "Cover overlay from the right - dialog({ placement: 'side' }). Same scrim, no push variant.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "tooltip",
      "href": "/tooltip/",
      "title": "Tooltip",
      "area": "components",
      "group": "components",
      "desc": "An addition to an accessible name, never the only label. Inverse surface at z-tooltip.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "toast",
      "href": "/toast/",
      "title": "Toast",
      "area": "components",
      "group": "components",
      "desc": "Tone on a 3px left rule. Above modal on purpose.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "eyebrow",
      "href": "/eyebrow/",
      "title": "Eyebrow",
      "area": "docs",
      "group": "primitives",
      "desc": "The kicker — 1–3 words, no punctuation, never a heading tag. Includes the banned-word list, the Copy Swap / Deletion Test and the required HTML structure.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "section",
      "href": "/section/",
      "title": "Section",
      "area": "docs",
      "group": "primitives",
      "desc": "Vertical rhythm and background. Exactly two page backgrounds exist.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "callout",
      "href": "/callout/",
      "title": "Callout",
      "area": "docs",
      "group": "primitives",
      "desc": "The 3px left rule. The tone paints only the rule, and a number without a source is made up.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "steps",
      "href": "/steps/",
      "title": "Steps",
      "area": "docs",
      "group": "primitives",
      "desc": "A 28px filled disc in surface-inverse - the same fill as the primary button.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "rating",
      "href": "/rating/",
      "title": "Rating",
      "area": "docs",
      "group": "primitives",
      "desc": "The rating input: a native radio group implementing the ARIA APG rating pattern at WCAG 1.4.11 contrast.",
      "demos": true,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "format-number",
      "href": "/format-number/",
      "title": "Format number",
      "area": "docs",
      "group": "primitives",
      "desc": "Counts, ratings and signed deltas in the app locale - one rounding rule, no strings in the package.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "scorebar",
      "href": "/scorebar/",
      "title": "ScoreBar",
      "area": "docs",
      "group": "domain",
      "desc": "The product’s visual signature. The colour derives from the value and is never passed in as a style.",
      "demos": true,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "tiers",
      "href": "/tiers/",
      "title": "Rating tiers",
      "area": "docs",
      "group": "domain",
      "desc": "Five tiers on percentage cuts, and three expressions that are not interchangeable.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "categories",
      "href": "/categories/",
      "title": "Categories",
      "area": "docs",
      "group": "domain",
      "desc": "The seven rating categories, their definitions and their Lucide icons, taken from the shipping product.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "states",
      "href": "/states/",
      "title": "Empty, loading & error",
      "area": "docs",
      "group": "patterns",
      "desc": "Any surface that can hold data has four states, not one - with a slot contract for each.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "async-state",
      "href": "/async-state/",
      "title": "Async state",
      "area": "docs",
      "group": "patterns",
      "desc": "Loading, empty and error panels - the bordered spinner pattern from the business dashboard, plus shared empty and error slots.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "widget",
      "href": "/widget/",
      "title": "Widget & embed",
      "area": "docs",
      "group": "patterns",
      "desc": "Three framework-free embeds - score, review list and review carousel. Plain HTML, CSS and vanilla JS, served from widgets.sportingscouter.com.",
      "demos": true,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "dataviz",
      "href": "/dataviz/",
      "title": "Data visualisation",
      "area": "docs",
      "group": "patterns",
      "desc": "Radar, line and bar - the rating ramp already is the scale, and the y-axis always runs the full 0 to 5.",
      "demos": true,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "login",
      "href": "/login/",
      "title": "Login",
      "area": "templates",
      "group": "templates",
      "desc": "Split sign-in on a light panel: email form, sign-up and legal links, meeting cover with the sponsor-evidence line on the other half. Login commits; links navigate.",
      "demos": false,
      "layout": "page",
      "templateCategory": "auth"
    },
    {
      "slug": "organisers",
      "href": "/organisers/",
      "title": "Organiser landing",
      "area": "templates",
      "group": "templates",
      "desc": "The model marketing page for organisers: first screen answers what it is, how life gets better, and what to do. Design-system vocabulary only.",
      "demos": false,
      "layout": "page",
      "templateCategory": "marketing"
    },
    {
      "slug": "social-debrief",
      "href": "/social-debrief/",
      "title": "Social Debrief",
      "area": "templates",
      "group": "templates",
      "desc": "Model product page: public comments from the last edition, grouped by theme, starting with a free sample. First screen answers what it is, how life gets better, and what to do.",
      "demos": false,
      "layout": "page",
      "templateCategory": "marketing"
    },
    {
      "slug": "dashboard-home",
      "href": "/dashboard-home/",
      "title": "Dashboard home",
      "area": "templates",
      "group": "templates",
      "desc": "The organiser home in five situations: a next-step hero, stats, steps with a locked state, the rating gauge, tables with rating bars and a needs-attention queue. Colour follows the rating. Structure snippets for each block: /dashboard-home-structure/.",
      "demos": false,
      "layout": "app",
      "templateCategory": "dashboard"
    },
    {
      "slug": "dashboard-home-structure",
      "href": "/dashboard-home-structure/",
      "title": "Dashboard home: structure",
      "area": "templates",
      "group": "templates",
      "desc": "A copyable recipe snippet for each block of the Dashboard home template: hero, stats, guide, tables, rating cell, queue, gauge and layout.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "brand",
      "href": "/brand/",
      "title": "Brand",
      "area": "docs",
      "group": "guidelines",
      "desc": "The mark, the lockup, clear space and minimum sizes - plus the rules for everyone outside the team, including the organisers who embed our badge.",
      "demos": true,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "voice",
      "href": "/voice/",
      "title": "Voice & content",
      "area": "docs",
      "group": "guidelines",
      "desc": "Only rules a component API can express or a reviewer can fail a PR on.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    },
    {
      "slug": "accessibility",
      "href": "/accessibility/",
      "title": "Accessibility",
      "area": "docs",
      "group": "guidelines",
      "desc": "WCAG 2.2 AA enforced at the token layer: one focus style, measured contrast floors, 44px targets.",
      "demos": false,
      "layout": "docs",
      "templateCategory": null
    }
  ]
}
