{
  "$schema": "https://design-tokens.org/schema.json",
  "name": "RMC Crusher ERP Phase 1 Design Tokens",
  "version": "1.1",
  "generated": "2026-09-07",
  "theme": "light",
  "note": "Light theme only. Dark theme is out of scope for Phase 1 and is deliberately not defined. Components must bind to semantic or component tokens, never to primitives.",
  "primitive": {
    "colour": {
      "slate": {
        "25": "#FAFBFC",
        "50": "#F5F6F8",
        "100": "#EDEFF2",
        "200": "#D8DCE2",
        "300": "#AAB2BD",
        "400": "#9AA3AF",
        "500": "#7A8494",
        "600": "#5A6472",
        "700": "#3D4552",
        "800": "#252B34",
        "900": "#12161C"
      },
      "blue": {
        "50": "#E8EFF9",
        "100": "#C7D8EF",
        "400": "#2E67B8",
        "500": "#1B4F9C",
        "600": "#16407F",
        "700": "#102F60"
      },
      "teal": {
        "50": "#E4F1F1",
        "100": "#BFDEDF",
        "500": "#0F6F72",
        "600": "#0B5A5C"
      },
      "green": {
        "50": "#E6F2EA",
        "100": "#C2DFCD",
        "500": "#1C6B3C",
        "600": "#155430"
      },
      "amber": {
        "50": "#FBF0DC",
        "100": "#F4DDB0",
        "500": "#8A5A00",
        "600": "#6E4800"
      },
      "red": {
        "50": "#FAE8E8",
        "100": "#F0C4C4",
        "500": "#A32020",
        "600": "#851A1A"
      },
      "white": "#FFFFFF",
      "black": "#000000"
    },
    "fontFamily": {
      "sans": "Inter",
      "mono": "IBM Plex Mono"
    },
    "fontWeight": {
      "regular": 400,
      "medium": 500,
      "semibold": 600
    },
    "fontSize": {
      "100": 11,
      "200": 12,
      "300": 13,
      "400": 14,
      "500": 16,
      "600": 20,
      "700": 24,
      "800": 28
    },
    "lineHeight": {
      "100": 14,
      "200": 16,
      "300": 18,
      "400": 20,
      "500": 24,
      "600": 28,
      "700": 32,
      "800": 36
    },
    "letterSpacing": {
      "tight": -0.2,
      "normal": 0,
      "wide": 0.4
    },
    "space": {
      "50": 4,
      "100": 8,
      "150": 12,
      "200": 16,
      "250": 20,
      "300": 24,
      "400": 32,
      "500": 40,
      "600": 48,
      "800": 64
    },
    "radius": {
      "none": 0,
      "sm": 6,
      "md": 8,
      "pill": 999
    },
    "borderWidth": {
      "hairline": 1,
      "thick": 1.5,
      "focus": 2,
      "accent": 3
    },
    "opacity": {
      "0": 0,
      "45": 0.45,
      "60": 0.6,
      "100": 1
    },
    "duration": {
      "instant": 0,
      "fast": 120,
      "normal": 200,
      "slow": 320
    },
    "easing": {
      "standard": "cubic-bezier(0.2, 0, 0, 1)",
      "decelerate": "cubic-bezier(0, 0, 0, 1)"
    }
  },
  "semantic": {
    "colour": {
      "background": {
        "$value": "{primitive.colour.slate.50}",
        "$description": "Application canvas behind all surfaces"
      },
      "surface": {
        "$value": "{primitive.colour.white}",
        "$description": "Cards, tables, forms, default panel"
      },
      "surface-raised": {
        "$value": "{primitive.colour.white}",
        "$description": "Dialogs, drawers, dropdowns, toasts. Distinguished by elevation, not colour."
      },
      "surface-sunken": {
        "$value": "{primitive.colour.slate.100}",
        "$description": "Table header, disabled fill, read-only summary blocks"
      },
      "border": {
        "$value": "{primitive.colour.slate.200}",
        "$description": "Default border. Structural only, never the sole carrier of meaning."
      },
      "border-strong": {
        "$value": "{primitive.colour.slate.300}",
        "$description": "Table outer border, dialog border, region divider"
      },
      "text-primary": {
        "$value": "{primitive.colour.slate.900}",
        "$description": "15.9:1 on surface. WCAG AAA."
      },
      "text-secondary": {
        "$value": "{primitive.colour.slate.600}",
        "$description": "6.2:1 on surface. WCAG AA."
      },
      "text-disabled": {
        "$value": "{primitive.colour.slate.400}",
        "$description": "2.9:1. Deliberately below AA. Never carries information the user needs."
      },
      "text-inverse": {
        "$value": "{primitive.colour.white}"
      },
      "primary": {
        "$value": "{primitive.colour.blue.500}",
        "$description": "Primary action. White on primary is 7.8:1, AAA."
      },
      "primary-hover": {
        "$value": "{primitive.colour.blue.600}"
      },
      "primary-pressed": {
        "$value": "{primitive.colour.blue.700}"
      },
      "primary-subtle": {
        "$value": "{primitive.colour.blue.50}",
        "$description": "Selected row, active nav background, information alert fill"
      },
      "accent": {
        "$value": "{primitive.colour.teal.500}",
        "$description": "Inventory and operational information only. Never a button colour."
      },
      "accent-subtle": {
        "$value": "{primitive.colour.teal.50}"
      },
      "success": {
        "$value": "{primitive.colour.green.500}"
      },
      "success-subtle": {
        "$value": "{primitive.colour.green.50}"
      },
      "warning": {
        "$value": "{primitive.colour.amber.500}"
      },
      "warning-subtle": {
        "$value": "{primitive.colour.amber.50}"
      },
      "error": {
        "$value": "{primitive.colour.red.500}"
      },
      "error-subtle": {
        "$value": "{primitive.colour.red.50}"
      },
      "information": {
        "$value": "{primitive.colour.blue.500}"
      },
      "information-subtle": {
        "$value": "{primitive.colour.blue.50}"
      },
      "focus-ring": {
        "$value": "{primitive.colour.blue.500}",
        "$description": "3.4:1 against surface. WCAG AA non-text."
      },
      "overlay": {
        "$value": "rgba(18, 22, 28, 0.45)",
        "$description": "Scrim behind dialogs and drawers"
      }
    },
    "status": {
      "draft": {
        "fill": "{primitive.colour.slate.100}",
        "text": "{semantic.colour.text-primary}",
        "icon": "pencil",
        "label": "Draft"
      },
      "pending-approval": {
        "fill": "{primitive.colour.amber.50}",
        "text": "{semantic.colour.warning}",
        "icon": "clock",
        "label": "Pending Approval"
      },
      "returned-correction": {
        "fill": "{primitive.colour.amber.50}",
        "text": "{semantic.colour.warning}",
        "icon": "arrow-u-left",
        "label": "Returned for Correction"
      },
      "approved": {
        "fill": "{primitive.colour.green.50}",
        "text": "{semantic.colour.success}",
        "icon": "check",
        "label": "Approved"
      },
      "pending-irn": {
        "fill": "{primitive.colour.amber.50}",
        "text": "{semantic.colour.warning}",
        "icon": "clock-alert",
        "label": "Pending IRN"
      },
      "irn-failed": {
        "fill": "{primitive.colour.red.50}",
        "text": "{semantic.colour.error}",
        "icon": "alert-triangle",
        "label": "IRN Failed"
      },
      "irn-generated": {
        "fill": "{primitive.colour.green.50}",
        "text": "{semantic.colour.success}",
        "icon": "shield-check",
        "label": "IRN Generated"
      },
      "cancelled": {
        "fill": "{primitive.colour.slate.100}",
        "text": "{semantic.colour.text-secondary}",
        "icon": "slash",
        "label": "Cancelled"
      },
      "active": {
        "fill": "{primitive.colour.green.50}",
        "text": "{semantic.colour.success}",
        "icon": "check-circle",
        "label": "Active"
      },
      "inactive": {
        "fill": "{primitive.colour.slate.100}",
        "text": "{semantic.colour.text-secondary}",
        "icon": "minus-circle",
        "label": "Inactive"
      },
      "available": {
        "fill": "{primitive.colour.teal.50}",
        "text": "{semantic.colour.accent}",
        "icon": "box",
        "label": "Available"
      },
      "allocated": {
        "fill": "{primitive.colour.blue.50}",
        "text": "{semantic.colour.primary}",
        "icon": "link",
        "label": "Allocated"
      },
      "partially-allocated": {
        "fill": "{primitive.colour.blue.50}",
        "text": "{semantic.colour.primary}",
        "icon": "link-2",
        "label": "Partially Allocated"
      },
      "reassigned": {
        "fill": "{primitive.colour.teal.50}",
        "text": "{semantic.colour.accent}",
        "icon": "shuffle",
        "label": "Reassigned"
      },
      "returned": {
        "fill": "{primitive.colour.teal.50}",
        "text": "{semantic.colour.accent}",
        "icon": "arrow-left",
        "label": "Returned"
      },
      "wastage": {
        "fill": "{primitive.colour.red.50}",
        "text": "{semantic.colour.error}",
        "icon": "trash",
        "label": "Wastage"
      },
      "expired": {
        "fill": "{primitive.colour.red.50}",
        "text": "{semantic.colour.error}",
        "icon": "calendar-x",
        "label": "Expired",
        "$description": "Wastage reason only. Never an inventory availability state."
      },
      "reversed": {
        "fill": "{primitive.colour.slate.100}",
        "text": "{semantic.colour.text-secondary}",
        "icon": "undo",
        "label": "Reversed"
      },
      "unbilled": {
        "fill": "{primitive.colour.amber.50}",
        "text": "{semantic.colour.warning}",
        "icon": "receipt",
        "label": "Unbilled"
      },
      "billed": {
        "fill": "{primitive.colour.green.50}",
        "text": "{semantic.colour.success}",
        "icon": "receipt-check",
        "label": "Billed"
      },
      "reserved": {
        "fill": "{primitive.colour.blue.50}",
        "text": "{semantic.colour.primary}",
        "icon": "bookmark",
        "label": "Reserved"
      },
      "consumed": {
        "fill": "{primitive.colour.green.50}",
        "text": "{semantic.colour.success}",
        "icon": "check",
        "label": "Consumed"
      },
      "released": {
        "fill": "{primitive.colour.slate.100}",
        "text": "{semantic.colour.text-secondary}",
        "icon": "unlock",
        "label": "Released"
      },
      "pending-disposition": {
        "fill": "{primitive.colour.amber.50}",
        "text": "{semantic.colour.warning}",
        "icon": "clock",
        "label": "Pending Disposition"
      },
      "partially-disposed": {
        "fill": "{primitive.colour.amber.50}",
        "text": "{semantic.colour.warning}",
        "icon": "pie-chart",
        "label": "Partially Disposed"
      },
      "fully-disposed": {
        "fill": "{primitive.colour.green.50}",
        "text": "{semantic.colour.success}",
        "icon": "check-circle",
        "label": "Fully Disposed"
      }
    },
    "typography": {
      "display": {
        "fontFamily": "{primitive.fontFamily.sans}",
        "fontSize": "{primitive.fontSize.800}",
        "lineHeight": "{primitive.lineHeight.800}",
        "fontWeight": "{primitive.fontWeight.semibold}",
        "letterSpacing": "{primitive.letterSpacing.tight}",
        "case": "sentence",
        "tabular": false,
        "usage": "Documentation frames only. Never in the product."
      },
      "page-title": {
        "fontFamily": "{primitive.fontFamily.sans}",
        "fontSize": "{primitive.fontSize.600}",
        "lineHeight": "{primitive.lineHeight.600}",
        "fontWeight": "{primitive.fontWeight.semibold}",
        "letterSpacing": "{primitive.letterSpacing.tight}",
        "case": "sentence",
        "tabular": false,
        "usage": "One per frame"
      },
      "section-title": {
        "fontFamily": "{primitive.fontFamily.sans}",
        "fontSize": "{primitive.fontSize.500}",
        "lineHeight": "{primitive.lineHeight.500}",
        "fontWeight": "{primitive.fontWeight.semibold}",
        "letterSpacing": "{primitive.letterSpacing.normal}",
        "case": "sentence",
        "tabular": false,
        "usage": "Form section, dialog title"
      },
      "subsection": {
        "fontFamily": "{primitive.fontFamily.sans}",
        "fontSize": "{primitive.fontSize.400}",
        "lineHeight": "{primitive.lineHeight.400}",
        "fontWeight": "{primitive.fontWeight.semibold}",
        "letterSpacing": "{primitive.letterSpacing.normal}",
        "case": "sentence",
        "tabular": false,
        "usage": "Sub-section, grouped table header"
      },
      "card-title": {
        "fontFamily": "{primitive.fontFamily.sans}",
        "fontSize": "{primitive.fontSize.400}",
        "lineHeight": "{primitive.lineHeight.400}",
        "fontWeight": "{primitive.fontWeight.semibold}",
        "letterSpacing": "{primitive.letterSpacing.normal}",
        "case": "sentence",
        "tabular": false,
        "usage": "KPI card, record card title"
      },
      "body": {
        "fontFamily": "{primitive.fontFamily.sans}",
        "fontSize": "{primitive.fontSize.400}",
        "lineHeight": "{primitive.lineHeight.400}",
        "fontWeight": "{primitive.fontWeight.regular}",
        "letterSpacing": "{primitive.letterSpacing.normal}",
        "case": "sentence",
        "tabular": false,
        "usage": "Default reading text and field values"
      },
      "body-emphasis": {
        "fontFamily": "{primitive.fontFamily.sans}",
        "fontSize": "{primitive.fontSize.400}",
        "lineHeight": "{primitive.lineHeight.400}",
        "fontWeight": "{primitive.fontWeight.medium}",
        "letterSpacing": "{primitive.letterSpacing.normal}",
        "case": "sentence",
        "tabular": false,
        "usage": "Emphasised inline value"
      },
      "body-small": {
        "fontFamily": "{primitive.fontFamily.sans}",
        "fontSize": "{primitive.fontSize.300}",
        "lineHeight": "{primitive.lineHeight.300}",
        "fontWeight": "{primitive.fontWeight.regular}",
        "letterSpacing": "{primitive.letterSpacing.normal}",
        "case": "sentence",
        "tabular": false,
        "usage": "Supporting card lines, annotations"
      },
      "label": {
        "fontFamily": "{primitive.fontFamily.sans}",
        "fontSize": "{primitive.fontSize.300}",
        "lineHeight": "{primitive.lineHeight.200}",
        "fontWeight": "{primitive.fontWeight.medium}",
        "letterSpacing": "{primitive.letterSpacing.normal}",
        "case": "sentence",
        "tabular": false,
        "usage": "Form field labels, always above the field"
      },
      "helper": {
        "fontFamily": "{primitive.fontFamily.sans}",
        "fontSize": "{primitive.fontSize.200}",
        "lineHeight": "{primitive.lineHeight.200}",
        "fontWeight": "{primitive.fontWeight.regular}",
        "letterSpacing": "{primitive.letterSpacing.normal}",
        "case": "sentence",
        "tabular": false,
        "usage": "Helper text beneath an input"
      },
      "error": {
        "fontFamily": "{primitive.fontFamily.sans}",
        "fontSize": "{primitive.fontSize.200}",
        "lineHeight": "{primitive.lineHeight.200}",
        "fontWeight": "{primitive.fontWeight.medium}",
        "letterSpacing": "{primitive.letterSpacing.normal}",
        "case": "sentence",
        "tabular": false,
        "usage": "Inline validation. Always paired with an icon."
      },
      "button": {
        "fontFamily": "{primitive.fontFamily.sans}",
        "fontSize": "{primitive.fontSize.400}",
        "lineHeight": "{primitive.lineHeight.400}",
        "fontWeight": "{primitive.fontWeight.medium}",
        "letterSpacing": "{primitive.letterSpacing.normal}",
        "case": "sentence",
        "tabular": false,
        "usage": "All button labels"
      },
      "table-header": {
        "fontFamily": "{primitive.fontFamily.sans}",
        "fontSize": "{primitive.fontSize.200}",
        "lineHeight": "{primitive.lineHeight.200}",
        "fontWeight": "{primitive.fontWeight.semibold}",
        "letterSpacing": "{primitive.letterSpacing.wide}",
        "case": "sentence",
        "tabular": false,
        "usage": "Column headers. Sentence case, not upper case."
      },
      "table-cell": {
        "fontFamily": "{primitive.fontFamily.sans}",
        "fontSize": "{primitive.fontSize.300}",
        "lineHeight": "{primitive.lineHeight.300}",
        "fontWeight": "{primitive.fontWeight.regular}",
        "letterSpacing": "{primitive.letterSpacing.normal}",
        "case": "sentence",
        "tabular": false,
        "usage": "Table body text"
      },
      "numeric-table-cell": {
        "fontFamily": "{primitive.fontFamily.sans}",
        "fontSize": "{primitive.fontSize.300}",
        "lineHeight": "{primitive.lineHeight.300}",
        "fontWeight": "{primitive.fontWeight.regular}",
        "letterSpacing": "{primitive.letterSpacing.normal}",
        "case": "none",
        "tabular": true,
        "usage": "Quantities, rates, GST, totals, balances. Right-aligned with a right-aligned header."
      },
      "kpi-value": {
        "fontFamily": "{primitive.fontFamily.sans}",
        "fontSize": "{primitive.fontSize.700}",
        "lineHeight": "{primitive.lineHeight.700}",
        "fontWeight": "{primitive.fontWeight.semibold}",
        "letterSpacing": "{primitive.letterSpacing.tight}",
        "case": "none",
        "tabular": true,
        "usage": "Dashboard KPI values only"
      },
      "status": {
        "fontFamily": "{primitive.fontFamily.sans}",
        "fontSize": "{primitive.fontSize.200}",
        "lineHeight": "{primitive.lineHeight.200}",
        "fontWeight": "{primitive.fontWeight.medium}",
        "letterSpacing": "{primitive.letterSpacing.normal}",
        "case": "sentence",
        "tabular": false,
        "usage": "Status badge label. Always present, never colour alone."
      },
      "caption": {
        "fontFamily": "{primitive.fontFamily.sans}",
        "fontSize": "{primitive.fontSize.100}",
        "lineHeight": "{primitive.lineHeight.100}",
        "fontWeight": "{primitive.fontWeight.regular}",
        "letterSpacing": "{primitive.letterSpacing.normal}",
        "case": "sentence",
        "tabular": false,
        "usage": "Figure captions, annotation pins"
      },
      "code-reference": {
        "fontFamily": "{primitive.fontFamily.mono}",
        "fontSize": "{primitive.fontSize.300}",
        "lineHeight": "{primitive.lineHeight.300}",
        "fontWeight": "{primitive.fontWeight.regular}",
        "letterSpacing": "{primitive.letterSpacing.normal}",
        "case": "none",
        "tabular": true,
        "usage": "Document numbers, GSTIN, IRN, lot references. Left-aligned."
      }
    },
    "space": {
      "field-gap": "{primitive.space.150}",
      "field-gap-touch": "{primitive.space.200}",
      "label-gap": "{primitive.space.50}",
      "section-gap": "{primitive.space.300}",
      "region-gap": "{primitive.space.400}",
      "inline-gap": "{primitive.space.100}",
      "page-padding-desktop": "{primitive.space.300}",
      "page-padding-tablet": "{primitive.space.250}",
      "page-padding-mobile": "{primitive.space.200}",
      "card-padding": "{primitive.space.200}",
      "dialog-padding": "{primitive.space.250}",
      "cell-padding-x": "{primitive.space.150}",
      "empty-state-padding": "{primitive.space.600}"
    },
    "radius": {
      "control": "{primitive.radius.sm}",
      "container": "{primitive.radius.md}",
      "badge": "{primitive.radius.pill}"
    },
    "border": {
      "default": {
        "width": "{primitive.borderWidth.hairline}",
        "colour": "{semantic.colour.border}"
      },
      "strong": {
        "width": "{primitive.borderWidth.hairline}",
        "colour": "{semantic.colour.border-strong}"
      },
      "error": {
        "width": "{primitive.borderWidth.thick}",
        "colour": "{semantic.colour.error}"
      },
      "focus": {
        "width": "{primitive.borderWidth.focus}",
        "colour": "{semantic.colour.focus-ring}",
        "offset": 2
      },
      "selected-bar": {
        "width": "{primitive.borderWidth.accent}",
        "colour": "{semantic.colour.primary}"
      }
    },
    "shadow": {
      "elevation-0": "none",
      "elevation-1": "0 1px 2px rgba(18, 22, 28, 0.08)",
      "elevation-2": "0 4px 12px rgba(18, 22, 28, 0.12)",
      "elevation-3": "0 12px 32px rgba(18, 22, 28, 0.18)"
    },
    "motion": {
      "transition-instant": {
        "duration": "{primitive.duration.instant}",
        "easing": "{primitive.easing.standard}",
        "usage": "Screen to screen. The default everywhere."
      },
      "transition-expand": {
        "duration": "{primitive.duration.normal}",
        "easing": "{primitive.easing.standard}",
        "usage": "Panel expanding in place. The only animated transition."
      },
      "transition-overlay": {
        "duration": "{primitive.duration.fast}",
        "easing": "{primitive.easing.decelerate}",
        "usage": "Dialog and drawer entry"
      },
      "reduced-motion": {
        "duration": "{primitive.duration.instant}",
        "usage": "All motion becomes instant when the user prefers reduced motion. No parallax, no autoplay."
      }
    },
    "zIndex": {
      "base": 0,
      "sticky": 100,
      "dropdown": 200,
      "tooltip": 300,
      "drawer": 400,
      "dialog": 500,
      "toast": 600
    },
    "focus": {
      "ring": {
        "width": "{primitive.borderWidth.focus}",
        "offset": 2,
        "colour": "{semantic.colour.focus-ring}",
        "style": "solid"
      },
      "$description": "Applied to every focusable element without exception, including disabled controls, which remain focusable so their reason is reachable by keyboard."
    },
    "disabled": {
      "text": "{semantic.colour.text-disabled}",
      "fill": "{semantic.colour.surface-sunken}",
      "border": "{semantic.colour.border}",
      "opacity": "{primitive.opacity.100}",
      "cursor": "not-allowed",
      "$description": "Disabled means present but blocked by status or precondition. It always carries a Disabled Reason. A control blocked by MISSING PERMISSION is absent from the frame entirely and uses no token."
    },
    "readonly": {
      "text": "{semantic.colour.text-primary}",
      "fill": "{semantic.colour.surface-sunken}",
      "border": "none",
      "$description": "Distinct from disabled. Text stays selectable. Used for every derived value."
    }
  },
  "component": {
    "button": {
      "height": {
        "desktop": 40,
        "touch": 44
      },
      "paddingX": "{primitive.space.200}",
      "gap": "{primitive.space.100}",
      "radius": "{semantic.radius.control}",
      "primary": {
        "fill": "{semantic.colour.primary}",
        "text": "{semantic.colour.text-inverse}",
        "hover": "{semantic.colour.primary-hover}",
        "pressed": "{semantic.colour.primary-pressed}"
      },
      "secondary": {
        "fill": "{semantic.colour.surface}",
        "text": "{semantic.colour.text-primary}",
        "border": "{semantic.colour.border-strong}"
      },
      "tertiary": {
        "fill": "transparent",
        "text": "{semantic.colour.primary}",
        "hoverFill": "{semantic.colour.surface-sunken}"
      },
      "destructive": {
        "fill": "{semantic.colour.error}",
        "text": "{semantic.colour.text-inverse}"
      }
    },
    "input": {
      "height": {
        "desktop": 40,
        "touch": 48
      },
      "paddingX": "{primitive.space.150}",
      "radius": "{semantic.radius.control}",
      "maxWidth": 560,
      "border": "{semantic.border.default}",
      "focusBorder": "{semantic.colour.primary}",
      "errorBorder": "{semantic.border.error}"
    },
    "table": {
      "headerHeight": 40,
      "headerFill": "{semantic.colour.surface-sunken}",
      "rowHeight": {
        "compact": 44,
        "standard": 52
      },
      "cellPaddingX": "{semantic.space.cell-padding-x}",
      "selectedFill": "{semantic.colour.primary-subtle}",
      "selectedBar": "{semantic.border.selected-bar}",
      "totalsRowHeight": 44
    },
    "badge": {
      "height": 22,
      "paddingX": "{primitive.space.100}",
      "radius": "{semantic.radius.badge}",
      "iconSize": 12
    },
    "card": {
      "padding": "{semantic.space.card-padding}",
      "radius": "{semantic.radius.container}",
      "border": "{semantic.border.default}",
      "kpiHeight": 120
    },
    "dialog": {
      "widthSmall": 400,
      "widthMedium": 560,
      "widthLarge": 760,
      "radius": "{semantic.radius.container}",
      "shadow": "{semantic.shadow.elevation-3}",
      "padding": "{semantic.space.dialog-padding}"
    },
    "drawer": {
      "width": 480,
      "widthMin": 420,
      "widthMax": 520,
      "shadow": "{semantic.shadow.elevation-3}"
    },
    "shell": {
      "sidebarExpanded": 248,
      "sidebarCollapsed": 72,
      "sidebarDrawer": 280,
      "headerHeight": {
        "desktop": 64,
        "touch": 56
      },
      "contextStripHeight": {
        "tablet": 40,
        "mobile": 36
      },
      "stickyBarHeight": {
        "desktop": 72,
        "mobile": 64
      }
    },
    "icon": {
      "sm": 16,
      "md": 20,
      "lg": 24,
      "strokeSm": 1.5,
      "strokeLg": 2,
      "library": "Lucide"
    },
    "touchTarget": {
      "min": 44,
      "separation": 8
    },
    "skeleton": {
      "fill": "{semantic.colour.surface-sunken}",
      "delayMs": 300
    },
    "allocationPanel": {
      "fill": "{semantic.colour.accent-subtle}",
      "padding": "{primitive.space.200}",
      "lotRowHeight": 52
    },
    "lineGrid": {
      "rowHeight": 52,
      "addRowHeight": 44
    },
    "calculationSummary": {
      "width": 320,
      "rowHeight": 24,
      "totalRowHeight": 32
    }
  },
  "responsive": {
    "breakpoint": {
      "desktop": {
        "min": 1280,
        "frame": {
          "w": 1440,
          "h": 1024
        },
        "columns": 12,
        "gutter": 24,
        "margin": 24,
        "padding": 24
      },
      "tablet": {
        "min": 768,
        "max": 1279,
        "frame": {
          "w": 1024,
          "h": 768
        },
        "columns": 8,
        "gutter": 20,
        "margin": 20,
        "padding": 20
      },
      "mobile": {
        "min": 320,
        "max": 767,
        "frame": {
          "w": 390,
          "h": 844
        },
        "validateAt": 360,
        "columns": 4,
        "gutter": 16,
        "margin": 16,
        "padding": 16
      }
    },
    "rules": {
      "R1": "Sidebar becomes a drawer at tablet and below, closed by default.",
      "R2": "Context selectors move to a context strip at tablet, then a full-screen sheet at mobile.",
      "R3": "Tablet hides P3 columns and adds a column chooser. Mobile converts rows to record cards.",
      "R4": "Two-column forms become one column at tablet. Inputs grow to 48px on touch.",
      "R5": "Inline filters become a drawer at tablet, a full-screen sheet at mobile.",
      "R6": "Secondary actions collapse to overflow at tablet. All actions move to a sticky footer at mobile.",
      "R7": "Totals pin directly above the sticky footer at mobile.",
      "R8": "All dialogs become full-screen sheets at mobile.",
      "R9": "Line grids become expandable cards at mobile.",
      "R10": "Tabs become horizontally scrollable at mobile, never wrapped."
    },
    "columnPriority": {
      "P1": "Always visible at every breakpoint",
      "P2": "Visible on tablet where space permits",
      "P3": "Desktop only"
    }
  },
  "chart": {
    "$description": "Report and chart palette. Sequential, colour-blind safe, and never the sole carrier of meaning — every series carries a text label.",
    "categorical": [
      "#1B4F9C",
      "#0F6F72",
      "#8A5A00",
      "#5A6472",
      "#2E67B8",
      "#155430"
    ],
    "positive": "{semantic.colour.success}",
    "negative": "{semantic.colour.error}",
    "neutral": "{semantic.colour.text-secondary}",
    "gridline": "{semantic.colour.border}",
    "axisLabel": "{semantic.colour.text-secondary}"
  }
}