@thatch-health/slab-tokens 0.0.9 → 0.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -61,7 +61,7 @@
61
61
  },
62
62
  "border": {
63
63
  "$type": "color",
64
- "$value": "{gray.400}",
64
+ "$value": "{gray.200}",
65
65
  "$extensions": {
66
66
  "com.figma.variableId": "VariableID:2008:27",
67
67
  "com.figma.scopes": [
@@ -120,7 +120,7 @@
120
120
  },
121
121
  "border": {
122
122
  "$type": "color",
123
- "$value": "{gray.200}",
123
+ "$value": "{gray.400}",
124
124
  "$extensions": {
125
125
  "com.figma.variableId": "VariableID:2008:30",
126
126
  "com.figma.scopes": [
@@ -46,13 +46,13 @@
46
46
  },
47
47
  "border": {
48
48
  "$type": "color",
49
- "$value": "{gray.400}",
49
+ "$value": "{gray.200}",
50
50
  "$extensions": {
51
51
  "com.figma.variableId": "VariableID:2006:27",
52
52
  "com.figma.hiddenFromPublishing": true,
53
53
  "com.figma.aliasData": {
54
- "targetVariableId": "VariableID:56d71ee3171ad8b6a591f677a69c6b9a00e91225/-1:-1",
55
- "targetVariableName": "gray/400",
54
+ "targetVariableId": "VariableID:d1325c81841bb28bccf36ffdb16c6714a6cc2a17/-1:-1",
55
+ "targetVariableName": "gray/200",
56
56
  "targetVariableSetId": "VariableCollectionId:6aca21f4f0e99e9ad9e199193a95e28738c8a932/-1:-1",
57
57
  "targetVariableSetName": "Color - Primitives"
58
58
  }
@@ -90,13 +90,13 @@
90
90
  },
91
91
  "border": {
92
92
  "$type": "color",
93
- "$value": "{gray.200}",
93
+ "$value": "{gray.400}",
94
94
  "$extensions": {
95
95
  "com.figma.variableId": "VariableID:2006:30",
96
96
  "com.figma.hiddenFromPublishing": true,
97
97
  "com.figma.aliasData": {
98
- "targetVariableId": "VariableID:d1325c81841bb28bccf36ffdb16c6714a6cc2a17/-1:-1",
99
- "targetVariableName": "gray/200",
98
+ "targetVariableId": "VariableID:56d71ee3171ad8b6a591f677a69c6b9a00e91225/-1:-1",
99
+ "targetVariableName": "gray/400",
100
100
  "targetVariableSetId": "VariableCollectionId:6aca21f4f0e99e9ad9e199193a95e28738c8a932/-1:-1",
101
101
  "targetVariableSetName": "Color - Primitives"
102
102
  }
package/dist/docs.css CHANGED
@@ -1495,11 +1495,11 @@
1495
1495
  --neutral-form-disabled-primary-text: var(--gray-800);
1496
1496
  --neutral-form-disabled-secondary-text: var(--gray-500);
1497
1497
  --neutral-surface-primary-bg: var(--gray-50);
1498
- --neutral-surface-primary-border: var(--gray-400);
1498
+ --neutral-surface-primary-border: var(--gray-200);
1499
1499
  --neutral-surface-primary-icon: var(--gray-500);
1500
1500
  --neutral-surface-primary-text: var(--gray-800);
1501
1501
  --neutral-surface-secondary-bg: var(--gray-warm-0);
1502
- --neutral-surface-secondary-border: var(--gray-200);
1502
+ --neutral-surface-secondary-border: var(--gray-400);
1503
1503
  --neutral-surface-secondary-icon: var(--gray-400);
1504
1504
  --neutral-surface-secondary-text: var(--gray-500);
1505
1505
  --neutral-surface-tertiary-bg: var(--gray-100);
package/dist/index.css CHANGED
@@ -392,11 +392,11 @@
392
392
  --slab-form-disabled-primary-text: var(--gray-800);
393
393
  --slab-form-disabled-secondary-text: var(--gray-500);
394
394
  --slab-surface-primary-bg: var(--gray-50);
395
- --slab-surface-primary-border: var(--gray-400);
395
+ --slab-surface-primary-border: var(--gray-200);
396
396
  --slab-surface-primary-icon: var(--gray-500);
397
397
  --slab-surface-primary-text: var(--gray-800);
398
398
  --slab-surface-secondary-bg: var(--gray-warm-0);
399
- --slab-surface-secondary-border: var(--gray-200);
399
+ --slab-surface-secondary-border: var(--gray-400);
400
400
  --slab-surface-secondary-icon: var(--gray-400);
401
401
  --slab-surface-secondary-text: var(--gray-500);
402
402
  --slab-surface-tertiary-bg: var(--gray-100);
package/dist/index.d.mts CHANGED
@@ -1870,7 +1870,7 @@ type SlabEntry = {
1870
1870
  }[];
1871
1871
  /**
1872
1872
  * Guidance for AI tools. Present when a higher-level composite class should
1873
- * be preferred over this individual token (e.g. a prose-* typography class).
1873
+ * be preferred over this individual token (e.g. a type-* typography class).
1874
1874
  */
1875
1875
  note?: string;
1876
1876
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/token-map.ts","../src/utils/types.ts","../src/merge-token.ts","../src/get-token.ts"],"mappings":";cASa,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAb;;;;;;UCDiB,cAAA;EACf,gBAAA;EACA,kBAAA;EACA,qBAAA;AAAA;;;;;KAOU,aAAA;AAAA,UAyBK,eAAA;EACf,sBAAA;EACA,kBAAA,GAAqB,aAAA;EACrB,sBAAA;IACE,GAAA;EAAA;EAEF,gCAAA;EACA,sBAAA;EACA,oBAAA;EACA,gBAAA;EACA,qBAAA,GAAwB,cAAA;AAAA;AAAA,UAGT,eAAA;EACf,UAAA;EACA,UAAA;EACA,KAAA;EACA,GAAA;AAAA;AAAA,UAGe,UAAA;EACf,KAAA;EACA,MAAA,oBAA0B,eAAA;EAC1B,YAAA;EACA,WAAA,GAAc,eAAA;AAAA;AAAA,KAyCJ,iBAAA,oBACE,CAAA,KAAM,QAAA,CAAS,IAAA,CAAK,CAAA,EAAG,CAAA,KAAM,OAAA,CAAQ,IAAA,CAAK,CAAA,EAAG,OAAA,OAAc,CAAA,EAAG,CAAA,YACpE,CAAA;;;cCxGF,WAAA;AAAA,KAUM,SAAA,WAAoB,WAAA;AAAA,KAEpB,SAAA;EACV,WAAA;EACA,IAAA;EACA,QAAA;iFAEE,WAAA;IAEA,aAAA;EAAA;;;;;EAMF,IAAA;AAAA;AAAA,KAGU,WAAA,GAAc,UAAA;EACxB,KAAA;EACA,WAAA;IACE,sBAAA;IACA,aAAA,EAAe,SAAA;IACf,cAAA,GAAiB,MAAA,CAAO,SAAA;EAAA;AAAA;AAAA,iBAwEZ,UAAA,CAAW,GAAA,eAAkB,QAAA,GAAW,WAAA;;;;;;;KCnG5C,aAAA;;;;;;;KAwDA,KAAA;;;;;KAMA,WAAA;;;;;KAgDA,eAAA,GAAkB,iBAAA;8EAE5B,QAAA,EAAU,aAAA;EAEV,KAAA,EAAO,KAAA;EAEP,QAAA,EAAU,WAAA;;;;;EAKV,IAAA;AAAA;;;;;iBAyDc,QAAA,CAAS,OAAA,EAAS,eAAA,GAAkB,WAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/token-map.ts","../src/utils/types.ts","../src/merge-token.ts","../src/get-token.ts"],"mappings":";cASa,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAb;;;;;;UCDiB,cAAA;EACf,gBAAA;EACA,kBAAA;EACA,qBAAA;AAAA;;;;;KAOU,aAAA;AAAA,UAyBK,eAAA;EACf,sBAAA;EACA,kBAAA,GAAqB,aAAA;EACrB,sBAAA;IACE,GAAA;EAAA;EAEF,gCAAA;EACA,sBAAA;EACA,oBAAA;EACA,gBAAA;EACA,qBAAA,GAAwB,cAAc;AAAA;AAAA,UAGvB,eAAA;EACf,UAAA;EACA,UAAA;EACA,KAAA;EACA,GAAA;AAAA;AAAA,UAGe,UAAA;EACf,KAAA;EACA,MAAA,oBAA0B,eAAA;EAC1B,YAAA;EACA,WAAA,GAAc,eAAe;AAAA;AAAA,KAyCnB,iBAAA,oBACE,CAAA,KAAM,QAAA,CAAS,IAAA,CAAK,CAAA,EAAG,CAAA,KAAM,OAAA,CAAQ,IAAA,CAAK,CAAA,EAAG,OAAA,OAAc,CAAA,EAAG,CAAA,YACpE,CAAA;;;cCxGF,WAAA;AAAA,KAUM,SAAA,WAAoB,WAAW;AAAA,KAE/B,SAAA;EACV,WAAA;EACA,IAAA;EACA,QAAA;iFAEE,WAAA;IAEA,aAAA;EAAA;;;;;EAMF,IAAA;AAAA;AAAA,KAGU,WAAA,GAAc,UAAA;EACxB,KAAA;EACA,WAAA;IACE,sBAAA;IACA,aAAA,EAAe,SAAA;IACf,cAAA,GAAiB,MAAA,CAAO,SAAA;EAAA;AAAA;AAAA,iBAwEZ,UAAA,CAAW,GAAA,eAAkB,QAAA,GAAW,WAAW;;;;;;;KCnGvD,aAAA;;;;;;;KAwDA,KAAA;;;;;KAMA,WAAA;;;;;KAgDA,eAAA,GAAkB,iBAAA;8EAE5B,QAAA,EAAU,aAAA;EAEV,KAAA,EAAO,KAAA;EAEP,QAAA,EAAU,WAAA;;;;;EAKV,IAAA;AAAA;;;;;iBAyDc,QAAA,CAAS,OAAA,EAAS,eAAA,GAAkB,WAAW"}
package/dist/index.mjs CHANGED
@@ -21770,7 +21770,7 @@ function toSlabEntry(entry, cssVariable) {
21770
21770
  cssProperty: [entry.cssProperty],
21771
21771
  tailwindClass: entry.tailwindClass
21772
21772
  }],
21773
- ...entry.prose ? { note: `Prefer \`.prose-${entry.prose}\` which applies all typography properties for this style together, rather than using individual tokens.` } : {}
21773
+ ...entry.prose ? { note: `Prefer \`.type-${entry.prose}\` which applies all typography properties for this style together, rather than using individual tokens.` } : {}
21774
21774
  };
21775
21775
  const property = [];
21776
21776
  for (const util of entry.utilities) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["neutralDark","neutralInverted","spacing","type_"],"sources":["../src/token-map.ts","../src/tailwind-plugin/from-token-map.ts","../src/tokens-raw-import/color/danger.tokens.json","../src/tokens-raw-import/color/info.tokens.json","../src/tokens-raw-import/color/neutral.tokens.json","../src/tokens-raw-import/color/neutral-dark.tokens.json","../src/tokens-raw-import/color/neutral-inverted.tokens.json","../src/tokens-raw-import/color/success.tokens.json","../src/tokens-raw-import/color/warning.tokens.json","../src/tokens-raw-import/spacing.tokens.json","../src/tokens-raw-import/type.tokens.json","../src/tokens-raw-import/index.ts","../src/merge-token.ts","../src/get-token.ts"],"sourcesContent":["import type { SlabTokenMap } from \"./utils/token-types.ts\";\n\n// ---------------------------------------------------------------------------\n// Token mapping\n// This file is semi-generated using `generate-token-types` to add additional\n// information about tokens which isn't possible in Figma. Still looking for\n// a better tool to manage this. This is used by MCP servers to get token info.\n// ---------------------------------------------------------------------------\n\nexport const tokenMap = {\n // ---------------------------------------------------------------------------\n // Action — ghost\n // Elements that appear as plain text until interacted with, like cancel buttons.\n // ---------------------------------------------------------------------------\n\n \"action.default.ghost.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-ghost\",\n cssProperty: \"background\",\n description:\n \"Ghost action background in its resting state. Typically transparent; use for controls that appear as plain text until interacted with, like cancel buttons or icon buttons.\",\n },\n \"action.default.ghost.focus-border\": {\n kind: \"color\",\n tailwindClass: \"ring-action-ghost\",\n cssProperty: \"outline-color\",\n description:\n \"Focus ring color for ghost actions. Apply when the element receives keyboard focus.\",\n },\n \"action.default.ghost.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-ghost\",\n cssProperty: \"color\",\n description: \"Icon color within ghost actions in their resting state.\",\n },\n \"action.default.ghost.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-ghost\",\n cssProperty: \"color\",\n description: \"Label color for ghost actions in their resting state.\",\n },\n \"action.hover.ghost.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-hover-ghost\",\n cssProperty: \"background\",\n description: \"Ghost action background when the pointer is hovering. Apply on :hover.\",\n },\n \"action.hover.ghost.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-hover-ghost\",\n cssProperty: \"color\",\n description: \"Icon color within ghost actions on hover.\",\n },\n \"action.hover.ghost.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-hover-ghost\",\n cssProperty: \"color\",\n description: \"Label color for ghost actions on hover.\",\n },\n \"action.disabled.ghost.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-disabled-ghost\",\n cssProperty: \"background\",\n description:\n \"Ghost action background in the disabled state. Use alongside pointer-events-none and aria-disabled.\",\n },\n \"action.disabled.ghost.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-disabled-ghost\",\n cssProperty: \"color\",\n description: \"Icon color within disabled ghost actions.\",\n },\n \"action.disabled.ghost.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-disabled-ghost\",\n cssProperty: \"color\",\n description: \"Label color for disabled ghost actions.\",\n },\n\n // ---------------------------------------------------------------------------\n // Action — primary\n // Highest-emphasis buttons and calls to action. Use once per view.\n // ---------------------------------------------------------------------------\n\n \"action.default.primary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-primary\",\n cssProperty: \"background\",\n description: \"Solid fill for primary action buttons in their resting state.\",\n },\n \"action.default.primary.bg-start\": {\n kind: \"color\",\n tailwindClass: \"from-action-primary\",\n cssProperty: \"--tw-gradient-from\",\n description:\n \"Gradient start color for primary action buttons. Use with from-* on a gradient background. Gradient direction is always top -> bottom\",\n },\n \"action.default.primary.bg-end\": {\n kind: \"color\",\n tailwindClass: \"to-action-primary\",\n cssProperty: \"--tw-gradient-to\",\n description:\n \"Gradient end color for primary action buttons. Use with to-* on a gradient background. Gradient direction is always top -> bottom\",\n },\n \"action.default.primary.border\": {\n kind: \"color\",\n tailwindClass: \"border-action-primary\",\n cssProperty: \"border-color\",\n description: \"Border color for primary action buttons in their resting state.\",\n },\n \"action.default.primary.focus-border\": {\n kind: \"color\",\n tailwindClass: \"ring-action-primary\",\n cssProperty: \"outline-color\",\n description:\n \"Focus ring color for primary action buttons. Apply when the element receives keyboard focus.\",\n },\n \"action.default.primary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-primary\",\n cssProperty: \"color\",\n description: \"Icon color within primary action buttons in their resting state.\",\n },\n \"action.default.primary.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-primary\",\n cssProperty: \"color\",\n description: \"Label color for primary action buttons in their resting state.\",\n },\n \"action.hover.primary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-hover-primary\",\n cssProperty: \"background\",\n description: \"Primary button background on hover. Apply on :hover.\",\n },\n \"action.hover.primary.bg-start\": {\n kind: \"color\",\n tailwindClass: \"from-action-hover-primary\",\n cssProperty: \"--tw-gradient-from\",\n description:\n \"Gradient start color for primary buttons on hover. Gradient direction is always top -> bottom.\",\n },\n \"action.hover.primary.bg-end\": {\n kind: \"color\",\n tailwindClass: \"to-action-hover-primary\",\n cssProperty: \"--tw-gradient-to\",\n description:\n \"Gradient end color for primary buttons on hover. Gradient direction is always top -> bottom.\",\n },\n \"action.hover.primary.border\": {\n kind: \"color\",\n tailwindClass: \"border-action-hover-primary\",\n cssProperty: \"border-color\",\n description: \"Border color for primary action buttons on hover.\",\n },\n \"action.hover.primary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-hover-primary\",\n cssProperty: \"color\",\n description: \"Icon color within primary action buttons on hover.\",\n },\n \"action.hover.primary.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-hover-primary\",\n cssProperty: \"color\",\n description: \"Label color for primary action buttons on hover.\",\n },\n \"action.disabled.primary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-disabled-primary\",\n cssProperty: \"background\",\n description: \"Primary button background in the disabled state.\",\n },\n \"action.disabled.primary.bg-start\": {\n kind: \"color\",\n tailwindClass: \"from-action-disabled-primary\",\n cssProperty: \"--tw-gradient-from\",\n description:\n \"Gradient start color for disabled primary buttons. Gradient direction is always top -> bottom.\",\n },\n \"action.disabled.primary.bg-end\": {\n kind: \"color\",\n tailwindClass: \"to-action-disabled-primary\",\n cssProperty: \"--tw-gradient-to\",\n description:\n \"Gradient end color for disabled primary buttons. Gradient direction is always top -> bottom.\",\n },\n \"action.disabled.primary.border\": {\n kind: \"color\",\n tailwindClass: \"border-action-disabled-primary\",\n cssProperty: \"border-color\",\n description: \"Border color for disabled primary action buttons.\",\n },\n \"action.disabled.primary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-disabled-primary\",\n cssProperty: \"color\",\n description: \"Icon color within disabled primary action buttons.\",\n },\n \"action.disabled.primary.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-disabled-primary\",\n cssProperty: \"color\",\n description: \"Label color for disabled primary action buttons.\",\n },\n\n // ---------------------------------------------------------------------------\n // Action — secondary\n // Supporting actions like sidebar nav rows or secondary buttons alongside a primary.\n // ---------------------------------------------------------------------------\n\n \"action.default.secondary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-secondary\",\n cssProperty: \"background\",\n description: \"Solid fill for secondary action buttons in their resting state.\",\n },\n \"action.default.secondary.bg-start\": {\n kind: \"color\",\n tailwindClass: \"from-action-secondary\",\n cssProperty: \"--tw-gradient-from\",\n description:\n \"Gradient start color for secondary action buttons. Gradient direction is always top -> bottom.\",\n },\n \"action.default.secondary.bg-end\": {\n kind: \"color\",\n tailwindClass: \"to-action-secondary\",\n cssProperty: \"--tw-gradient-to\",\n description:\n \"Gradient end color for secondary action buttons. Gradient direction is always top -> bottom.\",\n },\n \"action.default.secondary.border\": {\n kind: \"color\",\n tailwindClass: \"border-action-secondary\",\n cssProperty: \"border-color\",\n description: \"Border color for secondary action buttons in their resting state.\",\n },\n \"action.default.secondary.focus-border\": {\n kind: \"color\",\n tailwindClass: \"ring-action-secondary\",\n cssProperty: \"outline-color\",\n description: \"Focus ring color for secondary action buttons.\",\n },\n \"action.default.secondary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-secondary\",\n cssProperty: \"color\",\n description: \"Icon color within secondary action buttons in their resting state.\",\n },\n \"action.default.secondary.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-secondary\",\n cssProperty: \"color\",\n description: \"Label color for secondary action buttons in their resting state.\",\n },\n \"action.hover.secondary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-hover-secondary\",\n cssProperty: \"background\",\n description: \"Secondary button background on hover.\",\n },\n \"action.hover.secondary.bg-start\": {\n kind: \"color\",\n tailwindClass: \"from-action-hover-secondary\",\n cssProperty: \"--tw-gradient-from\",\n description:\n \"Gradient start color for secondary buttons on hover. Gradient direction is always top -> bottom.\",\n },\n \"action.hover.secondary.bg-end\": {\n kind: \"color\",\n tailwindClass: \"to-action-hover-secondary\",\n cssProperty: \"--tw-gradient-to\",\n description:\n \"Gradient end color for secondary buttons on hover. Gradient direction is always top -> bottom.\",\n },\n \"action.hover.secondary.border\": {\n kind: \"color\",\n tailwindClass: \"border-action-hover-secondary\",\n cssProperty: \"border-color\",\n description: \"Border color for secondary action buttons on hover.\",\n },\n \"action.hover.secondary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-hover-secondary\",\n cssProperty: \"color\",\n description: \"Icon color within secondary action buttons on hover.\",\n },\n \"action.hover.secondary.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-hover-secondary\",\n cssProperty: \"color\",\n description: \"Label color for secondary action buttons on hover.\",\n },\n \"action.disabled.secondary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-disabled-secondary\",\n cssProperty: \"background\",\n description: \"Secondary button background in the disabled state.\",\n },\n \"action.disabled.secondary.bg-start\": {\n kind: \"color\",\n tailwindClass: \"from-action-disabled-secondary\",\n cssProperty: \"--tw-gradient-from\",\n description:\n \"Gradient start color for disabled secondary buttons. Gradient direction is always top -> bottom.\",\n },\n \"action.disabled.secondary.bg-end\": {\n kind: \"color\",\n tailwindClass: \"to-action-disabled-secondary\",\n cssProperty: \"--tw-gradient-to\",\n description:\n \"Gradient end color for disabled secondary buttons. Gradient direction is always top -> bottom.\",\n },\n \"action.disabled.secondary.border\": {\n kind: \"color\",\n tailwindClass: \"border-action-disabled-secondary\",\n cssProperty: \"border-color\",\n description: \"Border color for disabled secondary action buttons.\",\n },\n \"action.disabled.secondary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-disabled-secondary\",\n cssProperty: \"color\",\n description: \"Icon color within disabled secondary action buttons.\",\n },\n \"action.disabled.secondary.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-disabled-secondary\",\n cssProperty: \"color\",\n description: \"Label color for disabled secondary action buttons.\",\n },\n\n // ---------------------------------------------------------------------------\n // Action — tertiary\n // Link-style actions that use color to signal interactivity.\n // ---------------------------------------------------------------------------\n\n \"action.default.tertiary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-tertiary\",\n cssProperty: \"background\",\n description:\n \"Tertiary action background in its resting state. Typically transparent; use for link-style elements that rely on color to signal interactivity.\",\n },\n \"action.default.tertiary.focus-border\": {\n kind: \"color\",\n tailwindClass: \"ring-action-tertiary\",\n cssProperty: \"outline-color\",\n description: \"Focus ring color for tertiary actions.\",\n },\n \"action.default.tertiary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-tertiary\",\n cssProperty: \"color\",\n description: \"Icon color within tertiary actions in their resting state.\",\n },\n \"action.default.tertiary.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-tertiary\",\n cssProperty: \"color\",\n description: \"Label color for tertiary actions in their resting state.\",\n },\n \"action.hover.tertiary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-hover-tertiary\",\n cssProperty: \"background\",\n description: \"Tertiary action background on hover.\",\n },\n \"action.hover.tertiary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-hover-tertiary\",\n cssProperty: \"color\",\n description: \"Icon color within tertiary actions on hover.\",\n },\n \"action.hover.tertiary.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-hover-tertiary\",\n cssProperty: \"color\",\n description: \"Label color for tertiary actions on hover.\",\n },\n \"action.disabled.tertiary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-disabled-tertiary\",\n cssProperty: \"background\",\n description: \"Tertiary action background in the disabled state.\",\n },\n \"action.disabled.tertiary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-disabled-tertiary\",\n cssProperty: \"color\",\n description: \"Icon color within disabled tertiary actions.\",\n },\n \"action.disabled.tertiary.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-disabled-tertiary\",\n cssProperty: \"color\",\n description: \"Label color for disabled tertiary actions.\",\n },\n\n // ---------------------------------------------------------------------------\n // Form\n // Colors for form controls: inputs, selects, checkboxes, radio buttons, etc.\n // Three states: default, disabled, and active (selected — for radio/checkbox emphasis).\n // ---------------------------------------------------------------------------\n\n \"form.default.primary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-form-primary\",\n cssProperty: \"background\",\n description: \"Form control background in its resting/unfocused state.\",\n },\n \"form.default.primary.border\": {\n kind: \"color\",\n tailwindClass: \"border-form-primary\",\n cssProperty: \"border-color\",\n description: \"Form control border color in its resting state.\",\n },\n \"form.default.primary.focus-border\": {\n kind: \"color\",\n tailwindClass: \"ring-form-primary\",\n cssProperty: \"outline-color\",\n description:\n \"Focus ring color for form controls. Apply when the input receives keyboard focus.\",\n },\n \"form.default.primary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-form-primary\",\n cssProperty: \"color\",\n description: \"Icon color within form controls (e.g. a leading search icon or trailing caret).\",\n },\n \"form.default.primary.text\": {\n kind: \"color\",\n tailwindClass: \"text-form-primary\",\n cssProperty: \"color\",\n description:\n \"Primary text color within form controls — use for entered/selected values and input labels.\",\n },\n \"form.default.secondary.text\": {\n kind: \"color\",\n tailwindClass: \"text-form-secondary\",\n cssProperty: \"color\",\n description:\n \"Secondary text color within form controls — use for placeholder text or form descriptions.\",\n },\n \"form.active.primary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-form-active-primary\",\n cssProperty: \"background\",\n description:\n \"Form control background in the active/selected state — use for selected radio buttons, checkboxes, or toggle controls.\",\n },\n \"form.active.primary.border\": {\n kind: \"color\",\n tailwindClass: \"border-form-active-primary\",\n cssProperty: \"border-color\",\n description:\n \"Form control border color in the active/selected state — use for selected radio buttons or checkboxes.\",\n },\n \"form.active.primary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-form-active-primary\",\n cssProperty: \"color\",\n description:\n \"Icon color within form controls in the active/selected state — use for check marks or indicator icons in selected controls.\",\n },\n \"form.active.primary.text\": {\n kind: \"color\",\n tailwindClass: \"text-form-active-primary\",\n cssProperty: \"color\",\n description:\n \"Primary text color within form controls in the active/selected state — use for selected option labels.\",\n },\n \"form.active.secondary.text\": {\n kind: \"color\",\n tailwindClass: \"text-form-active-secondary\",\n cssProperty: \"color\",\n description:\n \"Secondary text color within form controls in the active/selected state — use for helper or hint text alongside a selected control.\",\n },\n \"form.disabled.primary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-form-disabled-primary\",\n cssProperty: \"background\",\n description: \"Form control background in the disabled state.\",\n },\n \"form.disabled.primary.border\": {\n kind: \"color\",\n tailwindClass: \"border-form-disabled-primary\",\n cssProperty: \"border-color\",\n description: \"Form control border color in the disabled state.\",\n },\n \"form.disabled.primary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-form-disabled-primary\",\n cssProperty: \"color\",\n description: \"Icon color within disabled form controls.\",\n },\n \"form.disabled.primary.text\": {\n kind: \"color\",\n tailwindClass: \"text-form-disabled-primary\",\n cssProperty: \"color\",\n description: \"Primary text color within disabled form controls.\",\n },\n \"form.disabled.secondary.text\": {\n kind: \"color\",\n tailwindClass: \"text-form-disabled-secondary\",\n cssProperty: \"color\",\n description: \"Secondary text color within disabled form controls.\",\n },\n\n // ---------------------------------------------------------------------------\n // Surface\n // Background, border, text, and icon colors for container elements.\n // ---------------------------------------------------------------------------\n\n \"surface.primary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-surface-primary\",\n cssProperty: \"background\",\n description:\n \"Primary surface background — the base page or app background. Cards and panels sit on top of this using secondary surface tokens.\",\n },\n \"surface.primary.border\": {\n kind: \"color\",\n tailwindClass: \"border-surface-primary\",\n cssProperty: \"border-color\",\n description: \"Border color for primary surface containers.\",\n },\n \"surface.primary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-surface-primary\",\n cssProperty: \"color\",\n description: \"Icon color on primary surfaces.\",\n },\n \"surface.primary.text\": {\n kind: \"color\",\n tailwindClass: \"text-surface-primary\",\n cssProperty: \"color\",\n description: \"Body text color on primary surfaces.\",\n },\n \"surface.secondary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-surface-secondary\",\n cssProperty: \"background\",\n description:\n \"Secondary surface background — use for elevated containers such as sidebars, panels, or cards on a primary surface.\",\n },\n \"surface.secondary.border\": {\n kind: \"color\",\n tailwindClass: \"border-surface-secondary\",\n cssProperty: \"border-color\",\n description: \"Border color for secondary surface containers.\",\n },\n \"surface.secondary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-surface-secondary\",\n cssProperty: \"color\",\n description: \"Icon color on secondary surfaces.\",\n },\n \"surface.secondary.text\": {\n kind: \"color\",\n tailwindClass: \"text-surface-secondary\",\n cssProperty: \"color\",\n description: \"Body text color on secondary surfaces.\",\n },\n \"surface.tertiary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-surface-tertiary\",\n cssProperty: \"background\",\n description:\n \"Tertiary surface background — sits on top of either primary or secondary surfaces. Use for badges, nav bars, table row stripes, or inset wells.\",\n },\n\n // ---------------------------------------------------------------------------\n // Data Visualization\n // Colors for bar, line, pie, and other charts\n // ---------------------------------------------------------------------------\n\n \"data-viz.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz\",\n cssProperty: \"background\",\n description:\n \"Background for data vizualization plot or chart area. Do not use for chart data itself.\",\n },\n\n \"data-viz.danger.1\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-danger-1\",\n cssProperty: \"background\",\n description:\n \"Background for a data visualization item indicating a bad or negative status. Use this as the default danger color. When multiple series or groups within the same category share a negative status, use incrementing numbers (e.g., data-viz.danger.2, data-viz.danger.3) to visually distinguish them.\",\n },\n \"data-viz.danger.2\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-danger-2\",\n cssProperty: \"background\",\n description:\n \"Second background color for a data visualization item indicating a bad or negative status. Use when two or more series or groups within the same category share a negative status and need to be visually distinguished from data-viz.danger.1.\",\n },\n \"data-viz.danger.3\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-danger-3\",\n cssProperty: \"background\",\n description:\n \"Third background color for a data visualization item indicating a bad or negative status. Use when three or more series or groups within the same category share a negative status and need to be visually distinguished from data-viz.danger.1 and data-viz.danger.2.\",\n },\n \"data-viz.danger.4\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-danger-4\",\n cssProperty: \"background\",\n description:\n \"Fourth background color for a data visualization item indicating a bad or negative status. Use when four series or groups within the same category share a negative status and need to be visually distinguished from the preceding danger colors.\",\n },\n\n \"data-viz.success.1\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-success-1\",\n cssProperty: \"background\",\n description:\n \"Background for a data visualization item indicating a good or positive status. Use this as the default success color. When multiple series or groups within the same category share a positive status, use incrementing numbers (e.g., data-viz.success.2, data-viz.success.3) to visually distinguish them.\",\n },\n \"data-viz.success.2\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-success-2\",\n cssProperty: \"background\",\n description:\n \"Second background color for a data visualization item indicating a good or positive status. Use when two or more series or groups within the same category share a positive status and need to be visually distinguished from data-viz.success.1.\",\n },\n \"data-viz.success.3\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-success-3\",\n cssProperty: \"background\",\n description:\n \"Third background color for a data visualization item indicating a good or positive status. Use when three or more series or groups within the same category share a positive status and need to be visually distinguished from data-viz.success.1 and data-viz.success.2.\",\n },\n \"data-viz.success.4\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-success-4\",\n cssProperty: \"background\",\n description:\n \"Fourth background color for a data visualization item indicating a good or positive status. Use when four series or groups within the same category share a positive status and need to be visually distinguished from the preceding success colors.\",\n },\n \"data-viz.primary.1\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-primary-1\",\n cssProperty: \"background\",\n description:\n \"Default background for chart elements with no positive or negative status. Use incrementing numbers for multiple series or groups within the same category.\",\n },\n \"data-viz.primary.2\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-primary-2\",\n cssProperty: \"background\",\n description:\n \"Second default background for distinguishing multiple neutral series or groups within the same category.\",\n },\n \"data-viz.primary.3\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-primary-3\",\n cssProperty: \"background\",\n description:\n \"Third default background for distinguishing multiple neutral series or groups within the same category.\",\n },\n \"data-viz.primary.4\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-primary-4\",\n cssProperty: \"background\",\n description:\n \"Fourth default background for distinguishing multiple neutral series or groups within the same category.\",\n },\n \"data-viz.secondary.1\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-secondary-1\",\n cssProperty: \"background\",\n description:\n \"Secondary background for chart elements. Use after exhausting the primary palette or to distinguish a separate data grouping. Use incrementing numbers for multiple secondary series.\",\n },\n \"data-viz.secondary.2\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-secondary-2\",\n cssProperty: \"background\",\n description:\n \"Second secondary background for distinguishing multiple secondary series or groups.\",\n },\n \"data-viz.secondary.3\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-secondary-3\",\n cssProperty: \"background\",\n description:\n \"Third secondary background for distinguishing multiple secondary series or groups.\",\n },\n \"data-viz.secondary.4\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-secondary-4\",\n cssProperty: \"background\",\n description:\n \"Fourth secondary background for distinguishing multiple secondary series or groups.\",\n },\n\n // ---------------------------------------------------------------------------\n // Typography — body\n // Paragraph and inline text. Three sizes (sm/md/lg), two weights (default/strong).\n // ---------------------------------------------------------------------------\n\n \"body.lg.default.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-body-lg\",\n cssProperty: \"font-family\",\n prose: \"body-lg\",\n description: \"Font family for large body text (default weight).\",\n },\n \"body.lg.default.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-body-lg\",\n cssProperty: \"letter-spacing\",\n prose: \"body-lg\",\n description: \"Letter spacing for large body text (default weight).\",\n },\n \"body.lg.default.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-body-lg\",\n cssProperty: \"line-height\",\n prose: \"body-lg\",\n description: \"Line height for large body text (default weight).\",\n },\n \"body.lg.default.size\": {\n kind: \"typography\",\n tailwindClass: \"text-body-lg\",\n cssProperty: \"font-size\",\n prose: \"body-lg\",\n description: \"Font size for large body text. Use for long-form reading content.\",\n },\n \"body.lg.default.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-body-lg\",\n cssProperty: \"font-weight\",\n prose: \"body-lg\",\n description: \"Font weight for large body text (default/regular weight).\",\n },\n \"body.lg.strong.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-body-lg-strong\",\n cssProperty: \"font-family\",\n prose: \"body-lg-strong\",\n description:\n \"Font family for large body text (strong/bold weight). Only use for emphasis, never style\",\n },\n \"body.lg.strong.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-body-lg-strong\",\n cssProperty: \"letter-spacing\",\n prose: \"body-lg-strong\",\n description:\n \"Letter spacing for large body text (strong weight). Only use for emphasis, never style\",\n },\n \"body.lg.strong.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-body-lg-strong\",\n cssProperty: \"line-height\",\n prose: \"body-lg-strong\",\n description:\n \"Line height for large body text (strong weight). Only use for emphasis, never style\",\n },\n \"body.lg.strong.size\": {\n kind: \"typography\",\n tailwindClass: \"text-body-lg-strong\",\n cssProperty: \"font-size\",\n prose: \"body-lg-strong\",\n description:\n \"Font size for large body text (strong weight). Only use for emphasis, never style.\",\n },\n \"body.lg.strong.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-body-lg-strong\",\n cssProperty: \"font-weight\",\n prose: \"body-lg-strong\",\n description:\n \"Font weight for large body text (strong/bold weight). Only use for emphasis, never style\",\n },\n \"body.md.default.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-body-md\",\n cssProperty: \"font-family\",\n prose: \"body-md\",\n description: \"Font family for medium body text (default weight).\",\n },\n \"body.md.default.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-body-md\",\n cssProperty: \"letter-spacing\",\n prose: \"body-md\",\n description: \"Letter spacing for medium body text (default weight).\",\n },\n \"body.md.default.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-body-md\",\n cssProperty: \"line-height\",\n prose: \"body-md\",\n description: \"Line height for medium body text (default weight).\",\n },\n \"body.md.default.size\": {\n kind: \"typography\",\n tailwindClass: \"text-body-md\",\n cssProperty: \"font-size\",\n prose: \"body-md\",\n description: \"Font size for medium body text. The default size for most UI copy.\",\n },\n \"body.md.default.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-body-md\",\n cssProperty: \"font-weight\",\n prose: \"body-md\",\n description: \"Font weight for medium body text (default/regular weight).\",\n },\n \"body.md.strong.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-body-md-strong\",\n cssProperty: \"font-family\",\n prose: \"body-md-strong\",\n description:\n \"Font family for medium body text (strong weight). Only use for emphasis, never style\",\n },\n \"body.md.strong.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-body-md-strong\",\n cssProperty: \"letter-spacing\",\n prose: \"body-md-strong\",\n description:\n \"Letter spacing for medium body text (strong weight). Only use for emphasis, never style\",\n },\n \"body.md.strong.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-body-md-strong\",\n cssProperty: \"line-height\",\n prose: \"body-md-strong\",\n description:\n \"Line height for medium body text (strong weight). Only use for emphasis, never style\",\n },\n \"body.md.strong.size\": {\n kind: \"typography\",\n tailwindClass: \"text-body-md-strong\",\n cssProperty: \"font-size\",\n prose: \"body-md-strong\",\n description:\n \"Font size for medium body text (strong weight). Only use for emphasis, never style\",\n },\n \"body.md.strong.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-body-md-strong\",\n cssProperty: \"font-weight\",\n prose: \"body-md-strong\",\n description:\n \"Font weight for medium body text (strong/bold weight). Only use for emphasis, never style\",\n },\n \"body.sm.default.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-body-sm\",\n cssProperty: \"font-family\",\n prose: \"body-sm\",\n description: \"Font family for small body text (default weight).\",\n },\n \"body.sm.default.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-body-sm\",\n cssProperty: \"letter-spacing\",\n prose: \"body-sm\",\n description: \"Letter spacing for small body text (default weight).\",\n },\n \"body.sm.default.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-body-sm\",\n cssProperty: \"line-height\",\n prose: \"body-sm\",\n description: \"Line height for small body text (default weight).\",\n },\n \"body.sm.default.size\": {\n kind: \"typography\",\n tailwindClass: \"text-body-sm\",\n cssProperty: \"font-size\",\n prose: \"body-sm\",\n description:\n \"Font size for small body text. Use for supplementary copy, captions, or metadata.\",\n },\n \"body.sm.default.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-body-sm\",\n cssProperty: \"font-weight\",\n prose: \"body-sm\",\n description: \"Font weight for small body text (default/regular weight).\",\n },\n \"body.sm.strong.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-body-sm-strong\",\n cssProperty: \"font-family\",\n prose: \"body-sm-strong\",\n description:\n \"Font family for small body text (strong weight). Only use for emphasis, never style\",\n },\n \"body.sm.strong.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-body-sm-strong\",\n cssProperty: \"letter-spacing\",\n prose: \"body-sm-strong\",\n description:\n \"Letter spacing for small body text (strong weight). Only use for emphasis, never style\",\n },\n \"body.sm.strong.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-body-sm-strong\",\n cssProperty: \"line-height\",\n prose: \"body-sm-strong\",\n description:\n \"Line height for small body text (strong weight). Only use for emphasis, never style\",\n },\n \"body.sm.strong.size\": {\n kind: \"typography\",\n tailwindClass: \"text-body-sm-strong\",\n cssProperty: \"font-size\",\n prose: \"body-sm-strong\",\n description: \"Font size for small body text (strong weight). Use for emphasis never style.\",\n },\n \"body.sm.strong.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-body-sm-strong\",\n cssProperty: \"font-weight\",\n prose: \"body-sm-strong\",\n description:\n \"Font weight for small body text (strong/bold weight). Only use for emphasis, never style\",\n },\n\n // ---------------------------------------------------------------------------\n // Typography — control\n // Text inside interactive controls: buttons, tabs, chips, menu items.\n // ---------------------------------------------------------------------------\n\n \"control.md.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-control-md\",\n cssProperty: \"font-family\",\n prose: \"control-md\",\n description:\n \"Font family for medium-sized control labels. Controls are buttons, badges, menu item content, etc.\",\n },\n \"control.md.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-control-md\",\n cssProperty: \"letter-spacing\",\n prose: \"control-md\",\n description:\n \"Letter spacing for medium control labels. Controls are buttons, badges, menu item content, etc.\",\n },\n \"control.md.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-control-md\",\n cssProperty: \"line-height\",\n prose: \"control-md\",\n description:\n \"Line height for medium control labels. Controls are buttons, badges, menu item content, etc.\",\n },\n \"control.md.size\": {\n kind: \"typography\",\n tailwindClass: \"text-control-md\",\n cssProperty: \"font-size\",\n prose: \"control-md\",\n description:\n \"Font size for medium controls — buttons, tabs, chips, and similar interactive elements. Controls are buttons, badges, menu item content, etc.\",\n },\n \"control.md.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-control-md\",\n cssProperty: \"font-weight\",\n prose: \"control-md\",\n description:\n \"Font weight for medium control labels. Controls are buttons, badges, menu item content, etc.\",\n },\n \"control.sm.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-control-sm\",\n cssProperty: \"font-family\",\n prose: \"control-sm\",\n description:\n \"Font family for small-sized control labels. Controls are buttons, badges, menu item content, etc.\",\n },\n \"control.sm.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-control-sm\",\n cssProperty: \"letter-spacing\",\n prose: \"control-sm\",\n description:\n \"Letter spacing for small control labels. Controls are buttons, badges, menu item content, etc.\",\n },\n \"control.sm.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-control-sm\",\n cssProperty: \"line-height\",\n prose: \"control-sm\",\n description:\n \"Line height for small control labels. Controls are buttons, badges, menu item content, etc.\",\n },\n \"control.sm.size\": {\n kind: \"typography\",\n tailwindClass: \"text-control-sm\",\n cssProperty: \"font-size\",\n prose: \"control-sm\",\n description:\n \"Font size for small controls — compact buttons, tags, or dense UI elements. Controls are buttons, badges, menu item content, etc.\",\n },\n \"control.sm.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-control-sm\",\n cssProperty: \"font-weight\",\n prose: \"control-sm\",\n description:\n \"Font weight for small control labels. Controls are buttons, badges, menu item content, etc.\",\n },\n\n // ---------------------------------------------------------------------------\n // Typography — display\n // Large marketing or hero text. Use sparingly at the top of a page or section.\n // ---------------------------------------------------------------------------\n\n \"display.lg.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-display-lg\",\n cssProperty: \"font-family\",\n prose: \"display-lg\",\n description: \"Font family for large display headings.\",\n },\n \"display.lg.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-display-lg\",\n cssProperty: \"letter-spacing\",\n prose: \"display-lg\",\n description: \"Letter spacing for large display headings.\",\n },\n \"display.lg.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-display-lg\",\n cssProperty: \"line-height\",\n prose: \"display-lg\",\n description: \"Line height for large display headings.\",\n },\n \"display.lg.size\": {\n kind: \"typography\",\n tailwindClass: \"text-display-lg\",\n cssProperty: \"font-size\",\n prose: \"display-lg\",\n description:\n \"Font size for large display text — hero headlines or prominent marketing statements.\",\n },\n \"display.lg.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-display-lg\",\n cssProperty: \"font-weight\",\n prose: \"display-lg\",\n description: \"Font weight for large display headings.\",\n },\n \"display.md.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-display-md\",\n cssProperty: \"font-family\",\n prose: \"display-md\",\n description: \"Font family for medium display headings.\",\n },\n \"display.md.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-display-md\",\n cssProperty: \"letter-spacing\",\n prose: \"display-md\",\n description: \"Letter spacing for medium display headings.\",\n },\n \"display.md.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-display-md\",\n cssProperty: \"line-height\",\n prose: \"display-md\",\n description: \"Line height for medium display headings.\",\n },\n \"display.md.size\": {\n kind: \"typography\",\n tailwindClass: \"text-display-md\",\n cssProperty: \"font-size\",\n prose: \"display-md\",\n description: \"Font size for medium display text — section intros or feature callouts.\",\n },\n \"display.md.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-display-md\",\n cssProperty: \"font-weight\",\n prose: \"display-md\",\n description: \"Font weight for medium display headings.\",\n },\n \"display.sm.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-display-sm\",\n cssProperty: \"font-family\",\n prose: \"display-sm\",\n description: \"Font family for small display headings.\",\n },\n \"display.sm.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-display-sm\",\n cssProperty: \"letter-spacing\",\n prose: \"display-sm\",\n description: \"Letter spacing for small display headings.\",\n },\n \"display.sm.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-display-sm\",\n cssProperty: \"line-height\",\n prose: \"display-sm\",\n description: \"Line height for small display headings.\",\n },\n \"display.sm.size\": {\n kind: \"typography\",\n tailwindClass: \"text-display-sm\",\n cssProperty: \"font-size\",\n prose: \"display-sm\",\n description:\n \"Font size for small display text — used at the boundary between display and header styles.\",\n },\n \"display.sm.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-display-sm\",\n cssProperty: \"font-weight\",\n prose: \"display-sm\",\n description: \"Font weight for small display headings.\",\n },\n\n // ---------------------------------------------------------------------------\n // Typography — header\n // Section and content headings (h1–h4 equivalents). Four sizes: sm/md/lg/xl.\n // ---------------------------------------------------------------------------\n\n \"header.xl.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-header-xl\",\n cssProperty: \"font-family\",\n prose: \"header-xl\",\n description: \"Font family for extra-large headers.\",\n },\n \"header.xl.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-header-xl\",\n cssProperty: \"letter-spacing\",\n prose: \"header-xl\",\n description: \"Letter spacing for extra-large headers.\",\n },\n \"header.xl.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-header-xl\",\n cssProperty: \"line-height\",\n prose: \"header-xl\",\n description: \"Line height for extra-large headers.\",\n },\n \"header.xl.size\": {\n kind: \"typography\",\n tailwindClass: \"text-header-xl\",\n cssProperty: \"font-size\",\n prose: \"header-xl\",\n description: \"Font size for extra-large headers — top-level page titles (h1 equivalent).\",\n },\n \"header.xl.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-header-xl\",\n cssProperty: \"font-weight\",\n prose: \"header-xl\",\n description: \"Font weight for extra-large headers.\",\n },\n \"header.lg.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-header-lg\",\n cssProperty: \"font-family\",\n prose: \"header-lg\",\n description: \"Font family for large headers.\",\n },\n \"header.lg.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-header-lg\",\n cssProperty: \"letter-spacing\",\n prose: \"header-lg\",\n description: \"Letter spacing for large headers.\",\n },\n \"header.lg.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-header-lg\",\n cssProperty: \"line-height\",\n prose: \"header-lg\",\n description: \"Line height for large headers.\",\n },\n \"header.lg.size\": {\n kind: \"typography\",\n tailwindClass: \"text-header-lg\",\n cssProperty: \"font-size\",\n prose: \"header-lg\",\n description: \"Font size for large headers — primary section titles (h2 equivalent).\",\n },\n \"header.lg.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-header-lg\",\n cssProperty: \"font-weight\",\n prose: \"header-lg\",\n description: \"Font weight for large headers.\",\n },\n \"header.md.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-header-md\",\n cssProperty: \"font-family\",\n prose: \"header-md\",\n description: \"Font family for medium headers.\",\n },\n \"header.md.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-header-md\",\n cssProperty: \"letter-spacing\",\n prose: \"header-md\",\n description: \"Letter spacing for medium headers.\",\n },\n \"header.md.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-header-md\",\n cssProperty: \"line-height\",\n prose: \"header-md\",\n description: \"Line height for medium headers.\",\n },\n \"header.md.size\": {\n kind: \"typography\",\n tailwindClass: \"text-header-md\",\n cssProperty: \"font-size\",\n prose: \"header-md\",\n description: \"Font size for medium headers — sub-section titles (h3 equivalent).\",\n },\n \"header.md.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-header-md\",\n cssProperty: \"font-weight\",\n prose: \"header-md\",\n description: \"Font weight for medium headers.\",\n },\n \"header.sm.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-header-sm\",\n cssProperty: \"font-family\",\n prose: \"header-sm\",\n description: \"Font family for small headers.\",\n },\n \"header.sm.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-header-sm\",\n cssProperty: \"letter-spacing\",\n prose: \"header-sm\",\n description: \"Letter spacing for small headers.\",\n },\n \"header.sm.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-header-sm\",\n cssProperty: \"line-height\",\n prose: \"header-sm\",\n description: \"Line height for small headers.\",\n },\n \"header.sm.size\": {\n kind: \"typography\",\n tailwindClass: \"text-header-sm\",\n cssProperty: \"font-size\",\n prose: \"header-sm\",\n description:\n \"Font size for small headers — card titles, sidebar headings, or list group labels (h4 equivalent).\",\n },\n \"header.sm.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-header-sm\",\n cssProperty: \"font-weight\",\n prose: \"header-sm\",\n description: \"Font weight for small headers.\",\n },\n\n // ---------------------------------------------------------------------------\n // Typography — mono\n // Monospaced text for code, data values, or numeric displays.\n // ---------------------------------------------------------------------------\n\n \"mono.lg.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-mono-lg\",\n cssProperty: \"font-family\",\n prose: \"mono-lg\",\n description: \"Font family for large monospaced text.\",\n },\n \"mono.lg.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-mono-lg\",\n cssProperty: \"letter-spacing\",\n prose: \"mono-lg\",\n description: \"Letter spacing for large monospaced text.\",\n },\n \"mono.lg.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-mono-lg\",\n cssProperty: \"line-height\",\n prose: \"mono-lg\",\n description: \"Line height for large monospaced text.\",\n },\n \"mono.lg.size\": {\n kind: \"typography\",\n tailwindClass: \"text-mono-lg\",\n cssProperty: \"font-size\",\n prose: \"mono-lg\",\n description:\n \"Font size for large monospaced text — use for code blocks or prominent data values.\",\n },\n \"mono.lg.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-mono-lg\",\n cssProperty: \"font-weight\",\n prose: \"mono-lg\",\n description: \"Font weight for large monospaced text.\",\n },\n \"mono.md.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-mono-md\",\n cssProperty: \"font-family\",\n prose: \"mono-md\",\n description: \"Font family for medium monospaced text.\",\n },\n \"mono.md.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-mono-md\",\n cssProperty: \"letter-spacing\",\n prose: \"mono-md\",\n description: \"Letter spacing for medium monospaced text.\",\n },\n \"mono.md.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-mono-md\",\n cssProperty: \"line-height\",\n prose: \"mono-md\",\n description: \"Line height for medium monospaced text.\",\n },\n \"mono.md.size\": {\n kind: \"typography\",\n tailwindClass: \"text-mono-md\",\n cssProperty: \"font-size\",\n prose: \"mono-md\",\n description:\n \"Font size for medium monospaced text — use for inline code or compact data tables.\",\n },\n \"mono.md.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-mono-md\",\n cssProperty: \"font-weight\",\n prose: \"mono-md\",\n description: \"Font weight for medium monospaced text.\",\n },\n\n // ---------------------------------------------------------------------------\n // Gap — inline (horizontal)\n // Column gap between sibling elements laid out in a row (flex-row / grid).\n // Generates gap-inline-{size} (both axes) and gap-x-{size} (column only).\n // ---------------------------------------------------------------------------\n\n \"gap.inline.xs\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"inline-xs\" },\n { family: \"margin\", suffix: \"inline-xs\" },\n { family: \"padding\", suffix: \"inline-xs\" },\n { family: \"gap-x\", suffix: \"xs\" },\n ],\n description:\n \"Extra-small horizontal gap — use between tightly packed inline elements such as an icon and its label.\",\n },\n \"gap.inline.sm\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"inline-sm\" },\n { family: \"margin\", suffix: \"inline-sm\" },\n { family: \"padding\", suffix: \"inline-sm\" },\n { family: \"gap-x\", suffix: \"sm\" },\n ],\n description:\n \"Small horizontal gap — use between related inline items such as badge+label or button group members.\",\n },\n \"gap.inline.md\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"inline-md\" },\n { family: \"margin\", suffix: \"inline-md\" },\n { family: \"padding\", suffix: \"inline-md\" },\n { family: \"gap-x\", suffix: \"md\" },\n ],\n description:\n \"Medium horizontal gap — the default spacing between inline siblings in a row layout.\",\n },\n \"gap.inline.lg\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"inline-lg\" },\n { family: \"margin\", suffix: \"inline-lg\" },\n { family: \"padding\", suffix: \"inline-lg\" },\n { family: \"gap-x\", suffix: \"lg\" },\n ],\n description:\n \"Large horizontal gap — use to create more breathing room between column groups or major inline sections.\",\n },\n \"gap.inline.xl\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"inline-xl\" },\n { family: \"margin\", suffix: \"inline-xl\" },\n { family: \"padding\", suffix: \"inline-xl\" },\n { family: \"gap-x\", suffix: \"xl\" },\n ],\n description:\n \"Extra-large horizontal gap — use for wide column separations or spacious two-column layouts.\",\n },\n\n // ---------------------------------------------------------------------------\n // Gap — stack (vertical)\n // Row gap between sibling elements stacked in a column (flex-col / grid).\n // Generates gap-stack-{size} (both axes) and gap-y-{size} (row only).\n // ---------------------------------------------------------------------------\n\n \"gap.stack.xs\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"stack-xs\" },\n { family: \"margin\", suffix: \"stack-xs\" },\n { family: \"padding\", suffix: \"stack-xs\" },\n { family: \"gap-y\", suffix: \"xs\" },\n ],\n description:\n \"Extra-small vertical gap — use between tightly related stacked items such as a label and its helper text.\",\n },\n \"gap.stack.sm\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"stack-sm\" },\n { family: \"margin\", suffix: \"stack-sm\" },\n { family: \"padding\", suffix: \"stack-sm\" },\n { family: \"gap-y\", suffix: \"sm\" },\n ],\n description:\n \"Small vertical gap — use between list items, form fields in a compact stack, or related content rows.\",\n },\n \"gap.stack.md\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"stack-md\" },\n { family: \"margin\", suffix: \"stack-md\" },\n { family: \"padding\", suffix: \"stack-md\" },\n { family: \"gap-y\", suffix: \"md\" },\n ],\n description:\n \"Medium vertical gap — the default spacing between stacked siblings in a column layout.\",\n },\n \"gap.stack.lg\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"stack-lg\" },\n { family: \"margin\", suffix: \"stack-lg\" },\n { family: \"padding\", suffix: \"stack-lg\" },\n { family: \"gap-y\", suffix: \"lg\" },\n ],\n description:\n \"Large vertical gap — use between distinct content blocks or sections within a column.\",\n },\n \"gap.stack.xl\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"stack-xl\" },\n { family: \"margin\", suffix: \"stack-xl\" },\n { family: \"padding\", suffix: \"stack-xl\" },\n { family: \"gap-y\", suffix: \"xl\" },\n ],\n description:\n \"Extra-large vertical gap — use between major page sections or to create generous whitespace between groups.\",\n },\n \"gap.stack.2xl\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"stack-2xl\" },\n { family: \"margin\", suffix: \"stack-2xl\" },\n { family: \"padding\", suffix: \"stack-2xl\" },\n { family: \"gap-y\", suffix: \"2xl\" },\n ],\n description:\n \"2x extra-large vertical gap — use for prominent section breaks on content-heavy pages.\",\n },\n \"gap.stack.3xl\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"stack-3xl\" },\n { family: \"margin\", suffix: \"stack-3xl\" },\n { family: \"padding\", suffix: \"stack-3xl\" },\n { family: \"gap-y\", suffix: \"3xl\" },\n ],\n description:\n \"3x extra-large vertical gap — use for large whitespace breaks between top-level page regions.\",\n },\n \"gap.stack.4xl\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"stack-4xl\" },\n { family: \"margin\", suffix: \"stack-4xl\" },\n { family: \"padding\", suffix: \"stack-4xl\" },\n { family: \"gap-y\", suffix: \"4xl\" },\n ],\n description:\n \"4x extra-large vertical gap — use for maximum separation between major page regions or hero sections.\",\n },\n\n // ---------------------------------------------------------------------------\n // Inset — square\n // Equal padding on all four sides. Generates p and m in all 7 directions.\n // ---------------------------------------------------------------------------\n\n \"inset.square.sm\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-square-sm\" },\n { family: \"margin\", suffix: \"inset-square-sm\" },\n ],\n description:\n \"Small square inset — equal padding/margin on all sides. Use for compact components such as small chips or tight icon containers.\",\n },\n \"inset.square.md\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-square-md\" },\n { family: \"margin\", suffix: \"inset-square-md\" },\n ],\n description:\n \"Medium square inset — equal padding/margin on all sides. The default inset for most contained elements.\",\n },\n \"inset.square.lg\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-square-lg\" },\n { family: \"margin\", suffix: \"inset-square-lg\" },\n ],\n description:\n \"Large square inset — equal padding/margin on all sides. Use for cards, panels, or any container that needs generous interior spacing.\",\n },\n \"inset.square.xl\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-square-xl\" },\n { family: \"margin\", suffix: \"inset-square-xl\" },\n ],\n description:\n \"Extra-large square inset — equal padding/margin on all sides. Use for spacious modal bodies or feature sections.\",\n },\n\n // ---------------------------------------------------------------------------\n // Inset — squish\n // Reduced vertical padding relative to horizontal (pill/button shape).\n // Generates p and m in all 7 directions.\n // ---------------------------------------------------------------------------\n\n \"inset.squish.xs\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-squish-xs\" },\n { family: \"margin\", suffix: \"inset-squish-xs\" },\n ],\n description:\n \"Extra-small squish inset — less vertical than horizontal padding. Use for compact tags, badges, or extra-small buttons.\",\n },\n \"inset.squish.sm\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-squish-sm\" },\n { family: \"margin\", suffix: \"inset-squish-sm\" },\n ],\n description:\n \"Small squish inset — less vertical than horizontal padding. Use for small buttons or tightly spaced list-item controls.\",\n },\n \"inset.squish.md\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-squish-md\" },\n { family: \"margin\", suffix: \"inset-squish-md\" },\n ],\n description:\n \"Medium squish inset — less vertical than horizontal padding. The default inset for standard-sized buttons and interactive rows.\",\n },\n \"inset.squish.lg\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-squish-lg\" },\n { family: \"margin\", suffix: \"inset-squish-lg\" },\n ],\n description:\n \"Large squish inset — less vertical than horizontal padding. Use for large buttons or prominent interactive elements.\",\n },\n\n // ---------------------------------------------------------------------------\n // Inset — squish offset\n // Reduced horizontal padding for sides adjacent to an icon.\n // Icons have less visual weight than text, so padding next to an icon needs\n // to be optically reduced. Use the offset token at the same scale as the squish inset.\n // ---------------------------------------------------------------------------\n\n \"inset.squish.offset.xs\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-squish-offset-xs\" },\n { family: \"margin\", suffix: \"inset-squish-offset-xs\" },\n ],\n description:\n \"Reduced horizontal padding for sides adjacent to an icon, paired with `inset-squish-xs`. Icons have less visual weight than text and require less padding for optical balance.\",\n },\n \"inset.squish.offset.sm\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-squish-offset-sm\" },\n { family: \"margin\", suffix: \"inset-squish-offset-sm\" },\n ],\n description:\n \"Reduced horizontal padding for sides adjacent to an icon, paired with `inset-squish-sm`. Icons have less visual weight than text and require less padding for optical balance.\",\n },\n \"inset.squish.offset.md\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-squish-offset-md\" },\n { family: \"margin\", suffix: \"inset-squish-offset-md\" },\n ],\n description:\n \"Reduced horizontal padding for sides adjacent to an icon, paired with `inset-squish-md`. For example, a button with a leading icon uses `pl-inset-squish-offset-md` on the left and `pr-inset-squish-md` on the right.\",\n },\n \"inset.squish.offset.lg\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-squish-offset-lg\" },\n { family: \"margin\", suffix: \"inset-squish-offset-lg\" },\n ],\n description:\n \"Reduced horizontal padding for sides adjacent to an icon, paired with `inset-squish-lg`. Icons have less visual weight than text and require less padding for optical balance.\",\n },\n\n // ---------------------------------------------------------------------------\n // Radius\n // Border-radius tokens. Generates rounded-sl-{suffix}.\n // ---------------------------------------------------------------------------\n\n \"radius.sm\": {\n kind: \"spacing\",\n utilities: [{ family: \"border-radius\", suffix: \"sm\" }],\n description:\n \"Small container border radius (12px) — pair with `inset-square-sm` on the same element to maintain correct nested curvature around controls.\",\n },\n \"radius.md\": {\n kind: \"spacing\",\n utilities: [{ family: \"border-radius\", suffix: \"md\" }],\n description:\n \"Medium container border radius (16px) — pair with `inset-square-md` on the same element to maintain correct nested curvature around controls.\",\n },\n \"radius.lg\": {\n kind: \"spacing\",\n utilities: [{ family: \"border-radius\", suffix: \"lg\" }],\n description:\n \"Large container border radius (24px) — pair with `inset-square-lg` on the same element to maintain correct nested curvature around controls.\",\n },\n \"radius.xl\": {\n kind: \"spacing\",\n utilities: [{ family: \"border-radius\", suffix: \"xl\" }],\n description:\n \"Extra-large container border radius (32px) — pair with `inset-square-xl` on the same element to maintain correct nested curvature around controls.\",\n },\n \"radius.control\": {\n kind: \"spacing\",\n utilities: [{ family: \"border-radius\", suffix: \"control\" }],\n description:\n \"Border radius for standalone elements like buttons, inputs, and selects (8px). This is the base inner radius — container elements wrapping controls should use a matching inset+radius pair at the same scale.\",\n },\n \"radius.full\": {\n kind: \"spacing\",\n utilities: [{ family: \"border-radius\", suffix: \"full\" }],\n description:\n \"Full (pill) border radius — use for circular avatars, pill badges, or toggle switches.\",\n },\n\n // ---------------------------------------------------------------------------\n // Size\n // Fixed dimensions for components. Generates w, h, min-w, min-h.\n // ---------------------------------------------------------------------------\n\n \"size.xs\": {\n kind: \"spacing\",\n utilities: [\n { family: \"width\", suffix: \"sl-xs\" },\n { family: \"height\", suffix: \"sl-xs\" },\n { family: \"min-width\", suffix: \"sl-xs\" },\n { family: \"min-height\", suffix: \"sl-xs\" },\n { family: \"size\", suffix: \"sl-xs\" },\n ],\n description:\n \"Extra-small fixed height for interactive controls (16px). Use on buttons, inputs, and other single-line elements that must align in a row. Never use arbitrary pixel values for control heights.\",\n },\n \"size.sm\": {\n kind: \"spacing\",\n utilities: [\n { family: \"width\", suffix: \"sl-sm\" },\n { family: \"height\", suffix: \"sl-sm\" },\n { family: \"min-width\", suffix: \"sl-sm\" },\n { family: \"min-height\", suffix: \"sl-sm\" },\n { family: \"size\", suffix: \"sl-sm\" },\n ],\n description:\n \"Small fixed height for interactive controls (24px). Use on buttons, inputs, and other single-line elements that must align in a row. Never use arbitrary pixel values for control heights.\",\n },\n \"size.md\": {\n kind: \"spacing\",\n utilities: [\n { family: \"width\", suffix: \"sl-md\" },\n { family: \"height\", suffix: \"sl-md\" },\n { family: \"min-width\", suffix: \"sl-md\" },\n { family: \"min-height\", suffix: \"sl-md\" },\n { family: \"size\", suffix: \"sl-md\" },\n ],\n description:\n \"Medium fixed height for interactive controls (32px). The default size for most buttons, inputs, and other single-line elements that must align in a row. Never use arbitrary pixel values for control heights.\",\n },\n \"size.lg\": {\n kind: \"spacing\",\n utilities: [\n { family: \"width\", suffix: \"sl-lg\" },\n { family: \"height\", suffix: \"sl-lg\" },\n { family: \"min-width\", suffix: \"sl-lg\" },\n { family: \"min-height\", suffix: \"sl-lg\" },\n { family: \"size\", suffix: \"sl-md\" },\n ],\n description:\n \"Large fixed height for interactive controls (40px). Use on buttons, inputs, and other single-line elements that must align in a row. Never use arbitrary pixel values for control heights.\",\n },\n \"size.icon.inner.sm\": {\n kind: \"spacing\",\n utilities: [\n { family: \"width\", suffix: \"sl-icon-inner-sm\" },\n { family: \"height\", suffix: \"sl-icon-inner-sm\" },\n { family: \"min-width\", suffix: \"sl-icon-inner-sm\" },\n { family: \"min-height\", suffix: \"sl-icon-inner-sm\" },\n { family: \"size\", suffix: \"sl-icon-inner-sm\" },\n ],\n description:\n \"Glyph dimensions of a small icon SVG (12px), without surrounding padding. Apply to the SVG or img element directly. Pair with size.icon.outer.sm on the containing wrapper.\",\n },\n \"size.icon.inner.md\": {\n kind: \"spacing\",\n utilities: [\n { family: \"width\", suffix: \"sl-icon-inner-md\" },\n { family: \"height\", suffix: \"sl-icon-inner-md\" },\n { family: \"min-width\", suffix: \"sl-icon-inner-md\" },\n { family: \"min-height\", suffix: \"sl-icon-inner-md\" },\n { family: \"size\", suffix: \"sl-icon-inner-md\" },\n ],\n description:\n \"Glyph dimensions of a medium icon SVG (16px), without surrounding padding. Apply to the SVG or img element directly. Pair with size.icon.outer.md on the containing wrapper.\",\n },\n \"size.icon.inner.lg\": {\n kind: \"spacing\",\n utilities: [\n { family: \"width\", suffix: \"sl-icon-inner-lg\" },\n { family: \"height\", suffix: \"sl-icon-inner-lg\" },\n { family: \"min-width\", suffix: \"sl-icon-inner-lg\" },\n { family: \"min-height\", suffix: \"sl-icon-inner-lg\" },\n { family: \"size\", suffix: \"sl-icon-inner-lg\" },\n ],\n description:\n \"Glyph dimensions of a large icon SVG (20px), without surrounding padding. Apply to the SVG or img element directly. Pair with size.icon.outer.lg on the containing wrapper.\",\n },\n \"size.icon.outer.sm\": {\n kind: \"spacing\",\n utilities: [\n { family: \"width\", suffix: \"sl-icon-outer-sm\" },\n { family: \"height\", suffix: \"sl-icon-outer-sm\" },\n { family: \"min-width\", suffix: \"sl-icon-outer-sm\" },\n { family: \"min-height\", suffix: \"sl-icon-outer-sm\" },\n { family: \"size\", suffix: \"sl-icon-outer-sm\" },\n ],\n description:\n \"Outer container size for a small icon (24px), including built-in padding. Apply to the wrapper element, not the SVG. Because the padding is built in, adjacent text content needs no extra gap, and sides adjacent to the icon should use inset-squish-offset-{size} instead of the full squish inset.\",\n },\n \"size.icon.outer.md\": {\n kind: \"spacing\",\n utilities: [\n { family: \"width\", suffix: \"sl-icon-outer-md\" },\n { family: \"height\", suffix: \"sl-icon-outer-md\" },\n { family: \"min-width\", suffix: \"sl-icon-outer-md\" },\n { family: \"min-height\", suffix: \"sl-icon-outer-md\" },\n { family: \"size\", suffix: \"sl-icon-outer-md\" },\n ],\n description:\n \"Outer container size for a medium icon (32px), including built-in padding. Apply to the wrapper element, not the SVG. Because the padding is built in, adjacent text content needs no extra gap, and sides adjacent to the icon should use inset-squish-offset-{size} instead of the full squish inset.\",\n },\n \"size.icon.outer.lg\": {\n kind: \"spacing\",\n utilities: [\n { family: \"width\", suffix: \"sl-icon-outer-lg\" },\n { family: \"height\", suffix: \"sl-icon-outer-lg\" },\n { family: \"min-width\", suffix: \"sl-icon-outer-lg\" },\n { family: \"min-height\", suffix: \"sl-icon-outer-lg\" },\n { family: \"size\", suffix: \"sl-icon-outer-lg\" },\n ],\n description:\n \"Outer container size for a large icon (40px), including built-in padding. Apply to the wrapper element, not the SVG. Because the padding is built in, adjacent text content needs no extra gap, and sides adjacent to the icon should use inset-squish-offset-{size} instead of the full squish inset.\",\n },\n\n // ---------------------------------------------------------------------------\n // Stroke\n // Border and outline widths. Generates border-width in all 7 directions.\n // ---------------------------------------------------------------------------\n\n \"stroke.border\": {\n kind: \"spacing\",\n utilities: [{ family: \"border-width\", suffix: \"stroke\" }],\n description:\n \"Standard border width — use for component borders such as inputs, cards, and dividers.\",\n },\n \"stroke.focus\": {\n kind: \"spacing\",\n utilities: [{ family: \"border-width\", suffix: \"stroke-focus\" }],\n description:\n \"Focus ring/outline width — use for keyboard focus indicators to meet accessibility contrast requirements.\",\n },\n} satisfies SlabTokenMap;\n","import type { FigmaExtensions } from \"../utils/types.ts\";\nimport { tokenMap } from \"../token-map.ts\";\nimport type { ExpandingSpacingFamily } from \"../utils/token-types.ts\";\n\n// ---------------------------------------------------------------------------\n// Expanding spacing families\n// Each entry produces 7 directional Tailwind classes from a single token.\n// Property order within multi-property entries must match the original output\n// so snapshot tests stay green (right before left, bottom before top).\n// ---------------------------------------------------------------------------\n\ntype Variant = { prefix: string; props: (val: string) => Record<string, string> };\n\nexport const EXPANDING_FAMILIES: Record<ExpandingSpacingFamily, Variant[]> = {\n padding: [\n { prefix: \"p\", props: (v) => ({ padding: v }) },\n { prefix: \"px\", props: (v) => ({ \"padding-right\": v, \"padding-left\": v }) },\n { prefix: \"py\", props: (v) => ({ \"padding-bottom\": v, \"padding-top\": v }) },\n { prefix: \"pl\", props: (v) => ({ \"padding-left\": v }) },\n { prefix: \"pr\", props: (v) => ({ \"padding-right\": v }) },\n { prefix: \"pt\", props: (v) => ({ \"padding-top\": v }) },\n { prefix: \"pb\", props: (v) => ({ \"padding-bottom\": v }) },\n ],\n margin: [\n { prefix: \"m\", props: (v) => ({ margin: v }) },\n { prefix: \"mx\", props: (v) => ({ \"margin-right\": v, \"margin-left\": v }) },\n { prefix: \"my\", props: (v) => ({ \"margin-bottom\": v, \"margin-top\": v }) },\n { prefix: \"ml\", props: (v) => ({ \"margin-left\": v }) },\n { prefix: \"mr\", props: (v) => ({ \"margin-right\": v }) },\n { prefix: \"mt\", props: (v) => ({ \"margin-top\": v }) },\n { prefix: \"mb\", props: (v) => ({ \"margin-bottom\": v }) },\n ],\n \"border-width\": [\n { prefix: \"border\", props: (v) => ({ \"border-width\": v }) },\n { prefix: \"border-x\", props: (v) => ({ \"border-right-width\": v, \"border-left-width\": v }) },\n { prefix: \"border-y\", props: (v) => ({ \"border-bottom-width\": v, \"border-top-width\": v }) },\n { prefix: \"border-l\", props: (v) => ({ \"border-left-width\": v }) },\n { prefix: \"border-r\", props: (v) => ({ \"border-right-width\": v }) },\n { prefix: \"border-t\", props: (v) => ({ \"border-top-width\": v }) },\n { prefix: \"border-b\", props: (v) => ({ \"border-bottom-width\": v }) },\n ],\n};\n\n// ---------------------------------------------------------------------------\n// Single spacing families\n// Each entry produces exactly one Tailwind class.\n// ---------------------------------------------------------------------------\n\nexport const SINGLE_FAMILIES: Record<\n string,\n { prefix: string; props: (val: string) => Record<string, string> }\n> = {\n gap: { prefix: \"gap\", props: (v) => ({ gap: v }) },\n size: { prefix: \"size\", props: (v) => ({ height: v, width: v }) },\n \"gap-x\": { prefix: \"gap-x\", props: (v) => ({ \"column-gap\": v }) },\n \"gap-y\": { prefix: \"gap-y\", props: (v) => ({ \"row-gap\": v }) },\n width: { prefix: \"w\", props: (v) => ({ width: v }) },\n height: { prefix: \"h\", props: (v) => ({ height: v }) },\n \"min-width\": { prefix: \"min-w\", props: (v) => ({ \"min-width\": v }) },\n \"min-height\": { prefix: \"min-h\", props: (v) => ({ \"min-height\": v }) },\n \"border-radius\": { prefix: \"rounded-sl\", props: (v) => ({ \"border-radius\": v }) },\n};\n\n// ---------------------------------------------------------------------------\n// Color property resolution\n// Handles gradient special cases (v3 vs v4 differ) and normalises border-color\n// to camelCase borderColor (Tailwind convention in both v3 and v4).\n// ---------------------------------------------------------------------------\n\nfunction resolveColorProps(\n cssProperty: string,\n codeSyntax: string,\n version: \"v3\" | \"v4\",\n): Record<string, string> {\n if (cssProperty === \"--tw-gradient-from\") {\n if (version === \"v3\") {\n return {\n \"--tw-gradient-from\": `${codeSyntax} var(--tw-gradient-from-position)`,\n \"--tw-gradient-to\": \"transparent var(--tw-gradient-to-position)\",\n \"--tw-gradient-stops\": \"var(--tw-gradient-from), var(--tw-gradient-to)\",\n };\n }\n return {\n \"--tw-gradient-from\": codeSyntax,\n \"--tw-gradient-stops\": \"var(--tw-gradient-from), var(--tw-gradient-to, transparent)\",\n };\n }\n\n if (cssProperty === \"--tw-gradient-to\") {\n const value = version === \"v3\" ? `${codeSyntax} var(--tw-gradient-to-position)` : codeSyntax;\n return { \"--tw-gradient-to\": value };\n }\n\n const prop = cssProperty === \"border-color\" ? \"border-color\" : cssProperty;\n return { [prop]: codeSyntax };\n}\n\n// ---------------------------------------------------------------------------\n// Main builder\n// ---------------------------------------------------------------------------\n\nexport function buildUtilitiesFromMap(\n tokens: Record<string, { $extensions: unknown }>,\n version: \"v3\" | \"v4\",\n): {\n utilities: Record<string, Record<string, string>>;\n proseGroups: Record<string, Record<string, string>>;\n} {\n const utilities: Record<string, Record<string, string>> = {};\n const proseGroups: Record<string, Record<string, string>> = {};\n\n for (const [id, token] of Object.entries(tokens)) {\n const codeSyntax = (token.$extensions as FigmaExtensions)?.[\"com.figma.codeSyntax\"]?.WEB;\n if (!codeSyntax) continue;\n\n const entry = tokenMap[id as keyof typeof tokenMap];\n if (!entry) continue;\n\n if (entry.kind === \"color\") {\n utilities[`.${entry.tailwindClass}`] = resolveColorProps(\n entry.cssProperty,\n codeSyntax,\n version,\n );\n } else if (entry.kind === \"typography\") {\n utilities[`.${entry.tailwindClass}`] = { [entry.cssProperty]: codeSyntax };\n if (entry.prose) {\n const group = (proseGroups[entry.prose] ??= {});\n group[entry.cssProperty] = codeSyntax;\n }\n } else if (entry.kind === \"spacing\") {\n for (const util of entry.utilities) {\n const expanding = EXPANDING_FAMILIES[util.family as ExpandingSpacingFamily];\n if (expanding) {\n for (const variant of expanding) {\n utilities[`.${variant.prefix}-${util.suffix}`] = variant.props(codeSyntax);\n }\n } else {\n const single = SINGLE_FAMILIES[util.family];\n if (single) {\n utilities[`.${single.prefix}-${util.suffix}`] = single.props(codeSyntax);\n }\n }\n }\n }\n }\n\n return { utilities, proseGroups };\n}\n","","","","","","","","","","import danger from \"./color/danger.tokens.json\" with { type: \"json\" };\nimport info from \"./color/info.tokens.json\" with { type: \"json\" };\nimport neutral from \"./color/neutral.tokens.json\" with { type: \"json\" };\nimport neutralDark from \"./color/neutral-dark.tokens.json\" with { type: \"json\" };\nimport neutralInverted from \"./color/neutral-inverted.tokens.json\" with { type: \"json\" };\nimport success from \"./color/success.tokens.json\" with { type: \"json\" };\nimport warning from \"./color/warning.tokens.json\" with { type: \"json\" };\nimport spacing from \"./spacing.tokens.json\" with { type: \"json\" };\nimport type_ from \"./type.tokens.json\" with { type: \"json\" };\n\nexport const colorTokensByMode: Record<string, Record<string, unknown>> = {\n danger,\n info,\n neutral,\n \"neutral-dark\": neutralDark,\n \"neutral-inverted\": neutralInverted,\n success,\n warning,\n};\n\nexport const spacingTokens: Record<string, unknown> = spacing;\nexport const typeTokens: Record<string, unknown> = type_;\n","import { tokenMap } from \"./token-map.ts\";\nimport { EXPANDING_FAMILIES, SINGLE_FAMILIES } from \"./tailwind-plugin/from-token-map.ts\";\nimport { colorTokensByMode, spacingTokens, typeTokens } from \"./tokens-raw-import/index.ts\";\nimport type { ExpandingSpacingFamily, TokenEntry } from \"./utils/token-types.ts\";\nimport type { FigmaToken, FigmaExtensions } from \"./utils/types.ts\";\n\nconst COLOR_MODES = [\n \"neutral\",\n \"danger\",\n \"info\",\n \"neutral-inverted\",\n \"neutral-dark\",\n \"success\",\n \"warning\",\n] as const;\n\nexport type ColorMode = (typeof COLOR_MODES)[number];\n\nexport type SlabEntry = {\n cssVariable: string;\n kind: \"color\" | \"spacing\" | \"typography\";\n property: {\n /** Example (padding-left, background, color, padding-top, padding-bottom) */\n cssProperty: string[];\n /** Example (p-inset-squish-md) */\n tailwindClass: string;\n }[];\n /**\n * Guidance for AI tools. Present when a higher-level composite class should\n * be preferred over this individual token (e.g. a prose-* typography class).\n */\n note?: string;\n};\n\nexport type MergedToken = FigmaToken & {\n $name: string;\n $extensions: {\n \"com.figma.variableId\"?: string;\n \"thatch.slab\": SlabEntry;\n \"thatch.modes\"?: Record<ColorMode, string>;\n };\n};\n\nfunction getByDotPath(obj: Record<string, unknown>, path: string): unknown {\n return path\n .split(\".\")\n .reduce<unknown>((acc, key) => (acc as Record<string, unknown>)?.[key], obj);\n}\n\nfunction toSlabEntry(entry: TokenEntry, cssVariable: string): SlabEntry {\n if (entry.kind === \"color\") {\n return {\n cssVariable,\n kind: \"color\",\n property: [{ cssProperty: [entry.cssProperty], tailwindClass: entry.tailwindClass }],\n note: `Hex values for each color mode are available in the $extensions[\"thatch.modes\"] field. To switch the active mode for a subtree, set the \\`data-color-mode=\"[mode]\"\\` attribute on any ancestor element — all nested color tokens will automatically resolve to that mode's values. Available modes: ${COLOR_MODES.join(\", \")}.`,\n };\n }\n\n if (entry.kind === \"typography\") {\n return {\n cssVariable,\n kind: \"typography\",\n property: [{ cssProperty: [entry.cssProperty], tailwindClass: entry.tailwindClass }],\n ...(entry.prose\n ? {\n note: `Prefer \\`.prose-${entry.prose}\\` which applies all typography properties for this style together, rather than using individual tokens.`,\n }\n : {}),\n };\n }\n\n // spacing — expand each utility into its full set of directional classes\n const property: SlabEntry[\"property\"] = [];\n for (const util of entry.utilities) {\n const expanding = EXPANDING_FAMILIES[util.family as ExpandingSpacingFamily];\n if (expanding) {\n for (const variant of expanding) {\n property.push({\n cssProperty: Object.keys(variant.props(\"\")),\n tailwindClass: `${variant.prefix}-${util.suffix}`,\n });\n }\n } else {\n const single = SINGLE_FAMILIES[util.family];\n if (single) {\n property.push({\n cssProperty: Object.keys(single.props(\"\")),\n tailwindClass: `${single.prefix}-${util.suffix}`,\n });\n }\n }\n }\n return { cssVariable, kind: \"spacing\", property };\n}\n\nfunction buildExtensions(\n rawToken: FigmaToken,\n slabEntry: SlabEntry,\n modes?: Record<ColorMode, string>,\n): MergedToken[\"$extensions\"] {\n const ext = rawToken.$extensions as FigmaExtensions | undefined;\n return {\n ...(ext?.[\"com.figma.variableId\"]\n ? { \"com.figma.variableId\": ext[\"com.figma.variableId\"] }\n : {}),\n \"thatch.slab\": slabEntry,\n ...(modes ? { \"thatch.modes\": modes } : {}),\n };\n}\n\nexport function mergeToken(key: keyof typeof tokenMap): MergedToken | null {\n const entry = tokenMap[key];\n\n if (entry.kind === \"color\") {\n const neutral = colorTokensByMode[\"neutral\"] ?? {};\n const rawToken = getByDotPath(neutral, key) as FigmaToken | undefined;\n if (!rawToken?.$type) return null;\n\n const cssVariable =\n (rawToken.$extensions as FigmaExtensions)?.[\"com.figma.codeSyntax\"]?.WEB ?? \"\";\n\n const modes = {} as Record<ColorMode, string>;\n for (const mode of COLOR_MODES) {\n const source = colorTokensByMode[mode] ?? {};\n const token = getByDotPath(source, key) as FigmaToken | undefined;\n const hex =\n token?.$value && typeof token.$value === \"object\" && \"hex\" in token.$value\n ? (token.$value as { hex?: string }).hex\n : undefined;\n if (hex) modes[mode] = hex;\n }\n\n return {\n ...rawToken,\n $name: key,\n $description: entry.description,\n $extensions: buildExtensions(rawToken, toSlabEntry(entry, cssVariable), modes),\n };\n }\n\n const source = entry.kind === \"spacing\" ? spacingTokens : typeTokens;\n const rawToken = getByDotPath(source, key) as FigmaToken | undefined;\n if (!rawToken?.$type) return null;\n\n const cssVariable =\n (rawToken.$extensions as FigmaExtensions)?.[\"com.figma.codeSyntax\"]?.WEB ?? \"\";\n\n return {\n ...rawToken,\n $name: key,\n $description: entry.description,\n $extensions: buildExtensions(rawToken, toSlabEntry(entry, cssVariable)),\n };\n}\n","import Fuse from \"fuse.js\";\nimport { tokenMap } from \"./token-map.ts\";\nimport { EXPANDING_FAMILIES, SINGLE_FAMILIES } from \"./tailwind-plugin/from-token-map.ts\";\nimport { mergeToken } from \"./merge-token.ts\";\nimport type { MergedToken } from \"./merge-token.ts\";\nimport type { ExpandingSpacingFamily } from \"./utils/token-types.ts\";\nimport type { RequireAtLeastOne } from \"./utils/types.ts\";\n\n/**\n * A semantic grouping of tokens by their design intent.\n * Use `category` to narrow results to a specific part of the design system.\n */\nexport type TokenCategory =\n /** Page backgrounds, cards, banners, and other non-interactive containers. */\n | \"surface\"\n /** Base page background. Primary surfaces sit at the bottom of the visual stack. */\n | \"surface-primary\"\n /** Elevated containers such as sidebars, panels, or cards placed on a primary surface. */\n | \"surface-secondary\"\n /** Badges, nav bars, or chips that sit on top of primary or secondary surfaces. */\n | \"surface-tertiary\"\n /** Buttons, links, dropdowns, and other interactive controls. */\n | \"action\"\n /** The most prominent interactive element on a view. Use sparingly — one per view. Includes default, hover, and disabled states. */\n | \"action-primary\"\n /** Supporting interactive elements like secondary buttons or sidebar nav rows. Includes default, hover, and disabled states. */\n | \"action-secondary\"\n /** Interactive elements that appear as plain text until engaged, like cancel buttons. Includes default, hover, and disabled states. */\n | \"action-ghost\"\n /** Link-style interactive elements that use color to signal interactivity. Includes default, hover, and disabled states. */\n | \"action-tertiary\"\n /** Text fields, selects, checkboxes, radio buttons, and other form inputs. */\n | \"form\"\n /** Primary form control surfaces — input backgrounds, borders, and text. Includes default, disabled, and active states. */\n | \"form-primary\"\n /** Secondary form text — helper text and supplemental labels. Includes default, disabled, and active states. */\n | \"form-secondary\"\n /** Color tokens for charts */\n | \"data-viz\"\n /** All typography tokens. Use sub-categories below for narrower results. */\n | \"typography\"\n /** Display/heading type tokens — large expressive text. */\n | \"display\"\n /** Header tokens — section headings. */\n | \"header\"\n /** Body tokens — default reading text. */\n | \"body\"\n /** Control tokens — labels, buttons, and UI chrome. */\n | \"control\"\n /** Mono tokens — code and tabular data. */\n | \"mono\"\n /** Fixed-size tokens for elements like buttons or badges (width / height). */\n | \"dimension\"\n /** Border-radius tokens. */\n | \"radius\"\n /** Gap tokens for flex and grid layouts (inline and stack). */\n | \"gap\"\n /** Inset tokens for padding and margin. */\n | \"spacing\"\n /** Border-width tokens. */\n | \"stroke\";\n\n/**\n * The broad kind of a token.\n * - `\"color\"` — fills, text colors, border colors, and gradients.\n * - `\"spacing\"` — padding, margin, gap, size, border-radius, and border-width.\n * - `\"typography\"` — font-family, font-size, font-weight, line-height, letter-spacing.\n */\nexport type Scope = \"color\" | \"spacing\" | \"typography\";\n\n/**\n * The CSS property a token directly applies to.\n * Scoped to properties that are actually present in the shipped token set.\n */\nexport type CSSProperty =\n // Color\n | \"background\"\n | \"color\"\n | \"border-color\"\n | \"outline-color\"\n | \"--tw-gradient-from\"\n | \"--tw-gradient-to\"\n // Typography\n | \"font-family\"\n | \"font-size\"\n | \"font-weight\"\n | \"line-height\"\n | \"letter-spacing\"\n // Spacing — padding\n | \"padding\"\n | \"padding-top\"\n | \"padding-right\"\n | \"padding-bottom\"\n | \"padding-left\"\n // Spacing — margin\n | \"margin\"\n | \"margin-top\"\n | \"margin-right\"\n | \"margin-bottom\"\n | \"margin-left\"\n // Spacing — border-width\n | \"border-width\"\n | \"border-top-width\"\n | \"border-right-width\"\n | \"border-bottom-width\"\n | \"border-left-width\"\n // Spacing — gap\n | \"gap\"\n | \"column-gap\"\n | \"row-gap\"\n // Spacing — size\n | \"width\"\n | \"height\"\n | \"min-width\"\n | \"min-height\"\n // Spacing — radius\n | \"border-radius\";\n\n/**\n * Options for {@link getToken}. At least one field must be provided.\n * Multiple fields are ANDed — each one further narrows the result set.\n */\nexport type GetTokenOptions = RequireAtLeastOne<{\n /** Narrow by design intent (e.g. `\"action\"` returns button/link tokens). */\n category: TokenCategory;\n /** Narrow by broad token kind: color, spacing, or typography. */\n scope: Scope;\n /** Narrow by the CSS property the token sets. */\n property: CSSProperty;\n /**\n * Fuzzy-match on the token name using fuse.js.\n * e.g. `\"action primary bg\"` will match `\"action.default.primary.bg\"`.\n */\n name: string;\n}>;\n\n// Tailwind's props functions use camelCase for some properties (e.g. borderWidth).\n// Normalize to kebab-case so they match the CSSProperty type.\nfunction toCssName(prop: string): string {\n return prop.replace(/([A-Z])/g, (m) => `-${m.toLowerCase()}`);\n}\n\n// Maps each category to the key prefixes that identify it.\n// \"typography\" is handled separately via kind check since its keys span multiple prefixes.\nconst CATEGORY_PREFIXES: Partial<Record<TokenCategory, string[]>> = {\n surface: [\"surface.\"],\n \"surface-primary\": [\"surface.primary.\"],\n \"surface-secondary\": [\"surface.secondary.\"],\n \"surface-tertiary\": [\"surface.tertiary.\"],\n action: [\"action.\"],\n \"data-viz\": [\"data-viz.\"],\n \"action-primary\": [\n \"action.default.primary.\",\n \"action.hover.primary.\",\n \"action.disabled.primary.\",\n ],\n \"action-secondary\": [\n \"action.default.secondary.\",\n \"action.hover.secondary.\",\n \"action.disabled.secondary.\",\n ],\n \"action-ghost\": [\"action.default.ghost.\", \"action.hover.ghost.\", \"action.disabled.ghost.\"],\n \"action-tertiary\": [\n \"action.default.tertiary.\",\n \"action.hover.tertiary.\",\n \"action.disabled.tertiary.\",\n ],\n form: [\"form.\"],\n \"form-primary\": [\"form.default.primary.\", \"form.active.primary.\", \"form.disabled.primary.\"],\n \"form-secondary\": [\n \"form.default.secondary.\",\n \"form.active.secondary.\",\n \"form.disabled.secondary.\",\n ],\n dimension: [\"size.\"],\n radius: [\"radius.\"],\n gap: [\"gap.\"],\n spacing: [\"inset.\"],\n stroke: [\"stroke.\"],\n display: [\"display.\"],\n header: [\"header.\"],\n body: [\"body.\"],\n control: [\"control.\"],\n mono: [\"mono.\"],\n};\n\n/**\n * Search for design tokens matching the given options.\n * At least one option must be provided. Multiple options are ANDed together.\n */\nexport function getToken(options: GetTokenOptions): MergedToken[] {\n let keys = Object.keys(tokenMap) as (keyof typeof tokenMap)[];\n\n if (options.scope) {\n keys = keys.filter((k) => tokenMap[k].kind === options.scope);\n }\n\n if (options.category) {\n if (options.category === \"typography\") {\n keys = keys.filter((k) => tokenMap[k].kind === \"typography\");\n } else {\n const prefixes = CATEGORY_PREFIXES[options.category] ?? [];\n if (prefixes.length > 0) {\n keys = keys.filter((k) => prefixes.some((p) => (k as string).startsWith(p)));\n }\n }\n }\n\n if (options.property) {\n const prop = options.property;\n keys = keys.filter((k) => {\n const entry = tokenMap[k];\n if (entry.kind === \"color\" || entry.kind === \"typography\") {\n return entry.cssProperty === prop;\n }\n for (const util of entry.utilities) {\n const expanding = EXPANDING_FAMILIES[util.family as ExpandingSpacingFamily];\n const variants =\n expanding ?? (SINGLE_FAMILIES[util.family] ? [SINGLE_FAMILIES[util.family]] : []);\n for (const variant of variants) {\n if (Object.keys(variant.props(\"\")).map(toCssName).includes(prop)) {\n return true;\n }\n }\n }\n return false;\n });\n }\n\n if (options.name) {\n const normalize = (s: string) => s.replace(/\\./g, \" \");\n const items = keys.map((k) => ({ key: k as string, label: normalize(k as string) }));\n const fuse = new Fuse(items, { keys: [\"label\"], threshold: 0.4 });\n keys = fuse.search(normalize(options.name)).map((r) => r.item.key as keyof typeof tokenMap);\n }\n\n return keys.flatMap((k) => {\n const token = mergeToken(k);\n return token ? [token] : [];\n });\n}\n"],"mappings":";;AASA,MAAa,WAAW;CAMtB,2BAA2B;EACzB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,qCAAqC;EACnC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,2BAA2B;EACzB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,2BAA2B;EACzB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,4BAA4B;EAC1B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CAOD,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,mCAAmC;EACjC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,uCAAuC;EACrC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,2BAA2B;EACzB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,oCAAoC;EAClC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,kCAAkC;EAChC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,kCAAkC;EAChC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,gCAAgC;EAC9B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,gCAAgC;EAC9B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CAOD,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,qCAAqC;EACnC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,mCAAmC;EACjC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,mCAAmC;EACjC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,yCAAyC;EACvC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,mCAAmC;EACjC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,gCAAgC;EAC9B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,sCAAsC;EACpC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,oCAAoC;EAClC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,oCAAoC;EAClC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,kCAAkC;EAChC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,kCAAkC;EAChC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CAOD,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,wCAAwC;EACtC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,gCAAgC;EAC9B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,gCAAgC;EAC9B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,4BAA4B;EAC1B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CAQD,2BAA2B;EACzB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,qCAAqC;EACnC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,4BAA4B;EAC1B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,4BAA4B;EAC1B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,4BAA4B;EAC1B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,gCAAgC;EAC9B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,gCAAgC;EAC9B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CAOD,sBAAsB;EACpB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,wBAAwB;EACtB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,wBAAwB;EACtB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,wBAAwB;EACtB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,4BAA4B;EAC1B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;EACd;CACD,uBAAuB;EACrB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CAOD,eAAe;EACb,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CAED,qBAAqB;EACnB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,qBAAqB;EACnB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,qBAAqB;EACnB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,qBAAqB;EACnB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CAED,sBAAsB;EACpB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,sBAAsB;EACpB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,sBAAsB;EACpB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,sBAAsB;EACpB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,sBAAsB;EACpB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,sBAAsB;EACpB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,sBAAsB;EACpB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,sBAAsB;EACpB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,wBAAwB;EACtB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,wBAAwB;EACtB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,wBAAwB;EACtB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CACD,wBAAwB;EACtB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;EACH;CAOD,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,kCAAkC;EAChC,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,wBAAwB;EACtB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,uBAAuB;EACrB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,kCAAkC;EAChC,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,wBAAwB;EACtB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,uBAAuB;EACrB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,kCAAkC;EAChC,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,wBAAwB;EACtB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,uBAAuB;EACrB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CAOD,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,mBAAmB;EACjB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,qBAAqB;EACnB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,mBAAmB;EACjB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,qBAAqB;EACnB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CAOD,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,mBAAmB;EACjB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,qBAAqB;EACnB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,mBAAmB;EACjB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,qBAAqB;EACnB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,mBAAmB;EACjB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;EACH;CACD,qBAAqB;EACnB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CAOD,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,4BAA4B;EAC1B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,kBAAkB;EAChB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,oBAAoB;EAClB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,4BAA4B;EAC1B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,kBAAkB;EAChB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,oBAAoB;EAClB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,4BAA4B;EAC1B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,kBAAkB;EAChB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,oBAAoB;EAClB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,4BAA4B;EAC1B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;EACd;CACD,kBAAkB;EAChB,MAA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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
1
+ {"version":3,"file":"index.mjs","names":["neutralDark","neutralInverted","spacing","type_"],"sources":["../src/token-map.ts","../src/tailwind-plugin/from-token-map.ts","../src/tokens-raw-import/color/danger.tokens.json","../src/tokens-raw-import/color/info.tokens.json","../src/tokens-raw-import/color/neutral.tokens.json","../src/tokens-raw-import/color/neutral-dark.tokens.json","../src/tokens-raw-import/color/neutral-inverted.tokens.json","../src/tokens-raw-import/color/success.tokens.json","../src/tokens-raw-import/color/warning.tokens.json","../src/tokens-raw-import/spacing.tokens.json","../src/tokens-raw-import/type.tokens.json","../src/tokens-raw-import/index.ts","../src/merge-token.ts","../src/get-token.ts"],"sourcesContent":["import type { SlabTokenMap } from \"./utils/token-types.ts\";\n\n// ---------------------------------------------------------------------------\n// Token mapping\n// This file is semi-generated using `generate-token-types` to add additional\n// information about tokens which isn't possible in Figma. Still looking for\n// a better tool to manage this. This is used by MCP servers to get token info.\n// ---------------------------------------------------------------------------\n\nexport const tokenMap = {\n // ---------------------------------------------------------------------------\n // Action — ghost\n // Elements that appear as plain text until interacted with, like cancel buttons.\n // ---------------------------------------------------------------------------\n\n \"action.default.ghost.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-ghost\",\n cssProperty: \"background\",\n description:\n \"Ghost action background in its resting state. Typically transparent; use for controls that appear as plain text until interacted with, like cancel buttons or icon buttons.\",\n },\n \"action.default.ghost.focus-border\": {\n kind: \"color\",\n tailwindClass: \"ring-action-ghost\",\n cssProperty: \"outline-color\",\n description:\n \"Focus ring color for ghost actions. Apply when the element receives keyboard focus.\",\n },\n \"action.default.ghost.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-ghost\",\n cssProperty: \"color\",\n description: \"Icon color within ghost actions in their resting state.\",\n },\n \"action.default.ghost.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-ghost\",\n cssProperty: \"color\",\n description: \"Label color for ghost actions in their resting state.\",\n },\n \"action.hover.ghost.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-hover-ghost\",\n cssProperty: \"background\",\n description: \"Ghost action background when the pointer is hovering. Apply on :hover.\",\n },\n \"action.hover.ghost.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-hover-ghost\",\n cssProperty: \"color\",\n description: \"Icon color within ghost actions on hover.\",\n },\n \"action.hover.ghost.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-hover-ghost\",\n cssProperty: \"color\",\n description: \"Label color for ghost actions on hover.\",\n },\n \"action.disabled.ghost.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-disabled-ghost\",\n cssProperty: \"background\",\n description:\n \"Ghost action background in the disabled state. Use alongside pointer-events-none and aria-disabled.\",\n },\n \"action.disabled.ghost.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-disabled-ghost\",\n cssProperty: \"color\",\n description: \"Icon color within disabled ghost actions.\",\n },\n \"action.disabled.ghost.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-disabled-ghost\",\n cssProperty: \"color\",\n description: \"Label color for disabled ghost actions.\",\n },\n\n // ---------------------------------------------------------------------------\n // Action — primary\n // Highest-emphasis buttons and calls to action. Use once per view.\n // ---------------------------------------------------------------------------\n\n \"action.default.primary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-primary\",\n cssProperty: \"background\",\n description: \"Solid fill for primary action buttons in their resting state.\",\n },\n \"action.default.primary.bg-start\": {\n kind: \"color\",\n tailwindClass: \"from-action-primary\",\n cssProperty: \"--tw-gradient-from\",\n description:\n \"Gradient start color for primary action buttons. Use with from-* on a gradient background. Gradient direction is always top -> bottom\",\n },\n \"action.default.primary.bg-end\": {\n kind: \"color\",\n tailwindClass: \"to-action-primary\",\n cssProperty: \"--tw-gradient-to\",\n description:\n \"Gradient end color for primary action buttons. Use with to-* on a gradient background. Gradient direction is always top -> bottom\",\n },\n \"action.default.primary.border\": {\n kind: \"color\",\n tailwindClass: \"border-action-primary\",\n cssProperty: \"border-color\",\n description: \"Border color for primary action buttons in their resting state.\",\n },\n \"action.default.primary.focus-border\": {\n kind: \"color\",\n tailwindClass: \"ring-action-primary\",\n cssProperty: \"outline-color\",\n description:\n \"Focus ring color for primary action buttons. Apply when the element receives keyboard focus.\",\n },\n \"action.default.primary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-primary\",\n cssProperty: \"color\",\n description: \"Icon color within primary action buttons in their resting state.\",\n },\n \"action.default.primary.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-primary\",\n cssProperty: \"color\",\n description: \"Label color for primary action buttons in their resting state.\",\n },\n \"action.hover.primary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-hover-primary\",\n cssProperty: \"background\",\n description: \"Primary button background on hover. Apply on :hover.\",\n },\n \"action.hover.primary.bg-start\": {\n kind: \"color\",\n tailwindClass: \"from-action-hover-primary\",\n cssProperty: \"--tw-gradient-from\",\n description:\n \"Gradient start color for primary buttons on hover. Gradient direction is always top -> bottom.\",\n },\n \"action.hover.primary.bg-end\": {\n kind: \"color\",\n tailwindClass: \"to-action-hover-primary\",\n cssProperty: \"--tw-gradient-to\",\n description:\n \"Gradient end color for primary buttons on hover. Gradient direction is always top -> bottom.\",\n },\n \"action.hover.primary.border\": {\n kind: \"color\",\n tailwindClass: \"border-action-hover-primary\",\n cssProperty: \"border-color\",\n description: \"Border color for primary action buttons on hover.\",\n },\n \"action.hover.primary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-hover-primary\",\n cssProperty: \"color\",\n description: \"Icon color within primary action buttons on hover.\",\n },\n \"action.hover.primary.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-hover-primary\",\n cssProperty: \"color\",\n description: \"Label color for primary action buttons on hover.\",\n },\n \"action.disabled.primary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-disabled-primary\",\n cssProperty: \"background\",\n description: \"Primary button background in the disabled state.\",\n },\n \"action.disabled.primary.bg-start\": {\n kind: \"color\",\n tailwindClass: \"from-action-disabled-primary\",\n cssProperty: \"--tw-gradient-from\",\n description:\n \"Gradient start color for disabled primary buttons. Gradient direction is always top -> bottom.\",\n },\n \"action.disabled.primary.bg-end\": {\n kind: \"color\",\n tailwindClass: \"to-action-disabled-primary\",\n cssProperty: \"--tw-gradient-to\",\n description:\n \"Gradient end color for disabled primary buttons. Gradient direction is always top -> bottom.\",\n },\n \"action.disabled.primary.border\": {\n kind: \"color\",\n tailwindClass: \"border-action-disabled-primary\",\n cssProperty: \"border-color\",\n description: \"Border color for disabled primary action buttons.\",\n },\n \"action.disabled.primary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-disabled-primary\",\n cssProperty: \"color\",\n description: \"Icon color within disabled primary action buttons.\",\n },\n \"action.disabled.primary.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-disabled-primary\",\n cssProperty: \"color\",\n description: \"Label color for disabled primary action buttons.\",\n },\n\n // ---------------------------------------------------------------------------\n // Action — secondary\n // Supporting actions like sidebar nav rows or secondary buttons alongside a primary.\n // ---------------------------------------------------------------------------\n\n \"action.default.secondary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-secondary\",\n cssProperty: \"background\",\n description: \"Solid fill for secondary action buttons in their resting state.\",\n },\n \"action.default.secondary.bg-start\": {\n kind: \"color\",\n tailwindClass: \"from-action-secondary\",\n cssProperty: \"--tw-gradient-from\",\n description:\n \"Gradient start color for secondary action buttons. Gradient direction is always top -> bottom.\",\n },\n \"action.default.secondary.bg-end\": {\n kind: \"color\",\n tailwindClass: \"to-action-secondary\",\n cssProperty: \"--tw-gradient-to\",\n description:\n \"Gradient end color for secondary action buttons. Gradient direction is always top -> bottom.\",\n },\n \"action.default.secondary.border\": {\n kind: \"color\",\n tailwindClass: \"border-action-secondary\",\n cssProperty: \"border-color\",\n description: \"Border color for secondary action buttons in their resting state.\",\n },\n \"action.default.secondary.focus-border\": {\n kind: \"color\",\n tailwindClass: \"ring-action-secondary\",\n cssProperty: \"outline-color\",\n description: \"Focus ring color for secondary action buttons.\",\n },\n \"action.default.secondary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-secondary\",\n cssProperty: \"color\",\n description: \"Icon color within secondary action buttons in their resting state.\",\n },\n \"action.default.secondary.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-secondary\",\n cssProperty: \"color\",\n description: \"Label color for secondary action buttons in their resting state.\",\n },\n \"action.hover.secondary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-hover-secondary\",\n cssProperty: \"background\",\n description: \"Secondary button background on hover.\",\n },\n \"action.hover.secondary.bg-start\": {\n kind: \"color\",\n tailwindClass: \"from-action-hover-secondary\",\n cssProperty: \"--tw-gradient-from\",\n description:\n \"Gradient start color for secondary buttons on hover. Gradient direction is always top -> bottom.\",\n },\n \"action.hover.secondary.bg-end\": {\n kind: \"color\",\n tailwindClass: \"to-action-hover-secondary\",\n cssProperty: \"--tw-gradient-to\",\n description:\n \"Gradient end color for secondary buttons on hover. Gradient direction is always top -> bottom.\",\n },\n \"action.hover.secondary.border\": {\n kind: \"color\",\n tailwindClass: \"border-action-hover-secondary\",\n cssProperty: \"border-color\",\n description: \"Border color for secondary action buttons on hover.\",\n },\n \"action.hover.secondary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-hover-secondary\",\n cssProperty: \"color\",\n description: \"Icon color within secondary action buttons on hover.\",\n },\n \"action.hover.secondary.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-hover-secondary\",\n cssProperty: \"color\",\n description: \"Label color for secondary action buttons on hover.\",\n },\n \"action.disabled.secondary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-disabled-secondary\",\n cssProperty: \"background\",\n description: \"Secondary button background in the disabled state.\",\n },\n \"action.disabled.secondary.bg-start\": {\n kind: \"color\",\n tailwindClass: \"from-action-disabled-secondary\",\n cssProperty: \"--tw-gradient-from\",\n description:\n \"Gradient start color for disabled secondary buttons. Gradient direction is always top -> bottom.\",\n },\n \"action.disabled.secondary.bg-end\": {\n kind: \"color\",\n tailwindClass: \"to-action-disabled-secondary\",\n cssProperty: \"--tw-gradient-to\",\n description:\n \"Gradient end color for disabled secondary buttons. Gradient direction is always top -> bottom.\",\n },\n \"action.disabled.secondary.border\": {\n kind: \"color\",\n tailwindClass: \"border-action-disabled-secondary\",\n cssProperty: \"border-color\",\n description: \"Border color for disabled secondary action buttons.\",\n },\n \"action.disabled.secondary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-disabled-secondary\",\n cssProperty: \"color\",\n description: \"Icon color within disabled secondary action buttons.\",\n },\n \"action.disabled.secondary.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-disabled-secondary\",\n cssProperty: \"color\",\n description: \"Label color for disabled secondary action buttons.\",\n },\n\n // ---------------------------------------------------------------------------\n // Action — tertiary\n // Link-style actions that use color to signal interactivity.\n // ---------------------------------------------------------------------------\n\n \"action.default.tertiary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-tertiary\",\n cssProperty: \"background\",\n description:\n \"Tertiary action background in its resting state. Typically transparent; use for link-style elements that rely on color to signal interactivity.\",\n },\n \"action.default.tertiary.focus-border\": {\n kind: \"color\",\n tailwindClass: \"ring-action-tertiary\",\n cssProperty: \"outline-color\",\n description: \"Focus ring color for tertiary actions.\",\n },\n \"action.default.tertiary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-tertiary\",\n cssProperty: \"color\",\n description: \"Icon color within tertiary actions in their resting state.\",\n },\n \"action.default.tertiary.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-tertiary\",\n cssProperty: \"color\",\n description: \"Label color for tertiary actions in their resting state.\",\n },\n \"action.hover.tertiary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-hover-tertiary\",\n cssProperty: \"background\",\n description: \"Tertiary action background on hover.\",\n },\n \"action.hover.tertiary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-hover-tertiary\",\n cssProperty: \"color\",\n description: \"Icon color within tertiary actions on hover.\",\n },\n \"action.hover.tertiary.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-hover-tertiary\",\n cssProperty: \"color\",\n description: \"Label color for tertiary actions on hover.\",\n },\n \"action.disabled.tertiary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-action-disabled-tertiary\",\n cssProperty: \"background\",\n description: \"Tertiary action background in the disabled state.\",\n },\n \"action.disabled.tertiary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-action-disabled-tertiary\",\n cssProperty: \"color\",\n description: \"Icon color within disabled tertiary actions.\",\n },\n \"action.disabled.tertiary.text\": {\n kind: \"color\",\n tailwindClass: \"text-action-disabled-tertiary\",\n cssProperty: \"color\",\n description: \"Label color for disabled tertiary actions.\",\n },\n\n // ---------------------------------------------------------------------------\n // Form\n // Colors for form controls: inputs, selects, checkboxes, radio buttons, etc.\n // Three states: default, disabled, and active (selected — for radio/checkbox emphasis).\n // ---------------------------------------------------------------------------\n\n \"form.default.primary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-form-primary\",\n cssProperty: \"background\",\n description: \"Form control background in its resting/unfocused state.\",\n },\n \"form.default.primary.border\": {\n kind: \"color\",\n tailwindClass: \"border-form-primary\",\n cssProperty: \"border-color\",\n description: \"Form control border color in its resting state.\",\n },\n \"form.default.primary.focus-border\": {\n kind: \"color\",\n tailwindClass: \"ring-form-primary\",\n cssProperty: \"outline-color\",\n description:\n \"Focus ring color for form controls. Apply when the input receives keyboard focus.\",\n },\n \"form.default.primary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-form-primary\",\n cssProperty: \"color\",\n description: \"Icon color within form controls (e.g. a leading search icon or trailing caret).\",\n },\n \"form.default.primary.text\": {\n kind: \"color\",\n tailwindClass: \"text-form-primary\",\n cssProperty: \"color\",\n description:\n \"Primary text color within form controls — use for entered/selected values and input labels.\",\n },\n \"form.default.secondary.text\": {\n kind: \"color\",\n tailwindClass: \"text-form-secondary\",\n cssProperty: \"color\",\n description:\n \"Secondary text color within form controls — use for placeholder text or form descriptions.\",\n },\n \"form.active.primary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-form-active-primary\",\n cssProperty: \"background\",\n description:\n \"Form control background in the active/selected state — use for selected radio buttons, checkboxes, or toggle controls.\",\n },\n \"form.active.primary.border\": {\n kind: \"color\",\n tailwindClass: \"border-form-active-primary\",\n cssProperty: \"border-color\",\n description:\n \"Form control border color in the active/selected state — use for selected radio buttons or checkboxes.\",\n },\n \"form.active.primary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-form-active-primary\",\n cssProperty: \"color\",\n description:\n \"Icon color within form controls in the active/selected state — use for check marks or indicator icons in selected controls.\",\n },\n \"form.active.primary.text\": {\n kind: \"color\",\n tailwindClass: \"text-form-active-primary\",\n cssProperty: \"color\",\n description:\n \"Primary text color within form controls in the active/selected state — use for selected option labels.\",\n },\n \"form.active.secondary.text\": {\n kind: \"color\",\n tailwindClass: \"text-form-active-secondary\",\n cssProperty: \"color\",\n description:\n \"Secondary text color within form controls in the active/selected state — use for helper or hint text alongside a selected control.\",\n },\n \"form.disabled.primary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-form-disabled-primary\",\n cssProperty: \"background\",\n description: \"Form control background in the disabled state.\",\n },\n \"form.disabled.primary.border\": {\n kind: \"color\",\n tailwindClass: \"border-form-disabled-primary\",\n cssProperty: \"border-color\",\n description: \"Form control border color in the disabled state.\",\n },\n \"form.disabled.primary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-form-disabled-primary\",\n cssProperty: \"color\",\n description: \"Icon color within disabled form controls.\",\n },\n \"form.disabled.primary.text\": {\n kind: \"color\",\n tailwindClass: \"text-form-disabled-primary\",\n cssProperty: \"color\",\n description: \"Primary text color within disabled form controls.\",\n },\n \"form.disabled.secondary.text\": {\n kind: \"color\",\n tailwindClass: \"text-form-disabled-secondary\",\n cssProperty: \"color\",\n description: \"Secondary text color within disabled form controls.\",\n },\n\n // ---------------------------------------------------------------------------\n // Surface\n // Background, border, text, and icon colors for container elements.\n // ---------------------------------------------------------------------------\n\n \"surface.primary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-surface-primary\",\n cssProperty: \"background\",\n description:\n \"Primary surface background — the base page or app background. Cards and panels sit on top of this using secondary surface tokens.\",\n },\n \"surface.primary.border\": {\n kind: \"color\",\n tailwindClass: \"border-surface-primary\",\n cssProperty: \"border-color\",\n description: \"Border color for primary surface containers.\",\n },\n \"surface.primary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-surface-primary\",\n cssProperty: \"color\",\n description: \"Icon color on primary surfaces.\",\n },\n \"surface.primary.text\": {\n kind: \"color\",\n tailwindClass: \"text-surface-primary\",\n cssProperty: \"color\",\n description: \"Body text color on primary surfaces.\",\n },\n \"surface.secondary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-surface-secondary\",\n cssProperty: \"background\",\n description:\n \"Secondary surface background — use for elevated containers such as sidebars, panels, or cards on a primary surface.\",\n },\n \"surface.secondary.border\": {\n kind: \"color\",\n tailwindClass: \"border-surface-secondary\",\n cssProperty: \"border-color\",\n description: \"Border color for secondary surface containers.\",\n },\n \"surface.secondary.icon\": {\n kind: \"color\",\n tailwindClass: \"icon-surface-secondary\",\n cssProperty: \"color\",\n description: \"Icon color on secondary surfaces.\",\n },\n \"surface.secondary.text\": {\n kind: \"color\",\n tailwindClass: \"text-surface-secondary\",\n cssProperty: \"color\",\n description: \"Body text color on secondary surfaces.\",\n },\n \"surface.tertiary.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-surface-tertiary\",\n cssProperty: \"background\",\n description:\n \"Tertiary surface background — sits on top of either primary or secondary surfaces. Use for badges, nav bars, table row stripes, or inset wells.\",\n },\n\n // ---------------------------------------------------------------------------\n // Data Visualization\n // Colors for bar, line, pie, and other charts\n // ---------------------------------------------------------------------------\n\n \"data-viz.bg\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz\",\n cssProperty: \"background\",\n description:\n \"Background for data vizualization plot or chart area. Do not use for chart data itself.\",\n },\n\n \"data-viz.danger.1\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-danger-1\",\n cssProperty: \"background\",\n description:\n \"Background for a data visualization item indicating a bad or negative status. Use this as the default danger color. When multiple series or groups within the same category share a negative status, use incrementing numbers (e.g., data-viz.danger.2, data-viz.danger.3) to visually distinguish them.\",\n },\n \"data-viz.danger.2\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-danger-2\",\n cssProperty: \"background\",\n description:\n \"Second background color for a data visualization item indicating a bad or negative status. Use when two or more series or groups within the same category share a negative status and need to be visually distinguished from data-viz.danger.1.\",\n },\n \"data-viz.danger.3\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-danger-3\",\n cssProperty: \"background\",\n description:\n \"Third background color for a data visualization item indicating a bad or negative status. Use when three or more series or groups within the same category share a negative status and need to be visually distinguished from data-viz.danger.1 and data-viz.danger.2.\",\n },\n \"data-viz.danger.4\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-danger-4\",\n cssProperty: \"background\",\n description:\n \"Fourth background color for a data visualization item indicating a bad or negative status. Use when four series or groups within the same category share a negative status and need to be visually distinguished from the preceding danger colors.\",\n },\n\n \"data-viz.success.1\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-success-1\",\n cssProperty: \"background\",\n description:\n \"Background for a data visualization item indicating a good or positive status. Use this as the default success color. When multiple series or groups within the same category share a positive status, use incrementing numbers (e.g., data-viz.success.2, data-viz.success.3) to visually distinguish them.\",\n },\n \"data-viz.success.2\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-success-2\",\n cssProperty: \"background\",\n description:\n \"Second background color for a data visualization item indicating a good or positive status. Use when two or more series or groups within the same category share a positive status and need to be visually distinguished from data-viz.success.1.\",\n },\n \"data-viz.success.3\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-success-3\",\n cssProperty: \"background\",\n description:\n \"Third background color for a data visualization item indicating a good or positive status. Use when three or more series or groups within the same category share a positive status and need to be visually distinguished from data-viz.success.1 and data-viz.success.2.\",\n },\n \"data-viz.success.4\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-success-4\",\n cssProperty: \"background\",\n description:\n \"Fourth background color for a data visualization item indicating a good or positive status. Use when four series or groups within the same category share a positive status and need to be visually distinguished from the preceding success colors.\",\n },\n \"data-viz.primary.1\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-primary-1\",\n cssProperty: \"background\",\n description:\n \"Default background for chart elements with no positive or negative status. Use incrementing numbers for multiple series or groups within the same category.\",\n },\n \"data-viz.primary.2\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-primary-2\",\n cssProperty: \"background\",\n description:\n \"Second default background for distinguishing multiple neutral series or groups within the same category.\",\n },\n \"data-viz.primary.3\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-primary-3\",\n cssProperty: \"background\",\n description:\n \"Third default background for distinguishing multiple neutral series or groups within the same category.\",\n },\n \"data-viz.primary.4\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-primary-4\",\n cssProperty: \"background\",\n description:\n \"Fourth default background for distinguishing multiple neutral series or groups within the same category.\",\n },\n \"data-viz.secondary.1\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-secondary-1\",\n cssProperty: \"background\",\n description:\n \"Secondary background for chart elements. Use after exhausting the primary palette or to distinguish a separate data grouping. Use incrementing numbers for multiple secondary series.\",\n },\n \"data-viz.secondary.2\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-secondary-2\",\n cssProperty: \"background\",\n description:\n \"Second secondary background for distinguishing multiple secondary series or groups.\",\n },\n \"data-viz.secondary.3\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-secondary-3\",\n cssProperty: \"background\",\n description:\n \"Third secondary background for distinguishing multiple secondary series or groups.\",\n },\n \"data-viz.secondary.4\": {\n kind: \"color\",\n tailwindClass: \"bg-data-viz-secondary-4\",\n cssProperty: \"background\",\n description:\n \"Fourth secondary background for distinguishing multiple secondary series or groups.\",\n },\n\n // ---------------------------------------------------------------------------\n // Typography — body\n // Paragraph and inline text. Three sizes (sm/md/lg), two weights (default/strong).\n // ---------------------------------------------------------------------------\n\n \"body.lg.default.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-body-lg\",\n cssProperty: \"font-family\",\n prose: \"body-lg\",\n description: \"Font family for large body text (default weight).\",\n },\n \"body.lg.default.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-body-lg\",\n cssProperty: \"letter-spacing\",\n prose: \"body-lg\",\n description: \"Letter spacing for large body text (default weight).\",\n },\n \"body.lg.default.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-body-lg\",\n cssProperty: \"line-height\",\n prose: \"body-lg\",\n description: \"Line height for large body text (default weight).\",\n },\n \"body.lg.default.size\": {\n kind: \"typography\",\n tailwindClass: \"text-body-lg\",\n cssProperty: \"font-size\",\n prose: \"body-lg\",\n description: \"Font size for large body text. Use for long-form reading content.\",\n },\n \"body.lg.default.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-body-lg\",\n cssProperty: \"font-weight\",\n prose: \"body-lg\",\n description: \"Font weight for large body text (default/regular weight).\",\n },\n \"body.lg.strong.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-body-lg-strong\",\n cssProperty: \"font-family\",\n prose: \"body-lg-strong\",\n description:\n \"Font family for large body text (strong/bold weight). Only use for emphasis, never style\",\n },\n \"body.lg.strong.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-body-lg-strong\",\n cssProperty: \"letter-spacing\",\n prose: \"body-lg-strong\",\n description:\n \"Letter spacing for large body text (strong weight). Only use for emphasis, never style\",\n },\n \"body.lg.strong.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-body-lg-strong\",\n cssProperty: \"line-height\",\n prose: \"body-lg-strong\",\n description:\n \"Line height for large body text (strong weight). Only use for emphasis, never style\",\n },\n \"body.lg.strong.size\": {\n kind: \"typography\",\n tailwindClass: \"text-body-lg-strong\",\n cssProperty: \"font-size\",\n prose: \"body-lg-strong\",\n description:\n \"Font size for large body text (strong weight). Only use for emphasis, never style.\",\n },\n \"body.lg.strong.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-body-lg-strong\",\n cssProperty: \"font-weight\",\n prose: \"body-lg-strong\",\n description:\n \"Font weight for large body text (strong/bold weight). Only use for emphasis, never style\",\n },\n \"body.md.default.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-body-md\",\n cssProperty: \"font-family\",\n prose: \"body-md\",\n description: \"Font family for medium body text (default weight).\",\n },\n \"body.md.default.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-body-md\",\n cssProperty: \"letter-spacing\",\n prose: \"body-md\",\n description: \"Letter spacing for medium body text (default weight).\",\n },\n \"body.md.default.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-body-md\",\n cssProperty: \"line-height\",\n prose: \"body-md\",\n description: \"Line height for medium body text (default weight).\",\n },\n \"body.md.default.size\": {\n kind: \"typography\",\n tailwindClass: \"text-body-md\",\n cssProperty: \"font-size\",\n prose: \"body-md\",\n description: \"Font size for medium body text. The default size for most UI copy.\",\n },\n \"body.md.default.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-body-md\",\n cssProperty: \"font-weight\",\n prose: \"body-md\",\n description: \"Font weight for medium body text (default/regular weight).\",\n },\n \"body.md.strong.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-body-md-strong\",\n cssProperty: \"font-family\",\n prose: \"body-md-strong\",\n description:\n \"Font family for medium body text (strong weight). Only use for emphasis, never style\",\n },\n \"body.md.strong.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-body-md-strong\",\n cssProperty: \"letter-spacing\",\n prose: \"body-md-strong\",\n description:\n \"Letter spacing for medium body text (strong weight). Only use for emphasis, never style\",\n },\n \"body.md.strong.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-body-md-strong\",\n cssProperty: \"line-height\",\n prose: \"body-md-strong\",\n description:\n \"Line height for medium body text (strong weight). Only use for emphasis, never style\",\n },\n \"body.md.strong.size\": {\n kind: \"typography\",\n tailwindClass: \"text-body-md-strong\",\n cssProperty: \"font-size\",\n prose: \"body-md-strong\",\n description:\n \"Font size for medium body text (strong weight). Only use for emphasis, never style\",\n },\n \"body.md.strong.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-body-md-strong\",\n cssProperty: \"font-weight\",\n prose: \"body-md-strong\",\n description:\n \"Font weight for medium body text (strong/bold weight). Only use for emphasis, never style\",\n },\n \"body.sm.default.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-body-sm\",\n cssProperty: \"font-family\",\n prose: \"body-sm\",\n description: \"Font family for small body text (default weight).\",\n },\n \"body.sm.default.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-body-sm\",\n cssProperty: \"letter-spacing\",\n prose: \"body-sm\",\n description: \"Letter spacing for small body text (default weight).\",\n },\n \"body.sm.default.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-body-sm\",\n cssProperty: \"line-height\",\n prose: \"body-sm\",\n description: \"Line height for small body text (default weight).\",\n },\n \"body.sm.default.size\": {\n kind: \"typography\",\n tailwindClass: \"text-body-sm\",\n cssProperty: \"font-size\",\n prose: \"body-sm\",\n description:\n \"Font size for small body text. Use for supplementary copy, captions, or metadata.\",\n },\n \"body.sm.default.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-body-sm\",\n cssProperty: \"font-weight\",\n prose: \"body-sm\",\n description: \"Font weight for small body text (default/regular weight).\",\n },\n \"body.sm.strong.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-body-sm-strong\",\n cssProperty: \"font-family\",\n prose: \"body-sm-strong\",\n description:\n \"Font family for small body text (strong weight). Only use for emphasis, never style\",\n },\n \"body.sm.strong.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-body-sm-strong\",\n cssProperty: \"letter-spacing\",\n prose: \"body-sm-strong\",\n description:\n \"Letter spacing for small body text (strong weight). Only use for emphasis, never style\",\n },\n \"body.sm.strong.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-body-sm-strong\",\n cssProperty: \"line-height\",\n prose: \"body-sm-strong\",\n description:\n \"Line height for small body text (strong weight). Only use for emphasis, never style\",\n },\n \"body.sm.strong.size\": {\n kind: \"typography\",\n tailwindClass: \"text-body-sm-strong\",\n cssProperty: \"font-size\",\n prose: \"body-sm-strong\",\n description: \"Font size for small body text (strong weight). Use for emphasis never style.\",\n },\n \"body.sm.strong.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-body-sm-strong\",\n cssProperty: \"font-weight\",\n prose: \"body-sm-strong\",\n description:\n \"Font weight for small body text (strong/bold weight). Only use for emphasis, never style\",\n },\n\n // ---------------------------------------------------------------------------\n // Typography — control\n // Text inside interactive controls: buttons, tabs, chips, menu items.\n // ---------------------------------------------------------------------------\n\n \"control.md.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-control-md\",\n cssProperty: \"font-family\",\n prose: \"control-md\",\n description:\n \"Font family for medium-sized control labels. Controls are buttons, badges, menu item content, etc.\",\n },\n \"control.md.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-control-md\",\n cssProperty: \"letter-spacing\",\n prose: \"control-md\",\n description:\n \"Letter spacing for medium control labels. Controls are buttons, badges, menu item content, etc.\",\n },\n \"control.md.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-control-md\",\n cssProperty: \"line-height\",\n prose: \"control-md\",\n description:\n \"Line height for medium control labels. Controls are buttons, badges, menu item content, etc.\",\n },\n \"control.md.size\": {\n kind: \"typography\",\n tailwindClass: \"text-control-md\",\n cssProperty: \"font-size\",\n prose: \"control-md\",\n description:\n \"Font size for medium controls — buttons, tabs, chips, and similar interactive elements. Controls are buttons, badges, menu item content, etc.\",\n },\n \"control.md.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-control-md\",\n cssProperty: \"font-weight\",\n prose: \"control-md\",\n description:\n \"Font weight for medium control labels. Controls are buttons, badges, menu item content, etc.\",\n },\n \"control.sm.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-control-sm\",\n cssProperty: \"font-family\",\n prose: \"control-sm\",\n description:\n \"Font family for small-sized control labels. Controls are buttons, badges, menu item content, etc.\",\n },\n \"control.sm.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-control-sm\",\n cssProperty: \"letter-spacing\",\n prose: \"control-sm\",\n description:\n \"Letter spacing for small control labels. Controls are buttons, badges, menu item content, etc.\",\n },\n \"control.sm.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-control-sm\",\n cssProperty: \"line-height\",\n prose: \"control-sm\",\n description:\n \"Line height for small control labels. Controls are buttons, badges, menu item content, etc.\",\n },\n \"control.sm.size\": {\n kind: \"typography\",\n tailwindClass: \"text-control-sm\",\n cssProperty: \"font-size\",\n prose: \"control-sm\",\n description:\n \"Font size for small controls — compact buttons, tags, or dense UI elements. Controls are buttons, badges, menu item content, etc.\",\n },\n \"control.sm.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-control-sm\",\n cssProperty: \"font-weight\",\n prose: \"control-sm\",\n description:\n \"Font weight for small control labels. Controls are buttons, badges, menu item content, etc.\",\n },\n\n // ---------------------------------------------------------------------------\n // Typography — display\n // Large marketing or hero text. Use sparingly at the top of a page or section.\n // ---------------------------------------------------------------------------\n\n \"display.lg.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-display-lg\",\n cssProperty: \"font-family\",\n prose: \"display-lg\",\n description: \"Font family for large display headings.\",\n },\n \"display.lg.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-display-lg\",\n cssProperty: \"letter-spacing\",\n prose: \"display-lg\",\n description: \"Letter spacing for large display headings.\",\n },\n \"display.lg.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-display-lg\",\n cssProperty: \"line-height\",\n prose: \"display-lg\",\n description: \"Line height for large display headings.\",\n },\n \"display.lg.size\": {\n kind: \"typography\",\n tailwindClass: \"text-display-lg\",\n cssProperty: \"font-size\",\n prose: \"display-lg\",\n description:\n \"Font size for large display text — hero headlines or prominent marketing statements.\",\n },\n \"display.lg.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-display-lg\",\n cssProperty: \"font-weight\",\n prose: \"display-lg\",\n description: \"Font weight for large display headings.\",\n },\n \"display.md.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-display-md\",\n cssProperty: \"font-family\",\n prose: \"display-md\",\n description: \"Font family for medium display headings.\",\n },\n \"display.md.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-display-md\",\n cssProperty: \"letter-spacing\",\n prose: \"display-md\",\n description: \"Letter spacing for medium display headings.\",\n },\n \"display.md.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-display-md\",\n cssProperty: \"line-height\",\n prose: \"display-md\",\n description: \"Line height for medium display headings.\",\n },\n \"display.md.size\": {\n kind: \"typography\",\n tailwindClass: \"text-display-md\",\n cssProperty: \"font-size\",\n prose: \"display-md\",\n description: \"Font size for medium display text — section intros or feature callouts.\",\n },\n \"display.md.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-display-md\",\n cssProperty: \"font-weight\",\n prose: \"display-md\",\n description: \"Font weight for medium display headings.\",\n },\n \"display.sm.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-display-sm\",\n cssProperty: \"font-family\",\n prose: \"display-sm\",\n description: \"Font family for small display headings.\",\n },\n \"display.sm.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-display-sm\",\n cssProperty: \"letter-spacing\",\n prose: \"display-sm\",\n description: \"Letter spacing for small display headings.\",\n },\n \"display.sm.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-display-sm\",\n cssProperty: \"line-height\",\n prose: \"display-sm\",\n description: \"Line height for small display headings.\",\n },\n \"display.sm.size\": {\n kind: \"typography\",\n tailwindClass: \"text-display-sm\",\n cssProperty: \"font-size\",\n prose: \"display-sm\",\n description:\n \"Font size for small display text — used at the boundary between display and header styles.\",\n },\n \"display.sm.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-display-sm\",\n cssProperty: \"font-weight\",\n prose: \"display-sm\",\n description: \"Font weight for small display headings.\",\n },\n\n // ---------------------------------------------------------------------------\n // Typography — header\n // Section and content headings (h1–h4 equivalents). Four sizes: sm/md/lg/xl.\n // ---------------------------------------------------------------------------\n\n \"header.xl.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-header-xl\",\n cssProperty: \"font-family\",\n prose: \"header-xl\",\n description: \"Font family for extra-large headers.\",\n },\n \"header.xl.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-header-xl\",\n cssProperty: \"letter-spacing\",\n prose: \"header-xl\",\n description: \"Letter spacing for extra-large headers.\",\n },\n \"header.xl.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-header-xl\",\n cssProperty: \"line-height\",\n prose: \"header-xl\",\n description: \"Line height for extra-large headers.\",\n },\n \"header.xl.size\": {\n kind: \"typography\",\n tailwindClass: \"text-header-xl\",\n cssProperty: \"font-size\",\n prose: \"header-xl\",\n description: \"Font size for extra-large headers — top-level page titles (h1 equivalent).\",\n },\n \"header.xl.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-header-xl\",\n cssProperty: \"font-weight\",\n prose: \"header-xl\",\n description: \"Font weight for extra-large headers.\",\n },\n \"header.lg.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-header-lg\",\n cssProperty: \"font-family\",\n prose: \"header-lg\",\n description: \"Font family for large headers.\",\n },\n \"header.lg.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-header-lg\",\n cssProperty: \"letter-spacing\",\n prose: \"header-lg\",\n description: \"Letter spacing for large headers.\",\n },\n \"header.lg.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-header-lg\",\n cssProperty: \"line-height\",\n prose: \"header-lg\",\n description: \"Line height for large headers.\",\n },\n \"header.lg.size\": {\n kind: \"typography\",\n tailwindClass: \"text-header-lg\",\n cssProperty: \"font-size\",\n prose: \"header-lg\",\n description: \"Font size for large headers — primary section titles (h2 equivalent).\",\n },\n \"header.lg.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-header-lg\",\n cssProperty: \"font-weight\",\n prose: \"header-lg\",\n description: \"Font weight for large headers.\",\n },\n \"header.md.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-header-md\",\n cssProperty: \"font-family\",\n prose: \"header-md\",\n description: \"Font family for medium headers.\",\n },\n \"header.md.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-header-md\",\n cssProperty: \"letter-spacing\",\n prose: \"header-md\",\n description: \"Letter spacing for medium headers.\",\n },\n \"header.md.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-header-md\",\n cssProperty: \"line-height\",\n prose: \"header-md\",\n description: \"Line height for medium headers.\",\n },\n \"header.md.size\": {\n kind: \"typography\",\n tailwindClass: \"text-header-md\",\n cssProperty: \"font-size\",\n prose: \"header-md\",\n description: \"Font size for medium headers — sub-section titles (h3 equivalent).\",\n },\n \"header.md.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-header-md\",\n cssProperty: \"font-weight\",\n prose: \"header-md\",\n description: \"Font weight for medium headers.\",\n },\n \"header.sm.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-header-sm\",\n cssProperty: \"font-family\",\n prose: \"header-sm\",\n description: \"Font family for small headers.\",\n },\n \"header.sm.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-header-sm\",\n cssProperty: \"letter-spacing\",\n prose: \"header-sm\",\n description: \"Letter spacing for small headers.\",\n },\n \"header.sm.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-header-sm\",\n cssProperty: \"line-height\",\n prose: \"header-sm\",\n description: \"Line height for small headers.\",\n },\n \"header.sm.size\": {\n kind: \"typography\",\n tailwindClass: \"text-header-sm\",\n cssProperty: \"font-size\",\n prose: \"header-sm\",\n description:\n \"Font size for small headers — card titles, sidebar headings, or list group labels (h4 equivalent).\",\n },\n \"header.sm.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-header-sm\",\n cssProperty: \"font-weight\",\n prose: \"header-sm\",\n description: \"Font weight for small headers.\",\n },\n\n // ---------------------------------------------------------------------------\n // Typography — mono\n // Monospaced text for code, data values, or numeric displays.\n // ---------------------------------------------------------------------------\n\n \"mono.lg.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-mono-lg\",\n cssProperty: \"font-family\",\n prose: \"mono-lg\",\n description: \"Font family for large monospaced text.\",\n },\n \"mono.lg.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-mono-lg\",\n cssProperty: \"letter-spacing\",\n prose: \"mono-lg\",\n description: \"Letter spacing for large monospaced text.\",\n },\n \"mono.lg.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-mono-lg\",\n cssProperty: \"line-height\",\n prose: \"mono-lg\",\n description: \"Line height for large monospaced text.\",\n },\n \"mono.lg.size\": {\n kind: \"typography\",\n tailwindClass: \"text-mono-lg\",\n cssProperty: \"font-size\",\n prose: \"mono-lg\",\n description:\n \"Font size for large monospaced text — use for code blocks or prominent data values.\",\n },\n \"mono.lg.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-mono-lg\",\n cssProperty: \"font-weight\",\n prose: \"mono-lg\",\n description: \"Font weight for large monospaced text.\",\n },\n \"mono.md.font-family\": {\n kind: \"typography\",\n tailwindClass: \"font-mono-md\",\n cssProperty: \"font-family\",\n prose: \"mono-md\",\n description: \"Font family for medium monospaced text.\",\n },\n \"mono.md.letter-spacing\": {\n kind: \"typography\",\n tailwindClass: \"tracking-mono-md\",\n cssProperty: \"letter-spacing\",\n prose: \"mono-md\",\n description: \"Letter spacing for medium monospaced text.\",\n },\n \"mono.md.line-height\": {\n kind: \"typography\",\n tailwindClass: \"leading-mono-md\",\n cssProperty: \"line-height\",\n prose: \"mono-md\",\n description: \"Line height for medium monospaced text.\",\n },\n \"mono.md.size\": {\n kind: \"typography\",\n tailwindClass: \"text-mono-md\",\n cssProperty: \"font-size\",\n prose: \"mono-md\",\n description:\n \"Font size for medium monospaced text — use for inline code or compact data tables.\",\n },\n \"mono.md.weight\": {\n kind: \"typography\",\n tailwindClass: \"font-weight-mono-md\",\n cssProperty: \"font-weight\",\n prose: \"mono-md\",\n description: \"Font weight for medium monospaced text.\",\n },\n\n // ---------------------------------------------------------------------------\n // Gap — inline (horizontal)\n // Column gap between sibling elements laid out in a row (flex-row / grid).\n // Generates gap-inline-{size} (both axes) and gap-x-{size} (column only).\n // ---------------------------------------------------------------------------\n\n \"gap.inline.xs\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"inline-xs\" },\n { family: \"margin\", suffix: \"inline-xs\" },\n { family: \"padding\", suffix: \"inline-xs\" },\n { family: \"gap-x\", suffix: \"xs\" },\n ],\n description:\n \"Extra-small horizontal gap — use between tightly packed inline elements such as an icon and its label.\",\n },\n \"gap.inline.sm\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"inline-sm\" },\n { family: \"margin\", suffix: \"inline-sm\" },\n { family: \"padding\", suffix: \"inline-sm\" },\n { family: \"gap-x\", suffix: \"sm\" },\n ],\n description:\n \"Small horizontal gap — use between related inline items such as badge+label or button group members.\",\n },\n \"gap.inline.md\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"inline-md\" },\n { family: \"margin\", suffix: \"inline-md\" },\n { family: \"padding\", suffix: \"inline-md\" },\n { family: \"gap-x\", suffix: \"md\" },\n ],\n description:\n \"Medium horizontal gap — the default spacing between inline siblings in a row layout.\",\n },\n \"gap.inline.lg\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"inline-lg\" },\n { family: \"margin\", suffix: \"inline-lg\" },\n { family: \"padding\", suffix: \"inline-lg\" },\n { family: \"gap-x\", suffix: \"lg\" },\n ],\n description:\n \"Large horizontal gap — use to create more breathing room between column groups or major inline sections.\",\n },\n \"gap.inline.xl\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"inline-xl\" },\n { family: \"margin\", suffix: \"inline-xl\" },\n { family: \"padding\", suffix: \"inline-xl\" },\n { family: \"gap-x\", suffix: \"xl\" },\n ],\n description:\n \"Extra-large horizontal gap — use for wide column separations or spacious two-column layouts.\",\n },\n\n // ---------------------------------------------------------------------------\n // Gap — stack (vertical)\n // Row gap between sibling elements stacked in a column (flex-col / grid).\n // Generates gap-stack-{size} (both axes) and gap-y-{size} (row only).\n // ---------------------------------------------------------------------------\n\n \"gap.stack.xs\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"stack-xs\" },\n { family: \"margin\", suffix: \"stack-xs\" },\n { family: \"padding\", suffix: \"stack-xs\" },\n { family: \"gap-y\", suffix: \"xs\" },\n ],\n description:\n \"Extra-small vertical gap — use between tightly related stacked items such as a label and its helper text.\",\n },\n \"gap.stack.sm\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"stack-sm\" },\n { family: \"margin\", suffix: \"stack-sm\" },\n { family: \"padding\", suffix: \"stack-sm\" },\n { family: \"gap-y\", suffix: \"sm\" },\n ],\n description:\n \"Small vertical gap — use between list items, form fields in a compact stack, or related content rows.\",\n },\n \"gap.stack.md\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"stack-md\" },\n { family: \"margin\", suffix: \"stack-md\" },\n { family: \"padding\", suffix: \"stack-md\" },\n { family: \"gap-y\", suffix: \"md\" },\n ],\n description:\n \"Medium vertical gap — the default spacing between stacked siblings in a column layout.\",\n },\n \"gap.stack.lg\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"stack-lg\" },\n { family: \"margin\", suffix: \"stack-lg\" },\n { family: \"padding\", suffix: \"stack-lg\" },\n { family: \"gap-y\", suffix: \"lg\" },\n ],\n description:\n \"Large vertical gap — use between distinct content blocks or sections within a column.\",\n },\n \"gap.stack.xl\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"stack-xl\" },\n { family: \"margin\", suffix: \"stack-xl\" },\n { family: \"padding\", suffix: \"stack-xl\" },\n { family: \"gap-y\", suffix: \"xl\" },\n ],\n description:\n \"Extra-large vertical gap — use between major page sections or to create generous whitespace between groups.\",\n },\n \"gap.stack.2xl\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"stack-2xl\" },\n { family: \"margin\", suffix: \"stack-2xl\" },\n { family: \"padding\", suffix: \"stack-2xl\" },\n { family: \"gap-y\", suffix: \"2xl\" },\n ],\n description:\n \"2x extra-large vertical gap — use for prominent section breaks on content-heavy pages.\",\n },\n \"gap.stack.3xl\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"stack-3xl\" },\n { family: \"margin\", suffix: \"stack-3xl\" },\n { family: \"padding\", suffix: \"stack-3xl\" },\n { family: \"gap-y\", suffix: \"3xl\" },\n ],\n description:\n \"3x extra-large vertical gap — use for large whitespace breaks between top-level page regions.\",\n },\n \"gap.stack.4xl\": {\n kind: \"spacing\",\n utilities: [\n { family: \"gap\", suffix: \"stack-4xl\" },\n { family: \"margin\", suffix: \"stack-4xl\" },\n { family: \"padding\", suffix: \"stack-4xl\" },\n { family: \"gap-y\", suffix: \"4xl\" },\n ],\n description:\n \"4x extra-large vertical gap — use for maximum separation between major page regions or hero sections.\",\n },\n\n // ---------------------------------------------------------------------------\n // Inset — square\n // Equal padding on all four sides. Generates p and m in all 7 directions.\n // ---------------------------------------------------------------------------\n\n \"inset.square.sm\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-square-sm\" },\n { family: \"margin\", suffix: \"inset-square-sm\" },\n ],\n description:\n \"Small square inset — equal padding/margin on all sides. Use for compact components such as small chips or tight icon containers.\",\n },\n \"inset.square.md\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-square-md\" },\n { family: \"margin\", suffix: \"inset-square-md\" },\n ],\n description:\n \"Medium square inset — equal padding/margin on all sides. The default inset for most contained elements.\",\n },\n \"inset.square.lg\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-square-lg\" },\n { family: \"margin\", suffix: \"inset-square-lg\" },\n ],\n description:\n \"Large square inset — equal padding/margin on all sides. Use for cards, panels, or any container that needs generous interior spacing.\",\n },\n \"inset.square.xl\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-square-xl\" },\n { family: \"margin\", suffix: \"inset-square-xl\" },\n ],\n description:\n \"Extra-large square inset — equal padding/margin on all sides. Use for spacious modal bodies or feature sections.\",\n },\n\n // ---------------------------------------------------------------------------\n // Inset — squish\n // Reduced vertical padding relative to horizontal (pill/button shape).\n // Generates p and m in all 7 directions.\n // ---------------------------------------------------------------------------\n\n \"inset.squish.xs\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-squish-xs\" },\n { family: \"margin\", suffix: \"inset-squish-xs\" },\n ],\n description:\n \"Extra-small squish inset — less vertical than horizontal padding. Use for compact tags, badges, or extra-small buttons.\",\n },\n \"inset.squish.sm\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-squish-sm\" },\n { family: \"margin\", suffix: \"inset-squish-sm\" },\n ],\n description:\n \"Small squish inset — less vertical than horizontal padding. Use for small buttons or tightly spaced list-item controls.\",\n },\n \"inset.squish.md\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-squish-md\" },\n { family: \"margin\", suffix: \"inset-squish-md\" },\n ],\n description:\n \"Medium squish inset — less vertical than horizontal padding. The default inset for standard-sized buttons and interactive rows.\",\n },\n \"inset.squish.lg\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-squish-lg\" },\n { family: \"margin\", suffix: \"inset-squish-lg\" },\n ],\n description:\n \"Large squish inset — less vertical than horizontal padding. Use for large buttons or prominent interactive elements.\",\n },\n\n // ---------------------------------------------------------------------------\n // Inset — squish offset\n // Reduced horizontal padding for sides adjacent to an icon.\n // Icons have less visual weight than text, so padding next to an icon needs\n // to be optically reduced. Use the offset token at the same scale as the squish inset.\n // ---------------------------------------------------------------------------\n\n \"inset.squish.offset.xs\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-squish-offset-xs\" },\n { family: \"margin\", suffix: \"inset-squish-offset-xs\" },\n ],\n description:\n \"Reduced horizontal padding for sides adjacent to an icon, paired with `inset-squish-xs`. Icons have less visual weight than text and require less padding for optical balance.\",\n },\n \"inset.squish.offset.sm\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-squish-offset-sm\" },\n { family: \"margin\", suffix: \"inset-squish-offset-sm\" },\n ],\n description:\n \"Reduced horizontal padding for sides adjacent to an icon, paired with `inset-squish-sm`. Icons have less visual weight than text and require less padding for optical balance.\",\n },\n \"inset.squish.offset.md\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-squish-offset-md\" },\n { family: \"margin\", suffix: \"inset-squish-offset-md\" },\n ],\n description:\n \"Reduced horizontal padding for sides adjacent to an icon, paired with `inset-squish-md`. For example, a button with a leading icon uses `pl-inset-squish-offset-md` on the left and `pr-inset-squish-md` on the right.\",\n },\n \"inset.squish.offset.lg\": {\n kind: \"spacing\",\n utilities: [\n { family: \"padding\", suffix: \"inset-squish-offset-lg\" },\n { family: \"margin\", suffix: \"inset-squish-offset-lg\" },\n ],\n description:\n \"Reduced horizontal padding for sides adjacent to an icon, paired with `inset-squish-lg`. Icons have less visual weight than text and require less padding for optical balance.\",\n },\n\n // ---------------------------------------------------------------------------\n // Radius\n // Border-radius tokens. Generates rounded-sl-{suffix}.\n // ---------------------------------------------------------------------------\n\n \"radius.sm\": {\n kind: \"spacing\",\n utilities: [{ family: \"border-radius\", suffix: \"sm\" }],\n description:\n \"Small container border radius (12px) — pair with `inset-square-sm` on the same element to maintain correct nested curvature around controls.\",\n },\n \"radius.md\": {\n kind: \"spacing\",\n utilities: [{ family: \"border-radius\", suffix: \"md\" }],\n description:\n \"Medium container border radius (16px) — pair with `inset-square-md` on the same element to maintain correct nested curvature around controls.\",\n },\n \"radius.lg\": {\n kind: \"spacing\",\n utilities: [{ family: \"border-radius\", suffix: \"lg\" }],\n description:\n \"Large container border radius (24px) — pair with `inset-square-lg` on the same element to maintain correct nested curvature around controls.\",\n },\n \"radius.xl\": {\n kind: \"spacing\",\n utilities: [{ family: \"border-radius\", suffix: \"xl\" }],\n description:\n \"Extra-large container border radius (32px) — pair with `inset-square-xl` on the same element to maintain correct nested curvature around controls.\",\n },\n \"radius.control\": {\n kind: \"spacing\",\n utilities: [{ family: \"border-radius\", suffix: \"control\" }],\n description:\n \"Border radius for standalone elements like buttons, inputs, and selects (8px). This is the base inner radius — container elements wrapping controls should use a matching inset+radius pair at the same scale.\",\n },\n \"radius.full\": {\n kind: \"spacing\",\n utilities: [{ family: \"border-radius\", suffix: \"full\" }],\n description:\n \"Full (pill) border radius — use for circular avatars, pill badges, or toggle switches.\",\n },\n\n // ---------------------------------------------------------------------------\n // Size\n // Fixed dimensions for components. Generates w, h, min-w, min-h.\n // ---------------------------------------------------------------------------\n\n \"size.xs\": {\n kind: \"spacing\",\n utilities: [\n { family: \"width\", suffix: \"sl-xs\" },\n { family: \"height\", suffix: \"sl-xs\" },\n { family: \"min-width\", suffix: \"sl-xs\" },\n { family: \"min-height\", suffix: \"sl-xs\" },\n { family: \"size\", suffix: \"sl-xs\" },\n ],\n description:\n \"Extra-small fixed height for interactive controls (16px). Use on buttons, inputs, and other single-line elements that must align in a row. Never use arbitrary pixel values for control heights.\",\n },\n \"size.sm\": {\n kind: \"spacing\",\n utilities: [\n { family: \"width\", suffix: \"sl-sm\" },\n { family: \"height\", suffix: \"sl-sm\" },\n { family: \"min-width\", suffix: \"sl-sm\" },\n { family: \"min-height\", suffix: \"sl-sm\" },\n { family: \"size\", suffix: \"sl-sm\" },\n ],\n description:\n \"Small fixed height for interactive controls (24px). Use on buttons, inputs, and other single-line elements that must align in a row. Never use arbitrary pixel values for control heights.\",\n },\n \"size.md\": {\n kind: \"spacing\",\n utilities: [\n { family: \"width\", suffix: \"sl-md\" },\n { family: \"height\", suffix: \"sl-md\" },\n { family: \"min-width\", suffix: \"sl-md\" },\n { family: \"min-height\", suffix: \"sl-md\" },\n { family: \"size\", suffix: \"sl-md\" },\n ],\n description:\n \"Medium fixed height for interactive controls (32px). The default size for most buttons, inputs, and other single-line elements that must align in a row. Never use arbitrary pixel values for control heights.\",\n },\n \"size.lg\": {\n kind: \"spacing\",\n utilities: [\n { family: \"width\", suffix: \"sl-lg\" },\n { family: \"height\", suffix: \"sl-lg\" },\n { family: \"min-width\", suffix: \"sl-lg\" },\n { family: \"min-height\", suffix: \"sl-lg\" },\n { family: \"size\", suffix: \"sl-md\" },\n ],\n description:\n \"Large fixed height for interactive controls (40px). Use on buttons, inputs, and other single-line elements that must align in a row. Never use arbitrary pixel values for control heights.\",\n },\n \"size.icon.inner.sm\": {\n kind: \"spacing\",\n utilities: [\n { family: \"width\", suffix: \"sl-icon-inner-sm\" },\n { family: \"height\", suffix: \"sl-icon-inner-sm\" },\n { family: \"min-width\", suffix: \"sl-icon-inner-sm\" },\n { family: \"min-height\", suffix: \"sl-icon-inner-sm\" },\n { family: \"size\", suffix: \"sl-icon-inner-sm\" },\n ],\n description:\n \"Glyph dimensions of a small icon SVG (12px), without surrounding padding. Apply to the SVG or img element directly. Pair with size.icon.outer.sm on the containing wrapper.\",\n },\n \"size.icon.inner.md\": {\n kind: \"spacing\",\n utilities: [\n { family: \"width\", suffix: \"sl-icon-inner-md\" },\n { family: \"height\", suffix: \"sl-icon-inner-md\" },\n { family: \"min-width\", suffix: \"sl-icon-inner-md\" },\n { family: \"min-height\", suffix: \"sl-icon-inner-md\" },\n { family: \"size\", suffix: \"sl-icon-inner-md\" },\n ],\n description:\n \"Glyph dimensions of a medium icon SVG (16px), without surrounding padding. Apply to the SVG or img element directly. Pair with size.icon.outer.md on the containing wrapper.\",\n },\n \"size.icon.inner.lg\": {\n kind: \"spacing\",\n utilities: [\n { family: \"width\", suffix: \"sl-icon-inner-lg\" },\n { family: \"height\", suffix: \"sl-icon-inner-lg\" },\n { family: \"min-width\", suffix: \"sl-icon-inner-lg\" },\n { family: \"min-height\", suffix: \"sl-icon-inner-lg\" },\n { family: \"size\", suffix: \"sl-icon-inner-lg\" },\n ],\n description:\n \"Glyph dimensions of a large icon SVG (20px), without surrounding padding. Apply to the SVG or img element directly. Pair with size.icon.outer.lg on the containing wrapper.\",\n },\n \"size.icon.outer.sm\": {\n kind: \"spacing\",\n utilities: [\n { family: \"width\", suffix: \"sl-icon-outer-sm\" },\n { family: \"height\", suffix: \"sl-icon-outer-sm\" },\n { family: \"min-width\", suffix: \"sl-icon-outer-sm\" },\n { family: \"min-height\", suffix: \"sl-icon-outer-sm\" },\n { family: \"size\", suffix: \"sl-icon-outer-sm\" },\n ],\n description:\n \"Outer container size for a small icon (24px), including built-in padding. Apply to the wrapper element, not the SVG. Because the padding is built in, adjacent text content needs no extra gap, and sides adjacent to the icon should use inset-squish-offset-{size} instead of the full squish inset.\",\n },\n \"size.icon.outer.md\": {\n kind: \"spacing\",\n utilities: [\n { family: \"width\", suffix: \"sl-icon-outer-md\" },\n { family: \"height\", suffix: \"sl-icon-outer-md\" },\n { family: \"min-width\", suffix: \"sl-icon-outer-md\" },\n { family: \"min-height\", suffix: \"sl-icon-outer-md\" },\n { family: \"size\", suffix: \"sl-icon-outer-md\" },\n ],\n description:\n \"Outer container size for a medium icon (32px), including built-in padding. Apply to the wrapper element, not the SVG. Because the padding is built in, adjacent text content needs no extra gap, and sides adjacent to the icon should use inset-squish-offset-{size} instead of the full squish inset.\",\n },\n \"size.icon.outer.lg\": {\n kind: \"spacing\",\n utilities: [\n { family: \"width\", suffix: \"sl-icon-outer-lg\" },\n { family: \"height\", suffix: \"sl-icon-outer-lg\" },\n { family: \"min-width\", suffix: \"sl-icon-outer-lg\" },\n { family: \"min-height\", suffix: \"sl-icon-outer-lg\" },\n { family: \"size\", suffix: \"sl-icon-outer-lg\" },\n ],\n description:\n \"Outer container size for a large icon (40px), including built-in padding. Apply to the wrapper element, not the SVG. Because the padding is built in, adjacent text content needs no extra gap, and sides adjacent to the icon should use inset-squish-offset-{size} instead of the full squish inset.\",\n },\n\n // ---------------------------------------------------------------------------\n // Stroke\n // Border and outline widths. Generates border-width in all 7 directions.\n // ---------------------------------------------------------------------------\n\n \"stroke.border\": {\n kind: \"spacing\",\n utilities: [{ family: \"border-width\", suffix: \"stroke\" }],\n description:\n \"Standard border width — use for component borders such as inputs, cards, and dividers.\",\n },\n \"stroke.focus\": {\n kind: \"spacing\",\n utilities: [{ family: \"border-width\", suffix: \"stroke-focus\" }],\n description:\n \"Focus ring/outline width — use for keyboard focus indicators to meet accessibility contrast requirements.\",\n },\n} satisfies SlabTokenMap;\n","import type { FigmaExtensions } from \"../utils/types.ts\";\nimport { tokenMap } from \"../token-map.ts\";\nimport type { ExpandingSpacingFamily } from \"../utils/token-types.ts\";\n\n// ---------------------------------------------------------------------------\n// Expanding spacing families\n// Each entry produces 7 directional Tailwind classes from a single token.\n// Property order within multi-property entries must match the original output\n// so snapshot tests stay green (right before left, bottom before top).\n// ---------------------------------------------------------------------------\n\ntype Variant = { prefix: string; props: (val: string) => Record<string, string> };\n\nexport const EXPANDING_FAMILIES: Record<ExpandingSpacingFamily, Variant[]> = {\n padding: [\n { prefix: \"p\", props: (v) => ({ padding: v }) },\n { prefix: \"px\", props: (v) => ({ \"padding-right\": v, \"padding-left\": v }) },\n { prefix: \"py\", props: (v) => ({ \"padding-bottom\": v, \"padding-top\": v }) },\n { prefix: \"pl\", props: (v) => ({ \"padding-left\": v }) },\n { prefix: \"pr\", props: (v) => ({ \"padding-right\": v }) },\n { prefix: \"pt\", props: (v) => ({ \"padding-top\": v }) },\n { prefix: \"pb\", props: (v) => ({ \"padding-bottom\": v }) },\n ],\n margin: [\n { prefix: \"m\", props: (v) => ({ margin: v }) },\n { prefix: \"mx\", props: (v) => ({ \"margin-right\": v, \"margin-left\": v }) },\n { prefix: \"my\", props: (v) => ({ \"margin-bottom\": v, \"margin-top\": v }) },\n { prefix: \"ml\", props: (v) => ({ \"margin-left\": v }) },\n { prefix: \"mr\", props: (v) => ({ \"margin-right\": v }) },\n { prefix: \"mt\", props: (v) => ({ \"margin-top\": v }) },\n { prefix: \"mb\", props: (v) => ({ \"margin-bottom\": v }) },\n ],\n \"border-width\": [\n { prefix: \"border\", props: (v) => ({ \"border-width\": v }) },\n { prefix: \"border-x\", props: (v) => ({ \"border-right-width\": v, \"border-left-width\": v }) },\n { prefix: \"border-y\", props: (v) => ({ \"border-bottom-width\": v, \"border-top-width\": v }) },\n { prefix: \"border-l\", props: (v) => ({ \"border-left-width\": v }) },\n { prefix: \"border-r\", props: (v) => ({ \"border-right-width\": v }) },\n { prefix: \"border-t\", props: (v) => ({ \"border-top-width\": v }) },\n { prefix: \"border-b\", props: (v) => ({ \"border-bottom-width\": v }) },\n ],\n};\n\n// ---------------------------------------------------------------------------\n// Single spacing families\n// Each entry produces exactly one Tailwind class.\n// ---------------------------------------------------------------------------\n\nexport const SINGLE_FAMILIES: Record<\n string,\n { prefix: string; props: (val: string) => Record<string, string> }\n> = {\n gap: { prefix: \"gap\", props: (v) => ({ gap: v }) },\n size: { prefix: \"size\", props: (v) => ({ height: v, width: v }) },\n \"gap-x\": { prefix: \"gap-x\", props: (v) => ({ \"column-gap\": v }) },\n \"gap-y\": { prefix: \"gap-y\", props: (v) => ({ \"row-gap\": v }) },\n width: { prefix: \"w\", props: (v) => ({ width: v }) },\n height: { prefix: \"h\", props: (v) => ({ height: v }) },\n \"min-width\": { prefix: \"min-w\", props: (v) => ({ \"min-width\": v }) },\n \"min-height\": { prefix: \"min-h\", props: (v) => ({ \"min-height\": v }) },\n \"border-radius\": { prefix: \"rounded-sl\", props: (v) => ({ \"border-radius\": v }) },\n};\n\n// ---------------------------------------------------------------------------\n// Color property resolution\n// Handles gradient special cases (v3 vs v4 differ) and normalises border-color\n// to camelCase borderColor (Tailwind convention in both v3 and v4).\n// ---------------------------------------------------------------------------\n\nfunction resolveColorProps(\n cssProperty: string,\n codeSyntax: string,\n version: \"v3\" | \"v4\",\n): Record<string, string> {\n if (cssProperty === \"--tw-gradient-from\") {\n if (version === \"v3\") {\n return {\n \"--tw-gradient-from\": `${codeSyntax} var(--tw-gradient-from-position)`,\n \"--tw-gradient-to\": \"transparent var(--tw-gradient-to-position)\",\n \"--tw-gradient-stops\": \"var(--tw-gradient-from), var(--tw-gradient-to)\",\n };\n }\n return {\n \"--tw-gradient-from\": codeSyntax,\n \"--tw-gradient-stops\": \"var(--tw-gradient-from), var(--tw-gradient-to, transparent)\",\n };\n }\n\n if (cssProperty === \"--tw-gradient-to\") {\n const value = version === \"v3\" ? `${codeSyntax} var(--tw-gradient-to-position)` : codeSyntax;\n return { \"--tw-gradient-to\": value };\n }\n\n const prop = cssProperty === \"border-color\" ? \"border-color\" : cssProperty;\n return { [prop]: codeSyntax };\n}\n\n// ---------------------------------------------------------------------------\n// Main builder\n// ---------------------------------------------------------------------------\n\nexport function buildUtilitiesFromMap(\n tokens: Record<string, { $extensions: unknown }>,\n version: \"v3\" | \"v4\",\n): {\n utilities: Record<string, Record<string, string>>;\n proseGroups: Record<string, Record<string, string>>;\n} {\n const utilities: Record<string, Record<string, string>> = {};\n const proseGroups: Record<string, Record<string, string>> = {};\n\n for (const [id, token] of Object.entries(tokens)) {\n const codeSyntax = (token.$extensions as FigmaExtensions)?.[\"com.figma.codeSyntax\"]?.WEB;\n if (!codeSyntax) continue;\n\n const entry = tokenMap[id as keyof typeof tokenMap];\n if (!entry) continue;\n\n if (entry.kind === \"color\") {\n utilities[`.${entry.tailwindClass}`] = resolveColorProps(\n entry.cssProperty,\n codeSyntax,\n version,\n );\n } else if (entry.kind === \"typography\") {\n utilities[`.${entry.tailwindClass}`] = { [entry.cssProperty]: codeSyntax };\n if (entry.prose) {\n const group = (proseGroups[entry.prose] ??= {});\n group[entry.cssProperty] = codeSyntax;\n }\n } else if (entry.kind === \"spacing\") {\n for (const util of entry.utilities) {\n const expanding = EXPANDING_FAMILIES[util.family as ExpandingSpacingFamily];\n if (expanding) {\n for (const variant of expanding) {\n utilities[`.${variant.prefix}-${util.suffix}`] = variant.props(codeSyntax);\n }\n } else {\n const single = SINGLE_FAMILIES[util.family];\n if (single) {\n utilities[`.${single.prefix}-${util.suffix}`] = single.props(codeSyntax);\n }\n }\n }\n }\n }\n\n return { utilities, proseGroups };\n}\n","","","","","","","","","","import danger from \"./color/danger.tokens.json\" with { type: \"json\" };\nimport info from \"./color/info.tokens.json\" with { type: \"json\" };\nimport neutral from \"./color/neutral.tokens.json\" with { type: \"json\" };\nimport neutralDark from \"./color/neutral-dark.tokens.json\" with { type: \"json\" };\nimport neutralInverted from \"./color/neutral-inverted.tokens.json\" with { type: \"json\" };\nimport success from \"./color/success.tokens.json\" with { type: \"json\" };\nimport warning from \"./color/warning.tokens.json\" with { type: \"json\" };\nimport spacing from \"./spacing.tokens.json\" with { type: \"json\" };\nimport type_ from \"./type.tokens.json\" with { type: \"json\" };\n\nexport const colorTokensByMode: Record<string, Record<string, unknown>> = {\n danger,\n info,\n neutral,\n \"neutral-dark\": neutralDark,\n \"neutral-inverted\": neutralInverted,\n success,\n warning,\n};\n\nexport const spacingTokens: Record<string, unknown> = spacing;\nexport const typeTokens: Record<string, unknown> = type_;\n","import { tokenMap } from \"./token-map.ts\";\nimport { EXPANDING_FAMILIES, SINGLE_FAMILIES } from \"./tailwind-plugin/from-token-map.ts\";\nimport { colorTokensByMode, spacingTokens, typeTokens } from \"./tokens-raw-import/index.ts\";\nimport type { ExpandingSpacingFamily, TokenEntry } from \"./utils/token-types.ts\";\nimport type { FigmaToken, FigmaExtensions } from \"./utils/types.ts\";\n\nconst COLOR_MODES = [\n \"neutral\",\n \"danger\",\n \"info\",\n \"neutral-inverted\",\n \"neutral-dark\",\n \"success\",\n \"warning\",\n] as const;\n\nexport type ColorMode = (typeof COLOR_MODES)[number];\n\nexport type SlabEntry = {\n cssVariable: string;\n kind: \"color\" | \"spacing\" | \"typography\";\n property: {\n /** Example (padding-left, background, color, padding-top, padding-bottom) */\n cssProperty: string[];\n /** Example (p-inset-squish-md) */\n tailwindClass: string;\n }[];\n /**\n * Guidance for AI tools. Present when a higher-level composite class should\n * be preferred over this individual token (e.g. a type-* typography class).\n */\n note?: string;\n};\n\nexport type MergedToken = FigmaToken & {\n $name: string;\n $extensions: {\n \"com.figma.variableId\"?: string;\n \"thatch.slab\": SlabEntry;\n \"thatch.modes\"?: Record<ColorMode, string>;\n };\n};\n\nfunction getByDotPath(obj: Record<string, unknown>, path: string): unknown {\n return path\n .split(\".\")\n .reduce<unknown>((acc, key) => (acc as Record<string, unknown>)?.[key], obj);\n}\n\nfunction toSlabEntry(entry: TokenEntry, cssVariable: string): SlabEntry {\n if (entry.kind === \"color\") {\n return {\n cssVariable,\n kind: \"color\",\n property: [{ cssProperty: [entry.cssProperty], tailwindClass: entry.tailwindClass }],\n note: `Hex values for each color mode are available in the $extensions[\"thatch.modes\"] field. To switch the active mode for a subtree, set the \\`data-color-mode=\"[mode]\"\\` attribute on any ancestor element — all nested color tokens will automatically resolve to that mode's values. Available modes: ${COLOR_MODES.join(\", \")}.`,\n };\n }\n\n if (entry.kind === \"typography\") {\n return {\n cssVariable,\n kind: \"typography\",\n property: [{ cssProperty: [entry.cssProperty], tailwindClass: entry.tailwindClass }],\n ...(entry.prose\n ? {\n note: `Prefer \\`.type-${entry.prose}\\` which applies all typography properties for this style together, rather than using individual tokens.`,\n }\n : {}),\n };\n }\n\n // spacing — expand each utility into its full set of directional classes\n const property: SlabEntry[\"property\"] = [];\n for (const util of entry.utilities) {\n const expanding = EXPANDING_FAMILIES[util.family as ExpandingSpacingFamily];\n if (expanding) {\n for (const variant of expanding) {\n property.push({\n cssProperty: Object.keys(variant.props(\"\")),\n tailwindClass: `${variant.prefix}-${util.suffix}`,\n });\n }\n } else {\n const single = SINGLE_FAMILIES[util.family];\n if (single) {\n property.push({\n cssProperty: Object.keys(single.props(\"\")),\n tailwindClass: `${single.prefix}-${util.suffix}`,\n });\n }\n }\n }\n return { cssVariable, kind: \"spacing\", property };\n}\n\nfunction buildExtensions(\n rawToken: FigmaToken,\n slabEntry: SlabEntry,\n modes?: Record<ColorMode, string>,\n): MergedToken[\"$extensions\"] {\n const ext = rawToken.$extensions as FigmaExtensions | undefined;\n return {\n ...(ext?.[\"com.figma.variableId\"]\n ? { \"com.figma.variableId\": ext[\"com.figma.variableId\"] }\n : {}),\n \"thatch.slab\": slabEntry,\n ...(modes ? { \"thatch.modes\": modes } : {}),\n };\n}\n\nexport function mergeToken(key: keyof typeof tokenMap): MergedToken | null {\n const entry = tokenMap[key];\n\n if (entry.kind === \"color\") {\n const neutral = colorTokensByMode[\"neutral\"] ?? {};\n const rawToken = getByDotPath(neutral, key) as FigmaToken | undefined;\n if (!rawToken?.$type) return null;\n\n const cssVariable =\n (rawToken.$extensions as FigmaExtensions)?.[\"com.figma.codeSyntax\"]?.WEB ?? \"\";\n\n const modes = {} as Record<ColorMode, string>;\n for (const mode of COLOR_MODES) {\n const source = colorTokensByMode[mode] ?? {};\n const token = getByDotPath(source, key) as FigmaToken | undefined;\n const hex =\n token?.$value && typeof token.$value === \"object\" && \"hex\" in token.$value\n ? (token.$value as { hex?: string }).hex\n : undefined;\n if (hex) modes[mode] = hex;\n }\n\n return {\n ...rawToken,\n $name: key,\n $description: entry.description,\n $extensions: buildExtensions(rawToken, toSlabEntry(entry, cssVariable), modes),\n };\n }\n\n const source = entry.kind === \"spacing\" ? spacingTokens : typeTokens;\n const rawToken = getByDotPath(source, key) as FigmaToken | undefined;\n if (!rawToken?.$type) return null;\n\n const cssVariable =\n (rawToken.$extensions as FigmaExtensions)?.[\"com.figma.codeSyntax\"]?.WEB ?? \"\";\n\n return {\n ...rawToken,\n $name: key,\n $description: entry.description,\n $extensions: buildExtensions(rawToken, toSlabEntry(entry, cssVariable)),\n };\n}\n","import Fuse from \"fuse.js\";\nimport { tokenMap } from \"./token-map.ts\";\nimport { EXPANDING_FAMILIES, SINGLE_FAMILIES } from \"./tailwind-plugin/from-token-map.ts\";\nimport { mergeToken } from \"./merge-token.ts\";\nimport type { MergedToken } from \"./merge-token.ts\";\nimport type { ExpandingSpacingFamily } from \"./utils/token-types.ts\";\nimport type { RequireAtLeastOne } from \"./utils/types.ts\";\n\n/**\n * A semantic grouping of tokens by their design intent.\n * Use `category` to narrow results to a specific part of the design system.\n */\nexport type TokenCategory =\n /** Page backgrounds, cards, banners, and other non-interactive containers. */\n | \"surface\"\n /** Base page background. Primary surfaces sit at the bottom of the visual stack. */\n | \"surface-primary\"\n /** Elevated containers such as sidebars, panels, or cards placed on a primary surface. */\n | \"surface-secondary\"\n /** Badges, nav bars, or chips that sit on top of primary or secondary surfaces. */\n | \"surface-tertiary\"\n /** Buttons, links, dropdowns, and other interactive controls. */\n | \"action\"\n /** The most prominent interactive element on a view. Use sparingly — one per view. Includes default, hover, and disabled states. */\n | \"action-primary\"\n /** Supporting interactive elements like secondary buttons or sidebar nav rows. Includes default, hover, and disabled states. */\n | \"action-secondary\"\n /** Interactive elements that appear as plain text until engaged, like cancel buttons. Includes default, hover, and disabled states. */\n | \"action-ghost\"\n /** Link-style interactive elements that use color to signal interactivity. Includes default, hover, and disabled states. */\n | \"action-tertiary\"\n /** Text fields, selects, checkboxes, radio buttons, and other form inputs. */\n | \"form\"\n /** Primary form control surfaces — input backgrounds, borders, and text. Includes default, disabled, and active states. */\n | \"form-primary\"\n /** Secondary form text — helper text and supplemental labels. Includes default, disabled, and active states. */\n | \"form-secondary\"\n /** Color tokens for charts */\n | \"data-viz\"\n /** All typography tokens. Use sub-categories below for narrower results. */\n | \"typography\"\n /** Display/heading type tokens — large expressive text. */\n | \"display\"\n /** Header tokens — section headings. */\n | \"header\"\n /** Body tokens — default reading text. */\n | \"body\"\n /** Control tokens — labels, buttons, and UI chrome. */\n | \"control\"\n /** Mono tokens — code and tabular data. */\n | \"mono\"\n /** Fixed-size tokens for elements like buttons or badges (width / height). */\n | \"dimension\"\n /** Border-radius tokens. */\n | \"radius\"\n /** Gap tokens for flex and grid layouts (inline and stack). */\n | \"gap\"\n /** Inset tokens for padding and margin. */\n | \"spacing\"\n /** Border-width tokens. */\n | \"stroke\";\n\n/**\n * The broad kind of a token.\n * - `\"color\"` — fills, text colors, border colors, and gradients.\n * - `\"spacing\"` — padding, margin, gap, size, border-radius, and border-width.\n * - `\"typography\"` — font-family, font-size, font-weight, line-height, letter-spacing.\n */\nexport type Scope = \"color\" | \"spacing\" | \"typography\";\n\n/**\n * The CSS property a token directly applies to.\n * Scoped to properties that are actually present in the shipped token set.\n */\nexport type CSSProperty =\n // Color\n | \"background\"\n | \"color\"\n | \"border-color\"\n | \"outline-color\"\n | \"--tw-gradient-from\"\n | \"--tw-gradient-to\"\n // Typography\n | \"font-family\"\n | \"font-size\"\n | \"font-weight\"\n | \"line-height\"\n | \"letter-spacing\"\n // Spacing — padding\n | \"padding\"\n | \"padding-top\"\n | \"padding-right\"\n | \"padding-bottom\"\n | \"padding-left\"\n // Spacing — margin\n | \"margin\"\n | \"margin-top\"\n | \"margin-right\"\n | \"margin-bottom\"\n | \"margin-left\"\n // Spacing — border-width\n | \"border-width\"\n | \"border-top-width\"\n | \"border-right-width\"\n | \"border-bottom-width\"\n | \"border-left-width\"\n // Spacing — gap\n | \"gap\"\n | \"column-gap\"\n | \"row-gap\"\n // Spacing — size\n | \"width\"\n | \"height\"\n | \"min-width\"\n | \"min-height\"\n // Spacing — radius\n | \"border-radius\";\n\n/**\n * Options for {@link getToken}. At least one field must be provided.\n * Multiple fields are ANDed — each one further narrows the result set.\n */\nexport type GetTokenOptions = RequireAtLeastOne<{\n /** Narrow by design intent (e.g. `\"action\"` returns button/link tokens). */\n category: TokenCategory;\n /** Narrow by broad token kind: color, spacing, or typography. */\n scope: Scope;\n /** Narrow by the CSS property the token sets. */\n property: CSSProperty;\n /**\n * Fuzzy-match on the token name using fuse.js.\n * e.g. `\"action primary bg\"` will match `\"action.default.primary.bg\"`.\n */\n name: string;\n}>;\n\n// Tailwind's props functions use camelCase for some properties (e.g. borderWidth).\n// Normalize to kebab-case so they match the CSSProperty type.\nfunction toCssName(prop: string): string {\n return prop.replace(/([A-Z])/g, (m) => `-${m.toLowerCase()}`);\n}\n\n// Maps each category to the key prefixes that identify it.\n// \"typography\" is handled separately via kind check since its keys span multiple prefixes.\nconst CATEGORY_PREFIXES: Partial<Record<TokenCategory, string[]>> = {\n surface: [\"surface.\"],\n \"surface-primary\": [\"surface.primary.\"],\n \"surface-secondary\": [\"surface.secondary.\"],\n \"surface-tertiary\": [\"surface.tertiary.\"],\n action: [\"action.\"],\n \"data-viz\": [\"data-viz.\"],\n \"action-primary\": [\n \"action.default.primary.\",\n \"action.hover.primary.\",\n \"action.disabled.primary.\",\n ],\n \"action-secondary\": [\n \"action.default.secondary.\",\n \"action.hover.secondary.\",\n \"action.disabled.secondary.\",\n ],\n \"action-ghost\": [\"action.default.ghost.\", \"action.hover.ghost.\", \"action.disabled.ghost.\"],\n \"action-tertiary\": [\n \"action.default.tertiary.\",\n \"action.hover.tertiary.\",\n \"action.disabled.tertiary.\",\n ],\n form: [\"form.\"],\n \"form-primary\": [\"form.default.primary.\", \"form.active.primary.\", \"form.disabled.primary.\"],\n \"form-secondary\": [\n \"form.default.secondary.\",\n \"form.active.secondary.\",\n \"form.disabled.secondary.\",\n ],\n dimension: [\"size.\"],\n radius: [\"radius.\"],\n gap: [\"gap.\"],\n spacing: [\"inset.\"],\n stroke: [\"stroke.\"],\n display: [\"display.\"],\n header: [\"header.\"],\n body: [\"body.\"],\n control: [\"control.\"],\n mono: [\"mono.\"],\n};\n\n/**\n * Search for design tokens matching the given options.\n * At least one option must be provided. Multiple options are ANDed together.\n */\nexport function getToken(options: GetTokenOptions): MergedToken[] {\n let keys = Object.keys(tokenMap) as (keyof typeof tokenMap)[];\n\n if (options.scope) {\n keys = keys.filter((k) => tokenMap[k].kind === options.scope);\n }\n\n if (options.category) {\n if (options.category === \"typography\") {\n keys = keys.filter((k) => tokenMap[k].kind === \"typography\");\n } else {\n const prefixes = CATEGORY_PREFIXES[options.category] ?? [];\n if (prefixes.length > 0) {\n keys = keys.filter((k) => prefixes.some((p) => (k as string).startsWith(p)));\n }\n }\n }\n\n if (options.property) {\n const prop = options.property;\n keys = keys.filter((k) => {\n const entry = tokenMap[k];\n if (entry.kind === \"color\" || entry.kind === \"typography\") {\n return entry.cssProperty === prop;\n }\n for (const util of entry.utilities) {\n const expanding = EXPANDING_FAMILIES[util.family as ExpandingSpacingFamily];\n const variants =\n expanding ?? (SINGLE_FAMILIES[util.family] ? [SINGLE_FAMILIES[util.family]] : []);\n for (const variant of variants) {\n if (Object.keys(variant.props(\"\")).map(toCssName).includes(prop)) {\n return true;\n }\n }\n }\n return false;\n });\n }\n\n if (options.name) {\n const normalize = (s: string) => s.replace(/\\./g, \" \");\n const items = keys.map((k) => ({ key: k as string, label: normalize(k as string) }));\n const fuse = new Fuse(items, { keys: [\"label\"], threshold: 0.4 });\n keys = fuse.search(normalize(options.name)).map((r) => r.item.key as keyof typeof tokenMap);\n }\n\n return keys.flatMap((k) => {\n const token = mergeToken(k);\n return token ? [token] : [];\n });\n}\n"],"mappings":";;AASA,MAAa,WAAW;CAMtB,2BAA2B;EACzB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,qCAAqC;EACnC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,2BAA2B;EACzB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,2BAA2B;EACzB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,4BAA4B;EAC1B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CAOA,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,mCAAmC;EACjC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,uCAAuC;EACrC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,2BAA2B;EACzB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,oCAAoC;EAClC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,kCAAkC;EAChC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,kCAAkC;EAChC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,gCAAgC;EAC9B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,gCAAgC;EAC9B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CAOA,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,qCAAqC;EACnC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,mCAAmC;EACjC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,mCAAmC;EACjC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,yCAAyC;EACvC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,mCAAmC;EACjC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,gCAAgC;EAC9B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,sCAAsC;EACpC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,oCAAoC;EAClC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,oCAAoC;EAClC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,kCAAkC;EAChC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,kCAAkC;EAChC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CAOA,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,wCAAwC;EACtC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,gCAAgC;EAC9B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,gCAAgC;EAC9B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,4BAA4B;EAC1B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CAQA,2BAA2B;EACzB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,qCAAqC;EACnC,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,4BAA4B;EAC1B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,4BAA4B;EAC1B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,4BAA4B;EAC1B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,gCAAgC;EAC9B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,gCAAgC;EAC9B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CAOA,sBAAsB;EACpB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,wBAAwB;EACtB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,wBAAwB;EACtB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,wBAAwB;EACtB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,4BAA4B;EAC1B,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aAAa;CACf;CACA,uBAAuB;EACrB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CAOA,eAAe;EACb,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CAEA,qBAAqB;EACnB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,qBAAqB;EACnB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,qBAAqB;EACnB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,qBAAqB;EACnB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CAEA,sBAAsB;EACpB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,sBAAsB;EACpB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,sBAAsB;EACpB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,sBAAsB;EACpB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,sBAAsB;EACpB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,sBAAsB;EACpB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,sBAAsB;EACpB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,sBAAsB;EACpB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,wBAAwB;EACtB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,wBAAwB;EACtB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,wBAAwB;EACtB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CACA,wBAAwB;EACtB,MAAM;EACN,eAAe;EACf,aAAa;EACb,aACE;CACJ;CAOA,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,kCAAkC;EAChC,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,wBAAwB;EACtB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,uBAAuB;EACrB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,kCAAkC;EAChC,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,wBAAwB;EACtB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,uBAAuB;EACrB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,kCAAkC;EAChC,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,+BAA+B;EAC7B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,wBAAwB;EACtB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,iCAAiC;EAC/B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,8BAA8B;EAC5B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,uBAAuB;EACrB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CAOA,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,mBAAmB;EACjB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,qBAAqB;EACnB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,mBAAmB;EACjB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,qBAAqB;EACnB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CAOA,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,mBAAmB;EACjB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,qBAAqB;EACnB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,mBAAmB;EACjB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,qBAAqB;EACnB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,6BAA6B;EAC3B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,0BAA0B;EACxB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,mBAAmB;EACjB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aACE;CACJ;CACA,qBAAqB;EACnB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CAOA,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,4BAA4B;EAC1B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,kBAAkB;EAChB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,oBAAoB;EAClB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,4BAA4B;EAC1B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,kBAAkB;EAChB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,oBAAoB;EAClB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,4BAA4B;EAC1B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,kBAAkB;EAChB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,oBAAoB;EAClB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,4BAA4B;EAC1B,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,yBAAyB;EACvB,MAAM;EACN,eAAe;EACf,aAAa;EACb,OAAO;EACP,aAAa;CACf;CACA,kBAAkB;EAChB,MAA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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
@@ -635,22 +635,22 @@ module.exports = plugin(function ({ addUtilities, addComponents }) {
635
635
  ".w-sl-xs": { "width": "var(--slab-size-xs)" },
636
636
  });
637
637
  addComponents({
638
- ".prose-body-lg": { "font-family": "var(--slab-body-lg-default-font-family)", "letter-spacing": "var(--slab-body-lg-default-letter-spacing)", "line-height": "var(--slab-body-lg-default-line-height)", "font-size": "var(--slab-body-lg-default-size)", "font-weight": "var(--slab-body-lg-default-weight)" },
639
- ".prose-body-lg-strong": { "font-family": "var(--slab-body-lg-strong-font-family)", "letter-spacing": "var(--slab-body-lg-strong-letter-spacing)", "line-height": "var(--slab-body-lg-strong-line-height)", "font-size": "var(--slab-body-lg-strong-size)", "font-weight": "var(--slab-body-lg-strong-weight)" },
640
- ".prose-body-md": { "font-family": "var(--slab-body-md-default-font-family)", "letter-spacing": "var(--slab-body-md-default-letter-spacing)", "line-height": "var(--slab-body-md-default-line-height)", "font-size": "var(--slab-body-md-default-size)", "font-weight": "var(--slab-body-md-default-weight)" },
641
- ".prose-body-md-strong": { "font-family": "var(--slab-body-md-strong-font-family)", "letter-spacing": "var(--slab-body-md-strong-letter-spacing)", "line-height": "var(--slab-body-md-strong-line-height)", "font-size": "var(--slab-body-md-strong-size)", "font-weight": "var(--slab-body-md-strong-weight)" },
642
- ".prose-body-sm": { "font-family": "var(--slab-body-sm-default-font-family)", "letter-spacing": "var(--slab-body-sm-default-letter-spacing)", "line-height": "var(--slab-body-sm-default-line-height)", "font-size": "var(--slab-body-sm-default-size)", "font-weight": "var(--slab-body-sm-default-weight)" },
643
- ".prose-body-sm-strong": { "font-family": "var(--slab-body-sm-strong-font-family)", "letter-spacing": "var(--slab-body-sm-strong-letter-spacing)", "line-height": "var(--slab-body-sm-strong-line-height)", "font-size": "var(--slab-body-sm-strong-size)", "font-weight": "var(--slab-body-sm-strong-weight)" },
644
- ".prose-control-md": { "font-family": "var(--slab-control-md-font-family)", "letter-spacing": "var(--slab-control-md-letter-spacing)", "line-height": "var(--slab-control-md-line-height)", "font-size": "var(--slab-control-md-size)", "font-weight": "var(--slab-control-md-weight)" },
645
- ".prose-control-sm": { "font-family": "var(--slab-control-sm-font-family)", "letter-spacing": "var(--slab-control-sm-letter-spacing)", "line-height": "var(--slab-control-sm-line-height)", "font-size": "var(--slab-control-sm-size)", "font-weight": "var(--slab-control-sm-weight)" },
646
- ".prose-display-lg": { "font-family": "var(--slab-display-lg-font-family)", "letter-spacing": "var(--slab-display-lg-letter-spacing)", "line-height": "var(--slab-display-lg-line-height)", "font-size": "var(--slab-display-lg-size)", "font-weight": "var(--slab-display-lg-weight)" },
647
- ".prose-display-md": { "font-family": "var(--slab-display-md-font-family)", "letter-spacing": "var(--slab-display-md-letter-spacing)", "line-height": "var(--slab-display-md-line-height)", "font-size": "var(--slab-display-md-size)", "font-weight": "var(--slab-display-md-weight)" },
648
- ".prose-display-sm": { "font-family": "var(--slab-display-sm-font-family)", "letter-spacing": "var(--slab-display-sm-letter-spacing)", "line-height": "var(--slab-display-sm-line-height)", "font-size": "var(--slab-display-sm-size)", "font-weight": "var(--slab-display-sm-weight)" },
649
- ".prose-header-lg": { "font-family": "var(--slab-header-lg-font-family)", "letter-spacing": "var(--slab-header-lg-letter-spacing)", "line-height": "var(--slab-header-lg-line-height)", "font-size": "var(--slab-header-lg-size)", "font-weight": "var(--slab-header-lg-weight)" },
650
- ".prose-header-md": { "font-family": "var(--slab-header-md-font-family)", "letter-spacing": "var(--slab-header-md-letter-spacing)", "line-height": "var(--slab-header-md-line-height)", "font-size": "var(--slab-header-md-size)", "font-weight": "var(--slab-header-md-weight)" },
651
- ".prose-header-sm": { "font-family": "var(--slab-header-sm-font-family)", "letter-spacing": "var(--slab-header-sm-letter-spacing)", "line-height": "var(--slab-header-sm-line-height)", "font-size": "var(--slab-header-sm-size)", "font-weight": "var(--slab-header-sm-weight)" },
652
- ".prose-header-xl": { "font-family": "var(--slab-header-xl-font-family)", "letter-spacing": "var(--slab-header-xl-letter-spacing)", "line-height": "var(--slab-header-xl-line-height)", "font-size": "var(--slab-header-xl-size)", "font-weight": "var(--slab-header-xl-weight)" },
653
- ".prose-mono-lg": { "font-family": "var(--slab-mono-lg-font-family)", "letter-spacing": "var(--slab-mono-lg-letter-spacing)", "line-height": "var(--slab-mono-lg-line-height)", "font-size": "var(--slab-mono-lg-size)", "font-weight": "var(--slab-mono-lg-weight)" },
654
- ".prose-mono-md": { "font-family": "var(--slab-mono-md-font-family)", "letter-spacing": "var(--slab-mono-md-letter-spacing)", "line-height": "var(--slab-mono-md-line-height)", "font-size": "var(--slab-mono-md-size)", "font-weight": "var(--slab-mono-md-weight)" },
638
+ ".type-body-lg": { "font-family": "var(--slab-body-lg-default-font-family)", "letter-spacing": "var(--slab-body-lg-default-letter-spacing)", "line-height": "var(--slab-body-lg-default-line-height)", "font-size": "var(--slab-body-lg-default-size)", "font-weight": "var(--slab-body-lg-default-weight)" },
639
+ ".type-body-lg-strong": { "font-family": "var(--slab-body-lg-strong-font-family)", "letter-spacing": "var(--slab-body-lg-strong-letter-spacing)", "line-height": "var(--slab-body-lg-strong-line-height)", "font-size": "var(--slab-body-lg-strong-size)", "font-weight": "var(--slab-body-lg-strong-weight)" },
640
+ ".type-body-md": { "font-family": "var(--slab-body-md-default-font-family)", "letter-spacing": "var(--slab-body-md-default-letter-spacing)", "line-height": "var(--slab-body-md-default-line-height)", "font-size": "var(--slab-body-md-default-size)", "font-weight": "var(--slab-body-md-default-weight)" },
641
+ ".type-body-md-strong": { "font-family": "var(--slab-body-md-strong-font-family)", "letter-spacing": "var(--slab-body-md-strong-letter-spacing)", "line-height": "var(--slab-body-md-strong-line-height)", "font-size": "var(--slab-body-md-strong-size)", "font-weight": "var(--slab-body-md-strong-weight)" },
642
+ ".type-body-sm": { "font-family": "var(--slab-body-sm-default-font-family)", "letter-spacing": "var(--slab-body-sm-default-letter-spacing)", "line-height": "var(--slab-body-sm-default-line-height)", "font-size": "var(--slab-body-sm-default-size)", "font-weight": "var(--slab-body-sm-default-weight)" },
643
+ ".type-body-sm-strong": { "font-family": "var(--slab-body-sm-strong-font-family)", "letter-spacing": "var(--slab-body-sm-strong-letter-spacing)", "line-height": "var(--slab-body-sm-strong-line-height)", "font-size": "var(--slab-body-sm-strong-size)", "font-weight": "var(--slab-body-sm-strong-weight)" },
644
+ ".type-control-md": { "font-family": "var(--slab-control-md-font-family)", "letter-spacing": "var(--slab-control-md-letter-spacing)", "line-height": "var(--slab-control-md-line-height)", "font-size": "var(--slab-control-md-size)", "font-weight": "var(--slab-control-md-weight)" },
645
+ ".type-control-sm": { "font-family": "var(--slab-control-sm-font-family)", "letter-spacing": "var(--slab-control-sm-letter-spacing)", "line-height": "var(--slab-control-sm-line-height)", "font-size": "var(--slab-control-sm-size)", "font-weight": "var(--slab-control-sm-weight)" },
646
+ ".type-display-lg": { "font-family": "var(--slab-display-lg-font-family)", "letter-spacing": "var(--slab-display-lg-letter-spacing)", "line-height": "var(--slab-display-lg-line-height)", "font-size": "var(--slab-display-lg-size)", "font-weight": "var(--slab-display-lg-weight)" },
647
+ ".type-display-md": { "font-family": "var(--slab-display-md-font-family)", "letter-spacing": "var(--slab-display-md-letter-spacing)", "line-height": "var(--slab-display-md-line-height)", "font-size": "var(--slab-display-md-size)", "font-weight": "var(--slab-display-md-weight)" },
648
+ ".type-display-sm": { "font-family": "var(--slab-display-sm-font-family)", "letter-spacing": "var(--slab-display-sm-letter-spacing)", "line-height": "var(--slab-display-sm-line-height)", "font-size": "var(--slab-display-sm-size)", "font-weight": "var(--slab-display-sm-weight)" },
649
+ ".type-header-lg": { "font-family": "var(--slab-header-lg-font-family)", "letter-spacing": "var(--slab-header-lg-letter-spacing)", "line-height": "var(--slab-header-lg-line-height)", "font-size": "var(--slab-header-lg-size)", "font-weight": "var(--slab-header-lg-weight)" },
650
+ ".type-header-md": { "font-family": "var(--slab-header-md-font-family)", "letter-spacing": "var(--slab-header-md-letter-spacing)", "line-height": "var(--slab-header-md-line-height)", "font-size": "var(--slab-header-md-size)", "font-weight": "var(--slab-header-md-weight)" },
651
+ ".type-header-sm": { "font-family": "var(--slab-header-sm-font-family)", "letter-spacing": "var(--slab-header-sm-letter-spacing)", "line-height": "var(--slab-header-sm-line-height)", "font-size": "var(--slab-header-sm-size)", "font-weight": "var(--slab-header-sm-weight)" },
652
+ ".type-header-xl": { "font-family": "var(--slab-header-xl-font-family)", "letter-spacing": "var(--slab-header-xl-letter-spacing)", "line-height": "var(--slab-header-xl-line-height)", "font-size": "var(--slab-header-xl-size)", "font-weight": "var(--slab-header-xl-weight)" },
653
+ ".type-mono-lg": { "font-family": "var(--slab-mono-lg-font-family)", "letter-spacing": "var(--slab-mono-lg-letter-spacing)", "line-height": "var(--slab-mono-lg-line-height)", "font-size": "var(--slab-mono-lg-size)", "font-weight": "var(--slab-mono-lg-weight)" },
654
+ ".type-mono-md": { "font-family": "var(--slab-mono-md-font-family)", "letter-spacing": "var(--slab-mono-md-letter-spacing)", "line-height": "var(--slab-mono-md-line-height)", "font-size": "var(--slab-mono-md-size)", "font-weight": "var(--slab-mono-md-weight)" },
655
655
  });
656
656
  });
@@ -2640,7 +2640,7 @@
2640
2640
  }
2641
2641
 
2642
2642
  @layer components {
2643
- .prose-body-lg {
2643
+ .type-body-lg {
2644
2644
  font-family: var(--slab-body-lg-default-font-family);
2645
2645
  letter-spacing: var(--slab-body-lg-default-letter-spacing);
2646
2646
  line-height: var(--slab-body-lg-default-line-height);
@@ -2648,7 +2648,7 @@
2648
2648
  font-weight: var(--slab-body-lg-default-weight);
2649
2649
  }
2650
2650
 
2651
- .prose-body-lg-strong {
2651
+ .type-body-lg-strong {
2652
2652
  font-family: var(--slab-body-lg-strong-font-family);
2653
2653
  letter-spacing: var(--slab-body-lg-strong-letter-spacing);
2654
2654
  line-height: var(--slab-body-lg-strong-line-height);
@@ -2656,7 +2656,7 @@
2656
2656
  font-weight: var(--slab-body-lg-strong-weight);
2657
2657
  }
2658
2658
 
2659
- .prose-body-md {
2659
+ .type-body-md {
2660
2660
  font-family: var(--slab-body-md-default-font-family);
2661
2661
  letter-spacing: var(--slab-body-md-default-letter-spacing);
2662
2662
  line-height: var(--slab-body-md-default-line-height);
@@ -2664,7 +2664,7 @@
2664
2664
  font-weight: var(--slab-body-md-default-weight);
2665
2665
  }
2666
2666
 
2667
- .prose-body-md-strong {
2667
+ .type-body-md-strong {
2668
2668
  font-family: var(--slab-body-md-strong-font-family);
2669
2669
  letter-spacing: var(--slab-body-md-strong-letter-spacing);
2670
2670
  line-height: var(--slab-body-md-strong-line-height);
@@ -2672,7 +2672,7 @@
2672
2672
  font-weight: var(--slab-body-md-strong-weight);
2673
2673
  }
2674
2674
 
2675
- .prose-body-sm {
2675
+ .type-body-sm {
2676
2676
  font-family: var(--slab-body-sm-default-font-family);
2677
2677
  letter-spacing: var(--slab-body-sm-default-letter-spacing);
2678
2678
  line-height: var(--slab-body-sm-default-line-height);
@@ -2680,7 +2680,7 @@
2680
2680
  font-weight: var(--slab-body-sm-default-weight);
2681
2681
  }
2682
2682
 
2683
- .prose-body-sm-strong {
2683
+ .type-body-sm-strong {
2684
2684
  font-family: var(--slab-body-sm-strong-font-family);
2685
2685
  letter-spacing: var(--slab-body-sm-strong-letter-spacing);
2686
2686
  line-height: var(--slab-body-sm-strong-line-height);
@@ -2688,7 +2688,7 @@
2688
2688
  font-weight: var(--slab-body-sm-strong-weight);
2689
2689
  }
2690
2690
 
2691
- .prose-control-md {
2691
+ .type-control-md {
2692
2692
  font-family: var(--slab-control-md-font-family);
2693
2693
  letter-spacing: var(--slab-control-md-letter-spacing);
2694
2694
  line-height: var(--slab-control-md-line-height);
@@ -2696,7 +2696,7 @@
2696
2696
  font-weight: var(--slab-control-md-weight);
2697
2697
  }
2698
2698
 
2699
- .prose-control-sm {
2699
+ .type-control-sm {
2700
2700
  font-family: var(--slab-control-sm-font-family);
2701
2701
  letter-spacing: var(--slab-control-sm-letter-spacing);
2702
2702
  line-height: var(--slab-control-sm-line-height);
@@ -2704,7 +2704,7 @@
2704
2704
  font-weight: var(--slab-control-sm-weight);
2705
2705
  }
2706
2706
 
2707
- .prose-display-lg {
2707
+ .type-display-lg {
2708
2708
  font-family: var(--slab-display-lg-font-family);
2709
2709
  letter-spacing: var(--slab-display-lg-letter-spacing);
2710
2710
  line-height: var(--slab-display-lg-line-height);
@@ -2712,7 +2712,7 @@
2712
2712
  font-weight: var(--slab-display-lg-weight);
2713
2713
  }
2714
2714
 
2715
- .prose-display-md {
2715
+ .type-display-md {
2716
2716
  font-family: var(--slab-display-md-font-family);
2717
2717
  letter-spacing: var(--slab-display-md-letter-spacing);
2718
2718
  line-height: var(--slab-display-md-line-height);
@@ -2720,7 +2720,7 @@
2720
2720
  font-weight: var(--slab-display-md-weight);
2721
2721
  }
2722
2722
 
2723
- .prose-display-sm {
2723
+ .type-display-sm {
2724
2724
  font-family: var(--slab-display-sm-font-family);
2725
2725
  letter-spacing: var(--slab-display-sm-letter-spacing);
2726
2726
  line-height: var(--slab-display-sm-line-height);
@@ -2728,7 +2728,7 @@
2728
2728
  font-weight: var(--slab-display-sm-weight);
2729
2729
  }
2730
2730
 
2731
- .prose-header-lg {
2731
+ .type-header-lg {
2732
2732
  font-family: var(--slab-header-lg-font-family);
2733
2733
  letter-spacing: var(--slab-header-lg-letter-spacing);
2734
2734
  line-height: var(--slab-header-lg-line-height);
@@ -2736,7 +2736,7 @@
2736
2736
  font-weight: var(--slab-header-lg-weight);
2737
2737
  }
2738
2738
 
2739
- .prose-header-md {
2739
+ .type-header-md {
2740
2740
  font-family: var(--slab-header-md-font-family);
2741
2741
  letter-spacing: var(--slab-header-md-letter-spacing);
2742
2742
  line-height: var(--slab-header-md-line-height);
@@ -2744,7 +2744,7 @@
2744
2744
  font-weight: var(--slab-header-md-weight);
2745
2745
  }
2746
2746
 
2747
- .prose-header-sm {
2747
+ .type-header-sm {
2748
2748
  font-family: var(--slab-header-sm-font-family);
2749
2749
  letter-spacing: var(--slab-header-sm-letter-spacing);
2750
2750
  line-height: var(--slab-header-sm-line-height);
@@ -2752,7 +2752,7 @@
2752
2752
  font-weight: var(--slab-header-sm-weight);
2753
2753
  }
2754
2754
 
2755
- .prose-header-xl {
2755
+ .type-header-xl {
2756
2756
  font-family: var(--slab-header-xl-font-family);
2757
2757
  letter-spacing: var(--slab-header-xl-letter-spacing);
2758
2758
  line-height: var(--slab-header-xl-line-height);
@@ -2760,7 +2760,7 @@
2760
2760
  font-weight: var(--slab-header-xl-weight);
2761
2761
  }
2762
2762
 
2763
- .prose-mono-lg {
2763
+ .type-mono-lg {
2764
2764
  font-family: var(--slab-mono-lg-font-family);
2765
2765
  letter-spacing: var(--slab-mono-lg-letter-spacing);
2766
2766
  line-height: var(--slab-mono-lg-line-height);
@@ -2768,7 +2768,7 @@
2768
2768
  font-weight: var(--slab-mono-lg-weight);
2769
2769
  }
2770
2770
 
2771
- .prose-mono-md {
2771
+ .type-mono-md {
2772
2772
  font-family: var(--slab-mono-md-font-family);
2773
2773
  letter-spacing: var(--slab-mono-md-letter-spacing);
2774
2774
  line-height: var(--slab-mono-md-line-height);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thatch-health/slab-tokens",
3
- "version": "0.0.9",
3
+ "version": "0.0.11",
4
4
  "private": false,
5
5
  "description": "Generated CSS files and code plugins for the Slab design system at thatch.",
6
6
  "homepage": "https://github.com/thatch-health/slab",
@@ -24,10 +24,6 @@
24
24
  "exports": {
25
25
  ".": "./dist/index.mjs",
26
26
  "./package.json": "./package.json",
27
- "./css/app": {
28
- "default": "./dist/index.css",
29
- "types": "./dist/index.css.d.ts"
30
- },
31
27
  "./css/marketing": {
32
28
  "default": "./dist/marketing.css",
33
29
  "types": "./dist/marketing.css.d.ts"
@@ -36,6 +32,10 @@
36
32
  "default": "./dist/docs.css",
37
33
  "types": "./dist/docs.css.d.ts"
38
34
  },
35
+ "./css/app": {
36
+ "default": "./dist/index.css",
37
+ "types": "./dist/index.css.d.ts"
38
+ },
39
39
  "./tailwind-v4-plugin": {
40
40
  "default": "./dist/tailwind-v4-plugin.css",
41
41
  "types": "./dist/tailwind-v4-plugin.css.d.ts"
@@ -52,17 +52,18 @@
52
52
  "fuse.js": "^7.3.0"
53
53
  },
54
54
  "devDependencies": {
55
- "@terrazzo/cli": "^2.1.0",
56
- "@terrazzo/parser": "^2.1.0",
57
- "@terrazzo/plugin-css": "^2.1.0",
58
- "@types/node": "^24",
59
- "@typescript/native-preview": "7.0.0-dev.20260504.1",
60
- "jiti": "^2.6.1",
55
+ "@terrazzo/cli": "^2.2.0",
56
+ "@terrazzo/parser": "^2.2.0",
57
+ "@terrazzo/plugin-css": "^2.2.0",
58
+ "@types/node": "^25.9.1",
59
+ "@typescript/native-preview": "7.0.0-dev.20260526.1",
60
+ "jiti": "^2.7.0",
61
61
  "scule": "^1.3.0",
62
62
  "tailwindcss": "^3.4.19",
63
63
  "typescript": "^6.0.3",
64
- "vite-plus": "^0.1.20",
65
- "@repo/tsconfig": "0.0.0"
64
+ "vite-plus": "0.1.24",
65
+ "@repo/tsconfig": "0.0.0",
66
+ "@repo/vite-config": "0.0.0"
66
67
  },
67
68
  "peerDependencies": {
68
69
  "tailwindcss": ">=3"